9efb5f9d52
The puppet apache service uses the cidr map in ServiceData. Services did not pass the ServiceData to the apache service template. Because of this the property resolves to an empty string which is not correct. The empty string cause problems when yaql in common/services.yaml is merging config_settings. Closes-Bug: #1806718 Change-Id: Ia3af9535e3af1dad4ac833983ebe29b6002f0815
339 lines
14 KiB
YAML
339 lines
14 KiB
YAML
heat_template_version: rocky
|
|
|
|
description: >
|
|
OpenStack Nova API service configured with Puppet
|
|
|
|
parameters:
|
|
ServiceData:
|
|
default: {}
|
|
description: Dictionary packing service data
|
|
type: json
|
|
ServiceNetMap:
|
|
default: {}
|
|
description: Mapping of service_name -> network name. Typically set
|
|
via parameter_defaults in the resource registry. This
|
|
mapping overrides those in ServiceNetMapDefaults.
|
|
type: json
|
|
DefaultPasswords:
|
|
default: {}
|
|
type: json
|
|
RoleName:
|
|
default: ''
|
|
description: Role name on which the service is applied
|
|
type: string
|
|
RoleParameters:
|
|
default: {}
|
|
description: Parameters specific to the role
|
|
type: json
|
|
EndpointMap:
|
|
default: {}
|
|
description: Mapping of service endpoint -> protocol. Typically set
|
|
via parameter_defaults in the resource registry.
|
|
type: json
|
|
NovaWorkers:
|
|
default: 0
|
|
description: Number of workers for Nova services.
|
|
type: number
|
|
NovaPassword:
|
|
description: The password for the nova service and db account
|
|
type: string
|
|
hidden: true
|
|
KeystoneRegion:
|
|
type: string
|
|
default: 'regionOne'
|
|
description: Keystone region for endpoint
|
|
NeutronMetadataProxySharedSecret:
|
|
description: Shared secret to prevent spoofing
|
|
type: string
|
|
hidden: true
|
|
InstanceNameTemplate:
|
|
default: 'instance-%08x'
|
|
description: Template string to be used to generate instance names
|
|
type: string
|
|
NovaEnableDBPurge:
|
|
default: true
|
|
description: |
|
|
Whether to create cron job for purging soft deleted rows in Nova database.
|
|
type: boolean
|
|
NovaEnableDBArchive:
|
|
default: true
|
|
description: |
|
|
Whether to create cron job for archiving soft deleted rows in Nova database.
|
|
type: boolean
|
|
MonitoringSubscriptionNovaApi:
|
|
default: 'overcloud-nova-api'
|
|
type: string
|
|
NovaApiLoggingSource:
|
|
type: json
|
|
default:
|
|
tag: openstack.nova.api
|
|
path: /var/log/nova/nova-api.log
|
|
EnableInternalTLS:
|
|
type: boolean
|
|
default: false
|
|
NovaDefaultFloatingPool:
|
|
default: 'public'
|
|
description: Default pool for floating IP addresses
|
|
type: string
|
|
NovaDbSyncTimeout:
|
|
default: 300
|
|
description: Timeout for Nova db sync
|
|
type: number
|
|
NovaApiPolicies:
|
|
description: |
|
|
A hash of policies to configure for Nova API.
|
|
e.g. { nova-context_is_admin: { key: context_is_admin, value: 'role:admin' } }
|
|
default: {}
|
|
type: json
|
|
NovaCronDBArchivedMinute:
|
|
type: string
|
|
description: >
|
|
Cron to move deleted instances to another table that doesn't need backup - Minute
|
|
default: '1'
|
|
NovaCronDBArchivedHour:
|
|
type: string
|
|
description: >
|
|
Cron to move deleted instances to another table that doesn't need backup - Hour
|
|
default: '0'
|
|
NovaCronDBArchivedMonthday:
|
|
type: string
|
|
description: >
|
|
Cron to move deleted instances to another table that doesn't need backup - Month Day
|
|
default: '*'
|
|
NovaCronDBArchivedMonth:
|
|
type: string
|
|
description: >
|
|
Cron to move deleted instances to another table that doesn't need backup - Month
|
|
default: '*'
|
|
NovaCronDBArchivedWeekday:
|
|
type: string
|
|
description: >
|
|
Cron to move deleted instances to another table that doesn't need backup - Week Day
|
|
default: '*'
|
|
|
|
conditions:
|
|
nova_workers_zero: {equals : [{get_param: NovaWorkers}, 0]}
|
|
is_neutron_shared_metadata_notempty: {not: {equals: [{get_param: NeutronMetadataProxySharedSecret}, '']}}
|
|
|
|
resources:
|
|
ApacheServiceBase:
|
|
type: ./apache.yaml
|
|
properties:
|
|
ServiceData: {get_param: ServiceData}
|
|
ServiceNetMap: {get_param: ServiceNetMap}
|
|
DefaultPasswords: {get_param: DefaultPasswords}
|
|
EndpointMap: {get_param: EndpointMap}
|
|
RoleName: {get_param: RoleName}
|
|
RoleParameters: {get_param: RoleParameters}
|
|
EnableInternalTLS: {get_param: EnableInternalTLS}
|
|
|
|
NovaBase:
|
|
type: ./nova-base.yaml
|
|
properties:
|
|
ServiceData: {get_param: ServiceData}
|
|
ServiceNetMap: {get_param: ServiceNetMap}
|
|
DefaultPasswords: {get_param: DefaultPasswords}
|
|
EndpointMap: {get_param: EndpointMap}
|
|
RoleName: {get_param: RoleName}
|
|
RoleParameters: {get_param: RoleParameters}
|
|
|
|
outputs:
|
|
role_data:
|
|
description: Role data for the Nova API service.
|
|
value:
|
|
service_name: nova_api
|
|
monitoring_subscription: {get_param: MonitoringSubscriptionNovaApi}
|
|
config_settings:
|
|
map_merge:
|
|
- get_attr: [NovaBase, role_data, config_settings]
|
|
- get_attr: [ApacheServiceBase, role_data, config_settings]
|
|
- nova::cron::archive_deleted_rows::hour: '*/12'
|
|
nova::cron::archive_deleted_rows::destination: '/dev/null'
|
|
tripleo::nova_api::firewall_rules:
|
|
'113 nova_api':
|
|
dport:
|
|
- 8774
|
|
- 13774
|
|
nova::keystone::authtoken::project_name: 'service'
|
|
nova::keystone::authtoken::user_domain_name: 'Default'
|
|
nova::keystone::authtoken::project_domain_name: 'Default'
|
|
nova::keystone::authtoken::password: {get_param: NovaPassword}
|
|
nova::keystone::authtoken::www_authenticate_uri: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
|
|
nova::keystone::authtoken::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
|
|
nova::keystone::authtoken::auth_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix]}
|
|
nova::api::enabled: true
|
|
nova::api::default_floating_pool: {get_param: NovaDefaultFloatingPool}
|
|
nova::api::sync_db_api: true
|
|
nova::api::enable_proxy_headers_parsing: true
|
|
nova::api::api_bind_address:
|
|
str_replace:
|
|
template:
|
|
"%{hiera('fqdn_$NETWORK')}"
|
|
params:
|
|
$NETWORK: {get_param: [ServiceNetMap, NovaApiNetwork]}
|
|
nova_wsgi_enabled: true
|
|
nova::api::service_name: 'httpd'
|
|
nova::wsgi::apache_api::ssl: {get_param: EnableInternalTLS}
|
|
# NOTE: bind IP is found in hiera replacing the network name with the local node IP
|
|
# for the given network; replacement examples (eg. for internal_api):
|
|
# internal_api -> IP
|
|
# internal_api_uri -> [IP]
|
|
# internal_api_subnet - > IP/CIDR
|
|
nova::wsgi::apache_api::bind_host:
|
|
str_replace:
|
|
template:
|
|
"%{hiera('$NETWORK')}"
|
|
params:
|
|
$NETWORK: {get_param: [ServiceNetMap, NovaApiNetwork]}
|
|
nova::wsgi::apache_api::servername:
|
|
str_replace:
|
|
template:
|
|
"%{hiera('fqdn_$NETWORK')}"
|
|
params:
|
|
$NETWORK: {get_param: [ServiceNetMap, NovaApiNetwork]}
|
|
nova::api::instance_name_template: {get_param: InstanceNameTemplate}
|
|
nova_enable_db_purge: {get_param: NovaEnableDBPurge}
|
|
nova::cron::archive_deleted_rows::minute: {get_param: NovaCronDBArchivedMinute}
|
|
nova::cron::archive_deleted_rows::hour: {get_param: NovaCronDBArchivedHour}
|
|
nova::cron::archive_deleted_rows::monthday: {get_param: NovaCronDBArchivedMonthday}
|
|
nova::cron::archive_deleted_rows::month: {get_param: NovaCronDBArchivedMonth}
|
|
nova::cron::archive_deleted_rows::weekday: {get_param: NovaCronDBArchivedWeekday}
|
|
nova_enable_db_archive: {get_param: NovaEnableDBArchive}
|
|
nova::policy::policies: {get_param: NovaApiPolicies}
|
|
-
|
|
if:
|
|
- nova_workers_zero
|
|
- {}
|
|
- nova::api::osapi_compute_workers: {get_param: NovaWorkers}
|
|
nova::wsgi::apache_api::workers: {get_param: NovaWorkers}
|
|
-
|
|
if:
|
|
- is_neutron_shared_metadata_notempty
|
|
- nova::api::neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
|
|
- {}
|
|
step_config: |
|
|
include tripleo::profile::base::nova::api
|
|
service_config_settings:
|
|
fluentd:
|
|
tripleo_fluentd_groups_nova_api:
|
|
- nova
|
|
tripleo_fluentd_sources_nova_api:
|
|
- {get_param: NovaApiLoggingSource}
|
|
mysql:
|
|
map_merge:
|
|
- {get_attr: [NovaBase, role_data, service_config_settings, mysql]}
|
|
- nova::db::mysql::password: {get_param: NovaPassword}
|
|
nova::db::mysql::user: nova
|
|
nova::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
|
|
nova::db::mysql::dbname: nova
|
|
nova::db::mysql::allowed_hosts:
|
|
- '%'
|
|
- "%{hiera('mysql_bind_host')}"
|
|
nova::db::mysql_api::password: {get_param: NovaPassword}
|
|
nova::db::mysql_api::user: nova_api
|
|
nova::db::mysql_api::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
|
|
nova::db::mysql_api::dbname: nova_api
|
|
nova::db::mysql_api::allowed_hosts:
|
|
- '%'
|
|
- "%{hiera('mysql_bind_host')}"
|
|
keystone:
|
|
nova::keystone::auth::tenant: 'service'
|
|
nova::keystone::auth::public_url: {get_param: [EndpointMap, NovaPublic, uri]}
|
|
nova::keystone::auth::internal_url: {get_param: [EndpointMap, NovaInternal, uri]}
|
|
nova::keystone::auth::admin_url: {get_param: [EndpointMap, NovaAdmin, uri]}
|
|
nova::keystone::auth::password: {get_param: NovaPassword}
|
|
nova::keystone::auth::region: {get_param: KeystoneRegion}
|
|
metadata_settings:
|
|
get_attr: [ApacheServiceBase, role_data, metadata_settings]
|
|
upgrade_tasks:
|
|
list_concat:
|
|
- get_attr: [ApacheServiceBase, role_data, upgrade_tasks]
|
|
-
|
|
- name: set is_bootstrap_node fact
|
|
tags: common
|
|
set_fact: is_bootstrap_node={{nova_api_short_bootstrap_node_name|lower == ansible_hostname|lower}}
|
|
- name: Extra migration for nova tripleo/+bug/1656791
|
|
tags: pre-upgrade
|
|
when:
|
|
- step|int == 0
|
|
- is_bootstrap_node|bool
|
|
command: nova-manage db online_data_migrations
|
|
- name: Stop and disable nova_api service (pre-upgrade not under httpd)
|
|
when: step|int == 2
|
|
service: name=openstack-nova-api state=stopped enabled=no
|
|
- name: Create puppet manifest to set transport_url in nova.conf
|
|
when:
|
|
- step|int == 5
|
|
- is_bootstrap_node|bool
|
|
copy:
|
|
dest: /root/nova-api_upgrade_manifest.pp
|
|
mode: 0600
|
|
content: >
|
|
$transport_url = os_transport_url({
|
|
'transport' => hiera('oslo_messaging_rpc_scheme', 'rabbit'),
|
|
'hosts' => any2array(hiera('oslo_messaging_rpc_node_names', undef)),
|
|
'port' => sprintf('%s',hiera('oslo_messaging_rpc_port', '5672') ),
|
|
'username' => hiera('oslo_messaging_rpc_user_name', 'guest'),
|
|
'password' => hiera('oslo_messaging_rpc_password'),
|
|
'ssl' => sprintf('%s', bool2num(str2bool(hiera('oslo_messaging_rpc_use_ssl', '0'))))
|
|
})
|
|
oslo::messaging::default { 'nova_config':
|
|
transport_url => $transport_url
|
|
}
|
|
- name: Run puppet apply to set tranport_url in nova.conf
|
|
when:
|
|
- step|int == 5
|
|
- is_bootstrap_node|bool
|
|
command: puppet apply --summarize --modulepath /etc/puppet/modules:/opt/stack/puppet-modules:/usr/share/openstack-puppet/modules --detailed-exitcodes /root/nova-api_upgrade_manifest.pp
|
|
register: puppet_apply_nova_api_upgrade
|
|
failed_when: puppet_apply_nova_api_upgrade.rc not in [0,2]
|
|
changed_when: puppet_apply_nova_api_upgrade.rc == 2
|
|
- name: Setup cell_v2 (map cell0)
|
|
when:
|
|
- step|int == 5
|
|
- is_bootstrap_node|bool
|
|
shell: nova-manage cell_v2 map_cell0 --database_connection=$(hiera nova::cell0_database_connection)
|
|
- name: Setup cell_v2 (create default cell)
|
|
when:
|
|
- step|int == 5
|
|
- is_bootstrap_node|bool
|
|
# (owalsh) puppet-nova expects the cell name 'default'
|
|
# (owalsh) pass the db uri explicitly to avoid https://bugs.launchpad.net/tripleo/+bug/1662344
|
|
shell: nova-manage cell_v2 create_cell --name='default' --database_connection=$(hiera nova::database_connection)
|
|
register: nova_api_create_cell
|
|
failed_when: nova_api_create_cell.rc not in [0,2]
|
|
changed_when: nova_api_create_cell.rc == 0
|
|
- name: Setup cell_v2 (sync nova/cell DB)
|
|
when:
|
|
- step|int == 5
|
|
- is_bootstrap_node|bool
|
|
command: nova-manage db sync
|
|
async: {get_param: NovaDbSyncTimeout}
|
|
poll: 10
|
|
- name: Setup cell_v2 (get cell uuid)
|
|
when:
|
|
- step|int == 5
|
|
- is_bootstrap_node|bool
|
|
shell: nova-manage cell_v2 list_cells | sed -e '1,3d' -e '$d' | awk -F ' *| *' '$2 == "default" {print $4}'
|
|
register: nova_api_cell_uuid
|
|
- name: Setup cell_v2 (migrate hosts)
|
|
when:
|
|
- step|int == 5
|
|
- is_bootstrap_node|bool
|
|
command: nova-manage cell_v2 discover_hosts --cell_uuid {{nova_api_cell_uuid.stdout}} --verbose
|
|
- name: Setup cell_v2 (migrate instances)
|
|
when:
|
|
- step|int == 5
|
|
- is_bootstrap_node|bool
|
|
command: nova-manage cell_v2 map_instances --cell_uuid {{nova_api_cell_uuid.stdout}}
|
|
- name: Sync nova_api DB
|
|
command: nova-manage api_db sync
|
|
when:
|
|
- step|int == 5
|
|
- is_bootstrap_node|bool
|
|
- name: Online data migration for nova
|
|
when:
|
|
- step|int == 5
|
|
- is_bootstrap_node|bool
|
|
command: nova-manage db online_data_migrations
|