0b5efadbf7
This patch adds new parameter to configure the crontab in charge of archiving the deleted rows in Nova database. The defaults were hard coded but now our operators can override it. New parameters: NovaCronDBArchivedMinute NovaCronDBArchivedHour NovaCronDBArchivedMonthday NovaCronDBArchivedMonth NovaCronDBArchivedWeekday Note: the default didn't change for backward compatibility. Closes-Bug: #1783155 Change-Id: I786179e1604ccf192826b012992cc88dacdd2b87
338 lines
14 KiB
YAML
338 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]}
|
|
|
|
resources:
|
|
ApacheServiceBase:
|
|
type: ./apache.yaml
|
|
properties:
|
|
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
|
|
- 8775
|
|
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::neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
|
|
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}
|
|
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: get bootstrap nodeid
|
|
tags: common
|
|
command: hiera bootstrap_nodeid
|
|
register: bootstrap_node
|
|
- name: set is_bootstrap_node fact
|
|
tags: common
|
|
set_fact: is_bootstrap_node={{bootstrap_node.stdout|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
|