1 heat_template_version: pike
4 OpenStack Nova API service configured with Puppet
9 description: Dictionary packing service data
13 description: Mapping of service_name -> network name. Typically set
14 via parameter_defaults in the resource registry. This
15 mapping overrides those in ServiceNetMapDefaults.
22 description: Role name on which the service is applied
26 description: Parameters specific to the role
30 description: Mapping of service endpoint -> protocol. Typically set
31 via parameter_defaults in the resource registry.
35 description: Number of workers for Nova services.
38 description: The password for the nova service and db account
44 description: Keystone region for endpoint
45 NeutronMetadataProxySharedSecret:
46 description: Shared secret to prevent spoofing
50 default: 'instance-%08x'
51 description: Template string to be used to generate instance names
56 Whether to create cron job for purging soft deleted rows in Nova database.
58 MonitoringSubscriptionNovaApi:
59 default: 'overcloud-nova-api'
64 tag: openstack.nova.api
65 path: /var/log/nova/nova-api.log
69 NovaDefaultFloatingPool:
71 description: Default pool for floating IP addresses
75 description: Timeout for Nova db sync
79 A hash of policies to configure for Nova API.
80 e.g. { nova-context_is_admin: { key: context_is_admin, value: 'role:admin' } }
85 nova_workers_zero: {equals : [{get_param: NovaWorkers}, 0]}
91 ServiceNetMap: {get_param: ServiceNetMap}
92 DefaultPasswords: {get_param: DefaultPasswords}
93 EndpointMap: {get_param: EndpointMap}
94 RoleName: {get_param: RoleName}
95 RoleParameters: {get_param: RoleParameters}
96 EnableInternalTLS: {get_param: EnableInternalTLS}
99 type: ./nova-base.yaml
101 ServiceData: {get_param: ServiceData}
102 ServiceNetMap: {get_param: ServiceNetMap}
103 DefaultPasswords: {get_param: DefaultPasswords}
104 EndpointMap: {get_param: EndpointMap}
105 RoleName: {get_param: RoleName}
106 RoleParameters: {get_param: RoleParameters}
110 description: Role data for the Nova API service.
112 service_name: nova_api
113 monitoring_subscription: {get_param: MonitoringSubscriptionNovaApi}
114 logging_source: {get_param: NovaApiLoggingSource}
119 - get_attr: [NovaBase, role_data, config_settings]
120 - get_attr: [ApacheServiceBase, role_data, config_settings]
121 - nova::cron::archive_deleted_rows::hour: '*/12'
122 nova::cron::archive_deleted_rows::destination: '/dev/null'
123 tripleo.nova_api.firewall_rules:
131 nova::keystone::authtoken::project_name: 'service'
132 nova::keystone::authtoken::user_domain_name: 'Default'
133 nova::keystone::authtoken::project_domain_name: 'Default'
134 nova::keystone::authtoken::password: {get_param: NovaPassword}
135 nova::keystone::authtoken::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
136 nova::keystone::authtoken::auth_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix]}
137 nova::api::enabled: true
138 nova::api::default_floating_pool: {get_param: NovaDefaultFloatingPool}
139 nova::api::sync_db_api: true
140 nova::api::enable_proxy_headers_parsing: true
141 nova::api::api_bind_address:
144 "%{hiera('fqdn_$NETWORK')}"
146 $NETWORK: {get_param: [ServiceNetMap, NovaApiNetwork]}
147 nova_wsgi_enabled: true
148 nova::api::service_name: 'httpd'
149 nova::wsgi::apache_api::ssl: {get_param: EnableInternalTLS}
150 # NOTE: bind IP is found in Heat replacing the network name with the local node IP
151 # for the given network; replacement examples (eg. for internal_api):
153 # internal_api_uri -> [IP]
154 # internal_api_subnet - > IP/CIDR
155 nova::wsgi::apache_api::bind_host: {get_param: [ServiceNetMap, NovaApiNetwork]}
156 nova::wsgi::apache_api::servername:
159 "%{hiera('fqdn_$NETWORK')}"
161 $NETWORK: {get_param: [ServiceNetMap, NovaApiNetwork]}
162 nova::api::neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
163 nova::api::instance_name_template: {get_param: InstanceNameTemplate}
164 nova_enable_db_purge: {get_param: NovaEnableDBPurge}
165 nova::policy::policies: {get_param: NovaApiPolicies}
170 - nova::api::osapi_compute_workers: {get_param: NovaWorkers}
171 nova::wsgi::apache_api::workers: {get_param: NovaWorkers}
173 include tripleo::profile::base::nova::api
174 service_config_settings:
177 - {get_attr: [NovaBase, role_data, service_config_settings, mysql]}
178 - nova::db::mysql::password: {get_param: NovaPassword}
179 nova::db::mysql::user: nova
180 nova::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
181 nova::db::mysql::dbname: nova
182 nova::db::mysql::allowed_hosts:
184 - "%{hiera('mysql_bind_host')}"
185 nova::db::mysql_api::password: {get_param: NovaPassword}
186 nova::db::mysql_api::user: nova_api
187 nova::db::mysql_api::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
188 nova::db::mysql_api::dbname: nova_api
189 nova::db::mysql_api::allowed_hosts:
191 - "%{hiera('mysql_bind_host')}"
193 nova::keystone::auth::tenant: 'service'
194 nova::keystone::auth::public_url: {get_param: [EndpointMap, NovaPublic, uri]}
195 nova::keystone::auth::internal_url: {get_param: [EndpointMap, NovaInternal, uri]}
196 nova::keystone::auth::admin_url: {get_param: [EndpointMap, NovaAdmin, uri]}
197 nova::keystone::auth::password: {get_param: NovaPassword}
198 nova::keystone::auth::region: {get_param: KeystoneRegion}
200 get_attr: [ApacheServiceBase, role_data, metadata_settings]
203 - get_attr: [ApacheServiceBase, role_data, upgrade_tasks]
205 - name: get bootstrap nodeid
207 command: hiera bootstrap_nodeid
208 register: bootstrap_node
209 - name: set is_bootstrap_node fact
211 set_fact: is_bootstrap_node={{bootstrap_node.stdout|lower == ansible_hostname|lower}}
212 - name: Extra migration for nova tripleo/+bug/1656791
213 tags: step0,pre-upgrade
214 when: is_bootstrap_node
215 command: nova-manage db online_data_migrations
216 - name: Stop and disable nova_api service (pre-upgrade not under httpd)
218 service: name=openstack-nova-api state=stopped enabled=no
219 - name: Create puppet manifest to set transport_url in nova.conf
221 when: is_bootstrap_node
223 dest: /root/nova-api_upgrade_manifest.pp
226 $transport_url = os_transport_url({
227 'transport' => hiera('messaging_service_name', 'rabbit'),
228 'hosts' => any2array(hiera('rabbitmq_node_names', undef)),
229 'port' => sprintf('%s',hiera('nova::rabbit_port', '5672') ),
230 'username' => hiera('nova::rabbit_userid', 'guest'),
231 'password' => hiera('nova::rabbit_password'),
232 'ssl' => sprintf('%s', bool2num(str2bool(hiera('nova::rabbit_use_ssl', '0'))))
234 oslo::messaging::default { 'nova_config':
235 transport_url => $transport_url
237 - name: Run puppet apply to set tranport_url in nova.conf
239 when: is_bootstrap_node
240 command: puppet apply --modulepath /etc/puppet/modules:/opt/stack/puppet-modules:/usr/share/openstack-puppet/modules --detailed-exitcodes /root/nova-api_upgrade_manifest.pp
241 register: puppet_apply_nova_api_upgrade
242 failed_when: puppet_apply_nova_api_upgrade.rc not in [0,2]
243 changed_when: puppet_apply_nova_api_upgrade.rc == 2
244 - name: Setup cell_v2 (map cell0)
246 when: is_bootstrap_node
247 shell: nova-manage cell_v2 map_cell0 --database_connection=$(hiera nova::cell0_database_connection)
248 - name: Setup cell_v2 (create default cell)
250 when: is_bootstrap_node
251 # (owalsh) puppet-nova expects the cell name 'default'
252 # (owalsh) pass the db uri explicitly to avoid https://bugs.launchpad.net/tripleo/+bug/1662344
253 shell: nova-manage cell_v2 create_cell --name='default' --database_connection=$(hiera nova::database_connection)
254 register: nova_api_create_cell
255 failed_when: nova_api_create_cell.rc not in [0,2]
256 changed_when: nova_api_create_cell.rc == 0
257 - name: Setup cell_v2 (sync nova/cell DB)
259 when: is_bootstrap_node
260 command: nova-manage db sync
261 async: {get_param: NovaDbSyncTimeout}
263 - name: Setup cell_v2 (get cell uuid)
265 when: is_bootstrap_node
266 shell: nova-manage cell_v2 list_cells | sed -e '1,3d' -e '$d' | awk -F ' *| *' '$2 == "default" {print $4}'
267 register: nova_api_cell_uuid
268 - name: Setup cell_v2 (migrate hosts)
270 when: is_bootstrap_node
271 command: nova-manage cell_v2 discover_hosts --cell_uuid {{nova_api_cell_uuid.stdout}} --verbose
272 - name: Setup cell_v2 (migrate instances)
274 when: is_bootstrap_node
275 command: nova-manage cell_v2 map_instances --cell_uuid {{nova_api_cell_uuid.stdout}}
276 - name: Sync nova_api DB
278 command: nova-manage api_db sync
279 when: is_bootstrap_node
280 - name: Online data migration for nova
282 when: is_bootstrap_node
283 command: nova-manage db online_data_migrations