aboutsummaryrefslogtreecommitdiffstats
path: root/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'puppet')
-rw-r--r--puppet/all-nodes-config.yaml1
-rw-r--r--puppet/ceph-cluster-config.yaml13
-rw-r--r--puppet/ceph-storage-puppet.yaml31
-rw-r--r--puppet/cinder-storage-puppet.yaml20
-rw-r--r--puppet/compute-puppet.yaml46
-rw-r--r--puppet/controller-puppet.yaml78
-rw-r--r--puppet/extraconfig/ceph/ceph-external-config.yaml65
-rw-r--r--puppet/hieradata/common.yaml1
-rw-r--r--puppet/hieradata/controller.yaml1
-rw-r--r--puppet/hieradata/database.yaml55
-rw-r--r--puppet/manifests/overcloud_controller.pp88
-rw-r--r--puppet/manifests/overcloud_controller_pacemaker.pp68
-rw-r--r--puppet/swift-storage-puppet.yaml20
13 files changed, 339 insertions, 148 deletions
diff --git a/puppet/all-nodes-config.yaml b/puppet/all-nodes-config.yaml
index 060f4c81..2bc519bb 100644
--- a/puppet/all-nodes-config.yaml
+++ b/puppet/all-nodes-config.yaml
@@ -238,6 +238,7 @@ resources:
heat::rabbit_hosts: *rabbit_nodes_array
neutron::rabbit_hosts: *rabbit_nodes_array
nova::rabbit_hosts: *rabbit_nodes_array
+ keystone::rabbit_hosts: *rabbit_nodes_array
outputs:
config_id:
diff --git a/puppet/ceph-cluster-config.yaml b/puppet/ceph-cluster-config.yaml
index 33b18574..99265493 100644
--- a/puppet/ceph-cluster-config.yaml
+++ b/puppet/ceph-cluster-config.yaml
@@ -2,6 +2,18 @@ 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 'openstack' user keyring.
ceph_fsid:
default: ''
type: string
@@ -26,6 +38,7 @@ resources:
datafiles:
ceph_cluster:
mapped_data:
+ ceph_storage_count: {get_param: ceph_storage_count}
ceph_mon_initial_members:
list_join:
- ','
diff --git a/puppet/ceph-storage-puppet.yaml b/puppet/ceph-storage-puppet.yaml
index fcf4259f..f08b83cd 100644
--- a/puppet/ceph-storage-puppet.yaml
+++ b/puppet/ceph-storage-puppet.yaml
@@ -66,9 +66,26 @@ resources:
networks:
- network: ctlplane
user_data_format: SOFTWARE_CONFIG
- user_data: {get_resource: NodeUserData}
+ user_data: {get_resource: UserData}
name: {get_param: Hostname}
+ # Combine the NodeAdminUserData and NodeUserData mime archives
+ UserData:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: NodeAdminUserData}
+ type: multipart
+ - config: {get_resource: NodeUserData}
+ type: multipart
+
+ # Creates the "heat-admin" user if configured via the environment
+ # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+ NodeAdminUserData:
+ type: OS::TripleO::NodeAdminUserData
+
+ # For optional operator additional userdata
+ # Should return a OS::Heat::MultipartMime reference via OS::stack_id
NodeUserData:
type: OS::TripleO::NodeUserData
@@ -91,14 +108,16 @@ resources:
NetIpMap:
type: OS::TripleO::Network::Ports::NetIpMap
properties:
+ ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
StorageIp: {get_attr: [StoragePort, ip_address]}
StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
NetIpSubnetMap:
- type: OS::TripleO::Network::Ports::NetIpMap
+ type: OS::TripleO::Network::Ports::NetIpSubnetMap
properties:
- StorageIp: {get_attr: [StoragePort, ip_subnet]}
- StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_subnet]}
+ ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
+ StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
+ StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
NetworkDeployment:
type: OS::TripleO::SoftwareDeployment
@@ -119,8 +138,8 @@ resources:
params:
server: {get_param: NtpServer}
enable_package_install: {get_param: EnablePackageInstall}
- ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
- ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
+ ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
+ ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
CephStorageConfig:
type: OS::Heat::StructuredConfig
diff --git a/puppet/cinder-storage-puppet.yaml b/puppet/cinder-storage-puppet.yaml
index 091d1f1b..d764c6f7 100644
--- a/puppet/cinder-storage-puppet.yaml
+++ b/puppet/cinder-storage-puppet.yaml
@@ -120,9 +120,26 @@ resources:
networks:
- network: ctlplane
user_data_format: SOFTWARE_CONFIG
- user_data: {get_resource: NodeUserData}
+ user_data: {get_resource: UserData}
name: {get_param: Hostname}
+ # Combine the NodeAdminUserData and NodeUserData mime archives
+ UserData:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: NodeAdminUserData}
+ type: multipart
+ - config: {get_resource: NodeUserData}
+ type: multipart
+
+ # Creates the "heat-admin" user if configured via the environment
+ # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+ NodeAdminUserData:
+ type: OS::TripleO::NodeAdminUserData
+
+ # For optional operator additional userdata
+ # Should return a OS::Heat::MultipartMime reference via OS::stack_id
NodeUserData:
type: OS::TripleO::NodeUserData
@@ -151,6 +168,7 @@ resources:
NetIpMap:
type: OS::TripleO::Network::Ports::NetIpMap
properties:
+ ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
StorageIp: {get_attr: [StoragePort, ip_address]}
StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
diff --git a/puppet/compute-puppet.yaml b/puppet/compute-puppet.yaml
index e85a96aa..74e9b63e 100644
--- a/puppet/compute-puppet.yaml
+++ b/puppet/compute-puppet.yaml
@@ -70,9 +70,12 @@ parameters:
default: default
constraints:
- custom_constraint: nova.keypair
- KeystoneHost:
+ KeystoneAdminApiVirtualIP:
type: string
default: ''
+ KeystonePublicApiVirtualIP:
+ type: string
+ default: ''
NeutronBridgeMappings:
description: >
The OVS logical->physical bridge mappings to use. See the Neutron
@@ -97,7 +100,7 @@ parameters:
NeutronNetworkType:
type: string
description: The tenant network type for Neutron, either gre or vxlan.
- default: 'gre'
+ default: 'vxlan'
NeutronNetworkVLANRanges:
default: 'datacentre'
description: >
@@ -123,7 +126,7 @@ parameters:
description: |
The tunnel types for the Neutron tenant network. To specify multiple
values, use a comma separated string, like so: 'gre,vxlan'
- default: 'gre'
+ default: 'vxlan'
NeutronTunnelIdRanges:
description: |
Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
@@ -260,9 +263,26 @@ resources:
networks:
- network: ctlplane
user_data_format: SOFTWARE_CONFIG
- user_data: {get_resource: NodeUserData}
+ user_data: {get_resource: UserData}
name: {get_param: Hostname}
+ # Combine the NodeAdminUserData and NodeUserData mime archives
+ UserData:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: NodeAdminUserData}
+ type: multipart
+ - config: {get_resource: NodeUserData}
+ type: multipart
+
+ # Creates the "heat-admin" user if configured via the environment
+ # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+ NodeAdminUserData:
+ type: OS::TripleO::NodeAdminUserData
+
+ # For optional operator additional userdata
+ # Should return a OS::Heat::MultipartMime reference via OS::stack_id
NodeUserData:
type: OS::TripleO::NodeUserData
@@ -284,6 +304,7 @@ resources:
NetIpMap:
type: OS::TripleO::Network::Ports::NetIpMap
properties:
+ ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
StorageIp: {get_attr: [StoragePort, ip_address]}
TenantIp: {get_attr: [TenantPort, ip_address]}
@@ -410,7 +431,7 @@ resources:
list_join:
- ''
- - 'http://'
- - {get_param: KeystoneHost}
+ - {get_param: KeystonePublicApiVirtualIP}
- ':5000/v2.0'
snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
@@ -471,7 +492,7 @@ resources:
list_join:
- ''
- - 'http://'
- - {get_param: NeutronHost}
+ - {get_param: KeystoneAdminApiVirtualIP}
- ':35357/v2.0'
admin_password: {get_param: AdminPassword}
rabbit_username: {get_param: RabbitUserName}
@@ -485,6 +506,13 @@ resources:
server: {get_param: NtpServer}
enable_package_install: {get_param: EnablePackageInstall}
+ # Hook for site-specific additional pre-deployment config, e.g extra hieradata
+ ComputeExtraConfigPre:
+ depends_on: NovaComputeDeployment
+ type: OS::TripleO::ComputeExtraConfigPre
+ properties:
+ server: {get_resource: NovaCompute}
+
UpdateConfig:
type: OS::TripleO::Tasks::PackageUpdate
@@ -528,4 +556,8 @@ outputs:
{get_resource: NovaCompute}
config_identifier:
description: identifier which changes if the node configuration may need re-applying
- value: {get_attr: [NovaComputeDeployment, deploy_stdout]}
+ value:
+ list_join:
+ - ','
+ - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
+ - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
diff --git a/puppet/controller-puppet.yaml b/puppet/controller-puppet.yaml
index 89b35c31..f1849e3e 100644
--- a/puppet/controller-puppet.yaml
+++ b/puppet/controller-puppet.yaml
@@ -227,6 +227,16 @@ parameters:
description: Keystone key for signing tokens.
type: string
hidden: true
+ KeystoneNotificationDriver:
+ description: Comma-separated list of Oslo notification drivers used by Keystone
+ default: ['messaging']
+ type: comma_delimited_list
+ KeystoneNotificationFormat:
+ description: The Keystone notification format
+ default: 'basic'
+ type: string
+ constraints:
+ - allowed_values: [ 'basic', 'cadf' ]
MysqlClusterUniquePart:
description: A unique identifier of the MySQL cluster the controller is in.
type: string
@@ -309,7 +319,7 @@ parameters:
description: Whether to enable l3-agent HA
type: string
NeutronNetworkType:
- default: 'gre'
+ default: 'vxlan'
description: The tenant network type for Neutron, either gre or vxlan.
type: string
NeutronNetworkVLANRanges:
@@ -351,7 +361,7 @@ parameters:
description: If set, the public interface is a vlan with this device as the raw device.
type: string
NeutronTunnelTypes:
- default: 'gre'
+ default: 'vxlan'
description: |
The tunnel types for the Neutron tenant network. To specify multiple
values, use a comma separated string, like so: 'gre,vxlan'
@@ -481,6 +491,9 @@ parameters:
MysqlVirtualIP:
type: string
default: ''
+ KeystoneAdminApiVirtualIP:
+ type: string
+ default: ''
KeystonePublicApiVirtualIP:
type: string
default: ''
@@ -518,9 +531,26 @@ resources:
networks:
- network: ctlplane
user_data_format: SOFTWARE_CONFIG
- user_data: {get_resource: NodeUserData}
+ user_data: {get_resource: UserData}
name: {get_param: Hostname}
+ # Combine the NodeAdminUserData and NodeUserData mime archives
+ UserData:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: NodeAdminUserData}
+ type: multipart
+ - config: {get_resource: NodeUserData}
+ type: multipart
+
+ # Creates the "heat-admin" user if configured via the environment
+ # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+ NodeAdminUserData:
+ type: OS::TripleO::NodeAdminUserData
+
+ # For optional operator additional userdata
+ # Should return a OS::Heat::MultipartMime reference via OS::stack_id
NodeUserData:
type: OS::TripleO::NodeUserData
@@ -552,6 +582,7 @@ resources:
NetIpMap:
type: OS::TripleO::Network::Ports::NetIpMap
properties:
+ ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
ExternalIp: {get_attr: [ExternalPort, ip_address]}
InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
StorageIp: {get_attr: [StoragePort, ip_address]}
@@ -559,13 +590,14 @@ resources:
TenantIp: {get_attr: [TenantPort, ip_address]}
NetIpSubnetMap:
- type: OS::TripleO::Network::Ports::NetIpMap
+ type: OS::TripleO::Network::Ports::NetIpSubnetMap
properties:
- ExternalIp: {get_attr: [ExternalPort, ip_subnet]}
- InternalApiIp: {get_attr: [InternalApiPort, ip_subnet]}
- StorageIp: {get_attr: [StoragePort, ip_subnet]}
- StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_subnet]}
- TenantIp: {get_attr: [TenantPort, ip_subnet]}
+ ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
+ ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
+ InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
+ StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
+ StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
+ TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
NetworkConfig:
type: OS::TripleO::Controller::Net::SoftwareConfig
@@ -671,6 +703,8 @@ resources:
keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
+ keystone_notification_driver: {get_param: KeystoneNotificationDriver}
+ keystone_notification_format: {get_param: KeystoneNotificationFormat}
keystone_dsn:
list_join:
- ''
@@ -683,7 +717,7 @@ resources:
list_join:
- ''
- - 'http://'
- - {get_param: KeystonePublicApiVirtualIP}
+ - {get_param: KeystoneAdminApiVirtualIP}
- ':35357/'
keystone_auth_uri:
list_join:
@@ -769,7 +803,7 @@ resources:
list_join:
- ''
- - 'http://'
- - {get_param: KeystonePublicApiVirtualIP}
+ - {get_param: KeystoneAdminApiVirtualIP}
- ':35357/v2.0'
ceilometer_backend: {get_param: CeilometerBackend}
ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
@@ -848,8 +882,9 @@ resources:
redis_vip: {get_param: RedisVirtualIP}
memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
- ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
- ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
+ mysql_virtual_ip: {get_param: MysqlVirtualIP}
+ ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
+ ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
# Map heat metadata into hiera datafiles
@@ -864,6 +899,7 @@ resources:
- controller_extraconfig
- extraconfig
- controller
+ - database
- object
- swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
- ceph_cluster # provided by CephClusterConfig
@@ -887,6 +923,8 @@ resources:
ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
ceph::profile::params::public_network: {get_input: ceph_public_network}
ceph::mon::public_addr: {get_input: ceph_public_ip}
+ database:
+ raw_data: {get_file: hieradata/database.yaml}
object:
raw_data: {get_file: hieradata/object.yaml}
controller:
@@ -936,6 +974,7 @@ resources:
cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
cinder::glance::glance_api_servers: {get_input: glance_api_servers}
cinder_backend_config: {get_input: CinderBackendConfig}
+ cinder::db::mysql::password: {get_input: cinder_password}
# Glance
glance::api::bind_port: {get_input: glance_port}
@@ -959,6 +998,7 @@ resources:
glance::backend::swift::swift_store_user: service:glance
glance::backend::swift::swift_store_key: {get_input: glance_password}
glance_backend: {get_input: glance_backend}
+ glance::db::mysql::password: {get_input: glance_password}
# Heat
heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
@@ -979,6 +1019,7 @@ resources:
heat::api_cfn::bind_host: {get_input: heat_api_network}
heat::database_connection: {get_input: heat_dsn}
heat::debug: {get_input: debug}
+ heat::db::mysql::password: {get_input: heat_password}
# Keystone
keystone::admin_token: {get_input: admin_token}
@@ -991,6 +1032,13 @@ resources:
keystone::public_bind_host: {get_input: keystone_public_api_network}
keystone::admin_bind_host: {get_input: keystone_admin_api_network}
keystone::debug: {get_input: debug}
+ keystone::db::mysql::password: {get_input: admin_token}
+ keystone::rabbit_userid: {get_input: rabbit_username}
+ keystone::rabbit_password: {get_input: rabbit_password}
+ keystone::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
+ keystone::rabbit_port: {get_input: rabbit_client_port}
+ keystone::notification_driver: {get_input: keystone_notification_driver}
+ keystone::notification_format: {get_input: keystone_notification_format}
# MongoDB
mongodb::server::bind_ip: {get_input: mongo_db_network}
mongodb::server::nojournal: {get_input: mongodb_no_journal}
@@ -1004,6 +1052,7 @@ resources:
mysql::server::root_password: {get_input: mysql_root_password}
mysql_cluster_name: {get_input: mysql_cluster_name}
mysql_bind_host: {get_input: mysql_network}
+ mysql_virtual_ip: {get_input: mysql_virtual_ip}
# Neutron
neutron::bind_host: {get_input: neutron_api_network}
@@ -1042,6 +1091,7 @@ resources:
neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
neutron_dsn: {get_input: neutron_dsn}
neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
+ neutron::db::mysql::password: {get_input: neutron_password}
# Ceilometer
ceilometer_backend: {get_input: ceilometer_backend}
@@ -1059,6 +1109,7 @@ resources:
ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
ceilometer::agent::auth::auth_url: {get_input: keystone_auth_address}
ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
+ ceilometer::db::mysql::password: {get_input: ceilometer_password}
snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
@@ -1080,6 +1131,7 @@ resources:
nova::network::neutron::neutron_url: {get_input: neutron_url}
nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
nova::vncproxy::host: {get_input: nova_api_network}
+ nova::db::mysql::password: {get_input: nova_password}
# Horizon
apache::ip: {get_input: horizon_network}
diff --git a/puppet/extraconfig/ceph/ceph-external-config.yaml b/puppet/extraconfig/ceph/ceph-external-config.yaml
new file mode 100644
index 00000000..62907104
--- /dev/null
+++ b/puppet/extraconfig/ceph/ceph-external-config.yaml
@@ -0,0 +1,65 @@
+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
+
+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::profile::params::mon_host: {get_param: ceph_external_mon_ips}
+ ceph::profile::params::fsid: {get_param: ceph_fsid}
+ ceph::profile::params::client_keys:
+ str_replace:
+ template: "{
+ client.openstack: {
+ secret: 'CLIENT_KEY',
+ mode: '0644',
+ cap_mon: 'allow r',
+ cap_osd: 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rwx pool=images'
+ }
+ }"
+ params:
+ CLIENT_KEY: {get_param: ceph_client_key}
+
+
+outputs:
+ config_id:
+ description: The ID of the CephClusterConfigImpl resource.
+ value:
+ {get_resource: CephClusterConfigImpl}
diff --git a/puppet/hieradata/common.yaml b/puppet/hieradata/common.yaml
index ab88a69a..455f7f22 100644
--- a/puppet/hieradata/common.yaml
+++ b/puppet/hieradata/common.yaml
@@ -33,3 +33,4 @@ neutron::rabbit_heartbeat_timeout_threshold: 60
cinder::rabbit_heartbeat_timeout_threshold: 60
ceilometer::rabbit_heartbeat_timeout_threshold: 60
heat::rabbit_heartbeat_timeout_threshold: 60
+keystone::rabbit_heartbeat_timeout_threshold: 60
diff --git a/puppet/hieradata/controller.yaml b/puppet/hieradata/controller.yaml
index fdbaf716..48def44d 100644
--- a/puppet/hieradata/controller.yaml
+++ b/puppet/hieradata/controller.yaml
@@ -75,6 +75,7 @@ neutron::agents::dhcp::dnsmasq_config_file: /etc/neutron/dnsmasq-neutron.conf
# nova
nova::notify_on_state_change: 'vm_and_task_state'
nova::api::osapi_v3: true
+nova::scheduler::filter::ram_allocation_ratio: '1.0'
nova::config::nova_config:
DEFAULT/default_floating_pool:
diff --git a/puppet/hieradata/database.yaml b/puppet/hieradata/database.yaml
new file mode 100644
index 00000000..7e925d90
--- /dev/null
+++ b/puppet/hieradata/database.yaml
@@ -0,0 +1,55 @@
+# Nova
+nova::db::mysql::user: nova
+nova::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+nova::db::mysql::dbname: nova
+nova::db::mysql::allowed_hosts:
+ - '%'
+ - "%{hiera('mysql_bind_host')}"
+
+# Glance
+glance::db::mysql::user: glance
+glance::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+glance::db::mysql::dbname: glance
+glance::db::mysql::allowed_hosts:
+ - '%'
+ - "%{hiera('mysql_bind_host')}"
+
+# Keystone
+keystone::db::mysql::user: keystone
+keystone::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+keystone::db::mysql::dbname: keystone
+keystone::db::mysql::allowed_hosts:
+ - '%'
+ - "%{hiera('mysql_bind_host')}"
+
+# Neutron
+neutron::db::mysql::user: neutron
+neutron::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+neutron::db::mysql::dbname: ovs_neutron
+neutron::db::mysql::allowed_hosts:
+ - '%'
+ - "%{hiera('mysql_bind_host')}"
+
+# Cinder
+cinder::db::mysql::user: cinder
+cinder::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+cinder::db::mysql::dbname: cinder
+cinder::db::mysql::allowed_hosts:
+ - '%'
+ - "%{hiera('mysql_bind_host')}"
+
+# Heat
+heat::db::mysql::user: heat
+heat::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+heat::db::mysql::dbname: heat
+heat::db::mysql::allowed_hosts:
+ - '%'
+ - "%{hiera('mysql_bind_host')}"
+
+# Ceilometer
+ceilometer::db::mysql::user: ceilometer
+ceilometer::db::mysql::host: "%{hiera('mysql_virtual_ip')}"
+ceilometer::db::mysql::dbname: ceilometer
+ceilometer::db::mysql::allowed_hosts:
+ - '%'
+ - "%{hiera('mysql_bind_host')}"
diff --git a/puppet/manifests/overcloud_controller.pp b/puppet/manifests/overcloud_controller.pp
index f8ffb8fb..6cf01826 100644
--- a/puppet/manifests/overcloud_controller.pp
+++ b/puppet/manifests/overcloud_controller.pp
@@ -89,65 +89,14 @@ if hiera('step') >= 2 {
# FIXME: this should only occur on the bootstrap host (ditto for db syncs)
# Create all the database schemas
- # Example DSN format: mysql://user:password@host/dbname
- $allowed_hosts = ['%',hiera('mysql_bind_host')]
- $keystone_dsn = split(hiera('keystone::database_connection'), '[@:/?]')
- class { 'keystone::db::mysql':
- user => $keystone_dsn[3],
- password => $keystone_dsn[4],
- host => $keystone_dsn[5],
- dbname => $keystone_dsn[6],
- allowed_hosts => $allowed_hosts,
- }
- $glance_dsn = split(hiera('glance::api::database_connection'), '[@:/?]')
- class { 'glance::db::mysql':
- user => $glance_dsn[3],
- password => $glance_dsn[4],
- host => $glance_dsn[5],
- dbname => $glance_dsn[6],
- allowed_hosts => $allowed_hosts,
- }
- $nova_dsn = split(hiera('nova::database_connection'), '[@:/?]')
- class { 'nova::db::mysql':
- user => $nova_dsn[3],
- password => $nova_dsn[4],
- host => $nova_dsn[5],
- dbname => $nova_dsn[6],
- allowed_hosts => $allowed_hosts,
- }
- $neutron_dsn = split(hiera('neutron::server::database_connection'), '[@:/?]')
- class { 'neutron::db::mysql':
- user => $neutron_dsn[3],
- password => $neutron_dsn[4],
- host => $neutron_dsn[5],
- dbname => $neutron_dsn[6],
- allowed_hosts => $allowed_hosts,
- }
- $cinder_dsn = split(hiera('cinder::database_connection'), '[@:/?]')
- class { 'cinder::db::mysql':
- user => $cinder_dsn[3],
- password => $cinder_dsn[4],
- host => $cinder_dsn[5],
- dbname => $cinder_dsn[6],
- allowed_hosts => $allowed_hosts,
- }
- $heat_dsn = split(hiera('heat::database_connection'), '[@:/?]')
- class { 'heat::db::mysql':
- user => $heat_dsn[3],
- password => $heat_dsn[4],
- host => $heat_dsn[5],
- dbname => $heat_dsn[6],
- allowed_hosts => $allowed_hosts,
- }
+ include ::keystone::db::mysql
+ include ::glance::db::mysql
+ include ::nova::db::mysql
+ include ::neutron::db::mysql
+ include ::cinder::db::mysql
+ include ::heat::db::mysql
if downcase(hiera('ceilometer_backend')) == 'mysql' {
- $ceilometer_dsn = split(hiera('ceilometer_mysql_conn_string'), '[@:/?]')
- class { 'ceilometer::db::mysql':
- user => $ceilometer_dsn[3],
- password => $ceilometer_dsn[4],
- host => $ceilometer_dsn[5],
- dbname => $ceilometer_dsn[6],
- allowed_hosts => $allowed_hosts,
- }
+ include ::ceilometer::db::mysql
}
$rabbit_nodes = hiera('rabbit_node_ips')
@@ -173,8 +122,7 @@ if hiera('step') >= 2 {
# pre-install swift here so we can build rings
include ::swift
- $cinder_enable_rbd_backend = hiera('cinder_enable_rbd_backend', false)
- $enable_ceph = $cinder_enable_rbd_backend
+ $enable_ceph = hiera('ceph_storage_count', 0) > 0
if $enable_ceph {
class { 'ceph::profile::params':
@@ -198,10 +146,13 @@ if hiera('step') >= 2 {
} -> Class['ceph::profile::osd']
}
- include ::ceph::profile::client
include ::ceph::profile::osd
}
+ if str2bool(hiera('enable_external_ceph', 'false')) {
+ include ::ceph::profile::client
+ }
+
} #END STEP 2
if hiera('step') >= 3 {
@@ -269,6 +220,7 @@ if hiera('step') >= 3 {
include ::nova::network::neutron
include ::nova::vncproxy
include ::nova::scheduler
+ include ::nova::scheduler::filter
include ::neutron
include ::neutron::server
@@ -287,6 +239,7 @@ if hiera('step') >= 3 {
class { 'neutron::plugins::ml2':
flat_networks => split(hiera('neutron_flat_networks'), ','),
tenant_network_types => [hiera('neutron_tenant_network_type')],
+ mechanism_drivers => [hiera('neutron_mechanism_drivers')],
}
class { 'neutron::agents::ml2::ovs':
bridge_mappings => split(hiera('neutron_bridge_mappings'), ','),
@@ -327,20 +280,21 @@ if hiera('step') >= 3 {
$ceph_pools = hiera('ceph_pools')
ceph::pool { $ceph_pools : }
+
+ $cinder_pool_requires = [Ceph::Pool['volumes']]
+
+ } else {
+ $cinder_pool_requires = []
}
- if $cinder_enable_rbd_backend {
+ if hiera('cinder_enable_rbd_backend', false) {
$cinder_rbd_backend = 'tripleo_ceph'
- cinder_config {
- "${cinder_rbd_backend}/host": value => 'hostgroup';
- }
-
cinder::backend::rbd { $cinder_rbd_backend :
rbd_pool => 'volumes',
rbd_user => 'openstack',
rbd_secret_uuid => hiera('ceph::profile::params::fsid'),
- require => Ceph::Pool['volumes'],
+ require => $cinder_pool_requires,
}
}
diff --git a/puppet/manifests/overcloud_controller_pacemaker.pp b/puppet/manifests/overcloud_controller_pacemaker.pp
index 8303245f..14c01788 100644
--- a/puppet/manifests/overcloud_controller_pacemaker.pp
+++ b/puppet/manifests/overcloud_controller_pacemaker.pp
@@ -407,71 +407,28 @@ MYSQL_HOST=localhost\n",
}
# Create all the database schemas
- # Example DSN format: mysql://user:password@host/dbname
if $sync_db {
- $allowed_hosts = ['%',hiera('mysql_bind_host')]
- $keystone_dsn = split(hiera('keystone::database_connection'), '[@:/?]')
class { 'keystone::db::mysql':
- user => $keystone_dsn[3],
- password => $keystone_dsn[4],
- host => $keystone_dsn[5],
- dbname => $keystone_dsn[6],
- allowed_hosts => $allowed_hosts,
require => Exec['galera-ready'],
}
- $glance_dsn = split(hiera('glance::api::database_connection'), '[@:/?]')
class { 'glance::db::mysql':
- user => $glance_dsn[3],
- password => $glance_dsn[4],
- host => $glance_dsn[5],
- dbname => $glance_dsn[6],
- allowed_hosts => $allowed_hosts,
require => Exec['galera-ready'],
}
- $nova_dsn = split(hiera('nova::database_connection'), '[@:/?]')
class { 'nova::db::mysql':
- user => $nova_dsn[3],
- password => $nova_dsn[4],
- host => $nova_dsn[5],
- dbname => $nova_dsn[6],
- allowed_hosts => $allowed_hosts,
require => Exec['galera-ready'],
}
- $neutron_dsn = split(hiera('neutron::server::database_connection'), '[@:/?]')
class { 'neutron::db::mysql':
- user => $neutron_dsn[3],
- password => $neutron_dsn[4],
- host => $neutron_dsn[5],
- dbname => $neutron_dsn[6],
- allowed_hosts => $allowed_hosts,
require => Exec['galera-ready'],
}
- $cinder_dsn = split(hiera('cinder::database_connection'), '[@:/?]')
class { 'cinder::db::mysql':
- user => $cinder_dsn[3],
- password => $cinder_dsn[4],
- host => $cinder_dsn[5],
- dbname => $cinder_dsn[6],
- allowed_hosts => $allowed_hosts,
require => Exec['galera-ready'],
}
- $heat_dsn = split(hiera('heat::database_connection'), '[@:/?]')
class { 'heat::db::mysql':
- user => $heat_dsn[3],
- password => $heat_dsn[4],
- host => $heat_dsn[5],
- dbname => $heat_dsn[6],
- allowed_hosts => $allowed_hosts,
require => Exec['galera-ready'],
}
+
if downcase(hiera('ceilometer_backend')) == 'mysql' {
- $ceilometer_dsn = split(hiera('ceilometer_mysql_conn_string'), '[@:/?]')
class { 'ceilometer::db::mysql':
- user => $ceilometer_dsn[3],
- password => $ceilometer_dsn[4],
- host => $ceilometer_dsn[5],
- dbname => $ceilometer_dsn[6],
- allowed_hosts => $allowed_hosts,
require => Exec['galera-ready'],
}
}
@@ -481,8 +438,7 @@ MYSQL_HOST=localhost\n",
include ::swift
# Ceph
- $cinder_enable_rbd_backend = hiera('cinder_enable_rbd_backend', false)
- $enable_ceph = $cinder_enable_rbd_backend
+ $enable_ceph = hiera('ceph_storage_count', 0) > 0
if $enable_ceph {
class { 'ceph::profile::params':
@@ -506,10 +462,13 @@ MYSQL_HOST=localhost\n",
} -> Class['ceph::profile::osd']
}
- include ::ceph::profile::client
include ::ceph::profile::osd
}
+ if str2bool(hiera('enable_external_ceph', 'false')) {
+ include ::ceph::profile::client
+ }
+
} #END STEP 2
@@ -604,6 +563,7 @@ if hiera('step') >= 3 {
manage_service => false,
enabled => false,
}
+ include ::nova::scheduler::filter
class { '::nova::scheduler' :
manage_service => false,
enabled => false,
@@ -639,6 +599,7 @@ if hiera('step') >= 3 {
class { 'neutron::plugins::ml2':
flat_networks => split(hiera('neutron_flat_networks'), ','),
tenant_network_types => [hiera('neutron_tenant_network_type')],
+ mechanism_drivers => [hiera('neutron_mechanism_drivers')],
}
class { 'neutron::agents::ml2::ovs':
manage_service => false,
@@ -686,20 +647,21 @@ if hiera('step') >= 3 {
$ceph_pools = hiera('ceph_pools')
ceph::pool { $ceph_pools : }
+
+ $cinder_pool_requires = [Ceph::Pool['volumes']]
+
+ } else {
+ $cinder_pool_requires = []
}
- if $cinder_enable_rbd_backend {
+ if hiera('cinder_enable_rbd_backend', false) {
$cinder_rbd_backend = 'tripleo_ceph'
- cinder_config {
- "${cinder_rbd_backend}/host": value => 'hostgroup';
- }
-
cinder::backend::rbd { $cinder_rbd_backend :
rbd_pool => 'volumes',
rbd_user => 'openstack',
rbd_secret_uuid => hiera('ceph::profile::params::fsid'),
- require => Ceph::Pool['volumes'],
+ require => $cinder_pool_requires,
}
}
diff --git a/puppet/swift-storage-puppet.yaml b/puppet/swift-storage-puppet.yaml
index b3579429..5c4ff5a1 100644
--- a/puppet/swift-storage-puppet.yaml
+++ b/puppet/swift-storage-puppet.yaml
@@ -89,9 +89,26 @@ resources:
networks:
- network: ctlplane
user_data_format: SOFTWARE_CONFIG
- user_data: {get_resource: NodeUserData}
+ user_data: {get_resource: UserData}
name: {get_param: Hostname}
+ # Combine the NodeAdminUserData and NodeUserData mime archives
+ UserData:
+ type: OS::Heat::MultipartMime
+ properties:
+ parts:
+ - config: {get_resource: NodeAdminUserData}
+ type: multipart
+ - config: {get_resource: NodeUserData}
+ type: multipart
+
+ # Creates the "heat-admin" user if configured via the environment
+ # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+ NodeAdminUserData:
+ type: OS::TripleO::NodeAdminUserData
+
+ # For optional operator additional userdata
+ # Should return a OS::Heat::MultipartMime reference via OS::stack_id
NodeUserData:
type: OS::TripleO::NodeUserData
@@ -120,6 +137,7 @@ resources:
NetIpMap:
type: OS::TripleO::Network::Ports::NetIpMap
properties:
+ ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
StorageIp: {get_attr: [StoragePort, ip_address]}
StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}