aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docker/compute-post.yaml6
-rw-r--r--environments/enable-tls.yaml3
-rw-r--r--environments/ips-from-pool-all.yaml16
-rw-r--r--environments/major-upgrade-pacemaker-init.yaml1
-rw-r--r--environments/major-upgrade-pacemaker.yaml1
-rw-r--r--environments/neutron-nuage-config.yaml3
-rw-r--r--environments/neutron-opencontrail.yaml3
-rw-r--r--environments/puppet-ceph-devel.yaml6
-rw-r--r--environments/puppet-ceph-external.yaml2
-rw-r--r--environments/puppet-pacemaker.yaml3
-rw-r--r--environments/storage-environment.yaml9
-rw-r--r--extraconfig/all_nodes/default.yaml27
-rw-r--r--extraconfig/all_nodes/mac_hostname.yaml7
-rw-r--r--extraconfig/all_nodes/random_string.yaml6
-rw-r--r--extraconfig/all_nodes/swap-partition.yaml4
-rw-r--r--extraconfig/all_nodes/swap.yaml4
-rwxr-xr-xextraconfig/tasks/major_upgrade_controller_pacemaker_1.sh144
-rw-r--r--extraconfig/tasks/major_upgrade_pacemaker.yaml12
-rw-r--r--extraconfig/tasks/major_upgrade_pacemaker_migrations.sh44
-rw-r--r--firstboot/os-net-config-mappings.yaml65
-rw-r--r--network/endpoints/endpoint_data.yaml15
-rw-r--r--network/endpoints/endpoint_map.yaml121
-rw-r--r--network/networks.yaml3
-rw-r--r--overcloud-resource-registry-puppet.yaml22
-rw-r--r--overcloud.yaml216
-rw-r--r--puppet/all-nodes-config.yaml32
-rw-r--r--puppet/ceph-cluster-config.yaml100
-rw-r--r--puppet/ceph-storage-post.yaml19
-rw-r--r--puppet/ceph-storage.yaml22
-rw-r--r--puppet/cinder-storage-post.yaml50
-rw-r--r--puppet/cinder-storage.yaml108
-rw-r--r--puppet/compute-post.yaml21
-rw-r--r--puppet/compute.yaml37
-rw-r--r--puppet/controller-post.yaml27
-rw-r--r--puppet/controller.yaml102
-rw-r--r--puppet/extraconfig/all_nodes/neutron-midonet-all-nodes.yaml8
-rw-r--r--puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml8
-rw-r--r--puppet/extraconfig/ceph/ceph-external-config.yaml120
-rw-r--r--puppet/extraconfig/pre_deploy/controller/neutron-nuage.yaml91
-rw-r--r--puppet/extraconfig/pre_deploy/controller/neutron-opencontrail.yaml62
-rw-r--r--puppet/hieradata/ceph.yaml2
-rw-r--r--puppet/hieradata/compute.yaml2
-rw-r--r--puppet/hieradata/controller.yaml3
-rw-r--r--puppet/hieradata/database.yaml17
-rw-r--r--puppet/manifests/overcloud_cephstorage.pp45
-rw-r--r--puppet/manifests/overcloud_compute.pp90
-rw-r--r--puppet/manifests/overcloud_controller.pp138
-rw-r--r--puppet/manifests/overcloud_controller_pacemaker.pp202
-rw-r--r--puppet/manifests/overcloud_object.pp41
-rw-r--r--puppet/manifests/overcloud_volume.pp45
-rw-r--r--puppet/services/ceph-base.yaml94
-rw-r--r--puppet/services/ceph-client.yaml24
-rw-r--r--puppet/services/ceph-external.yaml65
-rw-r--r--puppet/services/ceph-mon.yaml56
-rw-r--r--puppet/services/ceph-osd.yaml24
-rw-r--r--puppet/services/cinder-volume.yaml8
-rw-r--r--puppet/services/glance-api.yaml8
-rw-r--r--puppet/services/heat-base.yaml6
-rw-r--r--puppet/services/ironic-api.yaml43
-rw-r--r--puppet/services/ironic-base.yaml64
-rw-r--r--puppet/services/ironic-conductor.yaml36
-rw-r--r--puppet/services/kernel.yaml18
-rw-r--r--puppet/services/neutron-plugin-ml2.yaml2
-rw-r--r--puppet/services/neutron-plugin-nuage.yaml75
-rw-r--r--puppet/services/neutron-plugin-opencontrail.yaml60
-rw-r--r--puppet/services/nova-compute.yaml12
-rw-r--r--puppet/services/nova-libvirt.yaml31
-rw-r--r--puppet/services/pacemaker/heat-api-cfn.yaml6
-rw-r--r--puppet/services/pacemaker/heat-api-cloudwatch.yaml6
-rw-r--r--puppet/services/pacemaker/heat-api.yaml2
-rw-r--r--puppet/services/pacemaker/heat-engine.yaml6
-rw-r--r--puppet/services/pacemaker/neutron-plugin-ml2.yaml2
-rw-r--r--puppet/services/pacemaker/neutron-plugin-nuage.yaml28
-rw-r--r--puppet/services/pacemaker/neutron-plugin-opencontrail.yaml28
-rw-r--r--puppet/services/rabbitmq.yaml2
-rw-r--r--puppet/services/services.yaml11
-rw-r--r--puppet/services/snmp.yaml31
-rw-r--r--puppet/services/swift-storage.yaml44
-rw-r--r--puppet/services/time/ntp.yaml27
-rw-r--r--puppet/services/time/timezone.yaml24
-rw-r--r--puppet/swift-storage-post.yaml21
-rw-r--r--puppet/swift-storage.yaml26
-rw-r--r--puppet/vip-config.yaml1
83 files changed, 1566 insertions, 1460 deletions
diff --git a/docker/compute-post.yaml b/docker/compute-post.yaml
index 3c4a9413..1e330015 100644
--- a/docker/compute-post.yaml
+++ b/docker/compute-post.yaml
@@ -5,8 +5,8 @@ description: >
parameters:
servers:
type: json
- NodeConfigIdentifiers:
- type: json
+ DeployIdentifier:
+ type: string
description: Value which changes if the node configuration may need to be re-applied
DockerNamespace:
type: string
@@ -65,7 +65,7 @@ resources:
servers: {get_param: servers}
config: {get_resource: ComputePuppetConfig}
input_values:
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
tripleo::packages::enable_install: True
CopyEtcConfig:
diff --git a/environments/enable-tls.yaml b/environments/enable-tls.yaml
index b4c3f08b..71b2c71a 100644
--- a/environments/enable-tls.yaml
+++ b/environments/enable-tls.yaml
@@ -28,6 +28,9 @@ parameter_defaults:
HeatCfnInternal: {protocol: 'http', port: '8000', host: 'IP_ADDRESS'}
HeatCfnPublic: {protocol: 'https', port: '13005', host: 'CLOUDNAME'}
HorizonPublic: {protocol: 'https', port: '443', host: 'CLOUDNAME'}
+ IronicAdmin: {protocol: 'http', port: '6385', host: 'IP_ADDRESS'}
+ IronicInternal: {protocol: 'http', port: '6385', host: 'IP_ADDRESS'}
+ IronicPublic: {protocol: 'https', port: '13385', host: 'CLOUDNAME'}
KeystoneAdmin: {protocol: 'http', port: '35357', host: 'IP_ADDRESS'}
KeystoneInternal: {protocol: 'http', port: '5000', host: 'IP_ADDRESS'}
KeystonePublic: {protocol: 'https', port: '13000', host: 'CLOUDNAME'}
diff --git a/environments/ips-from-pool-all.yaml b/environments/ips-from-pool-all.yaml
index f660d501..87563753 100644
--- a/environments/ips-from-pool-all.yaml
+++ b/environments/ips-from-pool-all.yaml
@@ -5,30 +5,36 @@ resource_registry:
OS::TripleO::Controller::Ports::StoragePort: ../network/ports/storage_from_pool.yaml
OS::TripleO::Controller::Ports::StorageMgmtPort: ../network/ports/storage_mgmt_from_pool.yaml
OS::TripleO::Controller::Ports::TenantPort: ../network/ports/tenant_from_pool.yaml
+ # Management network is optional and disabled by default
+ #OS::TripleO::Controller::Ports::ManagementPort: ../network/ports/management_from_pool.yaml
OS::TripleO::Compute::Ports::ExternalPort: ../network/ports/noop.yaml
OS::TripleO::Compute::Ports::InternalApiPort: ../network/ports/internal_api_from_pool.yaml
OS::TripleO::Compute::Ports::StoragePort: ../network/ports/storage_from_pool.yaml
OS::TripleO::Compute::Ports::StorageMgmtPort: ../network/ports/noop.yaml
OS::TripleO::Compute::Ports::TenantPort: ../network/ports/tenant_from_pool.yaml
+ #OS::TripleO::Compute::Ports::ManagementPort: ../network/ports/management_from_pool.yaml
OS::TripleO::CephStorage::Ports::ExternalPort: ../network/ports/noop.yaml
OS::TripleO::CephStorage::Ports::InternalApiPort: ../network/ports/noop.yaml
OS::TripleO::CephStorage::Ports::StoragePort: ../network/ports/storage_from_pool.yaml
OS::TripleO::CephStorage::Ports::StorageMgmtPort: ../network/ports/storage_mgmt_from_pool.yaml
OS::TripleO::CephStorage::Ports::TenantPort: ../network/ports/noop.yaml
+ #OS::TripleO::CephStorage::Ports::ManagementPort: ../network/ports/management_from_pool.yaml
OS::TripleO::SwiftStorage::Ports::ExternalPort: ../network/ports/noop.yaml
OS::TripleO::SwiftStorage::Ports::InternalApiPort: ../network/ports/internal_api_from_pool.yaml
OS::TripleO::SwiftStorage::Ports::StoragePort: ../network/ports/storage_from_pool.yaml
OS::TripleO::SwiftStorage::Ports::StorageMgmtPort: ../network/ports/storage_mgmt_from_pool.yaml
OS::TripleO::SwiftStorage::Ports::TenantPort: ../network/ports/noop.yaml
+ #OS::TripleO::SwiftStorage::Ports::ManagementPort: ../network/ports/management_from_pool.yaml
OS::TripleO::BlockStorage::Ports::ExternalPort: ../network/ports/noop.yaml
OS::TripleO::BlockStorage::Ports::InternalApiPort: ../network/ports/internal_api_from_pool.yaml
OS::TripleO::BlockStorage::Ports::StoragePort: ../network/ports/storage_from_pool.yaml
OS::TripleO::BlockStorage::Ports::StorageMgmtPort: ../network/ports/storage_mgmt_from_pool.yaml
OS::TripleO::BlockStorage::Ports::TenantPort: ../network/ports/noop.yaml
+ #OS::TripleO::BlockStorage::Ports::ManagementPort: ../network/ports/management_from_pool.yaml
parameter_defaults:
ControllerIPs:
@@ -43,6 +49,8 @@ parameter_defaults:
- 172.16.3.251
tenant:
- 172.16.0.251
+ #management:
+ #- 172.16.4.251
NovaComputeIPs:
# Each compute will get an IP from the lists below, first compute, first IP
internal_api:
@@ -51,12 +59,16 @@ parameter_defaults:
- 172.16.1.252
tenant:
- 172.16.0.252
+ #management:
+ #- 172.16.4.252
CephStorageIPs:
# Each ceph node will get an IP from the lists below, first node, first IP
storage:
- 172.16.1.253
storage_mgmt:
- 172.16.3.253
+ #management:
+ #- 172.16.4.253
SwiftStorageIPs:
# Each swift node will get an IP from the lists below, first node, first IP
internal_api:
@@ -65,6 +77,8 @@ parameter_defaults:
- 172.16.1.254
storage_mgmt:
- 172.16.3.254
+ #management:
+ #- 172.16.4.254
BlockStorageIPs:
# Each cinder node will get an IP from the lists below, first node, first IP
internal_api:
@@ -73,3 +87,5 @@ parameter_defaults:
- 172.16.1.250
storage_mgmt:
- 172.16.3.250
+ #management:
+ #- 172.16.4.250
diff --git a/environments/major-upgrade-pacemaker-init.yaml b/environments/major-upgrade-pacemaker-init.yaml
index fbad0406..d97f8fc1 100644
--- a/environments/major-upgrade-pacemaker-init.yaml
+++ b/environments/major-upgrade-pacemaker-init.yaml
@@ -3,7 +3,6 @@ parameter_defaults:
resource_registry:
OS::TripleO::Tasks::UpdateWorkflow: ../extraconfig/tasks/major_upgrade_pacemaker_init.yaml
- OS::TripleO::Tasks::PackageUpdate: ../extraconfig/tasks/yum_update_noop.yaml
OS::TripleO::ControllerPostDeployment: OS::Heat::None
OS::TripleO::ComputePostDeployment: OS::Heat::None
OS::TripleO::ObjectStoragePostDeployment: OS::Heat::None
diff --git a/environments/major-upgrade-pacemaker.yaml b/environments/major-upgrade-pacemaker.yaml
index 763ca67e..95f09666 100644
--- a/environments/major-upgrade-pacemaker.yaml
+++ b/environments/major-upgrade-pacemaker.yaml
@@ -3,7 +3,6 @@ parameter_defaults:
resource_registry:
OS::TripleO::Tasks::UpdateWorkflow: ../extraconfig/tasks/major_upgrade_pacemaker.yaml
- OS::TripleO::Tasks::PackageUpdate: ../extraconfig/tasks/yum_update_noop.yaml
OS::TripleO::ControllerPostDeployment: OS::Heat::None
OS::TripleO::ComputePostDeployment: OS::Heat::None
OS::TripleO::ObjectStoragePostDeployment: OS::Heat::None
diff --git a/environments/neutron-nuage-config.yaml b/environments/neutron-nuage-config.yaml
index bf5036bf..28056b35 100644
--- a/environments/neutron-nuage-config.yaml
+++ b/environments/neutron-nuage-config.yaml
@@ -1,10 +1,11 @@
# A Heat environment file which can be used to enable a
# a Neutron Nuage backend on the controller, configured via puppet
resource_registry:
- OS::TripleO::ControllerExtraConfigPre: ../puppet/extraconfig/pre_deploy/controller/neutron-nuage.yaml
OS::TripleO::Services::NeutronL3Agent: OS::Heat::None
OS::TripleO::Services::NeutronMetadataAgent: OS::Heat::None
OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None
+ # Override the NeutronCorePlugin to use Nuage
+ OS::TripleO::Services::NeutronCorePlugin: OS::TripleO::Services::NeutronCorePluginNuage
parameter_defaults:
NeutronNuageOSControllerIp: '0.0.0.0'
diff --git a/environments/neutron-opencontrail.yaml b/environments/neutron-opencontrail.yaml
index b17c9c0a..340bac78 100644
--- a/environments/neutron-opencontrail.yaml
+++ b/environments/neutron-opencontrail.yaml
@@ -1,12 +1,13 @@
# A Heat environment file which can be used to enable OpenContrail
# extensions, configured via puppet
resource_registry:
- OS::TripleO::ControllerExtraConfigPre: ../puppet/extraconfig/pre_deploy/controller/neutron-opencontrail.yaml
OS::TripleO::ComputeExtraConfigPre: ../puppet/extraconfig/pre_deploy/compute/neutron-opencontrail.yaml
OS::TripleO::Services::NeutronDhcpAgent: OS::Heat::None
OS::TripleO::Services::NeutronL3Agent: OS::Heat::None
OS::TripleO::Services::NeutronMetadataAgent: OS::Heat::None
OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None
+ # Override the NeutronCorePlugin to use Nuage
+ OS::TripleO::Services::NeutronCorePlugin: OS::TripleO::Services::NeutronCorePluginOpencontrail
parameter_defaults:
NeutronCorePlugin: neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2
diff --git a/environments/puppet-ceph-devel.yaml b/environments/puppet-ceph-devel.yaml
index a2d1100f..ad542bee 100644
--- a/environments/puppet-ceph-devel.yaml
+++ b/environments/puppet-ceph-devel.yaml
@@ -1,6 +1,11 @@
# A Heat environment file which can be used to enable a Ceph
# storage cluster using the controller and ceph nodes.
# Rbd backends are enabled for Cinder, Glance, Gnocchi and Nova.
+resource_registry:
+ OS::TripleO::Services::CephMon: ../puppet/services/ceph-mon.yaml
+ OS::TripleO::Services::CephOSD: ../puppet/services/ceph-osd.yaml
+ OS::TripleO::Services::CephClient: ../puppet/services/ceph-client.yaml
+
parameter_defaults:
#NOTE: These ID's and keys should be regenerated for
# a production deployment. What is here is suitable for
@@ -13,4 +18,3 @@ parameter_defaults:
GlanceBackend: rbd
GnocchiBackend: rbd
CinderEnableIscsiBackend: false
- ControllerEnableCephStorage: true
diff --git a/environments/puppet-ceph-external.yaml b/environments/puppet-ceph-external.yaml
index 865e0b98..d5e0b1b5 100644
--- a/environments/puppet-ceph-external.yaml
+++ b/environments/puppet-ceph-external.yaml
@@ -1,7 +1,7 @@
# A Heat environment file which can be used to enable the
# use of an externally managed Ceph cluster.
resource_registry:
- OS::TripleO::CephClusterConfig::SoftwareConfig: ../puppet/extraconfig/ceph/ceph-external-config.yaml
+ OS::TripleO::Services::CephExternal: ../puppet/services/ceph-external.yaml
parameter_defaults:
# NOTE: These example parameters are required when using Ceph External
diff --git a/environments/puppet-pacemaker.yaml b/environments/puppet-pacemaker.yaml
index 52a94d80..d1df6c41 100644
--- a/environments/puppet-pacemaker.yaml
+++ b/environments/puppet-pacemaker.yaml
@@ -26,7 +26,8 @@ resource_registry:
OS::TripleO::Services::NeutronCorePlugin: ../puppet/services/pacemaker/neutron-plugin-ml2.yaml
# Neutron Core Plugin Vendors (these typically override NeutronCorePlugin)
OS::TripleO::Services::NeutronCorePluginPlumgrid: ../puppet/services/pacemaker/neutron-plugin-plumgrid.yaml
-
+ OS::TripleO::Services::NeutronCorePluginNuage: ../puppet/services/pacemaker/neutron-plugin-nuage.yaml
+ OS::TripleO::Services::NeutronCorePluginOpencontrail: ../puppet/services/pacemaker/neutron-plugin-opencontrail.yaml
OS::TripleO::Services::NeutronOvsAgent: ../puppet/services/pacemaker/neutron-ovs-agent.yaml
OS::TripleO::Services::RabbitMQ: ../puppet/services/pacemaker/rabbitmq.yaml
OS::TripleO::Services::HAproxy: ../puppet/services/pacemaker/haproxy.yaml
diff --git a/environments/storage-environment.yaml b/environments/storage-environment.yaml
index da33acfd..2529ea14 100644
--- a/environments/storage-environment.yaml
+++ b/environments/storage-environment.yaml
@@ -1,6 +1,11 @@
## A Heat environment file which can be used to set up storage
## backends. Defaults to Ceph used as a backend for Cinder, Glance and
## Nova ephemeral storage.
+resource_registry:
+ OS::TripleO::Services::CephMon: ../puppet/services/ceph-mon.yaml
+ OS::TripleO::Services::CephOSD: ../puppet/services/ceph-osd.yaml
+ OS::TripleO::Services::CephClient: ../puppet/services/ceph-client.yaml
+
parameter_defaults:
#### BACKEND SELECTION ####
@@ -43,10 +48,6 @@ parameter_defaults:
#### CEPH SETTINGS ####
- ## Whether to deploy Ceph OSDs on the controller nodes. By default
- ## OSDs are deployed on dedicated ceph-storage nodes only.
- # ControllerEnableCephStorage: false
-
## When deploying Ceph Nodes through the oscplugin CLI, the following
## parameters are set automatically by the CLI. When deploying via
## heat stack-create or ceph on the controller nodes only,
diff --git a/extraconfig/all_nodes/default.yaml b/extraconfig/all_nodes/default.yaml
deleted file mode 100644
index 68f9eadd..00000000
--- a/extraconfig/all_nodes/default.yaml
+++ /dev/null
@@ -1,27 +0,0 @@
-heat_template_version: 2014-10-16
-
-description: >
- Noop extra config for allnodes extra cluster config
-
-# Parameters passed from the parent template - note if you maintain
-# out-of-tree templates they may require additional parameters if the
-# in-tree templates add a new role.
-parameters:
- controller_servers:
- type: json
- compute_servers:
- type: json
- blockstorage_servers:
- type: json
- objectstorage_servers:
- type: json
- cephstorage_servers:
- type: json
-# Note extra parameters can be defined, then passed data via the
-# environment parameter_defaults, without modifying the parent template
-
-outputs:
- # This value should change if the configuration data has changed
- # It is used to e.g re-apply puppet after hieradata values change.
- config_identifier:
- value: none
diff --git a/extraconfig/all_nodes/mac_hostname.yaml b/extraconfig/all_nodes/mac_hostname.yaml
index 5883e06a..7d8704e3 100644
--- a/extraconfig/all_nodes/mac_hostname.yaml
+++ b/extraconfig/all_nodes/mac_hostname.yaml
@@ -113,10 +113,3 @@ resources:
objectstorage_mappings: {get_attr: [CollectMacDeploymentsObjectStorage, deploy_stdouts]}
cephstorage_mappings: {get_attr: [CollectMacDeploymentsCephStorage, deploy_stdouts]}
actions: ['CREATE'] # Only do this on CREATE
-
-outputs:
- # This value should change if the configuration data has changed
- # It is used to e.g re-apply puppet after hieradata values change.
- config_identifier:
- value: {get_attr: [DistributeMacDeploymentsController, deploy_stdouts]}
-
diff --git a/extraconfig/all_nodes/random_string.yaml b/extraconfig/all_nodes/random_string.yaml
index 49d2d8b6..d38701e2 100644
--- a/extraconfig/all_nodes/random_string.yaml
+++ b/extraconfig/all_nodes/random_string.yaml
@@ -57,9 +57,3 @@ resources:
actions: ['CREATE'] # Only do this on CREATE
input_values:
random_value: {get_attr: [Random, value]}
-
-outputs:
- # This value should change if the configuration data has changed
- # It is used to e.g re-apply puppet after hieradata values change.
- config_identifier:
- value: {get_attr: [Random, value]}
diff --git a/extraconfig/all_nodes/swap-partition.yaml b/extraconfig/all_nodes/swap-partition.yaml
index 89a2adb0..e6fa9eca 100644
--- a/extraconfig/all_nodes/swap-partition.yaml
+++ b/extraconfig/all_nodes/swap-partition.yaml
@@ -84,7 +84,3 @@ resources:
input_values:
swap_partition_label: {get_param: swap_partition_label}
actions: ["CREATE"]
-
-outputs:
- config_identifier:
- value: none
diff --git a/extraconfig/all_nodes/swap.yaml b/extraconfig/all_nodes/swap.yaml
index 374b1e5d..5383ffc9 100644
--- a/extraconfig/all_nodes/swap.yaml
+++ b/extraconfig/all_nodes/swap.yaml
@@ -102,7 +102,3 @@ resources:
swap_size_megabytes: {get_param: swap_size_megabytes}
swap_path: {get_param: swap_path}
actions: ["CREATE"]
-
-outputs:
- config_identifier:
- value: none
diff --git a/extraconfig/tasks/major_upgrade_controller_pacemaker_1.sh b/extraconfig/tasks/major_upgrade_controller_pacemaker_1.sh
index f5399222..36d85444 100755
--- a/extraconfig/tasks/major_upgrade_controller_pacemaker_1.sh
+++ b/extraconfig/tasks/major_upgrade_controller_pacemaker_1.sh
@@ -2,14 +2,96 @@
set -eu
-cluster_sync_timeout=600
+cluster_sync_timeout=1800
if pcs status 2>&1 | grep -E '(cluster is not currently running)|(OFFLINE:)'; then
echo_error "ERROR: upgrade cannot start with some cluster nodes being offline"
exit 1
fi
+
+# We want to disable fencing during the cluster --stop as it might fence
+# nodes where a service fails to stop, which could be fatal during an upgrade
+# procedure. So we remember the stonith state. If it was enabled we reenable it
+# at the end of this script
+STONITH_STATE=$(pcs property show stonith-enabled | grep "stonith-enabled" | awk '{ print $2 }')
+pcs property set stonith-enabled=false
+
+# If for some reason rpm-python are missing we want to error out early enough
+if [ ! rpm -q rpm-python &> /dev/null ]; then
+ echo_error "ERROR: upgrade cannot start without rpm-python installed"
+ exit 1
+fi
+
+# In case the mysql package is updated, the database on disk must be
+# upgraded as well. This typically needs to happen during major
+# version upgrades (e.g. 5.5 -> 5.6, 5.5 -> 10.1...)
+#
+# Because in-place upgrades are not supported across 2+ major versions
+# (e.g. 5.5 -> 10.1), we rely on logical upgrades via dump/restore cycle
+# https://bugzilla.redhat.com/show_bug.cgi?id=1341968
+#
+# The default is to determine automatically if upgrade is needed based
+# on mysql package versionning, but this can be overriden manually
+# to support specific upgrade scenario
+
+# Where to backup current database if mysql need to be upgraded
+MYSQL_BACKUP_DIR=/var/tmp/mysql_upgrade_osp
+MYSQL_TEMP_UPGRADE_BACKUP_DIR=/var/lib/mysql-temp-upgrade-backup
+# Spare disk ratio for extra safety
+MYSQL_BACKUP_SIZE_RATIO=1.2
+
+# Shall we upgrade mysql data directory during the stack upgrade?
+if [ "$mariadb_do_major_upgrade" = "auto" ]; then
+ ret=$(is_mysql_upgrade_needed)
+ if [ $ret = "1" ]; then
+ DO_MYSQL_UPGRADE=1
+ else
+ DO_MYSQL_UPGRADE=0
+ fi
+ echo "mysql upgrade required: $DO_MYSQL_UPGRADE"
+elif [ "$mariadb_do_major_upgrade" = 0 ]; then
+ DO_MYSQL_UPGRADE=0
+else
+ DO_MYSQL_UPGRADE=1
+fi
+
if [ "$(hiera -c /etc/puppet/hiera.yaml bootstrap_nodeid)" = "$(facter hostname)" ]; then
+ if [ $DO_MYSQL_UPGRADE -eq 1 ]; then
+ if [ -d "$MYSQL_BACKUP_DIR" ]; then
+ echo_error "Error: $MYSQL_BACKUP_DIR exists already. Likely an upgrade failed previously"
+ exit 1
+ fi
+ mkdir "$MYSQL_BACKUP_DIR"
+ if [ $? -ne 0 ]; then
+ echo_error "Error: could not create temporary backup directory $MYSQL_BACKUP_DIR"
+ exit 1
+ fi
+
+ # the /root/.my.cnf is needed because we set the mysql root
+ # password from liberty onwards
+ backup_flags="--defaults-extra-file=/root/.my.cnf -u root --flush-privileges --all-databases --single-transaction"
+ # While not ideal, this step allows us to calculate exactly how much space the dump
+ # will need. Our main goal here is avoiding any chance of corruption due to disk space
+ # exhaustion
+ backup_size=$(mysqldump $backup_flags 2>/dev/null | wc -c)
+ database_size=$(du -cb /var/lib/mysql | tail -1 | awk '{ print $1 }')
+ free_space=$(df -B1 --output=avail "$MYSQL_BACKUP_DIR" | tail -1)
+
+ # we need at least space for a new mysql database + dump of the existing one,
+ # times a small factor for additional safety room
+ # note: bash doesn't do floating point math or floats in if statements,
+ # so use python to apply the ratio and cast it back to integer
+ required_space=$(python -c "from __future__ import print_function; print(\"%d\" % int((($database_size + $backup_size) * $MYSQL_BACKUP_SIZE_RATIO)))")
+ if [ $required_space -ge $free_space ]; then
+ echo_error "Error: not enough free space in $MYSQL_BACKUP_DIR ($required_space bytes required)"
+ exit 1
+ fi
+
+ mysqldump $backup_flags > "$MYSQL_BACKUP_DIR/openstack_database.sql"
+ cp -rdp /etc/my.cnf* "$MYSQL_BACKUP_DIR"
+ fi
+
pcs resource disable httpd
check_resource httpd stopped 1800
pcs resource disable openstack-core
@@ -46,9 +128,69 @@ while systemctl is-active pacemaker; do
fi
done
+# The reason we do an sql dump *and* we move the old dir out of
+# the way is because it gives us an extra level of safety in case
+# something goes wrong during the upgrade. Once the restore is
+# successful we go ahead and remove it. If the directory exists
+# we bail out as it means the upgrade process had issues in the last
+# run.
+if [ $DO_MYSQL_UPGRADE -eq 1 ]; then
+ if [ -d $MYSQL_TEMP_UPGRADE_BACKUP_DIR ]; then
+ echo_error "ERROR: mysql backup dir already exist"
+ exit 1
+ fi
+ mv /var/lib/mysql $MYSQL_TEMP_UPGRADE_BACKUP_DIR
+fi
+
yum -y install python-zaqarclient # needed for os-collect-config
yum -y -q update
+# We need to ensure at least those two configuration settings, otherwise
+# mariadb 10.1+ won't activate galera replication.
+# wsrep_cluster_address must only be set though, its value does not
+# matter because it's overriden by the galera resource agent.
+cat >> /etc/my.cnf.d/galera.cnf <<EOF
+[mysqld]
+wsrep_on = ON
+wsrep_cluster_address = gcomm://localhost
+EOF
+
+if [ "$(hiera -c /etc/puppet/hiera.yaml bootstrap_nodeid)" = "$(facter hostname)" ]; then
+ if [ $DO_MYSQL_UPGRADE -eq 1 ]; then
+ # Scripts run via heat have no HOME variable set and this confuses
+ # mysqladmin
+ export HOME=/root
+ mkdir /var/lib/mysql || /bin/true
+ chown mysql:mysql /var/lib/mysql
+ chmod 0755 /var/lib/mysql
+ restorecon -R /var/lib/mysql/
+ mysql_install_db --datadir=/var/lib/mysql --user=mysql
+ chown -R mysql:mysql /var/lib/mysql/
+ mysqld_safe --wsrep-new-cluster &
+ # We have a populated /root/.my.cnf with root/password here so
+ # we need to temporarily rename it because the newly created
+ # db is empty and no root password is set
+ mv /root/.my.cnf /root/.my.cnf.temporary
+ timeout 60 sh -c 'while ! mysql -e "" &> /dev/null; do sleep 1; done'
+ mysql -u root < "$MYSQL_BACKUP_DIR/openstack_database.sql"
+ mv /root/.my.cnf.temporary /root/.my.cnf
+ mysqladmin -u root shutdown
+ # The import was successful so we may remove the folder
+ rm -r "$MYSQL_BACKUP_DIR"
+ fi
+fi
+
+# If we reached here without error we can safely blow away the origin
+# mysql dir from every controller
+if [ $DO_MYSQL_UPGRADE -eq 1 ]; then
+ rm -r $MYSQL_TEMP_UPGRADE_BACKUP_DIR
+fi
+
+# Let's reset the stonith back to true if it was true, before starting the cluster
+if [ $STONITH_STATE == "true" ]; then
+ pcs -f /var/lib/pacemaker/cib/cib.xml property set stonith-enabled=true
+fi
+
# Pin messages sent to compute nodes to kilo, these will be upgraded later
crudini --set /etc/nova/nova.conf upgrade_levels compute "$upgrade_level_nova_compute"
# https://bugzilla.redhat.com/show_bug.cgi?id=1284047
diff --git a/extraconfig/tasks/major_upgrade_pacemaker.yaml b/extraconfig/tasks/major_upgrade_pacemaker.yaml
index 4af3186c..c70a954f 100644
--- a/extraconfig/tasks/major_upgrade_pacemaker.yaml
+++ b/extraconfig/tasks/major_upgrade_pacemaker.yaml
@@ -20,6 +20,12 @@ parameters:
type: string
description: Nova Compute upgrade level
default: ''
+ MySqlMajorUpgrade:
+ type: string
+ description: Can be auto,yes,no and influences if the major upgrade should do or detect an automatic mysql upgrade
+ constraints:
+ - allowed_values: ['auto', 'yes', 'no']
+ default: 'auto'
resources:
# TODO(jistr): for Mitaka->Newton upgrades and further we can use
@@ -39,6 +45,12 @@ resources:
upgrade_level_nova_compute='UPGRADE_LEVEL_NOVA_COMPUTE'
params:
UPGRADE_LEVEL_NOVA_COMPUTE: {get_param: UpgradeLevelNovaCompute}
+ - str_replace:
+ template: |
+ #!/bin/bash
+ mariadb_do_major_upgrade='MYSQL_MAJOR_UPGRADE'
+ params:
+ MYSQL_MAJOR_UPGRADE: {get_param: MySqlMajorUpgrade}
- get_file: pacemaker_common_functions.sh
- get_file: major_upgrade_pacemaker_migrations.sh
- get_file: major_upgrade_controller_pacemaker_1.sh
diff --git a/extraconfig/tasks/major_upgrade_pacemaker_migrations.sh b/extraconfig/tasks/major_upgrade_pacemaker_migrations.sh
index b63198db..164269dc 100644
--- a/extraconfig/tasks/major_upgrade_pacemaker_migrations.sh
+++ b/extraconfig/tasks/major_upgrade_pacemaker_migrations.sh
@@ -13,6 +13,50 @@
# been already applied, it should be possible to call the function
# again without damaging the deployment or failing the upgrade.
+# If the major version of mysql is going to change after the major
+# upgrade, the database must be upgraded on disk to avoid failures
+# due to internal incompatibilities between major mysql versions
+# https://bugs.launchpad.net/tripleo/+bug/1587449
+# This function detects whether a database upgrade is required
+# after a mysql package upgrade. It returns 0 when no major upgrade
+# has to take place, 1 otherwise.
+function is_mysql_upgrade_needed {
+ # The name of the package which provides mysql might differ
+ # after the upgrade. Consider the generic package name, which
+ # should capture the major version change (e.g. 5.5 -> 10.1)
+ local name="mariadb"
+ local output
+ local ret
+ set +e
+ output=$(yum -q check-update $name)
+ ret=$?
+ set -e
+ if [ $ret -ne 100 ]; then
+ # no updates so we exit
+ echo "0"
+ return
+ fi
+
+ local currentepoch=$(rpm -q --qf "%{epoch}" $name)
+ local currentversion=$(rpm -q --qf "%{version}" $name)
+ local currentrelease=$(rpm -q --qf "%{release}" $name)
+ local newoutput=$(repoquery -a --pkgnarrow=updates --qf "%{epoch} %{version} %{release}\n" $name)
+ local newepoch=$(echo "$newoutput" | awk '{ print $1 }')
+ local newversion=$(echo "$newoutput" | awk '{ print $2 }')
+ local newrelease=$(echo "$newoutput" | awk '{ print $3 }')
+
+ # With this we trigger the dump restore/path if we change either epoch or
+ # version in the package If only the release tag changes we do not do it
+ # FIXME: we could refine this by trying to parse the mariadb version
+ # into X.Y.Z and trigger the update only if X and/or Y change.
+ output=$(python -c "import rpm; rc = rpm.labelCompare((\"$currentepoch\", \"$currentversion\", None), (\"$newepoch\", \"$newversion\", None)); print rc")
+ if [ "$output" != "-1" ]; then
+ echo "0"
+ return
+ fi
+ echo "1"
+}
+
function add_missing_openstack_core_constraints {
# The CIBs are saved under /root as they might contain sensitive data
CIB="/root/migration.cib"
diff --git a/firstboot/os-net-config-mappings.yaml b/firstboot/os-net-config-mappings.yaml
new file mode 100644
index 00000000..833c3bc2
--- /dev/null
+++ b/firstboot/os-net-config-mappings.yaml
@@ -0,0 +1,65 @@
+heat_template_version: 2015-10-15
+
+description: >
+ Configure os-net-config mappings for specific nodes
+ Your environment file needs to look like:
+ parameter_defaults:
+ NetConfigDataLookup:
+ node1:
+ nic1: "00:c8:7c:e6:f0:2e"
+ node2:
+ nic1: "00:18:7d:99:0c:b6"
+ This will result in the first nodeN entry where a mac matches a
+ local device being written as a mapping file for os-net-config in
+ /etc/os-net-config/mapping.yaml
+
+parameters:
+ # Note this requires a liberty heat or newer in the undercloud due to
+ # the 2015-10-15 (which is required to enable str_replace serializing
+ # the json parameter to json, another approch with a string parameter
+ # will be required for older heat versions)
+ NetConfigDataLookup:
+ type: json
+ default: {}
+ description: per-node configuration map
+
+resources:
+ userdata:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: OsNetConfigMappings}
+
+ OsNetConfigMappings:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: ungrouped
+ config:
+ str_replace:
+ template: |
+ #!/bin/sh
+ eth_addr=$(/sbin/ifconfig eth0 | grep ether | awk '{print $2}')
+ mkdir -p /etc/os-net-config
+
+ # Create an os-net-config mapping file, note this defaults to
+ # /etc/os-net-config/mapping.yaml, so we use that name despite
+ # rendering the result as json
+ echo '$node_lookup' | python -c "
+ import json
+ import sys
+ import yaml
+ input = sys.stdin.readline() or '{}'
+ data = json.loads(input)
+ for node in data:
+ if '${eth_addr}' in data[node].values():
+ interface_mapping = {'interface_mapping': data[node]}
+ with open('/etc/os-net-config/mapping.yaml', 'w') as f:
+ yaml.safe_dump(interface_mapping, f, default_flow_style=False)
+ break
+ "
+ params:
+ $node_lookup: {get_param: NetConfigDataLookup}
+
+outputs:
+ OS::stack_id:
+ value: {get_resource: userdata}
diff --git a/network/endpoints/endpoint_data.yaml b/network/endpoints/endpoint_data.yaml
index c76e1360..53b474de 100644
--- a/network/endpoints/endpoint_data.yaml
+++ b/network/endpoints/endpoint_data.yaml
@@ -192,3 +192,18 @@ Sahara:
uri_suffixes:
'': /v1.1/%(tenant_id)s
port: 8386
+
+Ironic:
+ Internal:
+ vip_param: IronicApi
+ uri_suffixes:
+ '': /v1
+ Public:
+ vip_param: Public
+ uri_suffixes:
+ '': /v1
+ Admin:
+ vip_param: IronicApi
+ uri_suffixes:
+ '': /v1
+ port: 6385
diff --git a/network/endpoints/endpoint_map.yaml b/network/endpoints/endpoint_map.yaml
index fbfa0a15..51ff375b 100644
--- a/network/endpoints/endpoint_map.yaml
+++ b/network/endpoints/endpoint_map.yaml
@@ -15,6 +15,7 @@ parameters:
GlanceRegistryVirtualIP: {type: string, default: ''}
GnocchiApiVirtualIP: {type: string, default: ''}
HeatApiVirtualIP: {type: string, default: ''}
+ IronicApiVirtualIP: {type: string, default: ''}
KeystoneAdminApiVirtualIP: {type: string, default: ''}
KeystonePublicApiVirtualIP: {type: string, default: ''}
MysqlVirtualIP: {type: string, default: ''}
@@ -49,6 +50,9 @@ parameters:
HeatCfnInternal: {protocol: http, port: '8000', host: IP_ADDRESS}
HeatCfnPublic: {protocol: http, port: '8000', host: IP_ADDRESS}
HorizonPublic: {protocol: http, port: '80', host: IP_ADDRESS}
+ IronicAdmin: {protocol: http, port: '6385', host: IP_ADDRESS}
+ IronicInternal: {protocol: http, port: '6385', host: IP_ADDRESS}
+ IronicPublic: {protocol: http, port: '6385', host: IP_ADDRESS}
KeystoneAdmin: {protocol: http, port: '35357', host: IP_ADDRESS}
KeystoneInternal: {protocol: http, port: '5000', host: IP_ADDRESS}
KeystonePublic: {protocol: http, port: '5000', host: IP_ADDRESS}
@@ -1076,6 +1080,123 @@ outputs:
IP_ADDRESS: {get_param: PublicVirtualIP}
- ':'
- get_param: [EndpointMap, HorizonPublic, port]
+ IronicAdmin:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, IronicAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: IronicApiVirtualIP}
+ port:
+ get_param: [EndpointMap, IronicAdmin, port]
+ protocol:
+ get_param: [EndpointMap, IronicAdmin, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, IronicAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, IronicAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: IronicApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, IronicAdmin, port]
+ - /v1
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, IronicAdmin, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, IronicAdmin, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: IronicApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, IronicAdmin, port]
+ IronicInternal:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, IronicInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: IronicApiVirtualIP}
+ port:
+ get_param: [EndpointMap, IronicInternal, port]
+ protocol:
+ get_param: [EndpointMap, IronicInternal, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, IronicInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, IronicInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: IronicApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, IronicInternal, port]
+ - /v1
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, IronicInternal, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, IronicInternal, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: IronicApiVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, IronicInternal, port]
+ IronicPublic:
+ host:
+ str_replace:
+ template:
+ get_param: [EndpointMap, IronicPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ port:
+ get_param: [EndpointMap, IronicPublic, port]
+ protocol:
+ get_param: [EndpointMap, IronicPublic, protocol]
+ uri:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, IronicPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, IronicPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, IronicPublic, port]
+ - /v1
+ uri_no_suffix:
+ list_join:
+ - ''
+ - - get_param: [EndpointMap, IronicPublic, protocol]
+ - ://
+ - str_replace:
+ template:
+ get_param: [EndpointMap, IronicPublic, host]
+ params:
+ CLOUDNAME: {get_param: CloudName}
+ IP_ADDRESS: {get_param: PublicVirtualIP}
+ - ':'
+ - get_param: [EndpointMap, IronicPublic, port]
KeystoneAdmin:
host:
str_replace:
diff --git a/network/networks.yaml b/network/networks.yaml
index ab50ae11..d3ae482b 100644
--- a/network/networks.yaml
+++ b/network/networks.yaml
@@ -21,3 +21,6 @@ resources:
ManagementNetwork:
type: OS::TripleO::Network::Management
+
+ NetworkExtraConfig:
+ type: OS::TripleO::Network::ExtraConfig
diff --git a/overcloud-resource-registry-puppet.yaml b/overcloud-resource-registry-puppet.yaml
index 4fab2466..8ec2a792 100644
--- a/overcloud-resource-registry-puppet.yaml
+++ b/overcloud-resource-registry-puppet.yaml
@@ -50,7 +50,8 @@ resource_registry:
# phase, e.g when puppet is applied, but after the pre_deploy phase. Useful when
# configuration with knowledge of all nodes in the cluster is required vs single
# node configuration in the pre_deploy step.
- OS::TripleO::AllNodesExtraConfig: extraconfig/all_nodes/default.yaml
+ # See extraconfig/all_nodes/* for examples
+ OS::TripleO::AllNodesExtraConfig: OS::Heat::None
# TripleO overcloud networks
OS::TripleO::Network: network/networks.yaml
@@ -63,6 +64,8 @@ resource_registry:
OS::TripleO::Network::Tenant: OS::Heat::None
OS::TripleO::Network::Management: OS::Heat::None
+ OS::TripleO::Network::ExtraConfig: OS::Heat::None
+
OS::TripleO::Network::Ports::NetVipMap: network/ports/net_ip_map.yaml
OS::TripleO::Network::Ports::NetIpMap: network/ports/net_ip_map.yaml
OS::TripleO::Network::Ports::NetIpListMap: network/ports/net_ip_list_map.yaml
@@ -122,6 +125,10 @@ resource_registry:
# services
OS::TripleO::Services: puppet/services/services.yaml
+ OS::TripleO::Services::CephMon: OS::Heat::None
+ OS::TripleO::Services::CephOSD: OS::Heat::None
+ OS::TripleO::Services::CephClient: OS::Heat::None
+ OS::TripleO::Services::CephExternal: OS::Heat::None
OS::TripleO::Services::CinderApi: puppet/services/cinder-api.yaml
OS::TripleO::Services::CinderScheduler: puppet/services/cinder-scheduler.yaml
OS::TripleO::Services::CinderVolume: puppet/services/cinder-volume.yaml
@@ -132,6 +139,9 @@ resource_registry:
OS::TripleO::Services::HeatApiCfn: puppet/services/heat-api-cfn.yaml
OS::TripleO::Services::HeatApiCloudwatch: puppet/services/heat-api-cloudwatch.yaml
OS::TripleO::Services::HeatEngine: puppet/services/heat-engine.yaml
+ OS::TripleO::Services::IronicApi: puppet/services/ironic-api.yaml
+ OS::TripleO::Services::IronicConductor: puppet/services/ironic-conductor.yaml
+ OS::TripleO::Services::Kernel: puppet/services/kernel.yaml
OS::TripleO::Services::NeutronDhcpAgent: puppet/services/neutron-dhcp.yaml
OS::TripleO::Services::NeutronL3Agent: puppet/services/neutron-l3.yaml
OS::TripleO::Services::NeutronMetadataAgent: puppet/services/neutron-metadata.yaml
@@ -139,13 +149,13 @@ resource_registry:
OS::TripleO::Services::NeutronCorePlugin: puppet/services/neutron-plugin-ml2.yaml
# Neutron Core Plugin Vendors (these typically override NeutronCorePlugin)
OS::TripleO::Services::NeutronCorePluginPlumgrid: puppet/services/neutron-plugin-plumgrid.yaml
-
+ OS::TripleO::Services::NeutronCorePluginNuage: puppet/services/neutron-plugin-nuage.yaml
+ OS::TripleO::Services::NeutronCorePluginOpencontrail: puppet/services/neutron-plugin-opencontrail.yaml
OS::TripleO::Services::NeutronOvsAgent: puppet/services/neutron-ovs-agent.yaml
OS::TripleO::Services::RabbitMQ: puppet/services/rabbitmq.yaml
OS::TripleO::Services::HAproxy: puppet/services/haproxy.yaml
OS::TripleO::Services::Keepalived: puppet/services/keepalived.yaml
OS::TripleO::Services::Memcached: puppet/services/memcached.yaml
- OS::TripleO::Services::SwiftProxy: puppet/services/swift-proxy.yaml
OS::TripleO::Services::SaharaApi: puppet/services/sahara-api.yaml
OS::TripleO::Services::SaharaEngine: puppet/services/sahara-engine.yaml
OS::TripleO::Services::Redis: puppet/services/database/redis.yaml
@@ -156,6 +166,12 @@ resource_registry:
OS::TripleO::Services::NovaConsoleauth: puppet/services/nova-consoleauth.yaml
OS::TripleO::Services::NovaVncproxy: puppet/services/nova-vncproxy.yaml
OS::TripleO::Services::NovaCompute: puppet/services/nova-compute.yaml
+ OS::TripleO::Services::NovaLibvirt: puppet/services/nova-libvirt.yaml
+ OS::TripleO::Services::Ntp: puppet/services/time/ntp.yaml
+ OS::TripleO::Services::SwiftProxy: puppet/services/swift-proxy.yaml
+ OS::TripleO::Services::SwiftStorage: puppet/services/swift-storage.yaml
+ OS::TripleO::Services::Snmp: puppet/services/snmp.yaml
+ OS::TripleO::Services::Timezone: puppet/services/time/timezone.yaml
parameter_defaults:
EnablePackageInstall: false
diff --git a/overcloud.yaml b/overcloud.yaml
index 60424885..11ea1bdb 100644
--- a/overcloud.yaml
+++ b/overcloud.yaml
@@ -38,38 +38,10 @@ parameters:
type: string
constraints:
- allowed_values: ['gnocchi', 'database']
- # This has to be an UUID so for now we generate it outside the template
- CephClusterFSID:
- default: ''
- type: string
- description: The Ceph cluster FSID. Must be a UUID.
- CephMonKey:
- default: ''
- description: The Ceph monitors key. Can be created with ceph-authtool --gen-print-key.
- type: string
- hidden: true
- CephAdminKey:
- default: ''
- description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-key.
- type: string
- hidden: true
CinderEnableNfsBackend:
default: false
description: Whether to enable or not the NFS backend for Cinder
type: boolean
- CephClientKey:
- default: ''
- description: The Ceph client key. Can be created with ceph-authtool --gen-print-key. Currently only used for external Ceph deployments to create the openstack user keyring.
- type: string
- hidden: true
- CephExternalMonHost:
- default: ''
- type: string
- description: List of externally managed Ceph Mon Host IPs. Only used for external Ceph deployments.
- CinderEnableIscsiBackend:
- default: true
- description: Whether to enable or not the Iscsi backend for Cinder
- type: boolean
CinderEnableRbdBackend:
default: false
description: Whether to enable or not the Rbd backend for Cinder
@@ -221,10 +193,6 @@ parameters:
description: The password for the nova service account, used by nova-api.
type: string
hidden: true
- NtpServer:
- default: ''
- description: Comma-separated list of ntp servers
- type: comma_delimited_list
PublicVirtualFixedIPs:
default: []
description: >
@@ -257,14 +225,6 @@ parameters:
description: The password for Redis
type: string
hidden: true
- SnmpdReadonlyUserName:
- default: ro_snmp_user
- description: The user name for SNMPd with readonly rights running on all Overcloud nodes
- type: string
- SnmpdReadonlyUserPassword:
- description: The user password for SNMPd with readonly rights running on all Overcloud nodes
- type: string
- hidden: true
StorageVirtualFixedIPs:
default: []
description: >
@@ -277,10 +237,6 @@ parameters:
Control the IP allocation for the StorageMgmgVirtualInterface port. E.g.
[{'ip_address':'1.2.3.4'}]
type: json
- TimeZone:
- default: 'UTC'
- description: The timezone to be set on nodes.
- type: string
CloudDomain:
default: 'localdomain'
type: string
@@ -295,18 +251,6 @@ parameters:
type: json
# Controller-specific params
- CinderLVMLoopDeviceSize:
- default: 10280
- description: The size of the loopback file used by the cinder LVM driver.
- type: number
- CinderPassword:
- description: The password for the cinder service account, used by cinder-api.
- type: string
- hidden: true
- CinderISCSIHelper:
- default: lioadm
- description: The iSCSI helper to use with cinder.
- type: string
ControllerCount:
type: number
default: 1
@@ -340,14 +284,6 @@ parameters:
default: true
description: Whether to use Galera instead of regular MariaDB.
type: boolean
- ControllerEnableCephStorage:
- default: false
- description: Whether to deploy Ceph Storage (OSD) on the Controller
- type: boolean
- ControllerEnableSwiftStorage:
- default: true
- description: Whether to enable Swift Storage on the Controller
- type: boolean
ControllerSchedulerHints:
type: json
description: Optional scheduler hints to pass to nova
@@ -439,10 +375,6 @@ parameters:
description: A random string to be used as a salt when hashing to determine mappings in the ring.
type: string
hidden: true
- SwiftMountCheck:
- default: 'false'
- description: Value of mount_check in Swift account/container/object -server.conf
- type: boolean
SwiftMinPartHours:
type: number
default: 1
@@ -538,6 +470,7 @@ parameters:
CinderIscsiNetwork: storage
GlanceApiNetwork: storage
GlanceRegistryNetwork: internal_api
+ IronicApiNetwork: internal_api
KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
KeystonePublicApiNetwork: internal_api
NeutronApiNetwork: internal_api
@@ -566,9 +499,12 @@ parameters:
ControllerServices:
default:
+ - OS::TripleO::Services::CephMon
+ - OS::TripleO::Services::CephExternal
- OS::TripleO::Services::CinderApi
- OS::TripleO::Services::CinderScheduler
- OS::TripleO::Services::CinderVolume
+ - OS::TripleO::Services::Kernel
- OS::TripleO::Services::Keystone
- OS::TripleO::Services::GlanceApi
- OS::TripleO::Services::GlanceRegistry
@@ -586,7 +522,6 @@ parameters:
- OS::TripleO::Services::HAproxy
- OS::TripleO::Services::Keepalived
- OS::TripleO::Services::Memcached
- - OS::TripleO::Services::SwiftProxy
- OS::TripleO::Services::Redis
- OS::TripleO::Services::NovaConductor
- OS::TripleO::Services::MongoDb
@@ -594,6 +529,11 @@ parameters:
- OS::TripleO::Services::NovaScheduler
- OS::TripleO::Services::NovaConsoleauth
- OS::TripleO::Services::NovaVncproxy
+ - OS::TripleO::Services::Ntp
+ - OS::TripleO::Services::SwiftProxy
+ - OS::TripleO::Services::SwiftStorage
+ - OS::TripleO::Services::Snmp
+ - OS::TripleO::Services::Timezone
description: A list of service resources (configured in the Heat
resource_registry) which represent nested stacks
for each service that should get installed on the Controllers.
@@ -601,7 +541,14 @@ parameters:
ComputeServices:
default:
+ - OS::TripleO::Services::CephClient
+ - OS::TripleO::Services::CephExternal
+ - OS::TripleO::Services::Timezone
+ - OS::TripleO::Services::Ntp
+ - OS::TripleO::Services::Snmp
- OS::TripleO::Services::NovaCompute
+ - OS::TripleO::Services::NovaLibvirt
+ - OS::TripleO::Services::Kernel
description: A list of service resources (configured in the Heat
resource_registry) which represent nested stacks
for each service that should get installed on the Compute Nodes.
@@ -630,7 +577,17 @@ parameters:
type: json
description: Optional scheduler hints to pass to nova
default: {}
-
+ BlockStorageServices:
+ default:
+ - OS::TripleO::Services::CinderVolume
+ - OS::TripleO::Services::Kernel
+ - OS::TripleO::Services::Ntp
+ - OS::TripleO::Services::Timezone
+ - OS::TripleO::Services::Snmp
+ description: A list of service resources (configured in the Heat
+ resource_registry) which represent nested stacks
+ for each service that should get installed on the BlockStorage nodes.
+ type: comma_delimited_list
# Object storage specific parameters
ObjectStorageCount:
@@ -656,7 +613,12 @@ parameters:
description: Optional scheduler hints to pass to nova
default: {}
ObjectStorageServices:
- default: []
+ default:
+ - OS::TripleO::Services::Kernel
+ - OS::TripleO::Services::Ntp
+ - OS::TripleO::Services::SwiftStorage
+ - OS::TripleO::Services::Snmp
+ - OS::TripleO::Services::Timezone
description: A list of service resources (configured in the Heat
resource_registry) which represent nested stacks
for each service that should get installed on the ObjectStorage nodes.
@@ -688,7 +650,11 @@ parameters:
description: Optional scheduler hints to pass to nova
default: {}
CephStorageServices:
- default: []
+ default:
+ - OS::TripleO::Services::CephOSD
+ - OS::TripleO::Services::Kernel
+ - OS::TripleO::Services::Ntp
+ - OS::TripleO::Services::Timezone
description: A list of service resources (configured in the Heat
resource_registry) which represent nested stacks
for each service that should get installed on the CephStorage nodes.
@@ -800,6 +766,7 @@ resources:
GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
+ IronicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
@@ -811,7 +778,6 @@ resources:
ControllerServiceChain:
type: OS::TripleO::Services
- depends_on: Networks
properties:
Services: {get_param: ControllerServices}
EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
@@ -840,8 +806,6 @@ resources:
ManageFirewall: {get_param: ManageFirewall}
PurgeFirewallRules: {get_param: PurgeFirewallRules}
EnableGalera: {get_param: EnableGalera}
- EnableCephStorage: {get_param: ControllerEnableCephStorage}
- EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
ExtraConfig: {get_param: ExtraConfig}
FencingConfig: {get_param: FencingConfig}
Flavor: {get_param: OvercloudControlFlavor}
@@ -867,7 +831,6 @@ resources:
NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
NovaIPv6: {get_param: NovaIPv6}
NovaPassword: {get_param: NovaPassword}
- NtpServer: {get_param: NtpServer}
PcsdPassword: {get_resource: PcsdPassword}
PublicVirtualInterface: {get_param: PublicVirtualInterface}
RabbitPassword: {get_param: RabbitPassword}
@@ -876,32 +839,15 @@ resources:
RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
RabbitClientPort: {get_param: RabbitClientPort}
RedisPassword: {get_param: RedisPassword}
- SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
- SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
SwiftHashSuffix: {get_param: SwiftHashSuffix}
- SwiftMountCheck: {get_param: SwiftMountCheck}
SwiftMinPartHours: {get_param: SwiftMinPartHours}
SwiftPartPower: {get_param: SwiftPartPower}
SwiftReplicas: { get_param: SwiftReplicas}
- TimeZone: {get_param: TimeZone}
- VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
- PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
ServiceNetMap: {get_param: ServiceNetMap}
EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
- CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
- AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
- GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
- CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
- HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
- HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
- NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
- SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
- NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
- NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
- SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
UpdateIdentifier: {get_param: UpdateIdentifier}
Hostname:
str_replace:
@@ -911,9 +857,10 @@ resources:
NodeIndex: '%index%'
ServerMetadata: {get_param: ServerMetadata}
SchedulerHints: {get_param: ControllerSchedulerHints}
- ServiceConfigSettings: {get_attr: [ControllerServiceChain, config_settings]}
+ ServiceConfigSettings: {get_attr: [ControllerServiceChain, role_data, config_settings]}
ComputeServiceChain:
+
type: OS::TripleO::Services
properties:
Services: {get_param: ComputeServices}
@@ -975,16 +922,12 @@ resources:
NovaPassword: {get_param: NovaPassword}
NovaOVSBridge: {get_param: NovaOVSBridge}
NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
- NtpServer: {get_param: NtpServer}
RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
RabbitPassword: {get_param: RabbitPassword}
RabbitUserName: {get_param: RabbitUserName}
RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
RabbitClientPort: {get_param: RabbitClientPort}
- SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
- SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
ServiceNetMap: {get_param: ServiceNetMap}
- TimeZone: {get_param: TimeZone}
EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
UpdateIdentifier: {get_param: UpdateIdentifier}
Hostname:
@@ -996,8 +939,13 @@ resources:
ServerMetadata: {get_param: ServerMetadata}
SchedulerHints: {get_param: NovaComputeSchedulerHints}
NodeIndex: '%index%'
- ServiceConfigSettings: {get_attr: [ComputeServiceChain, config_settings]}
+ ServiceConfigSettings: {get_attr: [ComputeServiceChain, role_data, config_settings]}
+ BlockStorageServiceChain:
+ type: OS::TripleO::Services
+ properties:
+ Services: {get_param: BlockStorageServices}
+ EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
BlockStorage:
type: OS::Heat::ResourceGroup
@@ -1008,23 +956,9 @@ resources:
resource_def:
type: OS::TripleO::BlockStorage
properties:
- Debug: {get_param: Debug}
Image: {get_param: BlockStorageImage}
- CinderISCSIHelper: {get_param: CinderISCSIHelper}
- CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
- # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
- CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
- CinderPassword: {get_param: CinderPassword}
KeyName: {get_param: KeyName}
Flavor: {get_param: OvercloudBlockStorageFlavor}
- VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
- GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
- RabbitPassword: {get_param: RabbitPassword}
- RabbitUserName: {get_param: RabbitUserName}
- RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
- RabbitClientPort: {get_param: RabbitClientPort}
- TimeZone: {get_param: TimeZone}
- NtpServer: {get_param: NtpServer}
UpdateIdentifier: {get_param: UpdateIdentifier}
Hostname:
str_replace:
@@ -1032,13 +966,13 @@ resources:
params:
'%stackname%': {get_param: 'OS::stack_name'}
ServiceNetMap: {get_param: ServiceNetMap}
- EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
ExtraConfig: {get_param: ExtraConfig}
BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
CloudDomain: {get_param: CloudDomain}
ServerMetadata: {get_param: ServerMetadata}
SchedulerHints: {get_param: BlockStorageSchedulerHints}
NodeIndex: '%index%'
+ ServiceConfigSettings: {get_attr: [BlockStorageServiceChain, role_data, config_settings]}
ObjectStorageServiceChain:
type: OS::TripleO::Services
@@ -1058,13 +992,10 @@ resources:
KeyName: {get_param: KeyName}
Flavor: {get_param: OvercloudSwiftStorageFlavor}
HashSuffix: {get_param: SwiftHashSuffix}
- MountCheck: {get_param: SwiftMountCheck}
MinPartHours: {get_param: SwiftMinPartHours}
PartPower: {get_param: SwiftPartPower}
Image: {get_param: SwiftStorageImage}
Replicas: { get_param: SwiftReplicas}
- TimeZone: {get_param: TimeZone}
- NtpServer: {get_param: NtpServer}
UpdateIdentifier: {get_param: UpdateIdentifier}
ServiceNetMap: {get_param: ServiceNetMap}
Hostname:
@@ -1078,7 +1009,7 @@ resources:
ServerMetadata: {get_param: ServerMetadata}
SchedulerHints: {get_param: ObjectStorageSchedulerHints}
NodeIndex: '%index%'
- ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, config_settings]}
+ ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, role_data, config_settings]}
CephStorageServiceChain:
type: OS::TripleO::Services
@@ -1098,9 +1029,7 @@ resources:
Image: {get_param: CephStorageImage}
KeyName: {get_param: KeyName}
Flavor: {get_param: OvercloudCephStorageFlavor}
- NtpServer: {get_param: NtpServer}
ServiceNetMap: {get_param: ServiceNetMap}
- TimeZone: {get_param: TimeZone}
UpdateIdentifier: {get_param: UpdateIdentifier}
Hostname:
str_replace:
@@ -1113,7 +1042,7 @@ resources:
ServerMetadata: {get_param: ServerMetadata}
SchedulerHints: {get_param: CephStorageSchedulerHints}
NodeIndex: '%index%'
- ServiceConfigSettings: {get_attr: [CephStorageServiceChain, config_settings]}
+ ServiceConfigSettings: {get_attr: [CephStorageServiceChain, role_data, config_settings]}
ControllerIpListMap:
type: OS::TripleO::Network::Ports::NetIpListMap
@@ -1156,6 +1085,9 @@ resources:
keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
+ ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
+ ceph_mon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
+ ceph_mon_node_names: {get_attr: [Controller, hostname]}
DeployIdentifier: {get_param: DeployIdentifier}
UpdateIdentifier: {get_param: UpdateIdentifier}
@@ -1279,6 +1211,7 @@ resources:
public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
+ ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
@@ -1339,15 +1272,6 @@ resources:
CephClusterConfig:
type: OS::TripleO::CephClusterConfig::SoftwareConfig
- properties:
- ceph_storage_count: {get_param: CephStorageCount}
- ceph_fsid: {get_param: CephClusterFSID}
- ceph_mon_key: {get_param: CephMonKey}
- ceph_admin_key: {get_param: CephAdminKey}
- ceph_client_key: {get_param: CephClientKey}
- ceph_external_mon_ips: {get_param: CephExternalMonHost}
- ceph_mon_names: {get_attr: [Controller, hostname]}
- ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
ControllerAllNodesDeployment:
type: OS::Heat::StructuredDeployments
@@ -1473,54 +1397,35 @@ resources:
depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
properties:
servers: {get_attr: [Controller, attributes, nova_server_resource]}
- NodeConfigIdentifiers:
- allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
- controller_config: {get_attr: [Controller, attributes, config_identifier]}
- deployment_identifier: {get_param: DeployIdentifier}
- StepConfig: {get_attr: [ControllerServiceChain, step_config]}
+ RoleData: {get_attr: [ControllerServiceChain, role_data]}
ComputeNodesPostDeployment:
type: OS::TripleO::ComputePostDeployment
depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
properties:
servers: {get_attr: [Compute, attributes, nova_server_resource]}
- NodeConfigIdentifiers:
- allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
- compute_config: {get_attr: [Compute, attributes, config_identifier]}
- deployment_identifier: {get_param: DeployIdentifier}
- StepConfig: {get_attr: [ComputeServiceChain, step_config]}
+ RoleData: {get_attr: [ComputeServiceChain, role_data]}
ObjectStorageNodesPostDeployment:
type: OS::TripleO::ObjectStoragePostDeployment
depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
properties:
servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
- NodeConfigIdentifiers:
- allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
- objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
- deployment_identifier: {get_param: DeployIdentifier}
- StepConfig: {get_attr: [ObjectStorageServiceChain, step_config]}
+ RoleData: {get_attr: [ObjectStorageServiceChain, role_data]}
BlockStorageNodesPostDeployment:
type: OS::TripleO::BlockStoragePostDeployment
depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
properties:
servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
- NodeConfigIdentifiers:
- allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
- blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
- deployment_identifier: {get_param: DeployIdentifier}
+ RoleData: {get_attr: [BlockStorageServiceChain, role_data]}
CephStorageNodesPostDeployment:
type: OS::TripleO::CephStoragePostDeployment
depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
properties:
servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
- NodeConfigIdentifiers:
- allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
- cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
- deployment_identifier: {get_param: DeployIdentifier}
- StepConfig: {get_attr: [CephStorageServiceChain, step_config]}
+ RoleData: {get_attr: [CephStorageServiceChain, role_data]}
outputs:
KeystoneURL:
@@ -1550,6 +1455,9 @@ outputs:
HeatInternalVip:
description: VIP for Heat API internal endpoint
value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
+ IronicInternalVip:
+ description: VIP for Ironic API internal endpoint
+ value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
KeystoneInternalVip:
description: VIP for Keystone API internal endpoint
value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
diff --git a/puppet/all-nodes-config.yaml b/puppet/all-nodes-config.yaml
index b065ddd2..7602d8d0 100644
--- a/puppet/all-nodes-config.yaml
+++ b/puppet/all-nodes-config.yaml
@@ -56,7 +56,12 @@ parameters:
type: comma_delimited_list
sahara_api_node_ips:
type: comma_delimited_list
-
+ ironic_api_node_ips:
+ type: comma_delimited_list
+ ceph_mon_node_ips:
+ type: comma_delimited_list
+ ceph_mon_node_names:
+ type: comma_delimited_list
DeployIdentifier:
type: string
description: >
@@ -294,7 +299,31 @@ resources:
list_join:
- "','"
- {get_param: sahara_api_node_ips}
+ ironic_api_node_ips:
+ str_replace:
+ template: "['SERVERS_LIST']"
+ params:
+ SERVERS_LIST:
+ list_join:
+ - "','"
+ - {get_param: ironic_api_node_ips}
+ tripleo::profile::base::ceph::ceph_mon_initial_members:
+ list_join:
+ - ','
+ - {get_param: ceph_mon_node_names}
+ tripleo::profile::base::ceph::ceph_mon_host:
+ list_join:
+ - ','
+ - {get_param: ceph_mon_node_ips}
+ tripleo::profile::base::ceph::ceph_mon_host_v6:
+ str_replace:
+ template: "'[IPS_LIST]'"
+ params:
+ IPS_LIST:
+ list_join:
+ - '],['
+ - {get_param: ceph_mon_node_ips}
# NOTE(gfidente): interpolation with %{} in the
# hieradata file can't be used as it returns string
ceilometer::rabbit_hosts: *rabbit_nodes_array
@@ -306,6 +335,7 @@ resources:
nova::rabbit_hosts: *rabbit_nodes_array
keystone::rabbit_hosts: *rabbit_nodes_array
sahara::rabbit_hosts: *rabbit_nodes_array
+ ironic::rabbit_hosts: *rabbit_nodes_array
deploy_identifier: {get_param: DeployIdentifier}
update_identifier: {get_param: UpdateIdentifier}
diff --git a/puppet/ceph-cluster-config.yaml b/puppet/ceph-cluster-config.yaml
index 6beb751f..2e329989 100644
--- a/puppet/ceph-cluster-config.yaml
+++ b/puppet/ceph-cluster-config.yaml
@@ -2,52 +2,15 @@ heat_template_version: 2015-04-30
description: 'Ceph Cluster config data for Puppet'
parameters:
- ceph_storage_count:
- default: 0
- type: number
- description: Number of Ceph storage nodes. Used to enable/disable managed Ceph installation.
- ceph_external_mon_ips:
- default: ''
- type: string
- description: List of external Ceph Mon host IPs.
- ceph_client_key:
- default: ''
- type: string
- description: Ceph key used to create the client user keyring.
- ceph_fsid:
- default: ''
- type: string
- ceph_admin_key:
- default: ''
- type: string
- ceph_mon_key:
- default: ''
- type: string
- ceph_mon_names:
- type: comma_delimited_list
- ceph_mon_ips:
- type: comma_delimited_list
NovaRbdPoolName:
default: vms
type: string
- CinderRbdPoolName:
- default: volumes
- type: string
- CinderBackupRbdPoolName:
- default: backups
- type: string
- GlanceRbdPoolName:
- default: images
- type: string
GnocchiRbdPoolName:
default: metrics
type: string
CephClientUserName:
default: openstack
type: string
- CephIPv6:
- default: False
- type: boolean
resources:
CephClusterConfigImpl:
@@ -59,66 +22,10 @@ resources:
datafiles:
ceph_cluster:
mapped_data:
- ceph_ipv6: {get_param: CephIPv6}
- ceph_storage_count: {get_param: ceph_storage_count}
- ceph_mon_initial_members:
- list_join:
- - ','
- - {get_param: ceph_mon_names}
- ceph_mon_host:
- list_join:
- - ','
- - {get_param: ceph_mon_ips}
- ceph_mon_host_v6:
- str_replace:
- template: "'[IPS_LIST]'"
- params:
- IPS_LIST:
- list_join:
- - '],['
- - {get_param: ceph_mon_ips}
- ceph::profile::params::ms_bind_ipv6: {get_param: CephIPv6}
- ceph::profile::params::fsid: {get_param: ceph_fsid}
- ceph::profile::params::mon_key: {get_param: ceph_mon_key}
- # We should use a separated key for the non-admin clients
- ceph::profile::params::client_keys:
- str_replace:
- template: "{
- client.admin: {
- secret: 'ADMIN_KEY',
- mode: '0600',
- cap_mon: 'allow *',
- cap_osd: 'allow *',
- cap_mds: 'allow *'
- },
- client.bootstrap-osd: {
- secret: 'ADMIN_KEY',
- keyring_path: '/var/lib/ceph/bootstrap-osd/ceph.keyring',
- cap_mon: 'allow profile bootstrap-osd'
- },
- client.CLIENT_USER: {
- secret: 'CLIENT_KEY',
- mode: '0644',
- cap_mon: 'allow r',
- cap_osd: 'allow class-read object_prefix rbd_children, allow rwx pool=CINDER_POOL, allow rwx pool=CINDERBACKUP_POOL, allow rwx pool=NOVA_POOL, allow rwx pool=GLANCE_POOL, allow rwx pool=GNOCCHI_POOL'
- }
- }"
- params:
- CLIENT_USER: {get_param: CephClientUserName}
- CLIENT_KEY: {get_param: ceph_client_key}
- ADMIN_KEY: {get_param: ceph_admin_key}
- NOVA_POOL: {get_param: NovaRbdPoolName}
- CINDER_POOL: {get_param: CinderRbdPoolName}
- CINDERBACKUP_POOL: {get_param: CinderBackupRbdPoolName}
- GLANCE_POOL: {get_param: GlanceRbdPoolName}
- GNOCCHI_POOL: {get_param: GnocchiRbdPoolName}
nova::compute::rbd::libvirt_images_rbd_pool: {get_param: NovaRbdPoolName}
- tripleo::profile::base::cinder::volume::rbd::cinder_rbd_pool_name: {get_param: CinderRbdPoolName}
- glance::backend::rbd::rbd_store_pool: {get_param: GlanceRbdPoolName}
gnocchi::storage::ceph::ceph_pool: {get_param: GnocchiRbdPoolName}
gnocchi::storage::ceph::ceph_username: {get_param: CephClientUserName}
nova::compute::rbd::libvirt_rbd_user: {get_param: CephClientUserName}
- glance::backend::rbd::rbd_store_user: {get_param: CephClientUserName}
nova::compute::rbd::rbd_keyring:
list_join:
- '.'
@@ -131,13 +38,6 @@ resources:
- 'client'
- {get_param: CephClientUserName}
- 'keyring'
- tripleo::profile::base::cinder::volume::rbd::cinder_rbd_user_name: {get_param: CephClientUserName}
- ceph_pools:
- - {get_param: CinderRbdPoolName}
- - {get_param: CinderBackupRbdPoolName}
- - {get_param: NovaRbdPoolName}
- - {get_param: GlanceRbdPoolName}
- - {get_param: GnocchiRbdPoolName}
outputs:
config_id:
diff --git a/puppet/ceph-storage-post.yaml b/puppet/ceph-storage-post.yaml
index 2b9ae751..70baeb6e 100644
--- a/puppet/ceph-storage-post.yaml
+++ b/puppet/ceph-storage-post.yaml
@@ -10,13 +10,12 @@ parameters:
type: boolean
servers:
type: json
- NodeConfigIdentifiers:
- type: json
+ RoleData:
+ type: json
+ default: {}
+ DeployIdentifier:
+ type: string
description: Value which changes if the node configuration may need to be re-applied
- StepConfig:
- type: string
- description: Config manifests that will be used to step through the deployment.
- default: ''
resources:
@@ -29,7 +28,7 @@ resources:
servers: {get_param: servers}
config: {get_resource: CephStorageArtifactsConfig}
input_values:
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
CephStoragePuppetConfig:
type: OS::Heat::SoftwareConfig
@@ -47,7 +46,7 @@ resources:
list_join:
- ''
- - get_file: manifests/overcloud_cephstorage.pp
- - {get_param: StepConfig}
+ - {get_param: [RoleData, step_config]}
CephStorageDeployment_Step2:
type: OS::Heat::StructuredDeployments
@@ -58,7 +57,7 @@ resources:
config: {get_resource: CephStoragePuppetConfig}
input_values:
step: 2
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
CephStorageDeployment_Step3:
type: OS::Heat::StructuredDeployments
@@ -69,7 +68,7 @@ resources:
config: {get_resource: CephStoragePuppetConfig}
input_values:
step: 3
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
# Note, this should come last, so use depends_on to ensure
# this is created after any other resources.
diff --git a/puppet/ceph-storage.yaml b/puppet/ceph-storage.yaml
index eedb35e4..caceb0bc 100644
--- a/puppet/ceph-storage.yaml
+++ b/puppet/ceph-storage.yaml
@@ -21,10 +21,6 @@ parameters:
default: default
constraints:
- custom_constraint: nova.keypair
- NtpServer:
- default: ''
- description: Comma-separated list of ntp servers
- type: comma_delimited_list
EnablePackageInstall:
default: 'false'
description: Set to true to enable package installation via Puppet
@@ -34,10 +30,6 @@ parameters:
description: Mapping of service_name -> network name. Typically set
via parameter_defaults in the resource registry.
type: json
- TimeZone:
- default: 'UTC'
- description: The timezone to be set on Ceph nodes.
- type: string
UpdateIdentifier:
default: ''
type: string
@@ -232,8 +224,6 @@ resources:
config: {get_resource: CephStorageConfig}
server: {get_resource: CephStorage}
input_values:
- ntp_servers: {get_param: NtpServer}
- timezone: {get_param: TimeZone}
enable_package_install: {get_param: EnablePackageInstall}
enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
@@ -253,6 +243,7 @@ resources:
- service_configs
- ceph_cluster # provided by CephClusterConfig
- ceph
+ - all_nodes # provided by allNodesConfig
- '"%{::osfamily}"'
- common
- network
@@ -274,8 +265,6 @@ resources:
ceph:
raw_data: {get_file: hieradata/ceph.yaml}
mapped_data:
- ntp::servers: {get_input: ntp_servers}
- timezone::timezone: {get_input: timezone}
tripleo::packages::enable_install: {get_input: enable_package_install}
tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
@@ -389,12 +378,3 @@ outputs:
management_ip_address:
description: IP address of the server in the management network
value: {get_attr: [ManagementPort, ip_address]}
- config_identifier:
- description: identifier which changes if the node configuration may need re-applying
- value:
- list_join:
- - ','
- - - {get_attr: [CephStorageDeployment, deploy_stdout]}
- - {get_attr: [NodeTLSCAData, deploy_stdout]}
- - {get_attr: [CephStorageExtraConfigPre, deploy_stdout]}
- - {get_param: UpdateIdentifier}
diff --git a/puppet/cinder-storage-post.yaml b/puppet/cinder-storage-post.yaml
index f470203f..c3dd403e 100644
--- a/puppet/cinder-storage-post.yaml
+++ b/puppet/cinder-storage-post.yaml
@@ -8,9 +8,12 @@ parameters:
type: boolean
servers:
type: json
- NodeConfigIdentifiers:
- type: json
+ DeployIdentifier:
+ type: string
description: Value which changes if the node configuration may need to be re-applied
+ RoleData:
+ type: json
+ default: {}
resources:
@@ -23,7 +26,7 @@ resources:
servers: {get_param: servers}
config: {get_resource: VolumeArtifactsConfig}
input_values:
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
VolumePuppetConfig:
type: OS::Heat::SoftwareConfig
@@ -32,22 +35,55 @@ resources:
group: puppet
options:
enable_debug: {get_param: ConfigDebug}
+ enable_hiera: True
+ enable_facter: False
+ inputs:
+ - name: step
outputs:
- name: result
config:
- get_file: manifests/overcloud_volume.pp
+ list_join:
+ - ''
+ - - get_file: manifests/overcloud_volume.pp
+ - {get_param: [RoleData, step_config]}
+
+ VolumeDeployment_Step2:
+ type: OS::Heat::StructuredDeployments
+ depends_on: VolumeArtifactsDeploy
+ properties:
+ name: VolumeDeployment_Step2
+ servers: {get_param: servers}
+ config: {get_resource: VolumePuppetConfig}
+ input_values:
+ step: 2
+ update_identifier: {get_param: DeployIdentifier}
- VolumeDeployment_Step1:
+ VolumeDeployment_Step3:
type: OS::Heat::StructuredDeployments
+ depends_on: VolumeDeployment_Step2
properties:
- name: VolumeDeployment_Step1
+ name: VolumeDeployment_Step3
servers: {get_param: servers}
config: {get_resource: VolumePuppetConfig}
+ input_values:
+ step: 3
+ update_identifier: {get_param: DeployIdentifier}
+
+ VolumeDeployment_Step4:
+ type: OS::Heat::StructuredDeployments
+ depends_on: VolumeDeployment_Step3
+ properties:
+ name: VolumeDeployment_Step4
+ servers: {get_param: servers}
+ config: {get_resource: VolumePuppetConfig}
+ input_values:
+ step: 4
+ update_identifier: {get_param: DeployIdentifier}
# Note, this should come last, so use depends_on to ensure
# this is created after any other resources.
ExtraConfig:
- depends_on: VolumeDeployment_Step1
+ depends_on: VolumeDeployment_Step4
type: OS::TripleO::NodeExtraConfigPost
properties:
servers: {get_param: servers}
diff --git a/puppet/cinder-storage.yaml b/puppet/cinder-storage.yaml
index d760de5e..ed6afc53 100644
--- a/puppet/cinder-storage.yaml
+++ b/puppet/cinder-storage.yaml
@@ -4,29 +4,6 @@ parameters:
Image:
default: overcloud-cinder-volume
type: string
- CinderEnableIscsiBackend:
- default: true
- description: Whether to enable or not the Iscsi backend for Cinder
- type: boolean
- CinderISCSIHelper:
- default: lioadm
- description: The iSCSI helper to use with cinder.
- type: string
- CinderLVMLoopDeviceSize:
- default: 10280
- description: The size of the loopback file used by the cinder LVM driver.
- type: number
- CinderPassword:
- description: The password for the cinder service and db account, used by cinder-api.
- type: string
- hidden: true
- Debug:
- default: ''
- description: Set to True to enable debugging on all services.
- type: string
- VirtualIP: # deprecated. Use per service VIPs instead.
- default: ''
- type: string
ExtraConfig:
default: {}
description: |
@@ -50,22 +27,6 @@ parameters:
default: default
description: Name of an existing Nova key pair to enable SSH access to the instances
type: string
- RabbitPassword:
- type: string
- hidden: true
- RabbitUserName:
- default: 'guest'
- type: string
- RabbitClientUseSSL:
- default: false
- description: >
- Rabbit client subscriber parameter to specify
- an SSL connection to the RabbitMQ host.
- type: string
- RabbitClientPort:
- default: 5672
- description: Set rabbit subscriber port, change this if using SSL
- type: number
SnmpdReadonlyUserName:
default: ro_snmp_user
description: The user name for SNMPd with readonly rights running on all Overcloud nodes
@@ -74,10 +35,6 @@ parameters:
description: The user password for SNMPd with readonly rights running on all Overcloud nodes
type: string
hidden: true
- NtpServer:
- default: ''
- description: Comma-separated list of ntp servers
- type: comma_delimited_list
EnablePackageInstall:
default: 'false'
description: Set to true to enable package installation via Puppet
@@ -100,18 +57,6 @@ parameters:
description: Mapping of service_name -> network name. Typically set
via parameter_defaults in the resource registry.
type: json
- EndpointMap:
- default: {}
- description: Mapping of service endpoint -> protocol. Typically set
- via parameter_defaults in the resource registry.
- type: json
- TimeZone:
- default: 'UTC'
- description: The timezone to be set on Cinder nodes.
- type: string
- GlanceApiVirtualIP:
- type: string
- default: ''
NetworkDeploymentActions:
type: comma_delimited_list
description: >
@@ -143,7 +88,9 @@ parameters:
NodeIndex:
type: number
default: 0
-
+ ServiceConfigSettings:
+ type: json
+ default: {}
resources:
BlockStorage:
@@ -277,37 +224,13 @@ resources:
server: {get_resource: BlockStorage}
config: {get_resource: BlockStorageConfig}
input_values:
- debug: {get_param: Debug}
- cinder_dsn:
- list_join:
- - ''
- - - {get_param: [EndpointMap, MysqlInternal, protocol]}
- - '://cinder:'
- - {get_param: CinderPassword}
- - '@'
- - {get_param: [EndpointMap, MysqlInternal, host]}
- - '/cinder'
snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
- cinder_lvm_loop_device_size:
- str_replace:
- template: sizeM
- params:
- size: {get_param: CinderLVMLoopDeviceSize}
- cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
- cinder_iscsi_helper: {get_param: CinderISCSIHelper}
cinder_iscsi_ip_address:
str_replace:
template: "'IP'"
params:
IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
- glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
- rabbit_username: {get_param: RabbitUserName}
- rabbit_password: {get_param: RabbitPassword}
- rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
- rabbit_client_port: {get_param: RabbitClientPort}
- ntp_servers: {get_param: NtpServer}
- timezone: {get_param: TimeZone}
enable_package_install: {get_param: EnablePackageInstall}
enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
@@ -323,6 +246,7 @@ resources:
- heat_config_%{::deploy_config_name}
- volume_extraconfig
- extraconfig
+ - service_configs
- volume
- all_nodes # provided by allNodesConfig
- '"%{::osfamily}"'
@@ -330,6 +254,8 @@ resources:
- network
merge_behavior: deeper
datafiles:
+ service_configs:
+ mapped_data: {get_param: ServiceConfigSettings}
common:
raw_data: {get_file: hieradata/common.yaml}
network:
@@ -345,19 +271,7 @@ resources:
raw_data: {get_file: hieradata/volume.yaml}
mapped_data:
# Cinder
- cinder::debug: {get_input: debug}
- cinder::setup_test_volume::size: {get_input: cinder_lvm_loop_device_size}
- cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
- cinder::database_connection: {get_input: cinder_dsn}
- cinder::rabbit_userid: {get_input: rabbit_username}
- cinder::rabbit_password: {get_input: rabbit_password}
- cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
- cinder::rabbit_port: {get_input: rabbit_client_port}
- cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
- cinder_iscsi_ip_address: {get_input: cinder_iscsi_ip_address}
- cinder::glance::glance_api_servers: {get_input: glance_api_servers}
- ntp::servers: {get_input: ntp_servers}
- timezone::timezone: {get_input: timezone}
+ tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_ip_address: {get_input: cinder_iscsi_ip_address}
tripleo::packages::enable_install: {get_input: enable_package_install}
tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
@@ -465,11 +379,3 @@ outputs:
management_ip_address:
description: IP address of the server in the management network
value: {get_attr: [ManagementPort, ip_address]}
- config_identifier:
- description: identifier which changes if the node configuration may need re-applying
- value:
- list_join:
- - ''
- - - {get_attr: [BlockStorageDeployment, deploy_stdout]}
- - {get_attr: [NodeTLSCAData, deploy_stdout]}
- - {get_param: UpdateIdentifier}
diff --git a/puppet/compute-post.yaml b/puppet/compute-post.yaml
index 698cadba..c1b37772 100644
--- a/puppet/compute-post.yaml
+++ b/puppet/compute-post.yaml
@@ -10,13 +10,12 @@ parameters:
type: boolean
servers:
type: json
- NodeConfigIdentifiers:
- type: json
- description: Value which changes if the node configuration may need to be re-applied
- StepConfig:
+ RoleData:
+ type: json
+ default: {}
+ DeployIdentifier:
type: string
- description: Config manifests that will be used to step through the deployment.
- default: ''
+ description: Value which changes if the node configuration may need to be re-applied
resources:
@@ -29,7 +28,7 @@ resources:
servers: {get_param: servers}
config: {get_resource: ComputeArtifactsConfig}
input_values:
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
ComputePuppetConfig:
type: OS::Heat::SoftwareConfig
@@ -47,7 +46,7 @@ resources:
list_join:
- ''
- - get_file: manifests/overcloud_compute.pp
- - {get_param: StepConfig}
+ - {get_param: [RoleData, step_config]}
ComputeServicesBaseDeployment_Step2:
type: OS::Heat::StructuredDeployments
@@ -58,7 +57,7 @@ resources:
config: {get_resource: ComputePuppetConfig}
input_values:
step: 2
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
ComputeOvercloudServicesDeployment_Step3:
type: OS::Heat::StructuredDeployments
@@ -69,7 +68,7 @@ resources:
config: {get_resource: ComputePuppetConfig}
input_values:
step: 3
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
ComputeOvercloudServicesDeployment_Step4:
type: OS::Heat::StructuredDeployments
@@ -80,7 +79,7 @@ resources:
config: {get_resource: ComputePuppetConfig}
input_values:
step: 4
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
# Note, this should come last, so use depends_on to ensure
# this is created after any other resources.
diff --git a/puppet/compute.yaml b/puppet/compute.yaml
index d3b17784..db2d7465 100644
--- a/puppet/compute.yaml
+++ b/puppet/compute.yaml
@@ -233,10 +233,6 @@ parameters:
default: 'neutron'
description: The full class name of the security API class
type: string
- NtpServer:
- default: ''
- description: Comma-separated list of ntp servers
- type: comma_delimited_list
RabbitHost:
type: string
default: '' # Has to be here because of the ignored empty value bug
@@ -258,14 +254,6 @@ parameters:
default: 5672
description: Set rabbit subscriber port, change this if using SSL
type: number
- SnmpdReadonlyUserName:
- default: ro_snmp_user
- description: The user name for SNMPd with readonly rights running on all Overcloud nodes
- type: string
- SnmpdReadonlyUserPassword:
- description: The user password for SNMPd with readonly rights running on all Overcloud nodes
- type: string
- hidden: true
UpgradeLevelNovaCompute:
type: string
description: Nova Compute upgrade level
@@ -284,10 +272,6 @@ parameters:
description: Mapping of service endpoint -> protocol. Typically set
via parameter_defaults in the resource registry.
type: json
- TimeZone:
- default: 'UTC'
- description: The timezone to be set on compute nodes.
- type: string
UpdateIdentifier:
default: ''
type: string
@@ -516,6 +500,10 @@ resources:
nova::rabbit_port: {get_input: rabbit_client_port}
nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
nova_compute_driver: {get_input: nova_compute_driver}
+ # TODO(emilien): move libvirt & migration parameters in libvirt profile
+ # used to deploy libvirt/kvm dependencies:
+ nova::compute::libvirt::services::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
+ # used to configured nova.conf:
nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
nova::compute::neutron::libvirt_vif_driver: {get_input: nova_compute_libvirt_vif_driver}
nova_api_host: {get_input: nova_api_host}
@@ -545,8 +533,6 @@ resources:
ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
- snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
- snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
nova::glance_api_servers: {get_input: glance_api_servers}
neutron::debug: {get_input: debug}
neutron::rabbit_password: {get_input: rabbit_password}
@@ -579,8 +565,6 @@ resources:
neutron::plugins::ml2::mechanism_drivers: {get_input: neutron_mechanism_drivers}
keystone_public_api_virtual_ip: {get_input: keystone_vip}
admin_password: {get_input: admin_password}
- ntp::servers: {get_input: ntp_servers}
- timezone::timezone: {get_input: timezone}
tripleo::packages::enable_install: {get_input: enable_package_install}
tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
@@ -621,8 +605,6 @@ resources:
ceilometer_password: {get_param: CeilometerPassword}
ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri]}
- snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
- snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
neutron_flat_networks:
str_replace:
@@ -697,8 +679,6 @@ resources:
rabbit_password: {get_param: RabbitPassword}
rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
rabbit_client_port: {get_param: RabbitClientPort}
- ntp_servers: {get_param: NtpServer}
- timezone: {get_param: TimeZone}
enable_package_install: {get_param: EnablePackageInstall}
enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
@@ -819,12 +799,3 @@ outputs:
description: Heat resource handle for the Nova compute server
value:
{get_resource: NovaCompute}
- config_identifier:
- description: identifier which changes if the node configuration may need re-applying
- value:
- list_join:
- - ','
- - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
- - {get_attr: [NodeTLSCAData, deploy_stdout]}
- - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
- - {get_param: UpdateIdentifier}
diff --git a/puppet/controller-post.yaml b/puppet/controller-post.yaml
index 36f9b4f8..4af6cb46 100644
--- a/puppet/controller-post.yaml
+++ b/puppet/controller-post.yaml
@@ -10,13 +10,12 @@ parameters:
type: boolean
servers:
type: json
- NodeConfigIdentifiers:
- type: json
- description: Value which changes if the node configuration may need to be re-applied
- StepConfig:
+ RoleData:
+ type: json
+ default: {}
+ DeployIdentifier:
type: string
- description: Config manifests that will be used to step through the deployment.
- default: ''
+ description: Value which changes if the node configuration may need to be re-applied
resources:
@@ -34,12 +33,12 @@ resources:
properties:
servers: {get_param: servers}
input_values:
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
ControllerPuppetConfig:
type: OS::TripleO::ControllerConfig
properties:
- StepConfig: {get_param: StepConfig}
+ StepConfig: {get_param: [RoleData, step_config]}
# Step through a series of Puppet runs using the same manifest.
# NOTE: To enable stepping through the deployments via heat hooks,
@@ -54,7 +53,7 @@ resources:
config: {get_resource: ControllerPuppetConfig}
input_values:
step: 1
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
ControllerServicesBaseDeployment_Step2:
type: OS::Heat::StructuredDeployments
@@ -65,7 +64,7 @@ resources:
config: {get_resource: ControllerPuppetConfig}
input_values:
step: 2
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
ControllerOvercloudServicesDeployment_Step3:
type: OS::Heat::StructuredDeployments
@@ -76,7 +75,7 @@ resources:
config: {get_resource: ControllerPuppetConfig}
input_values:
step: 3
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
ControllerOvercloudServicesDeployment_Step4:
type: OS::Heat::StructuredDeployments
@@ -87,7 +86,7 @@ resources:
config: {get_resource: ControllerPuppetConfig}
input_values:
step: 4
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
ControllerOvercloudServicesDeployment_Step5:
type: OS::Heat::StructuredDeployments
@@ -98,7 +97,7 @@ resources:
config: {get_resource: ControllerPuppetConfig}
input_values:
step: 5
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
ControllerPostPuppet:
type: OS::TripleO::Tasks::ControllerPostPuppet
@@ -106,7 +105,7 @@ resources:
properties:
servers: {get_param: servers}
input_values:
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
# Note, this should come last, so use depends_on to ensure
# this is created after any other resources.
diff --git a/puppet/controller.yaml b/puppet/controller.yaml
index c445ec03..101d971e 100644
--- a/puppet/controller.yaml
+++ b/puppet/controller.yaml
@@ -8,18 +8,12 @@ parameters:
description: The password for the keystone admin account, used for monitoring, querying neutron etc.
type: string
hidden: true
- AodhApiVirtualIP:
- type: string
- default: ''
AodhPassword:
description: The password for the aodh services.
type: string
hidden: true
#TODO(composable Redis): Remove the Redis password param
#As is used by ceilometer
- CeilometerApiVirtualIP:
- type: string
- default: ''
CeilometerBackend:
default: 'mongodb'
description: The ceilometer backend type.
@@ -42,9 +36,6 @@ parameters:
type: string
constraints:
- allowed_values: ['gnocchi', 'database']
- CinderApiVirtualIP:
- type: string
- default: ''
CeilometerWorkers:
default: 0
description: Number of workers for Ceilometer service.
@@ -92,14 +83,6 @@ parameters:
default: true
description: Whether to deploy a LoadBalancer on the Controller
type: boolean
- EnableCephStorage:
- default: false
- description: Whether to deploy Ceph Storage (OSD) on the Controller
- type: boolean
- EnableSwiftStorage:
- default: true
- description: Whether to enable Swift Storage on the Controller
- type: boolean
ExtraConfig:
default: {}
description: |
@@ -154,9 +137,6 @@ parameters:
default: 'mysql'
description: The short name of the Gnocchi indexer backend to use.
type: string
- GnocchiApiVirtualIP:
- type: string
- default: ''
GnocchiPassword:
description: The password for the gnocchi service and db account.
type: string
@@ -219,9 +199,6 @@ parameters:
default: false
description: Whether IPtables rules should be purged before setting up the new ones.
type: boolean
- SaharaApiVirtualIP:
- type: string
- default: ''
MysqlClusterUniquePart:
description: A unique identifier of the MySQL cluster the controller is in.
type: string
@@ -268,9 +245,6 @@ parameters:
will determine the MTU that is assigned to the VM host through DHCP.
default: 1400
type: number
- NovaApiVirtualIP:
- type: string
- default: ''
NovaEnableDBPurge:
default: true
description: |
@@ -284,10 +258,6 @@ parameters:
description: The password for the nova service and db account, used by nova-api.
type: string
hidden: true
- NtpServer:
- default: ''
- description: Comma-separated list of ntp servers
- type: comma_delimited_list
PcsdPassword:
type: string
description: The password for the 'pcsd' user.
@@ -298,9 +268,6 @@ parameters:
Specifies the interface where the public-facing virtual ip will be assigned.
This should be int_public when a VLAN is being used.
type: string
- PublicVirtualIP:
- type: string
- default: '' # Has to be here because of the ignored empty value bug
RabbitCookie:
type: string
default: '' # Has to be here because of the ignored empty value bug
@@ -334,23 +301,11 @@ parameters:
type: string
default: '' # Has to be here because of the ignored empty value bug
description: An IP address which is wrapped in brackets in case of IPv6
- SnmpdReadonlyUserName:
- default: ro_snmp_user
- description: The user name for SNMPd with readonly rights running on all Overcloud nodes
- type: string
- SnmpdReadonlyUserPassword:
- description: The user password for SNMPd with readonly rights running on all Overcloud nodes
- type: string
- hidden: true
SwiftHashSuffix:
description: A random string to be used as a salt when hashing to determine mappings
in the ring.
hidden: true
type: string
- SwiftMountCheck:
- default: 'false'
- description: Value of mount_check in Swift account/container/object -server.conf
- type: boolean
SwiftMinPartHours:
type: number
default: 1
@@ -363,36 +318,17 @@ parameters:
default: true
description: Whether to manage Swift rings or not
type: boolean
- SwiftProxyVirtualIP:
- type: string
- default: ''
SwiftReplicas:
type: number
default: 3
description: How many replicas to use in the swift rings.
- TimeZone:
- default: 'UTC'
- description: The timezone to be set on controller nodes.
- type: string
UpgradeLevelNovaCompute:
type: string
description: Nova Compute upgrade level
default: ''
- VirtualIP: # DEPRECATED: use per service settings instead
- type: string
- default: '' # Has to be here because of the ignored empty value bug
- HeatApiVirtualIP:
- type: string
- default: ''
- HeatApiVirtualIPUri:
- type: string
- default: ''
MysqlVirtualIP:
type: string
default: ''
- NeutronApiVirtualIP:
- type: string
- default: ''
EnablePackageInstall:
default: 'false'
description: Set to true to enable package installation via Puppet
@@ -635,8 +571,6 @@ resources:
enable_fencing: {get_param: EnableFencing}
enable_galera: {get_param: EnableGalera}
enable_load_balancer: {get_param: EnableLoadBalancer}
- enable_ceph_storage: {get_param: EnableCephStorage}
- enable_swift_storage: {get_param: EnableSwiftStorage}
manage_firewall: {get_param: ManageFirewall}
purge_firewall_rules: {get_param: PurgeFirewallRules}
mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
@@ -694,14 +628,22 @@ resources:
- '@'
- {get_param: [EndpointMap, MysqlInternal, host]}
- '/gnocchi'
+ aodh_dsn:
+ list_join:
+ - ''
+ - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+ - '://aodh:'
+ - {get_param: AodhPassword}
+ - '@'
+ - {get_param: [EndpointMap, MysqlInternal, host]}
+ - '/aodh'
gnocchi_internal_url: {get_param: [EndpointMap, GnocchiInternal, uri]}
gnocchi_public_url: { get_param: [ EndpointMap, GnocchiPublic, uri ] }
gnocchi_admin_url: { get_param: [ EndpointMap, GnocchiAdmin, uri ] }
ceilometer_public_url: {get_param: [EndpointMap, CeilometerPublic, uri]}
ceilometer_internal_url: {get_param: [EndpointMap, CeilometerInternal, uri]}
ceilometer_admin_url: {get_param: [EndpointMap, CeilometerAdmin, uri]}
- snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
- snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
+ ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix]}
nova_enable_db_purge: {get_param: NovaEnableDBPurge}
nova_ipv6: {get_param: NovaIPv6}
corosync_ipv6: {get_param: CorosyncIPv6}
@@ -737,8 +679,6 @@ resources:
rabbit_cookie: {get_param: RabbitCookie}
rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
rabbit_client_port: {get_param: RabbitClientPort}
- ntp_servers: {get_param: NtpServer}
- timezone: {get_param: TimeZone}
control_virtual_interface: {get_param: ControlVirtualInterface}
public_virtual_interface: {get_param: PublicVirtualInterface}
swift_hash_suffix: {get_param: SwiftHashSuffix}
@@ -746,7 +686,6 @@ resources:
swift_ring_build: {get_param: SwiftRingBuild}
swift_replicas: {get_param: SwiftReplicas}
swift_min_part_hours: {get_param: SwiftMinPartHours}
- swift_mount_check: {get_param: SwiftMountCheck}
enable_package_install: {get_param: EnablePackageInstall}
enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
@@ -788,6 +727,7 @@ resources:
ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
ceph_public_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
+ ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
# Map heat metadata into hiera datafiles
ControllerConfig:
@@ -820,9 +760,7 @@ resources:
- neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
- neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
- cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
- - neutron_nuage_data # Optionally provided by ControllerExtraConfigPre
- midonet_data #Optionally provided by AllNodesExtraConfig
- - neutron_opencontrail_data # Optionally provided by ControllerExtraConfigPre
merge_behavior: deeper
datafiles:
service_configs:
@@ -872,7 +810,6 @@ resources:
tripleo::ringbuilder::part_power: {get_input: swift_part_power}
tripleo::ringbuilder::replicas: {get_input: swift_replicas}
tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
- swift_mount_check: {get_input: swift_mount_check}
# Cinder
tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_input: cinder_iscsi_network}
@@ -909,8 +846,6 @@ resources:
# MySQL
admin_password: {get_input: admin_password}
enable_galera: {get_input: enable_galera}
- enable_ceph_storage: {get_input: enable_ceph_storage}
- enable_swift_storage: {get_input: enable_swift_storage}
mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
mysql_max_connections: {get_input: mysql_max_connections}
mysql::server::root_password: {get_input: mysql_root_password}
@@ -944,7 +879,7 @@ resources:
ceilometer::api::auth_uri: {get_input: keystone_auth_uri}
ceilometer::api::identity_uri: {get_input: keystone_identity_uri}
ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
- ceilometer::agent::auth::auth_url: {get_input: keystone_auth_uri}
+ ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
ceilometer::agent::notification::store_events: {get_input: ceilometer_store_events}
ceilometer::db::mysql::password: {get_input: ceilometer_password}
@@ -962,6 +897,7 @@ resources:
snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
# Aodh
+ aodh_mysql_conn_string: {get_input: aodh_dsn}
aodh::rabbit_userid: {get_input: rabbit_username}
aodh::rabbit_password: {get_input: rabbit_password}
aodh::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
@@ -1054,8 +990,6 @@ resources:
# Misc
memcached_ipv6: {get_input: memcached_ipv6}
memcached::listen_ip: {get_input: memcached_network}
- ntp::servers: {get_input: ntp_servers}
- timezone::timezone: {get_input: timezone}
control_virtual_interface: {get_input: control_virtual_interface}
public_virtual_interface: {get_input: public_virtual_interface}
tripleo::keepalived::control_virtual_interface: {get_input: control_virtual_interface}
@@ -1194,16 +1128,6 @@ outputs:
template: "IP:11211"
params:
IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
- config_identifier:
- description: identifier which changes if the controller configuration may need re-applying
- value:
- list_join:
- - ','
- - - {get_attr: [ControllerDeployment, deploy_stdout]}
- - {get_attr: [NodeTLSCAData, deploy_stdout]}
- - {get_attr: [NodeTLSData, deploy_stdout]}
- - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
- - {get_param: UpdateIdentifier}
tls_key_modulus_md5:
description: MD5 checksum of the TLS Key Modulus
value: {get_attr: [NodeTLSData, key_modulus_md5]}
diff --git a/puppet/extraconfig/all_nodes/neutron-midonet-all-nodes.yaml b/puppet/extraconfig/all_nodes/neutron-midonet-all-nodes.yaml
index 3e455347..aa5c3c43 100644
--- a/puppet/extraconfig/all_nodes/neutron-midonet-all-nodes.yaml
+++ b/puppet/extraconfig/all_nodes/neutron-midonet-all-nodes.yaml
@@ -109,11 +109,3 @@ resources:
properties:
config: {get_resource: NetworkMidoNetConfig}
servers: {get_param: compute_servers}
-
-outputs:
- config_identifier:
- value:
- list_join:
- - ' '
- - - {get_attr: [NetworkMidonetDeploymentControllers, deploy_stdouts]}
- - {get_attr: [NetworkMidonetDeploymentComputes, deploy_stdouts]}
diff --git a/puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml b/puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml
index 71445800..e924fc87 100644
--- a/puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml
+++ b/puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml
@@ -343,11 +343,3 @@ resources:
input_values:
ucsm_config: {get_param: NetworkUCSMHostList}
actions: ['CREATE'] # Only do this on CREATE
-
-outputs:
- # The Deployment applying the hieradata outputs the derived config-id, which
- # changes if the input_values change, so if the stdouts from
- # NetworkCiscoDeployment change, we need to reapply puppet (which will
- # happen if we return a different config_identifier)
- config_identifier:
- value: {get_attr: [NetworkCiscoDeployment, deploy_stdouts]}
diff --git a/puppet/extraconfig/ceph/ceph-external-config.yaml b/puppet/extraconfig/ceph/ceph-external-config.yaml
deleted file mode 100644
index 7c05a5b9..00000000
--- a/puppet/extraconfig/ceph/ceph-external-config.yaml
+++ /dev/null
@@ -1,120 +0,0 @@
-heat_template_version: 2015-04-30
-description: 'Configure parameters for an external Ceph cluster via Puppet.'
-
-parameters:
- ceph_storage_count:
- default: 0
- type: number
- description: Number of Ceph storage nodes. Used to enable/disable managed Ceph installation.
- ceph_external_mon_ips:
- default: ''
- type: string
- description: List of external Ceph Mon host IPs.
- ceph_client_key:
- default: ''
- type: string
- description: Ceph key used to create the 'openstack' user keyring.
- ceph_fsid:
- default: ''
- type: string
- # The following parameters are unused for external Ceph clusters and
- # are here and exist for compatibility
- ceph_admin_key:
- default: ''
- type: string
- ceph_mon_key:
- default: ''
- type: string
- ceph_mon_names:
- type: comma_delimited_list
- ceph_mon_ips:
- type: comma_delimited_list
- NovaRbdPoolName:
- default: vms
- type: string
- CinderRbdPoolName:
- default: volumes
- type: string
- CinderBackupRbdPoolName:
- default: backups
- type: string
- GlanceRbdPoolName:
- default: images
- type: string
- GnocchiRbdPoolName:
- default: metrics
- type: string
- CephClientUserName:
- default: openstack
- type: string
- CephIPv6:
- default: False
- type: boolean
-
-resources:
- CephClusterConfigImpl:
- type: OS::Heat::StructuredConfig
- properties:
- group: os-apply-config
- config:
- hiera:
- datafiles:
- ceph_cluster:
- mapped_data:
- ceph_storage_count: {get_param: ceph_storage_count}
- enable_external_ceph: true
- ceph_ipv6: {get_param: CephIPv6}
- ceph_mon_host: {get_param: ceph_external_mon_ips}
- ceph_mon_host_v6: {get_param: ceph_external_mon_ips}
- ceph::profile::params::fsid: {get_param: ceph_fsid}
- ceph::profile::params::client_keys:
- str_replace:
- template: "{
- client.CLIENT_USER: {
- secret: 'CLIENT_KEY',
- mode: '0644',
- cap_mon: 'allow r',
- cap_osd: 'allow class-read object_prefix rbd_children, allow rwx pool=CINDER_POOL, allow rwx pool=CINDERBACKUP_POOL, allow rwx pool=NOVA_POOL, allow rwx pool=GLANCE_POOL, allow rwx pool=GNOCCHI_POOL'
- }
- }"
- params:
- CLIENT_USER: {get_param: CephClientUserName}
- CLIENT_KEY: {get_param: ceph_client_key}
- NOVA_POOL: {get_param: NovaRbdPoolName}
- CINDER_POOL: {get_param: CinderRbdPoolName}
- CINDERBACKUP_POOL: {get_param: CinderBackupRbdPoolName}
- GLANCE_POOL: {get_param: GlanceRbdPoolName}
- GNOCCHI_POOL: {get_param: GnocchiRbdPoolName}
- ceph::profile::params::ms_bind_ipv6: {get_param: CephIPv6}
- nova::compute::rbd::libvirt_images_rbd_pool: {get_param: NovaRbdPoolName}
- tripleo::profile::base::cinder::volume::rbd::cinder_rbd_pool_name: {get_param: CinderRbdPoolName}
- glance::backend::rbd::rbd_store_pool: {get_param: GlanceRbdPoolName}
- gnocchi::storage::ceph::ceph_pool: {get_param: GnocchiRbdPoolName}
- gnocchi::storage::ceph::ceph_username: {get_param: CephClientUserName}
- nova::compute::rbd::libvirt_rbd_user: {get_param: CephClientUserName}
- glance::backend::rbd::rbd_store_user: {get_param: CephClientUserName}
- nova::compute::rbd::rbd_keyring:
- list_join:
- - '.'
- - - 'client'
- - {get_param: CephClientUserName}
- gnocchi::storage::ceph::ceph_keyring:
- list_join:
- - '.'
- - - '/etc/ceph/ceph'
- - 'client'
- - {get_param: CephClientUserName}
- - 'keyring'
- tripleo::profile::base::cinder::volume::rbd::cinder_rbd_user_name: {get_param: CephClientUserName}
- ceph_pools:
- - {get_param: CinderRbdPoolName}
- - {get_param: CinderBackupRbdPoolName}
- - {get_param: NovaRbdPoolName}
- - {get_param: GlanceRbdPoolName}
- - {get_param: GnocchiRbdPoolName}
-
-outputs:
- config_id:
- description: The ID of the CephClusterConfigImpl resource.
- value:
- {get_resource: CephClusterConfigImpl}
diff --git a/puppet/extraconfig/pre_deploy/controller/neutron-nuage.yaml b/puppet/extraconfig/pre_deploy/controller/neutron-nuage.yaml
deleted file mode 100644
index a4cfea07..00000000
--- a/puppet/extraconfig/pre_deploy/controller/neutron-nuage.yaml
+++ /dev/null
@@ -1,91 +0,0 @@
-heat_template_version: 2015-04-30
-
-description: Configure hieradata for Nuage configuration on the Controller
-
-parameters:
- server:
- description: ID of the controller node to apply this config to
- type: string
-
- # Config specific parameters, to be provided via parameter_defaults
- NeutronNuageOSControllerIp:
- description: IP address of the OpenStack Controller
- type: string
-
- NeutronNuageNetPartitionName:
- description: Specifies the title that you will see on the VSD
- type: string
- default: 'default_name'
-
- NeutronNuageVSDIp:
- description: IP address and port of the Virtual Services Directory
- type: string
-
- NeutronNuageVSDUsername:
- description: Username to be used to log into VSD
- type: string
-
- NeutronNuageVSDPassword:
- description: Password to be used to log into VSD
- type: string
-
- NeutronNuageVSDOrganization:
- description: Organization parameter required to log into VSD
- type: string
- default: 'organization'
-
- NeutronNuageBaseURIVersion:
- description: URI version to be used based on the VSD release
- type: string
- default: 'default_uri_version'
-
- NeutronNuageCMSId:
- description: Cloud Management System ID (CMS ID) to distinguish between OS instances on the same VSD
- type: string
-
- UseForwardedFor:
- description: Treat X-Forwarded-For as the canonical remote address. Only enable this if you have a sanitizing proxy.
- type: boolean
- default: false
-
-resources:
- NeutronNuageConfig:
- type: OS::Heat::StructuredConfig
- properties:
- group: os-apply-config
- config:
- hiera:
- datafiles:
- neutron_nuage_data:
- mapped_data:
- neutron::plugins::nuage::nuage_oscontroller_ip: {get_input: NuageOSControllerIp}
- neutron::plugins::nuage::nuage_net_partition_name: {get_input: NuageNetPartitionName}
- neutron::plugins::nuage::nuage_vsd_ip: {get_input: NuageVSDIp}
- neutron::plugins::nuage::nuage_vsd_username: {get_input: NuageVSDUsername}
- neutron::plugins::nuage::nuage_vsd_password: {get_input: NuageVSDPassword}
- neutron::plugins::nuage::nuage_vsd_organization: {get_input: NuageVSDOrganization}
- neutron::plugins::nuage::nuage_base_uri_version: {get_input: NuageBaseURIVersion}
- neutron::plugins::nuage::nuage_cms_id: {get_input: NuageCMSId}
- nova::api::use_forwarded_for: {get_input: NovaUseForwardedFor}
-
- NeutronNuageDeployment:
- type: OS::Heat::StructuredDeployment
- properties:
- name: NeutronNuageDeployment
- config: {get_resource: NeutronNuageConfig}
- server: {get_param: server}
- input_values:
- NuageOSControllerIp: {get_param: NeutronNuageOSControllerIp}
- NuageNetPartitionName: {get_param: NeutronNuageNetPartitionName}
- NuageVSDIp: {get_param: NeutronNuageVSDIp}
- NuageVSDUsername: {get_param: NeutronNuageVSDUsername}
- NuageVSDPassword: {get_param: NeutronNuageVSDPassword}
- NuageVSDOrganization: {get_param: NeutronNuageVSDOrganization}
- NuageBaseURIVersion: {get_param: NeutronNuageBaseURIVersion}
- NuageCMSId: {get_param: NeutronNuageCMSId}
- NovaUseForwardedFor: {get_param: UseForwardedFor}
-
-outputs:
- deploy_stdout:
- description: Deployment reference, used to trigger puppet apply on changes
- value: {get_attr: [NeutronNuageDeployment, deploy_stdout]}
diff --git a/puppet/extraconfig/pre_deploy/controller/neutron-opencontrail.yaml b/puppet/extraconfig/pre_deploy/controller/neutron-opencontrail.yaml
deleted file mode 100644
index 5c686fe7..00000000
--- a/puppet/extraconfig/pre_deploy/controller/neutron-opencontrail.yaml
+++ /dev/null
@@ -1,62 +0,0 @@
-heat_template_version: 2015-04-30
-
-description: Controller hieradata for Neutron OpenContrail configuration
-
-parameters:
- server:
- description: ID of the controller node to apply this config to
- type: string
- ContrailApiServerIp:
- description: IP address of the OpenContrail API server
- type: string
- ContrailApiServerPort:
- description: Port of the OpenContrail API
- type: string
- default: 8082
- ContrailMultiTenancy:
- description: Whether to enable multi tenancy
- type: boolean
- default: false
- ContrailExtensions:
- description: List of OpenContrail extensions to be enabled
- type: comma_delimited_list
- default: ''
-
-resources:
- ControllerContrailConfig:
- type: OS::Heat::StructuredConfig
- properties:
- group: os-apply-config
- config:
- hiera:
- datafiles:
- neutron_opencontrail_data:
- mapped_data:
- neutron::api_extensions_path: /usr/lib/python2.7/site-packages/neutron_plugin_contrail/extensions
-
- neutron::plugins::opencontrail::api_server_ip: {get_input: contrail_api_server_ip}
- neutron::plugins::opencontrail::api_server_port: {get_input: contrail_api_server_port}
- neutron::plugins::opencontrail::multi_tenancy: {get_input: contrail_multi_tenancy}
- neutron::plugins::opencontrail::contrail_extensions: {get_input: contrail_extensions}
- neutron::plugins::opencontrail::keystone_auth_url: '"%{hiera(''keystone_auth_uri'')}"'
- neutron::plugins::opencontrail::keystone_admin_user: admin
- neutron::plugins::opencontrail::keystone_admin_tenant_name: admin
- neutron::plugins::opencontrail::keystone_admin_password: '"%{hiera(''admin_password'')}"'
- neutron::plugins::opencontrail::keystone_admin_token: '"%{hiera(''keystone::admin_token'')}"'
-
- ControllerContrailDeployment:
- type: OS::Heat::StructuredDeployment
- properties:
- config: {get_resource: ControllerContrailConfig}
- server: {get_param: server}
- input_values:
- contrail_api_server_ip: {get_param: ContrailApiServerIp}
- contrail_api_server_port: {get_param: ContrailApiServerPort}
- contrail_multi_tenancy: {get_param: ContrailMultiTenancy}
- contrail_extensions: {get_param: ContrailExtensions}
-
-
-outputs:
- deploy_stdout:
- description: Output of the extra hiera data deployment
- value: {get_attr: [ControllerContrailDeployment, deploy_stdout]}
diff --git a/puppet/hieradata/ceph.yaml b/puppet/hieradata/ceph.yaml
index b29b91cf..ccb41cc4 100644
--- a/puppet/hieradata/ceph.yaml
+++ b/puppet/hieradata/ceph.yaml
@@ -7,5 +7,3 @@ ceph::profile::params::manage_repo: false
ceph::profile::params::authentication_type: cephx
ceph_classes: []
-
-ceph_osd_selinux_permissive: true
diff --git a/puppet/hieradata/compute.yaml b/puppet/hieradata/compute.yaml
index 2d928cbf..62728332 100644
--- a/puppet/hieradata/compute.yaml
+++ b/puppet/hieradata/compute.yaml
@@ -6,8 +6,6 @@ nova::notification_driver: messagingv2
nova::compute::instance_usage_audit: true
nova::compute::instance_usage_audit_period: 'hour'
-nova::compute::libvirt::migration_support: true
-
nova::compute::rbd::libvirt_rbd_secret_uuid: "%{hiera('ceph::profile::params::fsid')}"
nova::network::neutron::neutron_auth_type: 'v3password'
diff --git a/puppet/hieradata/controller.yaml b/puppet/hieradata/controller.yaml
index 7db2b5de..bc5a4098 100644
--- a/puppet/hieradata/controller.yaml
+++ b/puppet/hieradata/controller.yaml
@@ -4,7 +4,7 @@ nova::api::enabled: true
nova::vncproxy::enabled: true
# gnocchi
-gnocchi::db::sync::extra_opts: '--skip-storage'
+gnocchi::db::sync::extra_opts: '--skip-storage --create-legacy-resource-types'
gnocchi::storage::swift::swift_user: 'service:gnocchi'
gnocchi::storage::swift::swift_auth_version: 2
gnocchi::statsd::resource_id: '0a8b55df-f90f-491c-8cb9-7cdecec6fc26'
@@ -212,6 +212,7 @@ tripleo::firewall::firewall_rules:
- 26379
'109 rabbitmq':
dport:
+ - 4369
- 5672
- 35672
'110 ceph':
diff --git a/puppet/hieradata/database.yaml b/puppet/hieradata/database.yaml
index 4eb199c8..9cbff586 100644
--- a/puppet/hieradata/database.yaml
+++ b/puppet/hieradata/database.yaml
@@ -53,6 +53,14 @@ heat::db::mysql::allowed_hosts:
- '%'
- "%{hiera('mysql_bind_host')}"
+# Ironic
+ironic::db::mysql::user: ironic
+ironic::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+ironic::db::mysql::dbname: ironic
+ironic::db::mysql::allowed_hosts:
+ - '%'
+ - "%{hiera('mysql_bind_host')}"
+
# Ceilometer
ceilometer::db::mysql::user: ceilometer
ceilometer::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
@@ -69,6 +77,15 @@ gnocchi::db::mysql::allowed_hosts:
- '%'
- "%{hiera('mysql_bind_host')}"
+# Aodh
+aodh::db::mysql::user: aodh
+aodh::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+aodh::db::mysql::dbname: aodh
+aodh::db::mysql::allowed_hosts:
+ - '%'
+ - "%{hiera('mysql_bind_host')}"
+
+
sahara::db::mysql::user: sahara
sahara::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
sahara::db::mysql::dbname: sahara
diff --git a/puppet/manifests/overcloud_cephstorage.pp b/puppet/manifests/overcloud_cephstorage.pp
index 4add2f02..152694d9 100644
--- a/puppet/manifests/overcloud_cephstorage.pp
+++ b/puppet/manifests/overcloud_cephstorage.pp
@@ -16,46 +16,9 @@
include ::tripleo::packages
include ::tripleo::firewall
-if hiera('step') >= 1 {
-
- create_resources(kmod::load, hiera('kernel_modules'), {})
- create_resources(sysctl::value, hiera('sysctl_settings'), {})
- Exec <| tag == 'kmod::load' |> -> Sysctl <| |>
-
- include ::timezone
-
- if count(hiera('ntp::servers')) > 0 {
- include ::ntp
- }
-}
-
-if hiera('step') >= 3 {
- if str2bool(hiera('ceph_osd_selinux_permissive', true)) {
- exec { 'set selinux to permissive on boot':
- command => "sed -ie 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config",
- onlyif => "test -f /etc/selinux/config && ! grep '^SELINUX=permissive' /etc/selinux/config",
- path => ['/usr/bin', '/usr/sbin'],
- }
-
- exec { 'set selinux to permissive':
- command => 'setenforce 0',
- onlyif => "which setenforce && getenforce | grep -i 'enforcing'",
- path => ['/usr/bin', '/usr/sbin'],
- } -> Class['ceph::profile::osd']
- }
-
- if str2bool(hiera('ceph_ipv6', false)) {
- $mon_host = hiera('ceph_mon_host_v6')
- } else {
- $mon_host = hiera('ceph_mon_host')
- }
- class { '::ceph::profile::params':
- mon_host => $mon_host,
- }
- include ::ceph::conf
- include ::ceph::profile::client
- include ::ceph::profile::osd
-
+if hiera('step') >= 4 {
hiera_include('ceph_classes')
- package_manifest{'/var/lib/tripleo/installed-packages/overcloud_ceph': ensure => present}
}
+
+$package_manifest_name = join(['/var/lib/tripleo/installed-packages/overcloud_ceph', hiera('step')])
+package_manifest{$package_manifest_name: ensure => present}
diff --git a/puppet/manifests/overcloud_compute.pp b/puppet/manifests/overcloud_compute.pp
index 30672f20..b25d62f8 100644
--- a/puppet/manifests/overcloud_compute.pp
+++ b/puppet/manifests/overcloud_compute.pp
@@ -16,31 +16,8 @@
include ::tripleo::packages
include ::tripleo::firewall
-create_resources(kmod::load, hiera('kernel_modules'), { })
-create_resources(sysctl::value, hiera('sysctl_settings'), { })
-Exec <| tag == 'kmod::load' |> -> Sysctl <| |>
-
-if count(hiera('ntp::servers')) > 0 {
- include ::ntp
-}
-
-include ::timezone
-
if hiera('step') >= 4 {
- file { ['/etc/libvirt/qemu/networks/autostart/default.xml',
- '/etc/libvirt/qemu/networks/default.xml']:
- ensure => absent,
- before => Service['libvirt'],
- }
- # in case libvirt has been already running before the Puppet run, make
- # sure the default network is destroyed
- exec { 'libvirt-default-net-destroy':
- command => '/usr/bin/virsh net-destroy default',
- onlyif => '/usr/bin/virsh net-info default | /bin/grep -i "^active:\s*yes"',
- before => Service['libvirt'],
- }
-
# When utilising images for deployment, we need to reset the iSCSI initiator name to make it unique
exec { 'reset-iscsi-initiator-name':
command => '/bin/echo InitiatorName=$(/usr/sbin/iscsi-iname) > /etc/iscsi/initiatorname.iscsi',
@@ -51,56 +28,6 @@ if hiera('step') >= 4 {
ensure => present,
}
- $rbd_ephemeral_storage = hiera('nova::compute::rbd::ephemeral_storage', false)
- $rbd_persistent_storage = hiera('rbd_persistent_storage', false)
- if $rbd_ephemeral_storage or $rbd_persistent_storage {
- if str2bool(hiera('ceph_ipv6', false)) {
- $mon_host = hiera('ceph_mon_host_v6')
- } else {
- $mon_host = hiera('ceph_mon_host')
- }
- class { '::ceph::profile::params':
- mon_host => $mon_host,
- }
- include ::ceph::conf
- include ::ceph::profile::client
-
- $client_keys = hiera('ceph::profile::params::client_keys')
- $client_user = join(['client.', hiera('tripleo::profile::base::cinder::volume::rbd::cinder_rbd_user_name')])
- class { '::nova::compute::rbd':
- libvirt_rbd_secret_key => $client_keys[$client_user]['secret'],
- }
- }
-
- if hiera('cinder_enable_nfs_backend', false) {
- if str2bool($::selinux) {
- selboolean { 'virt_use_nfs':
- value => on,
- persistent => true,
- } -> Package['nfs-utils']
- }
-
- package { 'nfs-utils': } -> Service['nova-compute']
- }
-
- if str2bool(hiera('nova::use_ipv6', false)) {
- $vncserver_listen = '::0'
- } else {
- $vncserver_listen = '0.0.0.0'
- }
-
- if $rbd_ephemeral_storage {
- class { '::nova::compute::libvirt':
- libvirt_disk_cachemodes => ['network=writeback'],
- libvirt_hw_disk_discard => 'unmap',
- vncserver_listen => $vncserver_listen,
- }
- } else {
- class { '::nova::compute::libvirt' :
- vncserver_listen => $vncserver_listen,
- }
- }
-
nova_config {
'DEFAULT/my_ip': value => $ipaddress;
'DEFAULT/linuxnet_interface_driver': value => 'nova.network.linux_net.LinuxOVSInterfaceDriver';
@@ -112,7 +39,7 @@ if hiera('step') >= 4 {
content => hiera('midonet_libvirt_qemu_data')
}
}
- include ::nova::network::neutron
+
include ::neutron
include ::neutron::config
@@ -198,17 +125,8 @@ if hiera('step') >= 4 {
include ::ceilometer::agent::compute
include ::ceilometer::agent::auth
- $snmpd_user = hiera('snmpd_readonly_user_name')
- snmp::snmpv3_user { $snmpd_user:
- authtype => 'MD5',
- authpass => hiera('snmpd_readonly_user_password'),
- }
- class { '::snmp':
- agentaddress => ['udp:161','udp6:[::1]:161'],
- snmpd_config => [ join(['createUser ', hiera('snmpd_readonly_user_name'), ' MD5 "', hiera('snmpd_readonly_user_password'), '"']), join(['rouser ', hiera('snmpd_readonly_user_name')]), 'proc cron', 'includeAllDisks 10%', 'master agentx', 'trapsink localhost public', 'iquerySecName internalUser', 'rouser internalUser', 'defaultMonitors yes', 'linkUpDownNotifications yes' ],
- }
-
hiera_include('compute_classes')
- package_manifest{ '/var/lib/tripleo/installed-packages/overcloud_compute': ensure => present }
-
}
+
+$package_manifest_name = join(['/var/lib/tripleo/installed-packages/overcloud_compute', hiera('step')])
+package_manifest{$package_manifest_name: ensure => present}
diff --git a/puppet/manifests/overcloud_controller.pp b/puppet/manifests/overcloud_controller.pp
index 6084c954..985b3f01 100644
--- a/puppet/manifests/overcloud_controller.pp
+++ b/puppet/manifests/overcloud_controller.pp
@@ -18,22 +18,8 @@ include ::tripleo::firewall
$enable_load_balancer = hiera('enable_load_balancer', true)
-if hiera('step') >= 1 {
-
- create_resources(kmod::load, hiera('kernel_modules'), {})
- create_resources(sysctl::value, hiera('sysctl_settings'), {})
- Exec <| tag == 'kmod::load' |> -> Sysctl <| |>
-
-}
-
if hiera('step') >= 2 {
- if count(hiera('ntp::servers')) > 0 {
- include ::ntp
- }
-
- include ::timezone
-
# MongoDB
if downcase(hiera('ceilometer_backend')) == 'mongodb' {
# NOTE(gfidente): We need to pass the list of IPv6 addresses *with* port and
@@ -77,64 +63,13 @@ if hiera('step') >= 2 {
# FIXME: this should only occur on the bootstrap host (ditto for db syncs)
# Create all the database schemas
- include ::nova::db::mysql
- include ::nova::db::mysql_api
if downcase(hiera('gnocchi_indexer_backend')) == 'mysql' {
include ::gnocchi::db::mysql
}
if downcase(hiera('ceilometer_backend')) == 'mysql' {
include ::ceilometer::db::mysql
- include ::aodh::db::mysql
- }
-
- $enable_ceph = hiera('ceph_storage_count', 0) > 0 or hiera('enable_ceph_storage', false)
-
- if $enable_ceph {
- $mon_initial_members = downcase(hiera('ceph_mon_initial_members'))
- if str2bool(hiera('ceph_ipv6', false)) {
- $mon_host = hiera('ceph_mon_host_v6')
- } else {
- $mon_host = hiera('ceph_mon_host')
- }
- class { '::ceph::profile::params':
- mon_initial_members => $mon_initial_members,
- mon_host => $mon_host,
- }
- include ::ceph::conf
- include ::ceph::profile::mon
- }
-
- if str2bool(hiera('enable_ceph_storage', false)) {
- if str2bool(hiera('ceph_osd_selinux_permissive', true)) {
- exec { 'set selinux to permissive on boot':
- command => "sed -ie 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config",
- onlyif => "test -f /etc/selinux/config && ! grep '^SELINUX=permissive' /etc/selinux/config",
- path => ['/usr/bin', '/usr/sbin'],
- }
-
- exec { 'set selinux to permissive':
- command => 'setenforce 0',
- onlyif => "which setenforce && getenforce | grep -i 'enforcing'",
- path => ['/usr/bin', '/usr/sbin'],
- } -> Class['ceph::profile::osd']
- }
-
- include ::ceph::conf
- include ::ceph::profile::osd
- }
-
- if str2bool(hiera('enable_external_ceph', false)) {
- if str2bool(hiera('ceph_ipv6', false)) {
- $mon_host = hiera('ceph_mon_host_v6')
- } else {
- $mon_host = hiera('ceph_mon_host')
- }
- class { '::ceph::profile::params':
- mon_host => $mon_host,
- }
- include ::ceph::conf
- include ::ceph::profile::client
}
+ include ::aodh::db::mysql
} #END STEP 2
@@ -151,7 +86,6 @@ if hiera('step') >= 4 {
memcached_servers => $memcached_servers
}
include ::nova::config
- include ::nova::network::neutron
if hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV2' {
@@ -202,55 +136,15 @@ if hiera('step') >= 4 {
}
- # If the value of core plugin is set to 'nuage' or'opencontrail'
- # include nuage or opencontrail core plugins
- # else use the default value of 'ml2'
- if hiera('neutron::core_plugin') == 'neutron.plugins.nuage.plugin.NuagePlugin' {
- include ::neutron::plugins::nuage
- } elsif hiera('neutron::core_plugin') == 'neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2' {
- include ::neutron::plugins::opencontrail
- } else {
-
- # If the value of core plugin is set to 'midonet',
- # skip all the ML2 configuration
- if hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV2' {
-
- class {'::neutron::plugins::midonet':
- midonet_api_ip => hiera('public_virtual_ip'),
- keystone_tenant => hiera('neutron::server::auth_tenant'),
- keystone_password => hiera('neutron::server::password')
- }
- }
-
- Service['neutron-server'] -> Service['neutron-metadata']
-
- }
-
- if $enable_ceph {
- $ceph_pools = hiera('ceph_pools')
- ceph::pool { $ceph_pools :
- pg_num => hiera('ceph::profile::params::osd_pool_default_pg_num'),
- pgp_num => hiera('ceph::profile::params::osd_pool_default_pgp_num'),
- size => hiera('ceph::profile::params::osd_pool_default_size'),
- }
- }
+ # If the value of core plugin is set to 'midonet',
+ # skip all the ML2 configuration
+ if hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV2' {
- # swift storage
- if str2bool(hiera('enable_swift_storage', true)) {
- class { '::swift::storage::all':
- mount_check => str2bool(hiera('swift_mount_check')),
- }
- if(!defined(File['/srv/node'])) {
- file { '/srv/node':
- ensure => directory,
- owner => 'swift',
- group => 'swift',
- require => Package['openstack-swift'],
- }
+ class {'::neutron::plugins::midonet':
+ midonet_api_ip => hiera('public_virtual_ip'),
+ keystone_tenant => hiera('neutron::server::auth_tenant'),
+ keystone_password => hiera('neutron::server::password')
}
- $swift_components = ['account', 'container', 'object']
- swift::storage::filter::recon { $swift_components : }
- swift::storage::filter::healthcheck { $swift_components : }
}
# Ceilometer
@@ -280,11 +174,9 @@ if hiera('step') >= 4 {
# Aodh
class { '::aodh' :
- database_connection => $ceilometer_database_connection,
+ database_connection => hiera('aodh_mysql_conn_string'),
}
include ::aodh::db::sync
- # To manage the upgrade:
- Exec['ceilometer-dbsync'] -> Exec['aodh-db-sync']
include ::aodh::auth
include ::aodh::api
include ::aodh::wsgi::apache
@@ -300,7 +192,7 @@ if hiera('step') >= 4 {
} else {
$_profile_support = 'None'
}
- $neutron_options = {'profile_support' => $_profile_support }
+ $neutron_options = merge({'profile_support' => $_profile_support },hiera('horizon::neutron_options',undef))
$memcached_ipv6 = hiera('memcached_ipv6', false)
if $memcached_ipv6 {
@@ -334,16 +226,6 @@ if hiera('step') >= 4 {
default: { fail('Unrecognized gnocchi_backend parameter.') }
}
- $snmpd_user = hiera('snmpd_readonly_user_name')
- snmp::snmpv3_user { $snmpd_user:
- authtype => 'MD5',
- authpass => hiera('snmpd_readonly_user_password'),
- }
- class { '::snmp':
- agentaddress => ['udp:161','udp6:[::1]:161'],
- snmpd_config => [ join(['createUser ', hiera('snmpd_readonly_user_name'), ' MD5 "', hiera('snmpd_readonly_user_password'), '"']), join(['rouser ', hiera('snmpd_readonly_user_name')]), 'proc cron', 'includeAllDisks 10%', 'master agentx', 'trapsink localhost public', 'iquerySecName internalUser', 'rouser internalUser', 'defaultMonitors yes', 'linkUpDownNotifications yes' ],
- }
-
hiera_include('controller_classes')
} #END STEP 4
diff --git a/puppet/manifests/overcloud_controller_pacemaker.pp b/puppet/manifests/overcloud_controller_pacemaker.pp
index 13271116..ce9c6f70 100644
--- a/puppet/manifests/overcloud_controller_pacemaker.pp
+++ b/puppet/manifests/overcloud_controller_pacemaker.pp
@@ -22,9 +22,7 @@ Pcmk_resource <| |> {
Service <|
tag == 'aodh-service' or
tag == 'ceilometer-service' or
- tag == 'gnocchi-service' or
- tag == 'neutron-service' or
- tag == 'nova-service'
+ tag == 'gnocchi-service'
|> {
hasrestart => true,
restart => '/bin/true',
@@ -53,16 +51,6 @@ $non_pcmk_start = hiera('step') >= 5
if hiera('step') >= 1 {
- create_resources(kmod::load, hiera('kernel_modules'), {})
- create_resources(sysctl::value, hiera('sysctl_settings'), {})
- Exec <| tag == 'kmod::load' |> -> Sysctl <| |>
-
- include ::timezone
-
- if count(hiera('ntp::servers')) > 0 {
- include ::ntp
- }
-
$pacemaker_cluster_members = downcase(regsubst(hiera('controller_node_names'), ',', ' ', 'G'))
$corosync_ipv6 = str2bool(hiera('corosync_ipv6', false))
if $corosync_ipv6 {
@@ -198,48 +186,25 @@ if hiera('step') >= 2 {
require => Class['::mysql::server'],
before => Exec['galera-ready'],
}
- }
- $mysql_root_password = hiera('mysql::server::root_password')
- $mysql_clustercheck_password = hiera('mysql_clustercheck_password')
- # This step is to create a sysconfig clustercheck file with the root user and empty password
- # on the first install only (because later on the clustercheck db user will be used)
- # We are using exec and not file in order to not have duplicate definition errors in puppet
- # when we later set the the file to contain the clustercheck data
- exec { 'create-root-sysconfig-clustercheck':
- command => "/bin/echo 'MYSQL_USERNAME=root\nMYSQL_PASSWORD=\'\'\nMYSQL_HOST=localhost\n' > /etc/sysconfig/clustercheck",
- unless => '/bin/test -e /etc/sysconfig/clustercheck && grep -q clustercheck /etc/sysconfig/clustercheck',
- }
- exec { 'galera-ready' :
- command => '/usr/bin/clustercheck >/dev/null',
- timeout => 30,
- tries => 180,
- try_sleep => 10,
- environment => ['AVAILABLE_WHEN_READONLY=0'],
- require => Exec['create-root-sysconfig-clustercheck'],
- }
+ exec { 'galera-ready' :
+ command => '/usr/bin/clustercheck >/dev/null',
+ timeout => 30,
+ tries => 180,
+ try_sleep => 10,
+ environment => ['AVAILABLE_WHEN_READONLY=0'],
+ require => Exec['create-root-sysconfig-clustercheck'],
+ }
- xinetd::service { 'galera-monitor' :
- port => '9200',
- server => '/usr/bin/clustercheck',
- per_source => 'UNLIMITED',
- log_on_success => '',
- log_on_failure => 'HOST',
- flags => 'REUSE',
- service_type => 'UNLISTED',
- user => 'root',
- group => 'root',
- require => Exec['create-root-sysconfig-clustercheck'],
- }
- # We add a clustercheck db user and we will switch /etc/sysconfig/clustercheck
- # to it in a later step. We do this only on one node as it will replicate on
- # the other members. We also make sure that the permissions are the minimum necessary
- if $pacemaker_master {
+ # We add a clustercheck db user and we will switch /etc/sysconfig/clustercheck
+ # to it in a later step. We do this only on one node as it will replicate on
+ # the other members. We also make sure that the permissions are the minimum necessary
mysql_user { 'clustercheck@localhost':
ensure => 'present',
- password_hash => mysql_password($mysql_clustercheck_password),
+ password_hash => mysql_password(hiera('mysql_clustercheck_password')),
require => Exec['galera-ready'],
}
+
mysql_grant { 'clustercheck@localhost/*.*':
ensure => 'present',
options => ['GRANT'],
@@ -247,17 +212,8 @@ if hiera('step') >= 2 {
table => '*.*',
user => 'clustercheck@localhost',
}
- }
-
- # Create all the database schemas
- if $sync_db {
- class { '::nova::db::mysql':
- require => Exec['galera-ready'],
- }
- class { '::nova::db::mysql_api':
- require => Exec['galera-ready'],
- }
+ # Create all the database schemas
if downcase(hiera('ceilometer_backend')) == 'mysql' {
class { '::ceilometer::db::mysql':
require => Exec['galera-ready'],
@@ -269,64 +225,39 @@ if hiera('step') >= 2 {
require => Exec['galera-ready'],
}
}
- }
-
- # Ceph
- $enable_ceph = hiera('ceph_storage_count', 0) > 0 or hiera('enable_ceph_storage', false)
- if $enable_ceph {
- $mon_initial_members = downcase(hiera('ceph_mon_initial_members'))
- if str2bool(hiera('ceph_ipv6', false)) {
- $mon_host = hiera('ceph_mon_host_v6')
- } else {
- $mon_host = hiera('ceph_mon_host')
- }
- class { '::ceph::profile::params':
- mon_initial_members => $mon_initial_members,
- mon_host => $mon_host,
+ class { '::aodh::db::mysql':
+ require => Exec['galera-ready'],
}
- include ::ceph::conf
- include ::ceph::profile::mon
}
-
- if str2bool(hiera('enable_ceph_storage', false)) {
- if str2bool(hiera('ceph_osd_selinux_permissive', true)) {
- exec { 'set selinux to permissive on boot':
- command => "sed -ie 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config",
- onlyif => "test -f /etc/selinux/config && ! grep '^SELINUX=permissive' /etc/selinux/config",
- path => ['/usr/bin', '/usr/sbin'],
- }
-
- exec { 'set selinux to permissive':
- command => 'setenforce 0',
- onlyif => "which setenforce && getenforce | grep -i 'enforcing'",
- path => ['/usr/bin', '/usr/sbin'],
- } -> Class['ceph::profile::osd']
- }
-
- include ::ceph::conf
- include ::ceph::profile::osd
+ # This step is to create a sysconfig clustercheck file with the root user and empty password
+ # on the first install only (because later on the clustercheck db user will be used)
+ # We are using exec and not file in order to not have duplicate definition errors in puppet
+ # when we later set the the file to contain the clustercheck data
+ exec { 'create-root-sysconfig-clustercheck':
+ command => "/bin/echo 'MYSQL_USERNAME=root\nMYSQL_PASSWORD=\'\'\nMYSQL_HOST=localhost\n' > /etc/sysconfig/clustercheck",
+ unless => '/bin/test -e /etc/sysconfig/clustercheck && grep -q clustercheck /etc/sysconfig/clustercheck',
}
- if str2bool(hiera('enable_external_ceph', false)) {
- if str2bool(hiera('ceph_ipv6', false)) {
- $mon_host = hiera('ceph_mon_host_v6')
- } else {
- $mon_host = hiera('ceph_mon_host')
- }
- class { '::ceph::profile::params':
- mon_host => $mon_host,
- }
- include ::ceph::conf
- include ::ceph::profile::client
+ xinetd::service { 'galera-monitor' :
+ port => '9200',
+ server => '/usr/bin/clustercheck',
+ per_source => 'UNLIMITED',
+ log_on_success => '',
+ log_on_failure => 'HOST',
+ flags => 'REUSE',
+ service_type => 'UNLISTED',
+ user => 'root',
+ group => 'root',
+ require => Exec['create-root-sysconfig-clustercheck'],
}
-
} #END STEP 2
if hiera('step') >= 4 or ( hiera('step') >= 3 and $sync_db ) {
# At this stage we are guaranteed that the clustercheck db user exists
# so we switch the resource agent to use it.
+ $mysql_clustercheck_password = hiera('mysql_clustercheck_password')
file { '/etc/sysconfig/clustercheck' :
ensure => file,
mode => '0600',
@@ -349,7 +280,6 @@ MYSQL_HOST=localhost\n",
}
include ::nova::config
- include ::nova::network::neutron
if hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV2' {
@@ -400,12 +330,6 @@ MYSQL_HOST=localhost\n",
}
- if hiera('neutron::core_plugin') == 'neutron.plugins.nuage.plugin.NuagePlugin' {
- include ::neutron::plugins::nuage
- }
- if hiera('neutron::core_plugin') == 'neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2' {
- include ::neutron::plugins::opencontrail
- }
if hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV2' {
class {'::neutron::plugins::midonet':
midonet_api_ip => hiera('public_virtual_ip'),
@@ -414,45 +338,6 @@ MYSQL_HOST=localhost\n",
}
}
- if $enable_ceph {
- $ceph_pools = hiera('ceph_pools')
- ceph::pool { $ceph_pools :
- pg_num => hiera('ceph::profile::params::osd_pool_default_pg_num'),
- pgp_num => hiera('ceph::profile::params::osd_pool_default_pgp_num'),
- size => hiera('ceph::profile::params::osd_pool_default_size'),
- }
- }
-
- # swift storage
- if str2bool(hiera('enable_swift_storage', true)) {
- class {'::swift::storage::all':
- mount_check => str2bool(hiera('swift_mount_check')),
- }
- class {'::swift::storage::account':
- manage_service => $non_pcmk_start,
- enabled => $non_pcmk_start,
- }
- class {'::swift::storage::container':
- manage_service => $non_pcmk_start,
- enabled => $non_pcmk_start,
- }
- class {'::swift::storage::object':
- manage_service => $non_pcmk_start,
- enabled => $non_pcmk_start,
- }
- if(!defined(File['/srv/node'])) {
- file { '/srv/node':
- ensure => directory,
- owner => 'swift',
- group => 'swift',
- require => Package['openstack-swift'],
- }
- }
- $swift_components = ['account', 'container', 'object']
- swift::storage::filter::recon { $swift_components : }
- swift::storage::filter::healthcheck { $swift_components : }
- }
-
# Ceilometer
case downcase(hiera('ceilometer_backend')) {
/mysql/: {
@@ -504,7 +389,7 @@ MYSQL_HOST=localhost\n",
} else {
$_profile_support = 'None'
}
- $neutron_options = {'profile_support' => $_profile_support }
+ $neutron_options = merge({'profile_support' => $_profile_support },hiera('horizon::neutron_options',undef))
$memcached_ipv6 = hiera('memcached_ipv6', false)
if $memcached_ipv6 {
@@ -520,7 +405,7 @@ MYSQL_HOST=localhost\n",
# Aodh
class { '::aodh' :
- database_connection => $ceilometer_database_connection,
+ database_connection => hiera('aodh_mysql_conn_string'),
}
include ::aodh::config
include ::aodh::auth
@@ -578,16 +463,6 @@ MYSQL_HOST=localhost\n",
enabled => false,
}
- $snmpd_user = hiera('snmpd_readonly_user_name')
- snmp::snmpv3_user { $snmpd_user:
- authtype => 'MD5',
- authpass => hiera('snmpd_readonly_user_password'),
- }
- class { '::snmp':
- agentaddress => ['udp:161','udp6:[::1]:161'],
- snmpd_config => [ join(['createUser ', hiera('snmpd_readonly_user_name'), ' MD5 "', hiera('snmpd_readonly_user_password'), '"']), join(['rouser ', hiera('snmpd_readonly_user_name')]), 'proc cron', 'includeAllDisks 10%', 'master agentx', 'trapsink localhost public', 'iquerySecName internalUser', 'rouser internalUser', 'defaultMonitors yes', 'linkUpDownNotifications yes' ],
- }
-
hiera_include('controller_classes')
} #END STEP 4
@@ -598,6 +473,7 @@ if hiera('step') >= 5 {
# password. On second runs or updates /root/.my.cnf will already be populated
# with proper credentials. This step happens on every node because this sql
# statement does not automatically replicate across nodes.
+ $mysql_root_password = hiera('mysql::server::root_password')
exec { 'galera-set-root-password':
command => "/bin/touch /root/.my.cnf && /bin/echo \"UPDATE mysql.user SET Password = PASSWORD('${mysql_root_password}') WHERE user = 'root'; flush privileges;\" | /bin/mysql --defaults-extra-file=/root/.my.cnf -u root",
}
diff --git a/puppet/manifests/overcloud_object.pp b/puppet/manifests/overcloud_object.pp
index 3585c993..1f04c581 100644
--- a/puppet/manifests/overcloud_object.pp
+++ b/puppet/manifests/overcloud_object.pp
@@ -16,46 +16,9 @@
include ::tripleo::packages
include ::tripleo::firewall
-if hiera('step') >= 1 {
- create_resources(kmod::load, hiera('kernel_modules'), {})
- create_resources(sysctl::value, hiera('sysctl_settings'), {})
- Exec <| tag == 'kmod::load' |> -> Sysctl <| |>
-
- include ::timezone
-
- if count(hiera('ntp::servers')) > 0 {
- include ::ntp
- }
-}
-
if hiera('step') >= 4 {
- class { '::swift::storage::all':
- mount_check => str2bool(hiera('swift_mount_check')),
- }
- if(!defined(File['/srv/node'])) {
- file { '/srv/node':
- ensure => directory,
- owner => 'swift',
- group => 'swift',
- require => Package['openstack-swift'],
- }
- }
-
- $swift_components = ['account', 'container', 'object']
- swift::storage::filter::recon { $swift_components : }
- swift::storage::filter::healthcheck { $swift_components : }
-
- $snmpd_user = hiera('snmpd_readonly_user_name')
- snmp::snmpv3_user { $snmpd_user:
- authtype => 'MD5',
- authpass => hiera('snmpd_readonly_user_password'),
- }
- class { '::snmp':
- agentaddress => ['udp:161','udp6:[::1]:161'],
- snmpd_config => [ join(['createUser ', hiera('snmpd_readonly_user_name'), ' MD5 "', hiera('snmpd_readonly_user_password'), '"']), join(['rouser ', hiera('snmpd_readonly_user_name')]), 'proc cron', 'includeAllDisks 10%', 'master agentx', 'trapsink localhost public', 'iquerySecName internalUser', 'rouser internalUser', 'defaultMonitors yes', 'linkUpDownNotifications yes' ],
- }
-
hiera_include('object_classes')
}
-package_manifest{'/var/lib/tripleo/installed-packages/overcloud_object': ensure => present}
+$package_manifest_name = join(['/var/lib/tripleo/installed-packages/overcloud_object', hiera('step')])
+package_manifest{$package_manifest_name: ensure => present}
diff --git a/puppet/manifests/overcloud_volume.pp b/puppet/manifests/overcloud_volume.pp
index 134dc43b..7c7da586 100644
--- a/puppet/manifests/overcloud_volume.pp
+++ b/puppet/manifests/overcloud_volume.pp
@@ -16,46 +16,9 @@
include ::tripleo::packages
include ::tripleo::firewall
-create_resources(kmod::load, hiera('kernel_modules'), {})
-create_resources(sysctl::value, hiera('sysctl_settings'), {})
-Exec <| tag == 'kmod::load' |> -> Sysctl <| |>
-
-if count(hiera('ntp::servers')) > 0 {
- include ::ntp
-}
-
-include ::timezone
-
-include ::cinder
-include ::cinder::config
-include ::cinder::glance
-include ::cinder::volume
-include ::cinder::setup_test_volume
-
-$cinder_enable_iscsi = hiera('cinder_enable_iscsi_backend', true)
-if $cinder_enable_iscsi {
- $cinder_iscsi_backend = 'tripleo_iscsi'
-
- cinder::backend::iscsi { $cinder_iscsi_backend :
- iscsi_ip_address => hiera('cinder_iscsi_ip_address'),
- iscsi_helper => hiera('cinder_iscsi_helper'),
- }
-}
-
-$cinder_enabled_backends = any2array($cinder_iscsi_backend)
-class { '::cinder::backends' :
- enabled_backends => union($cinder_enabled_backends, hiera('cinder_user_enabled_backends')),
-}
-
-$snmpd_user = hiera('snmpd_readonly_user_name')
-snmp::snmpv3_user { $snmpd_user:
- authtype => 'MD5',
- authpass => hiera('snmpd_readonly_user_password'),
-}
-class { '::snmp':
- agentaddress => ['udp:161','udp6:[::1]:161'],
- snmpd_config => [ join(['createUser ', hiera('snmpd_readonly_user_name'), ' MD5 "', hiera('snmpd_readonly_user_password'), '"']), join(['rouser ', hiera('snmpd_readonly_user_name')]), 'proc cron', 'includeAllDisks 10%', 'master agentx', 'trapsink localhost public', 'iquerySecName internalUser', 'rouser internalUser', 'defaultMonitors yes', 'linkUpDownNotifications yes' ],
+if hiera('step') >= 4 {
+ hiera_include('volume_classes')
}
-hiera_include('volume_classes')
-package_manifest{'/var/lib/tripleo/installed-packages/overcloud_volume': ensure => present}
+$package_manifest_name = join(['/var/lib/tripleo/installed-packages/overcloud_volume', hiera('step')])
+package_manifest{$package_manifest_name: ensure => present}
diff --git a/puppet/services/ceph-base.yaml b/puppet/services/ceph-base.yaml
new file mode 100644
index 00000000..065901b8
--- /dev/null
+++ b/puppet/services/ceph-base.yaml
@@ -0,0 +1,94 @@
+heat_template_version: 2016-04-08
+
+description: >
+ Ceph base service. Shared by all Ceph services.
+
+parameters:
+ CephAdminKey:
+ default: ''
+ description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-key.
+ type: string
+ hidden: true
+ CephClientKey:
+ default: ''
+ description: The Ceph client key. Can be created with ceph-authtool --gen-print-key. Currently only used for external Ceph deployments to create the openstack user keyring.
+ type: string
+ hidden: true
+ CephClientUserName:
+ default: openstack
+ type: string
+ CephClusterFSID:
+ default: ''
+ type: string
+ description: The Ceph cluster FSID. Must be a UUID.
+ CephIPv6:
+ default: False
+ type: boolean
+ CinderRbdPoolName:
+ default: volumes
+ type: string
+ CinderBackupRbdPoolName:
+ default: backups
+ type: string
+ GlanceRbdPoolName:
+ default: images
+ type: string
+ GnocchiRbdPoolName:
+ default: metrics
+ type: string
+ NovaRbdPoolName:
+ default: vms
+ type: string
+ # DEPRECATED options for compatibility with overcloud.yaml
+ # This should be removed and manipulation of the ControllerServices list
+ # used instead, but we need client support for that first
+ ControllerEnableCephStorage:
+ default: false
+ description: Whether to deploy Ceph Storage (OSD) on the Controller
+ type: boolean
+
+parameter_groups:
+- label: deprecated
+ description: Do not use deprecated params, they will be removed.
+ parameters:
+ - ControllerEnableCephStorage
+
+outputs:
+ role_data:
+ description: Role data for the Ceph base service.
+ value:
+ config_settings:
+ tripleo::profile::base::ceph::ceph_ipv6: {get_param: CephIPv6}
+ tripleo::profile::base::ceph::enable_ceph_storage: {get_param: ControllerEnableCephStorage}
+ ceph::profile::params::fsid: {get_param: CephClusterFSID}
+ ceph::profile::params::client_keys:
+ str_replace:
+ template: "{
+ client.admin: {
+ secret: 'ADMIN_KEY',
+ mode: '0600',
+ cap_mon: 'allow *',
+ cap_osd: 'allow *',
+ cap_mds: 'allow *'
+ },
+ client.bootstrap-osd: {
+ secret: 'ADMIN_KEY',
+ keyring_path: '/var/lib/ceph/bootstrap-osd/ceph.keyring',
+ cap_mon: 'allow profile bootstrap-osd'
+ },
+ client.CLIENT_USER: {
+ secret: 'CLIENT_KEY',
+ mode: '0644',
+ cap_mon: 'allow r',
+ cap_osd: 'allow class-read object_prefix rbd_children, allow rwx pool=CINDER_POOL, allow rwx pool=CINDERBACKUP_POOL, allow rwx pool=NOVA_POOL, allow rwx pool=GLANCE_POOL, allow rwx pool=GNOCCHI_POOL'
+ }
+ }"
+ params:
+ CLIENT_USER: {get_param: CephClientUserName}
+ CLIENT_KEY: {get_param: CephClientKey}
+ ADMIN_KEY: {get_param: CephAdminKey}
+ NOVA_POOL: {get_param: NovaRbdPoolName}
+ CINDER_POOL: {get_param: CinderRbdPoolName}
+ CINDERBACKUP_POOL: {get_param: CinderBackupRbdPoolName}
+ GLANCE_POOL: {get_param: GlanceRbdPoolName}
+ GNOCCHI_POOL: {get_param: GnocchiRbdPoolName}
diff --git a/puppet/services/ceph-client.yaml b/puppet/services/ceph-client.yaml
new file mode 100644
index 00000000..ca920a5f
--- /dev/null
+++ b/puppet/services/ceph-client.yaml
@@ -0,0 +1,24 @@
+heat_template_version: 2016-04-08
+
+description: >
+ Ceph Client service.
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+
+resources:
+ CephBase:
+ type: ./ceph-base.yaml
+
+outputs:
+ role_data:
+ description: Role data for the Cinder OSD service.
+ value:
+ config_settings:
+ get_attr: [CephBase, role_data, config_settings]
+ step_config: |
+ include ::tripleo::profile::base::ceph::client
diff --git a/puppet/services/ceph-external.yaml b/puppet/services/ceph-external.yaml
new file mode 100644
index 00000000..4522f416
--- /dev/null
+++ b/puppet/services/ceph-external.yaml
@@ -0,0 +1,65 @@
+heat_template_version: 2016-04-08
+
+description: >
+ Ceph External service.
+
+parameters:
+ CephClientKey:
+ default: ''
+ description: The Ceph client key. Can be created with ceph-authtool --gen-print-key. Currently only used for external Ceph deployments to create the openstack user keyring.
+ type: string
+ hidden: true
+ CephClientUserName:
+ default: openstack
+ type: string
+ CephClusterFSID:
+ default: ''
+ type: string
+ description: The Ceph cluster FSID. Must be a UUID.
+ CephExternalMonHost:
+ default: ''
+ type: string
+ description: List of externally managed Ceph Mon Host IPs. Only used for external Ceph deployments.
+ CinderRbdPoolName:
+ default: volumes
+ type: string
+ CinderBackupRbdPoolName:
+ default: backups
+ type: string
+ GlanceRbdPoolName:
+ default: images
+ type: string
+ GnocchiRbdPoolName:
+ default: metrics
+ type: string
+ NovaRbdPoolName:
+ default: vms
+ type: string
+
+outputs:
+ role_data:
+ description: Role data for the Ceph External service.
+ value:
+ config_settings:
+ tripleo::profile::base::ceph::ceph_mon_host: {get_param: CephExternalMonHost}
+ ceph::profile::params::fsid: {get_param: CephClusterFSID}
+ ceph::profile::params::client_keys:
+ str_replace:
+ template: "{
+ client.CLIENT_USER: {
+ secret: 'CLIENT_KEY',
+ mode: '0644',
+ cap_mon: 'allow r',
+ cap_osd: 'allow class-read object_prefix rbd_children, allow rwx pool=CINDER_POOL, allow rwx pool=CINDERBACKUP_POOL, allow rwx pool=NOVA_POOL, allow rwx pool=GLANCE_POOL, allow rwx pool=GNOCCHI_POOL'
+ }
+ }"
+ params:
+ CLIENT_USER: {get_param: CephClientUserName}
+ CLIENT_KEY: {get_param: CephClientKey}
+ NOVA_POOL: {get_param: NovaRbdPoolName}
+ CINDER_POOL: {get_param: CinderRbdPoolName}
+ CINDERBACKUP_POOL: {get_param: CinderBackupRbdPoolName}
+ GLANCE_POOL: {get_param: GlanceRbdPoolName}
+ GNOCCHI_POOL: {get_param: GnocchiRbdPoolName}
+ step_config: |
+ include ::tripleo::profile::base::ceph::client
diff --git a/puppet/services/ceph-mon.yaml b/puppet/services/ceph-mon.yaml
new file mode 100644
index 00000000..d6e3aa70
--- /dev/null
+++ b/puppet/services/ceph-mon.yaml
@@ -0,0 +1,56 @@
+heat_template_version: 2016-04-08
+
+description: >
+ Ceph Monitor service.
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+ CephIPv6:
+ default: False
+ type: boolean
+ CephMonKey:
+ default: ''
+ description: The Ceph monitors key. Can be created with ceph-authtool --gen-print-key.
+ type: string
+ hidden: true
+ CinderRbdPoolName:
+ default: volumes
+ type: string
+ CinderBackupRbdPoolName:
+ default: backups
+ type: string
+ GlanceRbdPoolName:
+ default: images
+ type: string
+ GnocchiRbdPoolName:
+ default: metrics
+ type: string
+ NovaRbdPoolName:
+ default: vms
+ type: string
+
+resources:
+ CephBase:
+ type: ./ceph-base.yaml
+
+outputs:
+ role_data:
+ description: Role data for the Ceph Monitor service.
+ value:
+ config_settings:
+ map_merge:
+ - get_attr: [CephBase, role_data, config_settings]
+ - ceph::profile::params::ms_bind_ipv6: {get_param: CephIPv6}
+ ceph::profile::params::mon_key: {get_param: CephMonKey}
+ tripleo::profile::base::ceph::mon::ceph_pools:
+ - {get_param: CinderRbdPoolName}
+ - {get_param: CinderBackupRbdPoolName}
+ - {get_param: NovaRbdPoolName}
+ - {get_param: GlanceRbdPoolName}
+ - {get_param: GnocchiRbdPoolName}
+ step_config: |
+ include ::tripleo::profile::base::ceph::mon
diff --git a/puppet/services/ceph-osd.yaml b/puppet/services/ceph-osd.yaml
new file mode 100644
index 00000000..24f60283
--- /dev/null
+++ b/puppet/services/ceph-osd.yaml
@@ -0,0 +1,24 @@
+heat_template_version: 2016-04-08
+
+description: >
+ Ceph OSD service.
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+
+resources:
+ CephBase:
+ type: ./ceph-base.yaml
+
+outputs:
+ role_data:
+ description: Role data for the Cinder OSD service.
+ value:
+ config_settings:
+ get_attr: [CephBase, role_data, config_settings]
+ step_config: |
+ include ::tripleo::profile::base::ceph::osd
diff --git a/puppet/services/cinder-volume.yaml b/puppet/services/cinder-volume.yaml
index d28f40e6..41f3827d 100644
--- a/puppet/services/cinder-volume.yaml
+++ b/puppet/services/cinder-volume.yaml
@@ -36,6 +36,12 @@ parameters:
NFS servers used by Cinder NFS backend. Effective when
CinderEnableNfsBackend is true.
type: comma_delimited_list
+ CinderRbdPoolName:
+ default: volumes
+ type: string
+ CephClientUserName:
+ default: openstack
+ type: string
EndpointMap:
default: {}
description: Mapping of service endpoint -> protocol. Typically set
@@ -67,5 +73,7 @@ outputs:
SERVERS: {get_param: CinderNfsServers}
tripleo::profile::base::cinder::volume::iscsi::cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_helper: {get_param: CinderISCSIHelper}
+ tripleo::profile::base::cinder::volume::rbd::cinder_rbd_pool_name: {get_param: CinderRbdPoolName}
+ tripleo::profile::base::cinder::volume::rbd::cinder_rbd_user_name: {get_param: CephClientUserName}
step_config: |
include ::tripleo::profile::base::cinder::volume
diff --git a/puppet/services/glance-api.yaml b/puppet/services/glance-api.yaml
index 89e6ee0f..f1f98a8e 100644
--- a/puppet/services/glance-api.yaml
+++ b/puppet/services/glance-api.yaml
@@ -9,6 +9,9 @@ parameters:
description: Mapping of service endpoint -> protocol. Typically set
via parameter_defaults in the resource registry.
type: json
+ CephClientUserName:
+ default: openstack
+ type: string
Debug:
default: ''
description: Set to True to enable debugging on all services.
@@ -36,6 +39,9 @@ parameters:
default: 0
description: Number of workers for Glance service.
type: number
+ GlanceRbdPoolName:
+ default: images
+ type: string
RabbitPassword:
description: The password for RabbitMQ
type: string
@@ -85,6 +91,8 @@ outputs:
glance::backend::swift::swift_store_auth_address: {get_param: [EndpointMap, KeystoneInternal, uri] }
glance::backend::swift::swift_store_user: service:glance
glance::backend::swift::swift_store_key: {get_param: GlancePassword}
+ glance::backend::rbd::rbd_store_pool: {get_param: GlanceRbdPoolName}
+ glance::backend::rbd::rbd_store_user: {get_param: CephClientUserName}
glance_backend: {get_param: GlanceBackend}
glance::db::mysql::password: {get_param: GlancePassword}
glance::notify::rabbitmq::rabbit_userid: {get_param: RabbitUserName}
diff --git a/puppet/services/heat-base.yaml b/puppet/services/heat-base.yaml
index 8617df27..88e27945 100644
--- a/puppet/services/heat-base.yaml
+++ b/puppet/services/heat-base.yaml
@@ -38,3 +38,9 @@ outputs:
heat::rabbit_port: {get_param: RabbitClientPort}
heat::debug: {get_param: Debug}
heat::enable_proxy_headers_parsing: true
+ # We need this because the default heat policy.json no longer works on TripleO
+ # https://git.openstack.org/cgit/openstack/heat/commit/?id=ac86702172ddf01f5bdc3f3cd99d2e32ad9b7024
+ heat::policy::policies:
+ context_is_admin:
+ key: 'context_is_admin'
+ value: 'role:admin'
diff --git a/puppet/services/ironic-api.yaml b/puppet/services/ironic-api.yaml
new file mode 100644
index 00000000..e1626d5b
--- /dev/null
+++ b/puppet/services/ironic-api.yaml
@@ -0,0 +1,43 @@
+heat_template_version: 2016-04-08
+
+description: >
+ OpenStack Ironic API configured with Puppet
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+ IronicPassword:
+ description: The password for the Ironic service and db account, used by the Ironic services
+ type: string
+ hidden: true
+
+resources:
+ IronicBase:
+ type: ./ironic-base.yaml
+ properties:
+ EndpointMap: {get_param: EndpointMap}
+
+outputs:
+ role_data:
+ description: Role data for the Ironic API role.
+ value:
+ config_settings:
+ map_merge:
+ - get_attr: [IronicBase, role_data, config_settings]
+ # NOTE(dtantsur): the my_ip parameter is heavily overloaded in
+ # ironic. It's used as a default value for e.g. TFTP server IP,
+ # glance and neutron endpoints, virtual console IP. We override
+ # the TFTP server IP in ironic-conductor.yaml as it should not be
+ # the VIP, but rather a real IP of the controller.
+ - ironic::my_ip: {get_param: [EndpointMap, MysqlInternal, host]}
+ ironic::api::admin_password: {get_param: IronicPassword}
+ ironic::keystone::auth::public_url: {get_param: [EndpointMap, IronicPublic, uri]}
+ ironic::keystone::auth::internal_url: {get_param: [EndpointMap, IronicInternal, uri]}
+ ironic::keystone::auth::admin_url: {get_param: [EndpointMap, IronicAdmin, uri]}
+ ironic::keystone::auth::password: {get_param: IronicPassword }
+
+ step_config: |
+ include ::tripleo::profile::base::ironic::api
diff --git a/puppet/services/ironic-base.yaml b/puppet/services/ironic-base.yaml
new file mode 100644
index 00000000..0eaa53cb
--- /dev/null
+++ b/puppet/services/ironic-base.yaml
@@ -0,0 +1,64 @@
+heat_template_version: 2016-04-08
+
+description: >
+ OpenStack Ironic services configured with Puppet
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+ Debug:
+ default: ''
+ description: Set to True to enable debugging on all services.
+ type: string
+ IronicPassword:
+ description: The password for the Ironic service and db account, used by the Ironic services
+ type: string
+ hidden: true
+ RabbitUserName:
+ default: guest
+ description: The username for RabbitMQ
+ type: string
+ RabbitPassword:
+ description: The password for RabbitMQ
+ type: string
+ hidden: true
+ RabbitClientPort:
+ default: 5672
+ description: Set rabbit subscriber port, change this if using SSL
+ type: number
+ RabbitClientUseSSL:
+ default: false
+ description: >
+ Rabbit client subscriber parameter to specify
+ an SSL connection to the RabbitMQ host.
+ type: string
+
+outputs:
+ role_data:
+ description: Role data for the Ironic role.
+ value:
+ config_settings:
+ ironic_dsn: &ironic_dsn
+ list_join:
+ - ''
+ - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+ - '://ironic:'
+ - {get_param: IronicPassword}
+ - '@'
+ - {get_param: [EndpointMap, MysqlInternal, host]}
+ - '/ironic'
+ ironic::admin_tenant_name: 'service'
+ ironic::database_connection: *ironic_dsn
+ ironic::debug: {get_param: Debug}
+ ironic::rabbit_userid: {get_param: RabbitUserName}
+ ironic::rabbit_password: {get_param: RabbitPassword}
+ ironic::rabbit_port: {get_param: RabbitClientPort}
+ ironic::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
+ ironic::db::mysql::password: {get_param: IronicPassword}
+ ironic::keystone::auth::tenant: 'service'
+
+ step_config: |
+ include ::tripleo::profile::base::ironic
diff --git a/puppet/services/ironic-conductor.yaml b/puppet/services/ironic-conductor.yaml
new file mode 100644
index 00000000..3fb3d9fd
--- /dev/null
+++ b/puppet/services/ironic-conductor.yaml
@@ -0,0 +1,36 @@
+heat_template_version: 2016-04-08
+
+description: >
+ OpenStack Ironic conductor configured with Puppet
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+ IronicEnabledDrivers:
+ default: ['pxe_ipmitool', 'agent_ipmitool']
+ description: Enabled Ironic drivers
+ type: comma_delimited_list
+
+resources:
+ IronicBase:
+ type: ./ironic-base.yaml
+ properties:
+ EndpointMap: {get_param: EndpointMap}
+
+outputs:
+ role_data:
+ description: Role data for the Ironic conductor role.
+ value:
+ config_settings:
+ map_merge:
+ - get_attr: [IronicBase, role_data, config_settings]
+ - ironic::enabled_drivers: {get_param: IronicEnabledDrivers}
+ # Prevent tftp_server from defaulting to my_ip setting, which is
+ # controller VIP, not a real IP.
+ ironic::drivers::pxe::tftp_server: {get_input: ironic_api_network}
+
+ step_config: |
+ include ::tripleo::profile::base::ironic::conductor
diff --git a/puppet/services/kernel.yaml b/puppet/services/kernel.yaml
new file mode 100644
index 00000000..b429c5ea
--- /dev/null
+++ b/puppet/services/kernel.yaml
@@ -0,0 +1,18 @@
+heat_template_version: 2016-04-08
+
+description: >
+ Load kernel modules with kmod and configure kernel options with sysctl.
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+
+outputs:
+ role_data:
+ description: Role data for the Kernel modules
+ value:
+ step_config: |
+ include ::tripleo::profile::base::kernel
diff --git a/puppet/services/neutron-plugin-ml2.yaml b/puppet/services/neutron-plugin-ml2.yaml
index 435a6de0..ff13d5d8 100644
--- a/puppet/services/neutron-plugin-ml2.yaml
+++ b/puppet/services/neutron-plugin-ml2.yaml
@@ -106,4 +106,4 @@ outputs:
TYPES: {get_param: NeutronNetworkType}
step_config: |
- include ::tripleo::profile::base::neutron::ml2
+ include ::tripleo::profile::base::neutron::plugins::ml2
diff --git a/puppet/services/neutron-plugin-nuage.yaml b/puppet/services/neutron-plugin-nuage.yaml
new file mode 100644
index 00000000..3c3d8b63
--- /dev/null
+++ b/puppet/services/neutron-plugin-nuage.yaml
@@ -0,0 +1,75 @@
+heat_template_version: 2016-04-08
+
+description: >
+ OpenStack Neutron Nuage plugin
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+ # Config specific parameters, to be provided via parameter_defaults
+ NeutronNuageOSControllerIp:
+ description: IP address of the OpenStack Controller
+ type: string
+
+ NeutronNuageNetPartitionName:
+ description: Specifies the title that you will see on the VSD
+ type: string
+ default: 'default_name'
+
+ NeutronNuageVSDIp:
+ description: IP address and port of the Virtual Services Directory
+ type: string
+
+ NeutronNuageVSDUsername:
+ description: Username to be used to log into VSD
+ type: string
+
+ NeutronNuageVSDPassword:
+ description: Password to be used to log into VSD
+ type: string
+
+ NeutronNuageVSDOrganization:
+ description: Organization parameter required to log into VSD
+ type: string
+ default: 'organization'
+
+ NeutronNuageBaseURIVersion:
+ description: URI version to be used based on the VSD release
+ type: string
+ default: 'default_uri_version'
+
+ NeutronNuageCMSId:
+ description: Cloud Management System ID (CMS ID) to distinguish between OS instances on the same VSD
+ type: string
+
+ UseForwardedFor:
+ description: Treat X-Forwarded-For as the canonical remote address. Only enable this if you have a sanitizing proxy.
+ type: boolean
+ default: false
+
+resources:
+
+ NeutronBase:
+ type: ./neutron-base.yaml
+
+outputs:
+ role_data:
+ description: Role data for the Neutron Nuage plugin
+ value:
+ config_settings:
+ map_merge:
+ - get_attr: [NeutronBase, role_data, config_settings]
+ - neutron::plugins::nuage::nuage_oscontroller_ip: {get_param: NeutronNuageOSControllerIp}
+ neutron::plugins::nuage::nuage_net_partition_name: {get_param: NeutronNuageNetPartitionName}
+ neutron::plugins::nuage::nuage_vsd_ip: {get_param: NeutronNuageVSDIp}
+ neutron::plugins::nuage::nuage_vsd_username: {get_param: NeutronNuageVSDUsername}
+ neutron::plugins::nuage::nuage_vsd_password: {get_param: NeutronNuageVSDPassword}
+ neutron::plugins::nuage::nuage_vsd_organization: {get_param: NeutronNuageVSDOrganization}
+ neutron::plugins::nuage::nuage_base_uri_version: {get_param: NeutronNuageBaseURIVersion}
+ neutron::plugins::nuage::nuage_cms_id: {get_param: NeutronNuageCMSId}
+ nova::api::use_forwarded_for: {get_param: UseForwardedFor}
+ step_config: |
+ include tripleo::profile::base::neutron::plugins::nuage
diff --git a/puppet/services/neutron-plugin-opencontrail.yaml b/puppet/services/neutron-plugin-opencontrail.yaml
new file mode 100644
index 00000000..9c58c03c
--- /dev/null
+++ b/puppet/services/neutron-plugin-opencontrail.yaml
@@ -0,0 +1,60 @@
+heat_template_version: 2016-04-08
+
+description: >
+ OpenStack Neutron Opencontrail plugin
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+ AdminPassword:
+ description: The password for the keystone admin account, used for monitoring, querying neutron etc.
+ type: string
+ hidden: true
+ AdminToken:
+ description: The keystone auth secret and db password.
+ type: string
+ hidden: true
+ ContrailApiServerIp:
+ description: IP address of the OpenContrail API server
+ type: string
+ ContrailApiServerPort:
+ description: Port of the OpenContrail API
+ type: string
+ default: 8082
+ ContrailMultiTenancy:
+ description: Whether to enable multi tenancy
+ type: boolean
+ default: false
+ ContrailExtensions:
+ description: List of OpenContrail extensions to be enabled
+ type: comma_delimited_list
+ default: ''
+
+resources:
+
+ NeutronBase:
+ type: ./neutron-base.yaml
+
+outputs:
+ role_data:
+ description: Role data for the Neutron Opencontrail plugin
+ value:
+ config_settings:
+ map_merge:
+ - get_attr: [NeutronBase, role_data, config_settings]
+ - neutron::api_extensions_path: /usr/lib/python2.7/site-packages/neutron_plugin_contrail/extensions
+
+ neutron::plugins::opencontrail::api_server_ip: {get_param: ContrailApiServerIp}
+ neutron::plugins::opencontrail::api_server_port: {get_param: ContrailApiServerPort}
+ neutron::plugins::opencontrail::multi_tenancy: {get_param: ContrailMultiTenancy}
+ neutron::plugins::opencontrail::contrail_extensions: {get_param: ContrailExtensions}
+ neutron::plugins::opencontrail::keystone_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri] }
+ neutron::plugins::opencontrail::keystone_admin_user: admin
+ neutron::plugins::opencontrail::keystone_admin_tenant_name: admin
+ neutron::plugins::opencontrail::keystone_admin_password: {get_param: AdminPassword}
+ neutron::plugins::opencontrail::keystone_admin_token: {get_param: AdminToken}
+ step_config: |
+ include tripleo::profile::base::neutron::plugins::opencontrail
diff --git a/puppet/services/nova-compute.yaml b/puppet/services/nova-compute.yaml
index 0844aa85..679586f7 100644
--- a/puppet/services/nova-compute.yaml
+++ b/puppet/services/nova-compute.yaml
@@ -16,10 +16,18 @@ resources:
outputs:
role_data:
- description: Role data for the Nova Conductor service.
+ description: Role data for the Nova Compute service.
value:
config_settings:
map_merge:
- get_attr: [NovaBase, role_data, config_settings]
+ - nova::compute::libvirt::manage_libvirt_services: false
+ # we manage migration in nova common puppet profile
+ nova::compute::libvirt::migration_support: false
+ tripleo::profile::base::nova::manage_migration: true
+ tripleo::profile::base::nova::nova_compute_enabled: true
step_config: |
- include tripleo::profile::base::nova::compute
+ # TODO(emilien): figure how to deal with libvirt profile.
+ # We'll probably threat it like we do with Neutron plugins.
+ # Until then, just include it in the default nova-compute role.
+ include tripleo::profile::base::nova::compute::libvirt
diff --git a/puppet/services/nova-libvirt.yaml b/puppet/services/nova-libvirt.yaml
new file mode 100644
index 00000000..e3309c32
--- /dev/null
+++ b/puppet/services/nova-libvirt.yaml
@@ -0,0 +1,31 @@
+heat_template_version: 2016-04-08
+
+description: >
+ Libvirt service configured with Puppet
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+
+resources:
+ NovaBase:
+ type: ./nova-base.yaml
+
+outputs:
+ role_data:
+ description: Role data for the Libvirt service.
+ value:
+ config_settings:
+ map_merge:
+ - get_attr: [NovaBase, role_data, config_settings]
+ # we include ::nova::compute::libvirt::services in nova/libvirt profile
+ - nova::compute::libvirt::manage_libvirt_services: false
+ # we manage migration in nova common puppet profile
+ nova::compute::libvirt::migration_support: false
+ tripleo::profile::base::nova::manage_migration: true
+ tripleo::profile::base::nova::libvirt_enabled: true
+ step_config: |
+ include tripleo::profile::base::nova::libvirt
diff --git a/puppet/services/pacemaker/heat-api-cfn.yaml b/puppet/services/pacemaker/heat-api-cfn.yaml
index 5833c42d..780c295e 100644
--- a/puppet/services/pacemaker/heat-api-cfn.yaml
+++ b/puppet/services/pacemaker/heat-api-cfn.yaml
@@ -25,7 +25,5 @@ outputs:
- get_attr: [HeatApiCfnBase, role_data, config_settings]
- heat::api_cfn::manage_service: false
heat::api_cfn::enabled: false
- step_config:
- # No puppet manifests since heat-api-cfn is included in
- # ::tripleo::profile::pacemaker::heat which is maintained alongside of
- # pacemaker/heat-api.yaml.
+ step_config: |
+ include ::tripleo::profile::pacemaker::heat::api_cfn
diff --git a/puppet/services/pacemaker/heat-api-cloudwatch.yaml b/puppet/services/pacemaker/heat-api-cloudwatch.yaml
index 8b67702c..2fa82fe7 100644
--- a/puppet/services/pacemaker/heat-api-cloudwatch.yaml
+++ b/puppet/services/pacemaker/heat-api-cloudwatch.yaml
@@ -25,7 +25,5 @@ outputs:
- get_attr: [HeatApiCloudwatchBase, role_data, config_settings]
- heat::api_cloudwatch::manage_service: false
heat::api_cloudwatch::enabled: false
- step_config:
- # No puppet manifests since heat-api-cloudwatch is included in
- # ::tripleo::profile::pacemaker::heat which is maintained alongside of
- # pacemaker/heat-api.yaml.
+ step_config: |
+ include ::tripleo::profile::pacemaker::heat::api_cloudwatch
diff --git a/puppet/services/pacemaker/heat-api.yaml b/puppet/services/pacemaker/heat-api.yaml
index 6628e8dd..be897a55 100644
--- a/puppet/services/pacemaker/heat-api.yaml
+++ b/puppet/services/pacemaker/heat-api.yaml
@@ -26,4 +26,4 @@ outputs:
- heat::api::manage_service: false
heat::api::enabled: false
step_config: |
- include ::tripleo::profile::pacemaker::heat
+ include ::tripleo::profile::pacemaker::heat::api
diff --git a/puppet/services/pacemaker/heat-engine.yaml b/puppet/services/pacemaker/heat-engine.yaml
index e1195780..a8ed5c0c 100644
--- a/puppet/services/pacemaker/heat-engine.yaml
+++ b/puppet/services/pacemaker/heat-engine.yaml
@@ -26,7 +26,5 @@ outputs:
- get_attr: [HeatEngineBase, role_data, config_settings]
- heat::engine::manage_service: false
heat::engine::enabled: false
- step_config:
- # No puppet manifests since heat-engine is included in
- # ::tripleo::profile::pacemaker::heat which is maintained alongside of
- # pacemaker/heat-api.yaml.
+ step_config: |
+ include ::tripleo::profile::pacemaker::heat::engine
diff --git a/puppet/services/pacemaker/neutron-plugin-ml2.yaml b/puppet/services/pacemaker/neutron-plugin-ml2.yaml
index ac9d2402..9091b5b9 100644
--- a/puppet/services/pacemaker/neutron-plugin-ml2.yaml
+++ b/puppet/services/pacemaker/neutron-plugin-ml2.yaml
@@ -25,4 +25,4 @@ outputs:
- neutron::agents::ml2::ovs::enabled: false
neutron::agents::ml2::ovs::manage_service: false
step_config: |
- include ::tripleo::profile::pacemaker::neutron::ml2
+ include ::tripleo::profile::pacemaker::neutron::plugins::ml2
diff --git a/puppet/services/pacemaker/neutron-plugin-nuage.yaml b/puppet/services/pacemaker/neutron-plugin-nuage.yaml
new file mode 100644
index 00000000..704d922a
--- /dev/null
+++ b/puppet/services/pacemaker/neutron-plugin-nuage.yaml
@@ -0,0 +1,28 @@
+heat_template_version: 2016-04-08
+
+description: >
+ OpenStack Neutron Nuage Plugin with Pacemaker configured with Puppet
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+
+resources:
+
+ NeutronPluginNuageBase:
+ type: ../neutron-plugin-nuage.yaml
+ properties:
+ EndpointMap: {get_param: EndpointMap}
+
+outputs:
+ role_data:
+ description: Role data for the Neutron Nuage plugin.
+ value:
+ config_settings:
+ map_merge:
+ - get_attr: [NeutronPluginNuageBase, role_data, config_settings]
+ step_config: |
+ include ::tripleo::profile::pacemaker::neutron::plugins::nuage
diff --git a/puppet/services/pacemaker/neutron-plugin-opencontrail.yaml b/puppet/services/pacemaker/neutron-plugin-opencontrail.yaml
new file mode 100644
index 00000000..d8c75509
--- /dev/null
+++ b/puppet/services/pacemaker/neutron-plugin-opencontrail.yaml
@@ -0,0 +1,28 @@
+heat_template_version: 2016-04-08
+
+description: >
+ OpenStack Neutron OpenContrail Plugin with Pacemaker configured with Puppet
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+
+resources:
+
+ NeutronPluginOpenContrail:
+ type: ../neutron-plugin-nuage.yaml
+ properties:
+ EndpointMap: {get_param: EndpointMap}
+
+outputs:
+ role_data:
+ description: Role data for the Neutron OpenContrail plugin.
+ value:
+ config_settings:
+ map_merge:
+ - get_attr: [NeutronPluginOpenContrail, role_data, config_settings]
+ step_config: |
+ include ::tripleo::profile::pacemaker::neutron::plugins::opencontrail
diff --git a/puppet/services/rabbitmq.yaml b/puppet/services/rabbitmq.yaml
index 581b4ba4..3688c4a8 100644
--- a/puppet/services/rabbitmq.yaml
+++ b/puppet/services/rabbitmq.yaml
@@ -18,7 +18,7 @@ parameters:
type: string
hidden: true
RabbitFDLimit:
- default: 16384
+ default: 65536
description: Configures RabbitMQ FD limit
type: string
RabbitIPv6:
diff --git a/puppet/services/services.yaml b/puppet/services/services.yaml
index 7ed880fc..91f0e049 100644
--- a/puppet/services/services.yaml
+++ b/puppet/services/services.yaml
@@ -27,9 +27,8 @@ resources:
EndpointMap: {get_param: EndpointMap}
outputs:
- config_settings:
- description: Configuration settings.
- value: {map_merge: {get_attr: [ServiceChain, role_data, config_settings]}}
- step_config:
- description: Step configuration.
- value: {list_join: ["\n", {get_attr: [ServiceChain, role_data, step_config]}]}
+ role_data:
+ description: Combined Role data for this set of services.
+ value:
+ config_settings: {map_merge: {get_attr: [ServiceChain, role_data, config_settings]}}
+ step_config: {list_join: ["\n", {get_attr: [ServiceChain, role_data, step_config]}]}
diff --git a/puppet/services/snmp.yaml b/puppet/services/snmp.yaml
new file mode 100644
index 00000000..24ee2933
--- /dev/null
+++ b/puppet/services/snmp.yaml
@@ -0,0 +1,31 @@
+heat_template_version: 2016-04-08
+
+description: >
+ SNMP client configured with Puppet, to facilitate Ceilometer Hardware
+ monitoring in the undercloud. This service is required to enable hardware
+ monitoring.
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+ SnmpdReadonlyUserName:
+ default: ro_snmp_user
+ description: The user name for SNMPd with readonly rights running on all Overcloud nodes
+ type: string
+ SnmpdReadonlyUserPassword:
+ description: The user password for SNMPd with readonly rights running on all Overcloud nodes
+ type: string
+ hidden: true
+
+outputs:
+ role_data:
+ description: Role data for the SNMP services
+ value:
+ config_settings:
+ snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
+ snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
+ step_config: |
+ include ::tripleo::profile::base::snmp
diff --git a/puppet/services/swift-storage.yaml b/puppet/services/swift-storage.yaml
new file mode 100644
index 00000000..980c95f5
--- /dev/null
+++ b/puppet/services/swift-storage.yaml
@@ -0,0 +1,44 @@
+heat_template_version: 2016-04-08
+
+description: >
+ OpenStack Swift Storage service configured with Puppet
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+ Debug:
+ default: ''
+ description: Set to True to enable debugging on all services.
+ type: string
+ SwiftMountCheck:
+ default: false
+ description: Value of mount_check in Swift account/container/object -server.conf
+ type: boolean
+
+ # DEPRECATED options for compatibility with overcloud.yaml
+ # This should be removed and manipulation of the ControllerServices list
+ # used instead, but we need client support for that first
+ ControllerEnableSwiftStorage:
+ default: true
+ description: Whether to enable Swift Storage on the Controller
+ type: boolean
+
+parameter_groups:
+- label: deprecated
+ description: Do not use deprecated params, they will be removed.
+ parameters:
+ - ControllerEnableSwiftStorage
+
+outputs:
+ role_data:
+ description: Role data for the Swift Proxy role.
+ value:
+ config_settings:
+ # Swift
+ swift::storage::all::mount_check: {get_param: SwiftMountCheck}
+ tripleo::profile::base::swift::storage::enable_swift_storage: {get_param: ControllerEnableSwiftStorage}
+ step_config: |
+ include ::tripleo::profile::base::swift::storage
diff --git a/puppet/services/time/ntp.yaml b/puppet/services/time/ntp.yaml
new file mode 100644
index 00000000..930dca41
--- /dev/null
+++ b/puppet/services/time/ntp.yaml
@@ -0,0 +1,27 @@
+heat_template_version: 2016-04-08
+
+description: >
+ NTP service deployment using puppet, this YAML file
+ creates the interface between the HOT template
+ and the puppet manifest that actually installs
+ and configure NTP.
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+ NtpServer:
+ default: []
+ description: NTP servers
+ type: comma_delimited_list
+
+outputs:
+ role_data:
+ description: Role ntp using composable services.
+ value:
+ config_settings:
+ ntp::ntpservers: {get_param: NtpServer}
+ step_config: |
+ include ::ntp
diff --git a/puppet/services/time/timezone.yaml b/puppet/services/time/timezone.yaml
new file mode 100644
index 00000000..13fda986
--- /dev/null
+++ b/puppet/services/time/timezone.yaml
@@ -0,0 +1,24 @@
+heat_template_version: 2016-04-08
+
+description: >
+ Composable Timezone service
+
+parameters:
+ EndpointMap:
+ default: {}
+ description: Mapping of service endpoint -> protocol. Typically set
+ via parameter_defaults in the resource registry.
+ type: json
+ TimeZone:
+ default: 'UTC'
+ description: The timezone to be set on the overcloud.
+ type: string
+
+outputs:
+ role_data:
+ description: Timezone role using composable services.
+ value:
+ config_settings:
+ timezone::timezone: {get_param: TimeZone}
+ step_config: |
+ include ::timezone
diff --git a/puppet/swift-storage-post.yaml b/puppet/swift-storage-post.yaml
index 1aba2bb4..1c36a047 100644
--- a/puppet/swift-storage-post.yaml
+++ b/puppet/swift-storage-post.yaml
@@ -8,13 +8,12 @@ parameters:
type: boolean
servers:
type: json
- NodeConfigIdentifiers:
- type: json
- description: Value which changes if the node configuration may need to be re-applied
- StepConfig:
+ RoleData:
+ type: json
+ default: {}
+ DeployIdentifier:
type: string
- description: Config manifests that will be used to step through the deployment.
- default: ''
+ description: Value which changes if the node configuration may need to be re-applied
resources:
@@ -27,7 +26,7 @@ resources:
servers: {get_param: servers}
config: {get_resource: StorageArtifactsConfig}
input_values:
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
StoragePuppetConfig:
type: OS::Heat::SoftwareConfig
@@ -46,7 +45,7 @@ resources:
- ''
- - get_file: manifests/overcloud_object.pp
- get_file: manifests/ringbuilder.pp
- - {get_param: StepConfig}
+ - {get_param: [RoleData, step_config]}
StorageRingbuilderDeployment_Step2:
type: OS::Heat::StructuredDeployments
@@ -57,7 +56,7 @@ resources:
config: {get_resource: StoragePuppetConfig}
input_values:
step: 2
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
StorageRingbuilderDeployment_Step3:
type: OS::Heat::StructuredDeployments
@@ -68,7 +67,7 @@ resources:
config: {get_resource: StoragePuppetConfig}
input_values:
step: 3
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
StorageDeployment_Step4:
type: OS::Heat::StructuredDeployments
@@ -79,7 +78,7 @@ resources:
config: {get_resource: StoragePuppetConfig}
input_values:
step: 4
- update_identifier: {get_param: NodeConfigIdentifiers}
+ update_identifier: {get_param: DeployIdentifier}
# Note, this should come last, so use depends_on to ensure
# this is created after any other resources.
diff --git a/puppet/swift-storage.yaml b/puppet/swift-storage.yaml
index ed52f928..e663fb6d 100644
--- a/puppet/swift-storage.yaml
+++ b/puppet/swift-storage.yaml
@@ -18,10 +18,6 @@ parameters:
default: default
description: Name of an existing Nova key pair to enable SSH access to the instances
type: string
- MountCheck:
- default: 'false'
- description: Value of mount_check in Swift account/container/object -server.conf
- type: boolean
MinPartHours:
type: number
default: 1
@@ -46,10 +42,6 @@ parameters:
description: The user password for SNMPd with readonly rights running on all Overcloud nodes
type: string
hidden: true
- NtpServer:
- default: ''
- description: Comma-separated list of ntp servers
- type: comma_delimited_list
EnablePackageInstall:
default: 'false'
description: Set to true to enable package installation via Puppet
@@ -65,10 +57,6 @@ parameters:
description: Mapping of service_name -> network name. Typically set
via parameter_defaults in the resource registry.
type: json
- TimeZone:
- default: 'UTC'
- description: The timezone to be set on Ceph nodes.
- type: string
Hostname:
type: string
default: '' # Defaults to Heat created hostname
@@ -290,10 +278,7 @@ resources:
tripleo::ringbuilder::part_power: { get_input: swift_part_power }
tripleo::ringbuilder::replicas: {get_input: swift_replicas }
swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
- swift_mount_check: {get_input: swift_mount_check }
tripleo::ringbuilder::min_part_hours: { get_input: swift_min_part_hours }
- ntp::servers: {get_input: ntp_servers}
- timezone::timezone: {get_input: timezone}
snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
tripleo::packages::enable_install: {get_input: enable_package_install}
@@ -312,13 +297,10 @@ resources:
snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
swift_hash_suffix: {get_param: HashSuffix}
- swift_mount_check: {get_param: MountCheck}
swift_min_part_hours: {get_param: MinPartHours}
swift_ring_build: {get_param: RingBuild}
swift_part_power: {get_param: PartPower}
swift_replicas: { get_param: Replicas}
- ntp_servers: {get_param: NtpServer}
- timezone: {get_param: TimeZone}
enable_package_install: {get_param: EnablePackageInstall}
enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
@@ -431,11 +413,3 @@ outputs:
management_ip_address:
description: IP address of the server in the management network
value: {get_attr: [ManagementPort, ip_address]}
- config_identifier:
- description: identifier which changes if the node configuration may need re-applying
- value:
- list_join:
- - ','
- - - {get_attr: [SwiftStorageHieraDeploy, deploy_stdout]}
- - {get_attr: [NodeTLSCAData, deploy_stdout]}
- - {get_param: UpdateIdentifier}
diff --git a/puppet/vip-config.yaml b/puppet/vip-config.yaml
index 92234b6c..51129053 100644
--- a/puppet/vip-config.yaml
+++ b/puppet/vip-config.yaml
@@ -37,6 +37,7 @@ resources:
internal_api_virtual_ip: {get_input: internal_api_virtual_ip}
storage_virtual_ip: {get_input: storage_virtual_ip}
storage_mgmt_virtual_ip: {get_input: storage_mgmt_virtual_ip}
+ ironic_api_vip: {get_input: ironic_api_vip}
# public_virtual_ip and controller_virtual_ip are needed in
# both HAproxy & keepalived.
tripleo::haproxy::public_virtual_ip: {get_input: public_virtual_ip}