aboutsummaryrefslogtreecommitdiffstats
path: root/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'puppet')
-rw-r--r--puppet/ceph-cluster-config.yaml21
-rw-r--r--puppet/ceph-storage-post.yaml (renamed from puppet/ceph-storage-post-puppet.yaml)6
-rw-r--r--puppet/ceph-storage.yaml (renamed from puppet/ceph-storage-puppet.yaml)26
-rw-r--r--puppet/cinder-storage-post.yaml6
-rw-r--r--puppet/cinder-storage.yaml (renamed from puppet/cinder-storage-puppet.yaml)19
-rw-r--r--puppet/compute-post.yaml (renamed from puppet/compute-post-puppet.yaml)6
-rw-r--r--puppet/compute.yaml (renamed from puppet/compute-puppet.yaml)58
-rw-r--r--puppet/controller-config-pacemaker.yaml7
-rw-r--r--puppet/controller-config.yaml7
-rw-r--r--puppet/controller-post.yaml (renamed from puppet/controller-post-puppet.yaml)5
-rw-r--r--puppet/controller.yaml (renamed from puppet/controller-puppet.yaml)175
-rw-r--r--puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml23
-rw-r--r--puppet/extraconfig/ceph/ceph-external-config.yaml22
-rw-r--r--puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml2
-rw-r--r--puppet/extraconfig/pre_deploy/controller/neutron-ml2-cisco-n1kv.yaml179
-rw-r--r--puppet/extraconfig/pre_deploy/per_node.yaml56
-rw-r--r--puppet/hieradata/ceph.yaml5
-rw-r--r--puppet/hieradata/common.yaml7
-rw-r--r--puppet/hieradata/compute.yaml10
-rw-r--r--puppet/hieradata/controller.yaml20
-rw-r--r--puppet/hieradata/object.yaml5
-rw-r--r--puppet/manifests/overcloud_cephstorage.pp9
-rw-r--r--puppet/manifests/overcloud_compute.pp35
-rw-r--r--puppet/manifests/overcloud_controller.pp115
-rw-r--r--puppet/manifests/overcloud_controller_pacemaker.pp715
-rw-r--r--puppet/manifests/overcloud_object.pp11
-rw-r--r--puppet/manifests/overcloud_volume.pp7
-rw-r--r--puppet/manifests/ringbuilder.pp24
-rw-r--r--puppet/swift-storage-post.yaml8
-rw-r--r--puppet/swift-storage.yaml (renamed from puppet/swift-storage-puppet.yaml)18
30 files changed, 1175 insertions, 432 deletions
diff --git a/puppet/ceph-cluster-config.yaml b/puppet/ceph-cluster-config.yaml
index 99265493..5e54a621 100644
--- a/puppet/ceph-cluster-config.yaml
+++ b/puppet/ceph-cluster-config.yaml
@@ -27,6 +27,15 @@ parameters:
type: comma_delimited_list
ceph_mon_ips:
type: comma_delimited_list
+ NovaRbdPoolName:
+ default: vms
+ type: string
+ CinderRbdPoolName:
+ default: volumes
+ type: string
+ GlanceRbdPoolName:
+ default: images
+ type: string
resources:
CephClusterConfigImpl:
@@ -69,11 +78,21 @@ resources:
secret: 'ADMIN_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'
+ cap_osd: 'allow class-read object_prefix rbd_children, allow rwx pool=CINDER_POOL, allow rwx pool=NOVA_POOL, allow rwx pool=GLANCE_POOL'
}
}"
params:
ADMIN_KEY: {get_param: ceph_admin_key}
+ NOVA_POOL: {get_param: NovaRbdPoolName}
+ CINDER_POOL: {get_param: CinderRbdPoolName}
+ GLANCE_POOL: {get_param: GlanceRbdPoolName}
+ nova::compute::rbd::libvirt_images_rbd_pool: {get_param: NovaRbdPoolName}
+ cinder_rbd_pool_name: {get_param: CinderRbdPoolName}
+ glance::backend::rbd::rbd_store_pool: {get_param: GlanceRbdPoolName}
+ ceph_pools:
+ - {get_param: CinderRbdPoolName}
+ - {get_param: NovaRbdPoolName}
+ - {get_param: GlanceRbdPoolName}
outputs:
config_id:
diff --git a/puppet/ceph-storage-post-puppet.yaml b/puppet/ceph-storage-post.yaml
index 1b5b944d..0f7dd36f 100644
--- a/puppet/ceph-storage-post-puppet.yaml
+++ b/puppet/ceph-storage-post.yaml
@@ -4,6 +4,10 @@ description: >
OpenStack ceph storage node post deployment for Puppet
parameters:
+ ConfigDebug:
+ default: false
+ description: Whether to run config management (e.g. Puppet) in debug mode.
+ type: boolean
servers:
type: json
NodeConfigIdentifiers:
@@ -16,6 +20,8 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: puppet
+ options:
+ enable_debug: {get_param: ConfigDebug}
outputs:
- name: result
config:
diff --git a/puppet/ceph-storage-puppet.yaml b/puppet/ceph-storage.yaml
index f08b83cd..75294599 100644
--- a/puppet/ceph-storage-puppet.yaml
+++ b/puppet/ceph-storage.yaml
@@ -102,6 +102,7 @@ resources:
NetworkConfig:
type: OS::TripleO::CephStorage::Net::SoftwareConfig
properties:
+ ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
@@ -138,6 +139,7 @@ resources:
params:
server: {get_param: NtpServer}
enable_package_install: {get_param: EnablePackageInstall}
+ enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
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]}]}
@@ -148,6 +150,7 @@ resources:
config:
hiera:
hierarchy:
+ - '"%{::uuid}"'
- heat_config_%{::deploy_config_name}
- ceph_extraconfig
- extraconfig
@@ -167,9 +170,25 @@ resources:
mapped_data:
ntp::servers: {get_input: ntp_servers}
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}
ceph::profile::params::public_network: {get_input: ceph_public_network}
+ # Hook for site-specific additional pre-deployment config, e.g extra hieradata
+ CephStorageExtraConfigPre:
+ depends_on: CephStorageDeployment
+ type: OS::TripleO::CephStorageExtraConfigPre
+ properties:
+ server: {get_resource: CephStorage}
+
+ # Hook for site-specific additional pre-deployment config,
+ # applying to all nodes, e.g node registration/unregistration
+ NodeExtraConfig:
+ depends_on: CephStorageExtraConfigPre
+ type: OS::TripleO::NodeExtraConfig
+ properties:
+ server: {get_resource: CephStorage}
+
UpdateConfig:
type: OS::TripleO::Tasks::PackageUpdate
@@ -202,4 +221,9 @@ outputs:
value: {get_attr: [StorageMgmtPort, ip_address]}
config_identifier:
description: identifier which changes if the node configuration may need re-applying
- value: {get_attr: [CephStorageDeployment, deploy_stdout]}
+ value:
+ list_join:
+ - ','
+ - - {get_attr: [CephStorageDeployment, 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 24d2b8a3..c97cfcf9 100644
--- a/puppet/cinder-storage-post.yaml
+++ b/puppet/cinder-storage-post.yaml
@@ -2,6 +2,10 @@ heat_template_version: 2015-04-30
description: 'OpenStack cinder storage post deployment for Puppet'
parameters:
+ ConfigDebug:
+ default: false
+ description: Whether to run config management (e.g. Puppet) in debug mode.
+ type: boolean
servers:
type: json
NodeConfigIdentifiers:
@@ -14,6 +18,8 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: puppet
+ options:
+ enable_debug: {get_param: ConfigDebug}
outputs:
- name: result
config:
diff --git a/puppet/cinder-storage-puppet.yaml b/puppet/cinder-storage.yaml
index d764c6f7..6a869219 100644
--- a/puppet/cinder-storage-puppet.yaml
+++ b/puppet/cinder-storage.yaml
@@ -59,6 +59,7 @@ parameters:
RabbitPassword:
default: 'guest'
type: string
+ hidden: true
RabbitUserName:
default: 'guest'
type: string
@@ -161,6 +162,7 @@ resources:
NetworkConfig:
type: OS::TripleO::BlockStorage::Net::SoftwareConfig
properties:
+ ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
@@ -216,6 +218,7 @@ resources:
params:
server: {get_param: NtpServer}
enable_package_install: {get_param: EnablePackageInstall}
+ enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
# Map heat metadata into hiera datafiles
BlockStorageConfig:
@@ -225,6 +228,7 @@ resources:
config:
hiera:
hierarchy:
+ - '"%{::uuid}"'
- heat_config_%{::deploy_config_name}
- volume_extraconfig
- extraconfig
@@ -256,9 +260,18 @@ resources:
cinder::glance::glance_api_servers: {get_input: glance_api_servers}
ntp::servers: {get_input: ntp_servers}
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}
snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
+ # Hook for site-specific additional pre-deployment config,
+ # applying to all nodes, e.g node registration/unregistration
+ NodeExtraConfig:
+ depends_on: BlockStorageDeployment
+ type: OS::TripleO::NodeExtraConfig
+ properties:
+ server: {get_resource: BlockStorage}
+
UpdateConfig:
type: OS::TripleO::Tasks::PackageUpdate
@@ -294,4 +307,8 @@ outputs:
value: {get_attr: [StorageMgmtPort, ip_address]}
config_identifier:
description: identifier which changes if the node configuration may need re-applying
- value: {get_attr: [BlockStorageDeployment, deploy_stdout]}
+ value:
+ list_join:
+ - ''
+ - - {get_attr: [BlockStorageDeployment, deploy_stdout]}
+ - {get_param: UpdateIdentifier}
diff --git a/puppet/compute-post-puppet.yaml b/puppet/compute-post.yaml
index b4a6126b..b63b06b4 100644
--- a/puppet/compute-post-puppet.yaml
+++ b/puppet/compute-post.yaml
@@ -4,6 +4,10 @@ description: >
OpenStack compute node post deployment for Puppet.
parameters:
+ ConfigDebug:
+ default: false
+ description: Whether to run config management (e.g. Puppet) in debug mode.
+ type: boolean
servers:
type: json
NodeConfigIdentifiers:
@@ -17,6 +21,8 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: puppet
+ options:
+ enable_debug: {get_param: ConfigDebug}
outputs:
- name: result
config:
diff --git a/puppet/compute-puppet.yaml b/puppet/compute.yaml
index 74e9b63e..2b635357 100644
--- a/puppet/compute-puppet.yaml
+++ b/puppet/compute.yaml
@@ -29,6 +29,10 @@ parameters:
default: false
description: Whether to enable or not the NFS backend for Cinder
type: boolean
+ CinderEnableRbdBackend:
+ default: false
+ description: Whether to enable or not the Rbd backend for Cinder
+ type: boolean
Debug:
default: ''
description: Set to True to enable debugging on all services.
@@ -149,6 +153,24 @@ parameters:
default: 'unset'
description: Shared secret to prevent spoofing
type: string
+ hidden: true
+ NeutronCorePlugin:
+ default: 'ml2'
+ description: |
+ The core plugin for Neutron. The value should be the entrypoint to be loaded
+ from neutron.core_plugins namespace.
+ type: string
+ NeutronServicePlugins:
+ default: "router"
+ description: |
+ Comma-separated list of service plugin entrypoints to be loaded from the
+ neutron.service_plugins namespace.
+ type: comma_delimited_list
+ NeutronTypeDrivers:
+ default: "vxlan,vlan,flat,gre"
+ description: |
+ Comma-separated list of network type driver entrypoints to be loaded.
+ type: comma_delimited_list
NeutronMechanismDrivers:
default: 'openvswitch'
description: |
@@ -312,6 +334,7 @@ resources:
NetworkConfig:
type: OS::TripleO::Compute::Net::SoftwareConfig
properties:
+ ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
@@ -332,6 +355,7 @@ resources:
config:
hiera:
hierarchy:
+ - '"%{::uuid}"'
- heat_config_%{::deploy_config_name}
- compute_extraconfig
- extraconfig
@@ -341,6 +365,7 @@ resources:
- all_nodes # provided by allNodesConfig
- '"%{::osfamily}"'
- common
+ - cisco_n1kv_data # Optionally provided by ComputeExtraConfigPre
datafiles:
compute_extraconfig:
mapped_data: {get_param: NovaComputeExtraConfig}
@@ -364,6 +389,7 @@ resources:
nova_api_host: {get_input: nova_api_host}
nova::compute::vncproxy_host: {get_input: nova_public_ip}
nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
+ rbd_persistent_storage: {get_input: cinder_enable_rbd_backend}
nova_password: {get_input: nova_password}
nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
ceilometer::debug: {get_input: debug}
@@ -402,11 +428,15 @@ resources:
neutron_router_distributed: {get_input: neutron_router_distributed}
neutron_agent_mode: {get_input: neutron_agent_mode}
neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
+ neutron::core_plugin: {get_input: neutron_core_plugin}
+ neutron::service_plugins: {get_input: neutron_service_plugins}
+ neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
admin_password: {get_input: admin_password}
ntp::servers: {get_input: ntp_servers}
tripleo::packages::enable_install: {get_input: enable_package_install}
+ tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
NovaComputeDeployment:
type: OS::TripleO::SoftwareDeployment
@@ -423,6 +453,7 @@ resources:
nova_api_host: {get_param: NovaApiHost}
nova_password: {get_param: NovaPassword}
nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
+ cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
ceilometer_password: {get_param: CeilometerPassword}
@@ -480,6 +511,23 @@ resources:
neutron_agent_mode: {get_param: NeutronAgentMode}
neutron_router_distributed: {get_param: NeutronDVR}
neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
+ neutron_core_plugin: {get_param: NeutronCorePlugin}
+ neutron_service_plugins:
+ str_replace:
+ template: "['PLUGINS']"
+ params:
+ PLUGINS:
+ list_join:
+ - "','"
+ - {get_param: NeutronServicePlugins}
+ neutron_type_drivers:
+ str_replace:
+ template: "['DRIVERS']"
+ params:
+ DRIVERS:
+ list_join:
+ - "','"
+ - {get_param: NeutronTypeDrivers}
neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
neutron_url:
@@ -505,6 +553,7 @@ resources:
params:
server: {get_param: NtpServer}
enable_package_install: {get_param: EnablePackageInstall}
+ enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
# Hook for site-specific additional pre-deployment config, e.g extra hieradata
ComputeExtraConfigPre:
@@ -513,6 +562,14 @@ resources:
properties:
server: {get_resource: NovaCompute}
+ # Hook for site-specific additional pre-deployment config,
+ # applying to all nodes, e.g node registration/unregistration
+ NodeExtraConfig:
+ depends_on: ComputeExtraConfigPre
+ type: OS::TripleO::NodeExtraConfig
+ properties:
+ server: {get_resource: NovaCompute}
+
UpdateConfig:
type: OS::TripleO::Tasks::PackageUpdate
@@ -561,3 +618,4 @@ outputs:
- ','
- - {get_attr: [NovaComputeDeployment, deploy_stdout]}
- {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
+ - {get_param: UpdateIdentifier}
diff --git a/puppet/controller-config-pacemaker.yaml b/puppet/controller-config-pacemaker.yaml
index 38161cd7..dc81498a 100644
--- a/puppet/controller-config-pacemaker.yaml
+++ b/puppet/controller-config-pacemaker.yaml
@@ -3,6 +3,12 @@ heat_template_version: 2015-04-30
description: >
A software config which runs manifests/overcloud_controller_pacemaker.pp
+parameters:
+ ConfigDebug:
+ default: false
+ description: Whether to run config management (e.g. Puppet) in debug mode.
+ type: boolean
+
resources:
ControllerPuppetConfigImpl:
@@ -10,6 +16,7 @@ resources:
properties:
group: puppet
options:
+ enable_debug: {get_param: ConfigDebug}
enable_hiera: True
enable_facter: False
outputs:
diff --git a/puppet/controller-config.yaml b/puppet/controller-config.yaml
index 4135ffac..f85e1a9e 100644
--- a/puppet/controller-config.yaml
+++ b/puppet/controller-config.yaml
@@ -3,6 +3,12 @@ heat_template_version: 2015-04-30
description: >
A software config which runs manifests/overcloud_controller.pp
+parameters:
+ ConfigDebug:
+ default: false
+ description: Whether to run config management (e.g. Puppet) in debug mode.
+ type: boolean
+
resources:
ControllerPuppetConfigImpl:
@@ -10,6 +16,7 @@ resources:
properties:
group: puppet
options:
+ enable_debug: {get_param: ConfigDebug}
enable_hiera: True
enable_facter: False
outputs:
diff --git a/puppet/controller-post-puppet.yaml b/puppet/controller-post.yaml
index 49cbe1e2..941e1ac5 100644
--- a/puppet/controller-post-puppet.yaml
+++ b/puppet/controller-post.yaml
@@ -4,6 +4,10 @@ description: >
OpenStack controller node post deployment for Puppet.
parameters:
+ ConfigDebug:
+ default: false
+ description: Whether to run config management (e.g. Puppet) in debug mode.
+ type: boolean
servers:
type: json
NodeConfigIdentifiers:
@@ -46,6 +50,7 @@ resources:
properties:
group: puppet
options:
+ enable_debug: {get_param: ConfigDebug}
enable_hiera: True
enable_facter: False
inputs:
diff --git a/puppet/controller-puppet.yaml b/puppet/controller.yaml
index eb19b36d..4504428d 100644
--- a/puppet/controller-puppet.yaml
+++ b/puppet/controller.yaml
@@ -4,6 +4,11 @@ description: >
OpenStack controller node configured by Puppet.
parameters:
+ AdminEmail:
+ default: 'admin@example.com'
+ description: The email for the keystone admin account.
+ type: string
+ hidden: true
AdminPassword:
default: unset
description: The password for the keystone admin account, used for monitoring, querying neutron etc.
@@ -14,6 +19,9 @@ parameters:
description: The keystone auth secret and db password.
type: string
hidden: true
+ CeilometerApiVirtualIP:
+ type: string
+ default: ''
CeilometerBackend:
default: 'mongodb'
description: The ceilometer backend type.
@@ -28,6 +36,9 @@ parameters:
description: The password for the ceilometer service and db account.
type: string
hidden: true
+ CinderApiVirtualIP:
+ type: string
+ default: ''
CinderEnableNfsBackend:
default: false
description: Whether to enable or not the NFS backend for Cinder
@@ -174,6 +185,34 @@ parameters:
type: string
constraints:
- allowed_values: ['swift', 'file', 'rbd']
+ GlanceFilePcmkDevice:
+ default: ''
+ description: >
+ An exported storage device that should be mounted by Pacemaker
+ as Glance storage. Effective when GlanceFilePcmkManage is true.
+ type: string
+ GlanceFilePcmkFstype:
+ default: 'nfs'
+ description: >
+ Filesystem type for Pacemaker mount used as Glance storage.
+ Effective when GlanceFilePcmkManage is true.
+ type: string
+ GlanceFilePcmkManage:
+ default: false
+ description: >
+ Whether to make Glance file backend a mount managed by Pacemaker.
+ Effective when GlanceBackend is 'file'.
+ type: boolean
+ GlanceFilePcmkOptions:
+ default: ''
+ description: >
+ Mount options for Pacemaker mount used as Glance storage.
+ Effective when GlanceFilePcmkManage is true.
+ type: string
+ HAProxySyslogAddress:
+ default: /dev/log
+ description: Syslog address where HAproxy will send its log
+ type: string
HeatPassword:
default: unset
description: The password for the Heat service and db account, used by the Heat services.
@@ -187,9 +226,15 @@ parameters:
HeatAuthEncryptionKey:
description: Auth encryption key for heat-engine
type: string
+ hidden: true
+ HorizonAllowedHosts:
+ default: '*'
+ description: A list of IP/Hostname allowed to connect to horizon
+ type: comma_delimited_list
HorizonSecret:
description: Secret key for Django
type: string
+ hidden: true
Image:
type: string
default: overcloud-control
@@ -237,6 +282,10 @@ parameters:
type: string
constraints:
- allowed_values: [ 'basic', 'cadf' ]
+ KeystoneRegion:
+ type: string
+ default: 'regionOne'
+ description: Keystone region for endpoint
MysqlClusterUniquePart:
description: A unique identifier of the MySQL cluster the controller is in.
type: string
@@ -297,6 +346,24 @@ parameters:
default: 'unset'
description: Shared secret to prevent spoofing
type: string
+ hidden: true
+ NeutronCorePlugin:
+ default: 'ml2'
+ description: |
+ The core plugin for Neutron. The value should be the entrypoint to be loaded
+ from neutron.core_plugins namespace.
+ type: string
+ NeutronServicePlugins:
+ default: "router"
+ description: |
+ Comma-separated list of service plugin entrypoints to be loaded from the
+ neutron.service_plugins namespace.
+ type: comma_delimited_list
+ NeutronTypeDrivers:
+ default: "vxlan,vlan,flat,gre"
+ description: |
+ Comma-separated list of network type driver entrypoints to be loaded.
+ type: comma_delimited_list
NeutronMechanismDrivers:
default: 'openvswitch'
description: |
@@ -378,6 +445,9 @@ parameters:
of VXLAN VNI IDs that are available for tenant network allocation
default: ["1:1000", ]
type: comma_delimited_list
+ NovaApiVirtualIP:
+ type: string
+ default: ''
NovaPassword:
default: unset
description: The password for the nova service and db account, used by nova-api.
@@ -393,13 +463,14 @@ parameters:
PcsdPassword:
type: string
description: The password for the 'pcsd' user.
+ hidden: true
PublicVirtualInterface:
default: 'br-ex'
description: >
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: # DEPRECATED: use per service settings instead
+ PublicVirtualIP:
type: string
default: '' # Has to be here because of the ignored empty value bug
RabbitCookie:
@@ -425,6 +496,10 @@ parameters:
default: 5672
description: Set rabbit subscriber port, change this if using SSL
type: number
+ RabbitFDLimit:
+ default: 16384
+ description: Configures RabbitMQ FD limit
+ type: string
RedisVirtualIP:
type: string
default: '' # Has to be here because of the ignored empty value bug
@@ -475,6 +550,9 @@ parameters:
services.
hidden: true
type: string
+ SwiftProxyVirtualIP:
+ type: string
+ default: ''
SwiftReplicas:
type: number
default: 3
@@ -488,6 +566,9 @@ parameters:
GlanceApiVirtualIP:
type: string
default: ''
+ GlanceRegistryVirtualIP:
+ type: string
+ default: ''
MysqlVirtualIP:
type: string
default: ''
@@ -602,6 +683,7 @@ resources:
NetworkConfig:
type: OS::TripleO::Controller::Net::SoftwareConfig
properties:
+ 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]}
@@ -626,6 +708,7 @@ resources:
input_values:
bootstack_nodeid: {get_attr: [Controller, name]}
neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
+ haproxy_log_address: {get_param: HAProxySyslogAddress}
heat.watch_server_url:
list_join:
- ''
@@ -645,7 +728,9 @@ resources:
- {get_param: HeatApiVirtualIP}
- ':8000/v1/waitcondition'
heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
+ horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
horizon_secret: {get_param: HorizonSecret}
+ admin_email: {get_param: AdminEmail}
admin_password: {get_param: AdminPassword}
admin_token: {get_param: AdminToken}
neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
@@ -677,6 +762,10 @@ resources:
glance_port: {get_param: GlancePort}
glance_password: {get_param: GlancePassword}
glance_backend: {get_param: GlanceBackend}
+ glance_file_pcmk_device: {get_param: GlanceFilePcmkDevice}
+ glance_file_pcmk_fstype: {get_param: GlanceFilePcmkFstype}
+ glance_file_pcmk_manage: {get_param: GlanceFilePcmkManage}
+ glance_file_pcmk_options: {get_param: GlanceFilePcmkOptions}
glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
glance_log_file: {get_param: GlanceLogFile}
glance_dsn:
@@ -718,13 +807,25 @@ resources:
- ''
- - 'http://'
- {get_param: KeystoneAdminApiVirtualIP}
- - ':35357/'
+ - ':35357'
keystone_auth_uri:
list_join:
- ''
- - 'http://'
- {get_param: KeystonePublicApiVirtualIP}
- ':5000/v2.0/'
+ keystone_public_url:
+ list_join:
+ - ''
+ - - 'http://'
+ - {get_param: PublicVirtualIP}
+ - ':5000'
+ keystone_internal_url:
+ list_join:
+ - ''
+ - - 'http://'
+ - {get_param: KeystonePublicApiVirtualIP}
+ - ':5000'
keystone_ec2_uri:
list_join:
- ''
@@ -747,6 +848,23 @@ resources:
neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
neutron_agent_mode: {get_param: NeutronAgentMode}
neutron_router_distributed: {get_param: NeutronDVR}
+ neutron_core_plugin: {get_param: NeutronCorePlugin}
+ neutron_service_plugins:
+ str_replace:
+ template: "['PLUGINS']"
+ params:
+ PLUGINS:
+ list_join:
+ - "','"
+ - {get_param: NeutronServicePlugins}
+ neutron_type_drivers:
+ str_replace:
+ template: "['DRIVERS']"
+ params:
+ DRIVERS:
+ list_join:
+ - "','"
+ - {get_param: NeutronTypeDrivers}
neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
neutron_l3_ha: {get_param: NeutronL3HA}
@@ -817,7 +935,9 @@ resources:
ceilometer_dsn:
list_join:
- ''
- - - 'mysql://ceilometer:unset@'
+ - - 'mysql://ceilometer:'
+ - {get_param: CeilometerPassword}
+ - '@'
- {get_param: MysqlVirtualIP}
- '/ceilometer'
snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
@@ -839,6 +959,14 @@ resources:
rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
rabbit_client_port: {get_param: RabbitClientPort}
mongodb_no_journal: {get_param: MongoDbNoJournal}
+ # We need to force this into quotes or hiera will return integer causing
+ # the puppet module validation regexp to fail.
+ # Remove when: https://github.com/puppetlabs/puppetlabs-rabbitmq/pull/401
+ rabbit_fd_limit:
+ str_replace:
+ template: "'LIMIT'"
+ params:
+ LIMIT: {get_param: RabbitFDLimit}
ntp_servers:
str_replace:
template: '["server"]'
@@ -853,6 +981,7 @@ resources:
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]}]}
swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
@@ -867,9 +996,11 @@ resources:
- {get_param: GlanceApiVirtualIP}
- ':'
- {get_param: GlancePort}
+ glance_registry_host: {get_param: GlanceRegistryVirtualIP}
heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
+ keystone_region: {get_param: KeystoneRegion}
mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
@@ -895,6 +1026,7 @@ resources:
config:
hiera:
hierarchy:
+ - '"%{::uuid}"'
- heat_config_%{::deploy_config_name}
- controller_extraconfig
- extraconfig
@@ -912,6 +1044,7 @@ resources:
- cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
- neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
- neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
+ - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
datafiles:
controller_extraconfig:
mapped_data: {get_param: ControllerExtraConfig}
@@ -983,7 +1116,7 @@ resources:
glance::api::bind_host: {get_input: glance_api_network}
glance::api::auth_uri: {get_input: keystone_auth_uri}
glance::api::identity_uri: {get_input: keystone_identity_uri}
- glance::api::registry_host: {get_input: glance_registry_network}
+ glance::api::registry_host: {get_input: glance_registry_host}
glance::api::keystone_password: {get_input: glance_password}
glance::api::debug: {get_input: debug}
glance_notifier_strategy: {get_input: glance_notifier_strategy}
@@ -992,7 +1125,7 @@ resources:
glance::api::database_connection: {get_input: glance_dsn}
glance::registry::keystone_password: {get_input: glance_password}
glance::registry::database_connection: {get_input: glance_dsn}
- glance::registry::bind_host: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
+ glance::registry::bind_host: {get_input: glance_registry_network}
glance::registry::auth_uri: {get_input: keystone_auth_uri}
glance::registry::identity_uri: {get_input: keystone_identity_uri}
glance::registry::debug: {get_input: debug}
@@ -1001,6 +1134,10 @@ resources:
glance::backend::swift::swift_store_key: {get_input: glance_password}
glance_backend: {get_input: glance_backend}
glance::db::mysql::password: {get_input: glance_password}
+ glance_file_pcmk_device: {get_input: glance_file_pcmk_device}
+ glance_file_pcmk_fstype: {get_input: glance_file_pcmk_fstype}
+ glance_file_pcmk_manage: {get_input: glance_file_pcmk_manage}
+ glance_file_pcmk_options: {get_input: glance_file_pcmk_options}
# Heat
heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
@@ -1041,6 +1178,12 @@ resources:
keystone::rabbit_port: {get_input: rabbit_client_port}
keystone::notification_driver: {get_input: keystone_notification_driver}
keystone::notification_format: {get_input: keystone_notification_format}
+ keystone::roles::admin::email: {get_input: admin_email}
+ keystone::roles::admin::password: {get_input: admin_password}
+ keystone::endpoint::public_url: {get_input: keystone_public_url}
+ keystone::endpoint::internal_url: {get_input: keystone_internal_url}
+ keystone::endpoint::admin_url: {get_input: keystone_identity_uri}
+ keystone::endpoint::region: {get_input: keystone_region}
# MongoDB
mongodb::server::bind_ip: {get_input: mongo_db_network}
mongodb::server::nojournal: {get_input: mongodb_no_journal}
@@ -1074,6 +1217,9 @@ resources:
neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
neutron_agent_mode: {get_input: neutron_agent_mode}
neutron_router_distributed: {get_input: neutron_router_distributed}
+ neutron::core_plugin: {get_input: neutron_core_plugin}
+ neutron::service_plugins: {get_input: neutron_service_plugins}
+ neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
neutron::server::l3_ha: {get_input: neutron_l3_ha}
@@ -1137,6 +1283,7 @@ resources:
# Horizon
apache::ip: {get_input: horizon_network}
+ horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
horizon::django_debug: {get_input: debug}
horizon::secret_key: {get_input: horizon_secret}
horizon::bind_address: {get_input: horizon_network}
@@ -1145,6 +1292,7 @@ resources:
# Rabbit
rabbitmq::node_ip_address: {get_input: rabbitmq_network}
rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
+ rabbitmq::file_limit: {get_input: rabbit_fd_limit}
# Redis
redis::bind: {get_input: redis_network}
redis_vip: {get_input: redis_vip}
@@ -1156,7 +1304,9 @@ resources:
public_virtual_interface: {get_input: public_virtual_interface}
tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
+ tripleo::loadbalancer::haproxy_log_address: {get_input: haproxy_log_address}
tripleo::packages::enable_install: {get_input: enable_package_install}
+ tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
# Hook for site-specific additional pre-deployment config, e.g extra hieradata
ControllerExtraConfigPre:
@@ -1165,6 +1315,14 @@ resources:
properties:
server: {get_resource: Controller}
+ # Hook for site-specific additional pre-deployment config,
+ # applying to all nodes, e.g node registration/unregistration
+ NodeExtraConfig:
+ depends_on: ControllerExtraConfigPre
+ type: OS::TripleO::NodeExtraConfig
+ properties:
+ server: {get_resource: Controller}
+
UpdateConfig:
type: OS::TripleO::Tasks::PackageUpdate
@@ -1238,6 +1396,7 @@ outputs:
description: identifier which changes if the controller configuration may need re-applying
value:
list_join:
- - ','
- - - {get_attr: [ControllerDeployment, deploy_stdout]}
- - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
+ - ','
+ - - {get_attr: [ControllerDeployment, deploy_stdout]}
+ - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
+ - {get_param: UpdateIdentifier}
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 277b0747..2413f5a4 100644
--- a/puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml
+++ b/puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml
@@ -163,8 +163,17 @@ resources:
config: |
#!/bin/sh
MACS=$(ifconfig | grep ether | awk '{print $2}' | tr "\n" " ")
- HOSTNAME=$(hostname -f)
- echo "$HOSTNAME $MACS"
+ HOST_FQDN=$(hostname -f)
+ if [ -z "$HOST_FQDN" ]; then
+ HOSTNAME=$(hostname -s)
+ # hardcoding the domain name to avoid DNS lookup dependency
+ # same type of hardcoding appears elsewhere
+ # --ie. controller-puppet.yaml
+ # FIXME_HOSTNAME_DOMAIN_HARDCODE
+ echo "$HOSTNAME.localdomain $MACS"
+ else
+ echo "$HOST_FQDN $MACS"
+ fi
CollectMacDeploymentsController:
type: OS::Heat::SoftwareDeployments
@@ -256,10 +265,14 @@ resources:
for (mac,swport) in nexus[nexus_switch]['servers'].iteritems():
lmac=mac.lower()
if lmac in mac2host:
- if mac2host[lmac] in nexus_cp[nexus_switch]['servers']:
- nexus_cp[nexus_switch]['servers'][mac2host[lmac]]['ports'] += ',' + swport['ports']
+ hostname = mac2host[lmac]
+ # for puppet we need a unique title even at the 2nd key level
+ serv_key = nexus_switch + "::" + hostname
+ if serv_key in nexus_cp[nexus_switch]['servers']:
+ nexus_cp[nexus_switch]['servers'][serv_key]['ports'] += ',' + swport['ports']
else:
- nexus_cp[nexus_switch]['servers'][mac2host[lmac]] = swport
+ nexus_cp[nexus_switch]['servers'][serv_key] = swport
+ nexus_cp[nexus_switch]['servers'][serv_key]['hostname'] = hostname
del nexus_cp[nexus_switch]['servers'][mac]
# Note this echo means you can view the data via heat deployment-show
print json.dumps(nexus_cp)
diff --git a/puppet/extraconfig/ceph/ceph-external-config.yaml b/puppet/extraconfig/ceph/ceph-external-config.yaml
index 62907104..fadc8a00 100644
--- a/puppet/extraconfig/ceph/ceph-external-config.yaml
+++ b/puppet/extraconfig/ceph/ceph-external-config.yaml
@@ -29,6 +29,15 @@ parameters:
type: comma_delimited_list
ceph_mon_ips:
type: comma_delimited_list
+ NovaRbdPoolName:
+ default: vms
+ type: string
+ CinderRbdPoolName:
+ default: volumes
+ type: string
+ GlanceRbdPoolName:
+ default: images
+ type: string
resources:
CephClusterConfigImpl:
@@ -51,12 +60,21 @@ resources:
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'
+ cap_osd: 'allow class-read object_prefix rbd_children, allow rwx pool=CINDER_POOL, allow rwx pool=NOVA_POOL, allow rwx pool=GLANCE_POOL'
}
}"
params:
CLIENT_KEY: {get_param: ceph_client_key}
-
+ NOVA_POOL: {get_param: NovaRbdPoolName}
+ CINDER_POOL: {get_param: CinderRbdPoolName}
+ GLANCE_POOL: {get_param: GlanceRbdPoolName}
+ nova::compute::rbd::libvirt_images_rbd_pool: {get_param: NovaRbdPoolName}
+ cinder_rbd_pool_name: {get_param: CinderRbdPoolName}
+ glance::backend::rbd::rbd_store_pool: {get_param: GlanceRbdPoolName}
+ ceph_pools:
+ - {get_param: CinderRbdPoolName}
+ - {get_param: NovaRbdPoolName}
+ - {get_param: GlanceRbdPoolName}
outputs:
config_id:
diff --git a/puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml b/puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml
index 18295a2f..7ec2190f 100644
--- a/puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml
+++ b/puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml
@@ -18,6 +18,7 @@ parameters:
type: string
CinderNetappPassword:
type: string
+ hidden: true
CinderNetappServerHostname:
type: string
CinderNetappServerPort:
@@ -65,6 +66,7 @@ parameters:
CinderNetappSaPassword:
type: string
default: ''
+ hidden: true
CinderNetappStoragePools:
type: string
default: ''
diff --git a/puppet/extraconfig/pre_deploy/controller/neutron-ml2-cisco-n1kv.yaml b/puppet/extraconfig/pre_deploy/controller/neutron-ml2-cisco-n1kv.yaml
new file mode 100644
index 00000000..6730ddf1
--- /dev/null
+++ b/puppet/extraconfig/pre_deploy/controller/neutron-ml2-cisco-n1kv.yaml
@@ -0,0 +1,179 @@
+heat_template_version: 2015-04-30
+
+description: Configure hieradata for Cisco N1KV configuration
+
+parameters:
+ server:
+ description: ID of the controller node to apply this config to
+ type: string
+
+ # Config specific parameters, to be provided via parameter_defaults
+ N1000vVSMIP:
+ type: string
+ default: '192.0.2.50'
+ N1000vVSMDomainID:
+ type: number
+ default: 100
+ N1000vVSMIPV6:
+ type: string
+ default: '::1'
+ N1000vVEMHostMgmtIntf:
+ type: string
+ default: 'br-ex'
+ N1000vUplinkProfile:
+ type: string
+ default: '{eth1: system-uplink,}'
+ N1000vVtepConfig:
+ type: string
+ default: '{}'
+ N1000vVEMSource:
+ type: string
+ default: ''
+ N1000vVEMVersion:
+ type: string
+ default: ''
+ N1000vPortDB:
+ type: string
+ default: 'ovs'
+ N1000vVtepsInSameSub:
+ type: boolean
+ default: false
+ N1000vVEMFastpathFlood:
+ type: string
+ default: 'enable'
+#VSM Puppet Parameter
+ N1000vVSMSource:
+ type: string
+ default: ''
+ N1000vVSMVersion:
+ type: string
+ default: 'latest'
+ N1000vVSMHostMgmtIntf:
+ type: string
+ default: 'br-ex'
+ N1000vVSMRole:
+ type: string
+ default: 'primary'
+ N1000vVSMPassword:
+ type: string
+ default: 'Password'
+ N1000vMgmtNetmask:
+ type: string
+ default: '255.255.255.0'
+ N1000vMgmtGatewayIP:
+ type: string
+ default: '192.0.2.1'
+ N1000vPacemakerControl:
+ type: boolean
+ default: true
+ N1000vExistingBridge:
+ type: boolean
+ default: true
+ N1000vVSMHostMgmtIntfVlan:
+ type: number
+ default: 0
+#Plugin Parameters
+ N1000vVSMUser:
+ type: string
+ default: 'admin'
+ N1000vPollDuration:
+ type: number
+ default: 60
+ N1000vHttpPoolSize:
+ type: number
+ default: 5
+ N1000vHttpTimeout:
+ type: number
+ default: 15
+ N1000vSyncInterval:
+ type: number
+ default: 300
+ N1000vMaxVSMRetries:
+ type: number
+ default: 2
+
+resources:
+ CiscoN1kvConfig:
+ type: OS::Heat::StructuredConfig
+ properties:
+ group: os-apply-config
+ config:
+ hiera:
+ datafiles:
+ cisco_n1kv_data:
+ mapped_data:
+ #enable_cisco_n1kv: {get_input: EnableCiscoN1kv}
+ # VEM Parameters
+ n1kv_vem_source: {get_input: n1kv_vem_source}
+ n1kv_vem_version: {get_input: n1kv_vem_version}
+ neutron::agents::n1kv_vem::n1kv_vsm_ip: {get_input: n1kv_vsm_ip}
+ neutron::agents::n1kv_vem::n1kv_vsm_domain_id: {get_input: n1kv_vsm_domain_id}
+ neutron::agents::n1kv_vem::n1kv_vsm_ip_v6: {get_input: n1kv_vsm_ip_v6}
+ neutron::agents::n1kv_vem::host_mgmt_intf: {get_input: n1kv_vem_host_mgmt_intf}
+ neutron::agents::n1kv_vem::uplink_profile: {get_input: n1kv_vem_uplink_profile}
+ neutron::agents::n1kv_vem::vtep_config: {get_input: n1kv_vem_vtep_config}
+ neutron::agents::n1kv_vem::portdb: {get_input: n1kv_vem_portdb}
+ neutron::agents::n1kv_vem::vteps_in_same_subnet: {get_input: n1kv_vem_vteps_in_same_subnet}
+ neutron::agents::n1kv_vem::fastpath_flood: {get_input: n1kv_vem_fastpath_flood}
+ #VSM Parameter
+ n1kv_vsm_source: {get_input: n1kv_vsm_source}
+ n1kv_vsm_version: {get_input: n1kv_vsm_version}
+ n1k_vsm::phy_if_bridge: {get_input: n1kv_vsm_host_mgmt_intf}
+ n1k_vsm::vsm_role: {get_input: n1kv_vsm_role}
+ n1k_vsm::pacemaker_control: {get_input: n1kv_vsm_pacemaker_ctrl}
+ n1k_vsm::existing_bridge: {get_input: n1kv_vsm_existing_br}
+ n1k_vsm::vsm_admin_passwd: {get_input: n1kv_vsm_password}
+ n1k_vsm::vsm_domain_id: {get_input: n1kv_vsm_domain_id}
+ n1k_vsm::vsm_mgmt_ip: {get_input: n1kv_vsm_ip}
+ n1k_vsm::vsm_mgmt_netmask: {get_input: n1kv_vsm_mgmt_netmask}
+ n1k_vsm::vsm_mgmt_gateway: {get_input: n1kv_vsm_gateway_ip}
+ n1k_vsm::phy_gateway: {get_input: n1kv_vsm_gateway_ip}
+ n1k_vsm::phy_bridge_vlan: {get_input: n1kv_phy_brige_vlan}
+ # Cisco N1KV driver Parameters
+ neutron::plugins::ml2::cisco::nexus1000v::n1kv_vsm_ip: {get_input: n1kv_vsm_ip}
+ neutron::plugins::ml2::cisco::nexus1000v::n1kv_vsm_username: {get_input: n1kv_vsm_username}
+ neutron::plugins::ml2::cisco::nexus1000v::n1kv_vsm_password: {get_input: n1kv_vsm_password}
+ neutron::plugins::ml2::cisco::nexus1000v::poll_duration: {get_input: n1kv_vsm_poll_duration}
+ neutron::plugins::ml2::cisco::nexus1000v::http_pool_size: {get_input: n1kv_vsm_http_pool_size}
+ neutron::plugins::ml2::cisco::nexus1000v::http_timeout: {get_input: n1kv_vsm_http_timeout}
+ neutron::plugins::ml2::cisco::nexus1000v::n1kv_vsm_sync_interval: {get_input: n1kv_vsm_sync_interval}
+ neutron::plugins::ml2::cisco::nexus1000v::max_vsm_retries: {get_input: n1kv_max_vsm_retries}
+
+ CiscoN1kvDeployment:
+ type: OS::Heat::StructuredDeployment
+ properties:
+ config: {get_resource: CiscoN1kvConfig}
+ server: {get_param: server}
+ input_values:
+ n1kv_vsm_ip: {get_param: N1000vVSMIP}
+ n1kv_vsm_domain_id: {get_param: N1000vVSMDomainID}
+ n1kv_vsm_ip_v6: {get_param: N1000vVSMIPV6}
+ n1kv_vem_host_mgmt_intf: {get_param: N1000vVEMHostMgmtIntf}
+ n1kv_vem_uplink_profile: {get_param: N1000vUplinkProfile}
+ n1kv_vem_vtep_config: {get_param: N1000vVtepConfig}
+ n1kv_vem_source: {get_param: N1000vVEMSource}
+ n1kv_vem_version: {get_param: N1000vVEMVersion}
+ n1kv_vem_portdb: {get_param: N1000vPortDB}
+ n1kv_vem_vteps_in_same_subnet: {get_param: N1000vVtepsInSameSub}
+ n1kv_vem_fastpath_flood: {get_param: N1000vVEMFastpathFlood}
+ n1kv_vsm_source: {get_param: N1000vVSMSource}
+ n1kv_vsm_version: {get_param: N1000vVSMVersion}
+ n1kv_vsm_host_mgmt_intf: {get_param: N1000vVSMHostMgmtIntf}
+ n1kv_vsm_role: {get_param: N1000vVSMRole}
+ n1kv_vsm_password: {get_param: N1000vVSMPassword}
+ n1kv_vsm_mgmt_netmask: {get_param: N1000vMgmtNetmask}
+ n1kv_vsm_gateway_ip: {get_param: N1000vMgmtGatewayIP}
+ n1kv_phy_brige_vlan: {get_param: N1000vVSMHostMgmtIntfVlan}
+ n1kv_vsm_pacemaker_ctrl: {get_param: N1000vPacemakerControl}
+ n1kv_vsm_existing_br: {get_param: N1000vExistingBridge}
+ n1kv_vsm_username: {get_param: N1000vVSMUser}
+ n1kv_vsm_poll_duration: {get_param: N1000vPollDuration}
+ n1kv_vsm_http_pool_size: {get_param: N1000vHttpPoolSize}
+ n1kv_vsm_http_timeout: {get_param: N1000vHttpTimeout}
+ n1kv_vsm_sync_interval: {get_param: N1000vSyncInterval}
+ n1kv_max_vsm_retries: {get_param: N1000vMaxVSMRetries}
+
+outputs:
+ deploy_stdout:
+ description: Deployment reference, used to trigger puppet apply on changes
+ value: {get_attr: [CiscoN1kvDeployment, deploy_stdout]}
diff --git a/puppet/extraconfig/pre_deploy/per_node.yaml b/puppet/extraconfig/pre_deploy/per_node.yaml
new file mode 100644
index 00000000..80c8ad6e
--- /dev/null
+++ b/puppet/extraconfig/pre_deploy/per_node.yaml
@@ -0,0 +1,56 @@
+heat_template_version: 2015-04-30
+
+description: Configure hieradata overrides for specific nodes
+
+parameters:
+ server:
+ description: ID of the controller node to apply this config to
+ type: string
+
+ # Config specific parameters, to be provided via parameter_defaults
+ # This would be a lookup of the node UUID as provided by dmidecode
+ # to the json required for the node-specific hieradata
+ # Note this needs to be a json blob e.g:
+ # parameter_defaults:
+ # NodeDataLookup: |
+ # {"AB4114B1-9C9D-409A-BEFB-D88C151BF2C3": {"foo": "bar"},
+ # "8CF1A7EA-7B4B-4433-AC83-17675514B1B8": {"foo2": "bar2"}}
+ NodeDataLookup:
+ type: string
+ default: ''
+ description: json string containing per-node configuration map
+
+resources:
+ NodeSpecificConfig:
+ type: OS::Heat::SoftwareConfig
+ properties:
+ group: script
+ inputs:
+ - name: node_lookup
+ config: |
+ #!/bin/sh
+ node_id=$(dmidecode --s system-uuid)
+
+ # Create a /etc/puppet/hieradata/UUID.json file to provide
+ # the data of the NodeDataLookup parameter that matches the
+ # system UUID
+ echo $node_lookup | python -c "
+ import json
+ import sys
+ input = sys.stdin.readline() or '{}'
+ cnt = json.loads(input)
+ print json.dumps(cnt.get('${node_id}', {}))
+ " > /etc/puppet/hieradata/${node_id}.json
+
+ NodeSpecificDeployment:
+ type: OS::Heat::SoftwareDeployment
+ properties:
+ config: {get_resource: NodeSpecificConfig}
+ server: {get_param: server}
+ input_values:
+ node_lookup: {get_param: NodeDataLookup}
+
+outputs:
+ deploy_stdout:
+ description: Deployment reference, used to trigger puppet apply on changes
+ value: {get_attr: [NodeSpecificDeployment, deploy_stdout]}
diff --git a/puppet/hieradata/ceph.yaml b/puppet/hieradata/ceph.yaml
index 18a48622..ca6d3954 100644
--- a/puppet/hieradata/ceph.yaml
+++ b/puppet/hieradata/ceph.yaml
@@ -7,11 +7,6 @@ ceph::profile::params::osds: {/srv/data: {}}
ceph::profile::params::manage_repo: false
ceph::profile::params::authentication_type: cephx
-ceph_pools:
- - volumes
- - vms
- - images
-
ceph_classes: []
ceph_osd_selinux_permissive: true
diff --git a/puppet/hieradata/common.yaml b/puppet/hieradata/common.yaml
index 455f7f22..030f661d 100644
--- a/puppet/hieradata/common.yaml
+++ b/puppet/hieradata/common.yaml
@@ -14,11 +14,6 @@ nova::network::neutron::vif_plugging_timeout: 30
nova::network::neutron::dhcp_domain: ''
neutron::allow_overlapping_ips: true
-neutron::plugins::ml2::type_drivers:
- - flat
- - gre
- - vxlan
- - vlan
sysctl_settings:
net.ipv4.tcp_keepalive_intvl:
@@ -34,3 +29,5 @@ cinder::rabbit_heartbeat_timeout_threshold: 60
ceilometer::rabbit_heartbeat_timeout_threshold: 60
heat::rabbit_heartbeat_timeout_threshold: 60
keystone::rabbit_heartbeat_timeout_threshold: 60
+
+nova::cinder_catalog_info: 'volumev2:cinderv2:internalURL'
diff --git a/puppet/hieradata/compute.yaml b/puppet/hieradata/compute.yaml
index bb49bb90..659008a5 100644
--- a/puppet/hieradata/compute.yaml
+++ b/puppet/hieradata/compute.yaml
@@ -12,15 +12,9 @@ nova::compute::libvirt::migration_support: true
nova::compute::rbd::libvirt_rbd_user: 'openstack'
nova::compute::rbd::rbd_keyring: 'client.openstack'
-nova::compute::rbd::libvirt_images_rbd_pool: 'vms'
nova::compute::rbd::libvirt_rbd_secret_uuid: "%{hiera('ceph::profile::params::fsid')}"
-nova::config::nova_config:
- cinder/catalog_info:
- value: 'volumev2:cinderv2:internalURL'
- DEFAULT/default_floating_pool:
- value: 'public'
-
ceilometer::agent::auth::auth_tenant_name: 'service'
+ceilometer::agent::auth::auth_endpoint_type: 'internalURL'
-compute_classes: [] \ No newline at end of file
+compute_classes: []
diff --git a/puppet/hieradata/controller.yaml b/puppet/hieradata/controller.yaml
index 798e63f6..a4914c0e 100644
--- a/puppet/hieradata/controller.yaml
+++ b/puppet/hieradata/controller.yaml
@@ -42,6 +42,8 @@ heat::keystone_tenant: 'service'
# keystone
keystone::cron::token_flush::maxdelay: 3600
+keystone::roles::admin::service_tenant: 'service'
+keystone::roles::admin::admin_tenant: 'admin'
#swift
swift::proxy::pipeline:
@@ -51,9 +53,9 @@ swift::proxy::pipeline:
- 'ratelimit'
- 'tempurl'
- 'formpost'
- - 'staticweb'
- 'authtoken'
- 'keystone'
+ - 'staticweb'
- 'proxy-logging'
- 'proxy-server'
@@ -65,22 +67,20 @@ glance::api::show_image_direct_url: true
glance::registry::pipeline: 'keystone'
glance::backend::swift::swift_store_create_container_on_put: true
glance::backend::rbd::rbd_store_user: 'openstack'
+glance_file_pcmk_directory: '/var/lib/glance/images'
# neutron
-neutron::core_plugin: 'ml2'
-neutron::service_plugins:
- - 'neutron.services.l3_router.l3_router_plugin.L3RouterPlugin'
neutron::server::sync_db: true
neutron::agents::dhcp::dnsmasq_config_file: /etc/neutron/dnsmasq-neutron.conf
# nova
nova::notify_on_state_change: 'vm_and_task_state'
+nova::api::default_floating_pool: 'public'
nova::api::osapi_v3: true
nova::scheduler::filter::ram_allocation_ratio: '1.0'
-nova::config::nova_config:
- DEFAULT/default_floating_pool:
- value: 'public'
+# ceilometer
+ceilometer::agent::auth::auth_endpoint_type: 'internalURL'
# cinder
cinder::scheduler::scheduler_driver: cinder.scheduler.filter_scheduler.FilterScheduler
@@ -97,12 +97,14 @@ pacemaker::resource_defaults::defaults:
resource-stickiness: { value: INFINITY }
# horizon
-horizon::allowed_hosts: '*'
+horizon::cache_backend: django.core.cache.backends.memcached.MemcachedCache
horizon::django_session_engine: 'django.contrib.sessions.backends.cache'
+horizon::vhost_extra_params:
+ add_listen: false
+ priority: 10
# mysql
mysql::server::manage_config_file: true
-mysql::server::remove_default_accounts: true
tripleo::loadbalancer::keystone_admin: true
diff --git a/puppet/hieradata/object.yaml b/puppet/hieradata/object.yaml
index 3a379035..d4a0e81d 100644
--- a/puppet/hieradata/object.yaml
+++ b/puppet/hieradata/object.yaml
@@ -1,4 +1,7 @@
# Hiera data for swift storage nodes
+swift::storage::all::incoming_chmod: 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r'
+swift::storage::all::outgoing_chmod: 'Du=rwx,g=rx,o=rx,Fu=rw,g=r,o=r'
+
swift::storage::all::object_pipeline:
- healthcheck
- recon
@@ -15,4 +18,4 @@ swift::proxy::keystone::operator_roles:
- swiftoperator
- ResellerAdmin
-object_classes: [] \ No newline at end of file
+object_classes: []
diff --git a/puppet/manifests/overcloud_cephstorage.pp b/puppet/manifests/overcloud_cephstorage.pp
index 6c5dda42..51f5e88d 100644
--- a/puppet/manifests/overcloud_cephstorage.pp
+++ b/puppet/manifests/overcloud_cephstorage.pp
@@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-include tripleo::packages
+include ::tripleo::packages
create_resources(sysctl::value, hiera('sysctl_settings'), {})
@@ -25,13 +25,13 @@ 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"],
+ path => ['/usr/bin', '/usr/sbin'],
}
exec { 'set selinux to permissive':
- command => "setenforce 0",
+ command => 'setenforce 0',
onlyif => "which setenforce && getenforce | grep -i 'enforcing'",
- path => ["/usr/bin", "/usr/sbin"],
+ path => ['/usr/bin', '/usr/sbin'],
} -> Class['ceph::profile::osd']
}
@@ -39,3 +39,4 @@ include ::ceph::profile::client
include ::ceph::profile::osd
hiera_include('ceph_classes')
+package_manifest{'/var/lib/tripleo/installed-packages/overcloud_ceph': ensure => present}
diff --git a/puppet/manifests/overcloud_compute.pp b/puppet/manifests/overcloud_compute.pp
index e6fa9471..4c927569 100644
--- a/puppet/manifests/overcloud_compute.pp
+++ b/puppet/manifests/overcloud_compute.pp
@@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-include tripleo::packages
+include ::tripleo::packages
create_resources(sysctl::value, hiera('sysctl_settings'), {})
@@ -24,14 +24,14 @@ if count(hiera('ntp::servers')) > 0 {
file { ['/etc/libvirt/qemu/networks/autostart/default.xml',
'/etc/libvirt/qemu/networks/default.xml']:
ensure => absent,
- before => Service['libvirt']
+ 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'],
+ onlyif => '/usr/bin/virsh net-info default | /bin/grep -i "^active:\s*yes"',
+ before => Service['libvirt'],
}
include ::nova
@@ -43,8 +43,9 @@ nova_config {
'DEFAULT/linuxnet_interface_driver': value => 'nova.network.linux_net.LinuxOVSInterfaceDriver';
}
-$nova_enable_rbd_backend = hiera('nova::compute::rbd::ephemeral_storage', false)
-if $nova_enable_rbd_backend {
+$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 {
include ::ceph::profile::client
$client_keys = hiera('ceph::profile::params::client_keys')
@@ -54,10 +55,10 @@ if $nova_enable_rbd_backend {
}
if hiera('cinder_enable_nfs_backend', false) {
- if ($::selinux != "false") {
+ if str2bool($::selinux) {
selboolean { 'virt_use_nfs':
- value => on,
- persistent => true,
+ value => on,
+ persistent => true,
} -> Package['nfs-utils']
}
@@ -68,17 +69,26 @@ include ::nova::compute::libvirt
include ::nova::network::neutron
include ::neutron
-class { 'neutron::plugins::ml2':
+class { '::neutron::plugins::ml2':
flat_networks => split(hiera('neutron_flat_networks'), ','),
tenant_network_types => [hiera('neutron_tenant_network_type')],
}
-class { 'neutron::agents::ml2::ovs':
+class { '::neutron::agents::ml2::ovs':
bridge_mappings => split(hiera('neutron_bridge_mappings'), ','),
tunnel_types => split(hiera('neutron_tunnel_types'), ','),
}
+if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') {
+ class { '::neutron::agents::n1kv_vem':
+ n1kv_source => hiera('n1kv_vem_source', undef),
+ n1kv_version => hiera('n1kv_vem_version', undef),
+ }
+}
+
+
include ::ceilometer
+include ::ceilometer::config
include ::ceilometer::agent::compute
include ::ceilometer::agent::auth
@@ -87,9 +97,10 @@ snmp::snmpv3_user { $snmpd_user:
authtype => 'MD5',
authpass => hiera('snmpd_readonly_user_password'),
}
-class { 'snmp':
+class { '::snmp':
agentaddress => ['udp:161','udp6:[::1]:161'],
snmpd_config => [ 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}
diff --git a/puppet/manifests/overcloud_controller.pp b/puppet/manifests/overcloud_controller.pp
index fdb16ea2..695cb519 100644
--- a/puppet/manifests/overcloud_controller.pp
+++ b/puppet/manifests/overcloud_controller.pp
@@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-include tripleo::packages
+include ::tripleo::packages
if hiera('step') >= 1 {
@@ -70,21 +70,22 @@ if hiera('step') >= 2 {
include ::tripleo::redis_notification
}
- if str2bool(hiera('enable_galera', 'true')) {
+ if str2bool(hiera('enable_galera', true)) {
$mysql_config_file = '/etc/my.cnf.d/galera.cnf'
} else {
$mysql_config_file = '/etc/my.cnf.d/server.cnf'
}
# TODO Galara
- class { 'mysql::server':
- config_file => $mysql_config_file,
- override_options => {
+ class { '::mysql::server':
+ config_file => $mysql_config_file,
+ override_options => {
'mysqld' => {
- 'bind-address' => hiera('mysql_bind_host'),
- 'max_connections' => hiera('mysql_max_connections'),
+ 'bind-address' => hiera('mysql_bind_host'),
+ 'max_connections' => hiera('mysql_max_connections'),
'open_files_limit' => '-1',
},
- }
+ },
+ remove_default_accounts => true,
}
# FIXME: this should only occur on the bootstrap host (ditto for db syncs)
@@ -125,31 +126,31 @@ if hiera('step') >= 2 {
$enable_ceph = hiera('ceph_storage_count', 0) > 0
if $enable_ceph {
- class { 'ceph::profile::params':
- mon_initial_members => downcase(hiera('ceph_mon_initial_members'))
+ class { '::ceph::profile::params':
+ mon_initial_members => downcase(hiera('ceph_mon_initial_members')),
}
include ::ceph::profile::mon
}
- if str2bool(hiera('enable_ceph_storage', 'false')) {
+ 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"],
+ path => ['/usr/bin', '/usr/sbin'],
}
exec { 'set selinux to permissive':
- command => "setenforce 0",
+ command => 'setenforce 0',
onlyif => "which setenforce && getenforce | grep -i 'enforcing'",
- path => ["/usr/bin", "/usr/sbin"],
+ path => ['/usr/bin', '/usr/sbin'],
} -> Class['ceph::profile::osd']
}
include ::ceph::profile::osd
}
- if str2bool(hiera('enable_external_ceph', 'false')) {
+ if str2bool(hiera('enable_external_ceph', false)) {
include ::ceph::profile::client
}
@@ -158,6 +159,8 @@ if hiera('step') >= 2 {
if hiera('step') >= 3 {
include ::keystone
+ include ::keystone::roles::admin
+ include ::keystone::endpoint
#TODO: need a cleanup-keystone-tokens.sh solution here
keystone_config {
@@ -193,9 +196,9 @@ if hiera('step') >= 3 {
$glance_backend = downcase(hiera('glance_backend', 'swift'))
case $glance_backend {
- swift: { $backend_store = 'glance.store.swift.Store' }
- file: { $backend_store = 'glance.store.filesystem.Store' }
- rbd: { $backend_store = 'glance.store.rbd.Store' }
+ 'swift': { $backend_store = 'glance.store.swift.Store' }
+ 'file': { $backend_store = 'glance.store.filesystem.Store' }
+ 'rbd': { $backend_store = 'glance.store.rbd.Store' }
default: { fail('Unrecognized glance_backend parameter.') }
}
$http_store = ['glance.store.http.Store']
@@ -203,8 +206,8 @@ if hiera('step') >= 3 {
# TODO: notifications, scrubber, etc.
include ::glance
- class { 'glance::api':
- known_stores => $glance_store
+ class { '::glance::api':
+ known_stores => $glance_store,
}
include ::glance::registry
include join(['::glance::backend::', $glance_backend])
@@ -236,14 +239,28 @@ if hiera('step') >= 3 {
require => Package['neutron'],
}
- class { 'neutron::plugins::ml2':
- flat_networks => split(hiera('neutron_flat_networks'), ','),
+ 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')],
+ mechanism_drivers => [hiera('neutron_mechanism_drivers')],
}
- class { 'neutron::agents::ml2::ovs':
+ class { '::neutron::agents::ml2::ovs':
bridge_mappings => split(hiera('neutron_bridge_mappings'), ','),
- tunnel_types => split(hiera('neutron_tunnel_types'), ','),
+ tunnel_types => split(hiera('neutron_tunnel_types'), ','),
+ }
+ if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') {
+ include ::neutron::plugins::ml2::cisco::nexus1000v
+
+ class { '::neutron::agents::n1kv_vem':
+ n1kv_source => hiera('n1kv_vem_source', undef),
+ n1kv_version => hiera('n1kv_vem_version', undef),
+ }
+
+ class { '::n1k_vsm':
+ n1kv_source => hiera('n1kv_vsm_source', undef),
+ n1kv_version => hiera('n1kv_vsm_version', undef),
+ pacemaker_control => false,
+ }
}
if 'cisco_ucsm' in hiera('neutron_mechanism_drivers') {
@@ -255,7 +272,7 @@ if hiera('step') >= 3 {
}
if hiera('neutron_enable_bigswitch_ml2', false) {
- include neutron::plugins::ml2::bigswitch::restproxy
+ include ::neutron::plugins::ml2::bigswitch::restproxy
}
neutron_l3_agent_config {
'DEFAULT/ovs_use_veth': value => hiera('neutron_ovs_use_veth', false);
@@ -274,7 +291,7 @@ if hiera('step') >= 3 {
include ::cinder::glance
include ::cinder::scheduler
include ::cinder::volume
- class {'cinder::setup_test_volume':
+ class { '::cinder::setup_test_volume':
size => join([hiera('cinder_lvm_loop_device_size'), 'M']),
}
@@ -299,7 +316,7 @@ if hiera('step') >= 3 {
$ceph_pools = hiera('ceph_pools')
ceph::pool { $ceph_pools : }
- $cinder_pool_requires = [Ceph::Pool['volumes']]
+ $cinder_pool_requires = [Ceph::Pool[hiera('cinder_rbd_pool_name')]]
} else {
$cinder_pool_requires = []
@@ -309,7 +326,7 @@ if hiera('step') >= 3 {
$cinder_rbd_backend = 'tripleo_ceph'
cinder::backend::rbd { $cinder_rbd_backend :
- rbd_pool => 'volumes',
+ rbd_pool => hiera('cinder_rbd_pool_name'),
rbd_user => 'openstack',
rbd_secret_uuid => hiera('ceph::profile::params::fsid'),
require => $cinder_pool_requires,
@@ -354,18 +371,18 @@ if hiera('step') >= 3 {
if hiera('cinder_enable_nfs_backend', false) {
$cinder_nfs_backend = 'tripleo_nfs'
- if ($::selinux != "false") {
+ if str2bool($::selinux) {
selboolean { 'virt_use_nfs':
- value => on,
- persistent => true,
+ value => on,
+ persistent => true,
} -> Package['nfs-utils']
}
package {'nfs-utils': } ->
cinder::backend::nfs { $cinder_nfs_backend :
- nfs_servers => hiera('cinder_nfs_servers'),
- nfs_mount_options => hiera('cinder_nfs_mount_options'),
- nfs_shares_config => '/etc/cinder/shares-nfs.conf',
+ nfs_servers => hiera('cinder_nfs_servers'),
+ nfs_mount_options => hiera('cinder_nfs_mount_options'),
+ nfs_shares_config => '/etc/cinder/shares-nfs.conf',
}
}
@@ -389,9 +406,9 @@ if hiera('step') >= 3 {
include ::swift::proxy::formpost
# swift storage
- if str2bool(hiera('enable_swift_storage', 'true')) {
- class {'swift::storage::all':
- mount_check => str2bool(hiera('swift_mount_check'))
+ 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':
@@ -417,6 +434,7 @@ if hiera('step') >= 3 {
}
}
include ::ceilometer
+ include ::ceilometer::config
include ::ceilometer::api
include ::ceilometer::agent::notification
include ::ceilometer::agent::central
@@ -424,7 +442,7 @@ if hiera('step') >= 3 {
include ::ceilometer::alarm::evaluator
include ::ceilometer::expirer
include ::ceilometer::collector
- include ceilometer::agent::auth
+ include ::ceilometer::agent::auth
class { '::ceilometer::db' :
database_connection => $ceilometer_database_connection,
}
@@ -439,10 +457,16 @@ if hiera('step') >= 3 {
include ::heat::engine
# Horizon
- $vhost_params = { add_listen => false }
- class { 'horizon':
- cache_server_ip => hiera('memcache_node_ips', '127.0.0.1'),
- vhost_extra_params => $vhost_params,
+ if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') {
+ $_profile_support = 'cisco'
+ } else {
+ $_profile_support = 'None'
+ }
+ $neutron_options = {'profile_support' => $_profile_support }
+
+ class { '::horizon':
+ cache_server_ip => hiera('memcache_node_ips', '127.0.0.1'),
+ neutron_options => $neutron_options,
}
$snmpd_user = hiera('snmpd_readonly_user_name')
@@ -450,7 +474,7 @@ if hiera('step') >= 3 {
authtype => 'MD5',
authpass => hiera('snmpd_readonly_user_password'),
}
- class { 'snmp':
+ class { '::snmp':
agentaddress => ['udp:161','udp6:[::1]:161'],
snmpd_config => [ join(['rouser ', hiera('snmpd_readonly_user_name')]), 'proc cron', 'includeAllDisks 10%', 'master agentx', 'trapsink localhost public', 'iquerySecName internalUser', 'rouser internalUser', 'defaultMonitors yes', 'linkUpDownNotifications yes' ],
}
@@ -462,3 +486,6 @@ if hiera('step') >= 3 {
if hiera('step') >= 4 {
include ::keystone::cron::token_flush
} #END STEP 4
+
+$package_manifest_name = join(['/var/lib/tripleo/installed-packages/overcloud_controller', hiera('step')])
+package_manifest{$package_manifest_name: ensure => present}
diff --git a/puppet/manifests/overcloud_controller_pacemaker.pp b/puppet/manifests/overcloud_controller_pacemaker.pp
index e4a179d6..91bc1b14 100644
--- a/puppet/manifests/overcloud_controller_pacemaker.pp
+++ b/puppet/manifests/overcloud_controller_pacemaker.pp
@@ -18,7 +18,7 @@ Pcmk_resource <| |> {
try_sleep => 3,
}
-include tripleo::packages
+include ::tripleo::packages
if $::hostname == downcase(hiera('bootstrap_nodeid')) {
$pacemaker_master = true
@@ -28,7 +28,7 @@ if $::hostname == downcase(hiera('bootstrap_nodeid')) {
$sync_db = false
}
-$enable_fencing = str2bool(hiera('enable_fencing', 'false')) and hiera('step') >= 5
+$enable_fencing = str2bool(hiera('enable_fencing', false)) and hiera('step') >= 5
# When to start and enable services which haven't been Pacemakerized
# FIXME: remove when we start all OpenStack services using Pacemaker
@@ -55,7 +55,7 @@ if hiera('step') >= 1 {
$pacemaker_cluster_members = downcase(regsubst(hiera('controller_node_names'), ',', ' ', 'G'))
user { 'hacluster':
- ensure => present,
+ ensure => present,
} ->
class { '::pacemaker':
hacluster_pwd => hiera('hacluster_pwd'),
@@ -68,7 +68,7 @@ if hiera('step') >= 1 {
disable => !$enable_fencing,
}
if $enable_fencing {
- include tripleo::fencing
+ include ::tripleo::fencing
# enable stonith after all fencing devices have been created
Class['tripleo::fencing'] -> Class['pacemaker::stonith']
@@ -93,7 +93,7 @@ if hiera('step') >= 1 {
environment_variables => hiera('rabbitmq_environment'),
} ->
file { '/var/lib/rabbitmq/.erlang.cookie':
- ensure => 'present',
+ ensure => file,
owner => 'rabbitmq',
group => 'rabbitmq',
mode => '0400',
@@ -120,7 +120,7 @@ if hiera('step') >= 1 {
}
# Galera
- if str2bool(hiera('enable_galera', 'true')) {
+ if str2bool(hiera('enable_galera', true)) {
$mysql_config_file = '/etc/my.cnf.d/galera.cnf'
} else {
$mysql_config_file = '/etc/my.cnf.d/server.cnf'
@@ -154,16 +154,17 @@ if hiera('step') >= 1 {
'wsrep_causal_reads' => '0',
'wsrep_notify_cmd' => '',
'wsrep_sst_method' => 'rsync',
- }
+ },
}
class { '::mysql::server':
- create_root_user => false,
- create_root_my_cnf => false,
- config_file => $mysql_config_file,
- override_options => $mysqld_options,
- service_manage => false,
- service_enabled => false,
+ create_root_user => false,
+ create_root_my_cnf => false,
+ config_file => $mysql_config_file,
+ override_options => $mysqld_options,
+ remove_default_accounts => $pacemaker_master,
+ service_manage => false,
+ service_enabled => false,
}
}
@@ -177,7 +178,7 @@ if hiera('step') >= 2 {
if $pacemaker_master {
- include pacemaker::resource_defaults
+ include ::pacemaker::resource_defaults
# FIXME: we should not have to access tripleo::loadbalancer class
# parameters here to configure pacemaker VIPs. The configuration
@@ -198,8 +199,8 @@ if hiera('step') >= 2 {
first_action => 'start',
second_action => 'start',
constraint_params => 'kind=Optional',
- require => [Pacemaker::Resource::Service['haproxy'],
- Pacemaker::Resource::Ip['control_vip']],
+ require => [Pacemaker::Resource::Service['haproxy'],
+ Pacemaker::Resource::Ip['control_vip']],
}
pacemaker::constraint::colocation { 'control_vip-with-haproxy':
source => "ip-${control_vip}",
@@ -221,8 +222,8 @@ if hiera('step') >= 2 {
first_action => 'start',
second_action => 'start',
constraint_params => 'kind=Optional',
- require => [Pacemaker::Resource::Service['haproxy'],
- Pacemaker::Resource::Ip['public_vip']],
+ require => [Pacemaker::Resource::Service['haproxy'],
+ Pacemaker::Resource::Ip['public_vip']],
}
pacemaker::constraint::colocation { 'public_vip-with-haproxy':
source => "ip-${public_vip}",
@@ -245,8 +246,8 @@ if hiera('step') >= 2 {
first_action => 'start',
second_action => 'start',
constraint_params => 'kind=Optional',
- require => [Pacemaker::Resource::Service['haproxy'],
- Pacemaker::Resource::Ip['redis_vip']],
+ require => [Pacemaker::Resource::Service['haproxy'],
+ Pacemaker::Resource::Ip['redis_vip']],
}
pacemaker::constraint::colocation { 'redis_vip-with-haproxy':
source => "ip-${redis_vip}",
@@ -269,8 +270,8 @@ if hiera('step') >= 2 {
first_action => 'start',
second_action => 'start',
constraint_params => 'kind=Optional',
- require => [Pacemaker::Resource::Service['haproxy'],
- Pacemaker::Resource::Ip['internal_api_vip']],
+ require => [Pacemaker::Resource::Service['haproxy'],
+ Pacemaker::Resource::Ip['internal_api_vip']],
}
pacemaker::constraint::colocation { 'internal_api_vip-with-haproxy':
source => "ip-${internal_api_vip}",
@@ -293,8 +294,8 @@ if hiera('step') >= 2 {
first_action => 'start',
second_action => 'start',
constraint_params => 'kind=Optional',
- require => [Pacemaker::Resource::Service['haproxy'],
- Pacemaker::Resource::Ip['storage_vip']],
+ require => [Pacemaker::Resource::Service['haproxy'],
+ Pacemaker::Resource::Ip['storage_vip']],
}
pacemaker::constraint::colocation { 'storage_vip-with-haproxy':
source => "ip-${storage_vip}",
@@ -317,8 +318,8 @@ if hiera('step') >= 2 {
first_action => 'start',
second_action => 'start',
constraint_params => 'kind=Optional',
- require => [Pacemaker::Resource::Service['haproxy'],
- Pacemaker::Resource::Ip['storage_mgmt_vip']],
+ require => [Pacemaker::Resource::Service['haproxy'],
+ Pacemaker::Resource::Ip['storage_mgmt_vip']],
}
pacemaker::constraint::colocation { 'storage_mgmt_vip-with-haproxy':
source => "ip-${storage_mgmt_vip}",
@@ -330,7 +331,7 @@ if hiera('step') >= 2 {
}
pacemaker::resource::service { $::memcached::params::service_name :
- clone_params => true,
+ clone_params => 'interleave=true',
require => Class['::memcached'],
}
@@ -384,7 +385,7 @@ if hiera('step') >= 2 {
timeout => 30,
tries => 180,
try_sleep => 10,
- environment => ["AVAILABLE_WHEN_READONLY=0"],
+ environment => ['AVAILABLE_WHEN_READONLY=0'],
require => File['/etc/sysconfig/clustercheck'],
}
@@ -410,28 +411,28 @@ MYSQL_HOST=localhost\n",
# Create all the database schemas
if $sync_db {
- class { 'keystone::db::mysql':
- require => Exec['galera-ready'],
+ class { '::keystone::db::mysql':
+ require => Exec['galera-ready'],
}
- class { 'glance::db::mysql':
- require => Exec['galera-ready'],
+ class { '::glance::db::mysql':
+ require => Exec['galera-ready'],
}
- class { 'nova::db::mysql':
- require => Exec['galera-ready'],
+ class { '::nova::db::mysql':
+ require => Exec['galera-ready'],
}
- class { 'neutron::db::mysql':
- require => Exec['galera-ready'],
+ class { '::neutron::db::mysql':
+ require => Exec['galera-ready'],
}
- class { 'cinder::db::mysql':
- require => Exec['galera-ready'],
+ class { '::cinder::db::mysql':
+ require => Exec['galera-ready'],
}
- class { 'heat::db::mysql':
- require => Exec['galera-ready'],
+ class { '::heat::db::mysql':
+ require => Exec['galera-ready'],
}
if downcase(hiera('ceilometer_backend')) == 'mysql' {
- class { 'ceilometer::db::mysql':
- require => Exec['galera-ready'],
+ class { '::ceilometer::db::mysql':
+ require => Exec['galera-ready'],
}
}
}
@@ -443,31 +444,31 @@ MYSQL_HOST=localhost\n",
$enable_ceph = hiera('ceph_storage_count', 0) > 0
if $enable_ceph {
- class { 'ceph::profile::params':
- mon_initial_members => downcase(hiera('ceph_mon_initial_members'))
+ class { '::ceph::profile::params':
+ mon_initial_members => downcase(hiera('ceph_mon_initial_members')),
}
include ::ceph::profile::mon
}
- if str2bool(hiera('enable_ceph_storage', 'false')) {
+ 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"],
+ path => ['/usr/bin', '/usr/sbin'],
}
exec { 'set selinux to permissive':
- command => "setenforce 0",
+ command => 'setenforce 0',
onlyif => "which setenforce && getenforce | grep -i 'enforcing'",
- path => ["/usr/bin", "/usr/sbin"],
+ path => ['/usr/bin', '/usr/sbin'],
} -> Class['ceph::profile::osd']
}
include ::ceph::profile::osd
}
- if str2bool(hiera('enable_external_ceph', 'false')) {
+ if str2bool(hiera('enable_external_ceph', false)) {
include ::ceph::profile::client
}
@@ -477,9 +478,9 @@ MYSQL_HOST=localhost\n",
if hiera('step') >= 3 {
class { '::keystone':
- sync_db => $sync_db,
+ sync_db => $sync_db,
manage_service => false,
- enabled => false,
+ enabled => false,
}
#TODO: need a cleanup-keystone-tokens.sh solution here
@@ -516,25 +517,35 @@ if hiera('step') >= 3 {
$glance_backend = downcase(hiera('glance_backend', 'swift'))
case $glance_backend {
- swift: { $backend_store = 'glance.store.swift.Store' }
- file: { $backend_store = 'glance.store.filesystem.Store' }
- rbd: { $backend_store = 'glance.store.rbd.Store' }
+ 'swift': { $backend_store = 'glance.store.swift.Store' }
+ 'file': { $backend_store = 'glance.store.filesystem.Store' }
+ 'rbd': { $backend_store = 'glance.store.rbd.Store' }
default: { fail('Unrecognized glance_backend parameter.') }
}
$http_store = ['glance.store.http.Store']
$glance_store = concat($http_store, $backend_store)
+ if $glance_backend == 'file' and hiera('glance_file_pcmk_manage', false) {
+ pacemaker::resource::filesystem { 'glance-fs':
+ device => hiera('glance_file_pcmk_device'),
+ directory => hiera('glance_file_pcmk_directory'),
+ fstype => hiera('glance_file_pcmk_fstype'),
+ fsoptions => hiera('glance_file_pcmk_options', ''),
+ clone_params => '',
+ }
+ }
+
# TODO: notifications, scrubber, etc.
include ::glance
- class { 'glance::api':
- known_stores => $glance_store,
+ class { '::glance::api':
+ known_stores => $glance_store,
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::glance::registry' :
- sync_db => $sync_db,
+ sync_db => $sync_db,
manage_service => false,
- enabled => false,
+ enabled => false,
}
include join(['::glance::backend::', $glance_backend])
@@ -545,51 +556,51 @@ if hiera('step') >= 3 {
include ::nova::config
class { '::nova::api' :
- sync_db => $sync_db,
+ sync_db => $sync_db,
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::nova::cert' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::nova::conductor' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::nova::consoleauth' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::nova::vncproxy' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
include ::nova::scheduler::filter
class { '::nova::scheduler' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
include ::nova::network::neutron
# Neutron class definitions
include ::neutron
class { '::neutron::server' :
- sync_db => $sync_db,
+ sync_db => $sync_db,
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::neutron::agents::dhcp' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::neutron::agents::l3' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
- class { 'neutron::agents::metadata':
+ class { '::neutron::agents::metadata':
manage_service => false,
- enabled => false,
+ enabled => false,
}
file { '/etc/neutron/dnsmasq-neutron.conf':
content => hiera('neutron_dnsmasq_options'),
@@ -598,16 +609,16 @@ if hiera('step') >= 3 {
notify => Service['neutron-dhcp-service'],
require => Package['neutron'],
}
- class { 'neutron::plugins::ml2':
- flat_networks => split(hiera('neutron_flat_networks'), ','),
+ 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')],
+ mechanism_drivers => [hiera('neutron_mechanism_drivers')],
}
- class { 'neutron::agents::ml2::ovs':
- manage_service => false,
- enabled => false,
- bridge_mappings => split(hiera('neutron_bridge_mappings'), ','),
- tunnel_types => split(hiera('neutron_tunnel_types'), ','),
+ class { '::neutron::agents::ml2::ovs':
+ manage_service => false,
+ enabled => false,
+ bridge_mappings => split(hiera('neutron_bridge_mappings'), ','),
+ tunnel_types => split(hiera('neutron_tunnel_types'), ','),
}
if 'cisco_ucsm' in hiera('neutron_mechanism_drivers') {
@@ -617,9 +628,22 @@ if hiera('step') >= 3 {
include ::neutron::plugins::ml2::cisco::nexus
include ::neutron::plugins::ml2::cisco::type_nexus_vxlan
}
+ if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') {
+ include ::neutron::plugins::ml2::cisco::nexus1000v
+
+ class { '::neutron::agents::n1kv_vem':
+ n1kv_source => hiera('n1kv_vem_source', undef),
+ n1kv_version => hiera('n1kv_vem_version', undef),
+ }
+
+ class { '::n1k_vsm':
+ n1kv_source => hiera('n1kv_vsm_source', undef),
+ n1kv_version => hiera('n1kv_vsm_version', undef),
+ }
+ }
if hiera('neutron_enable_bigswitch_ml2', false) {
- include neutron::plugins::ml2::bigswitch::restproxy
+ include ::neutron::plugins::ml2::bigswitch::restproxy
}
neutron_l3_agent_config {
'DEFAULT/ovs_use_veth': value => hiera('neutron_ovs_use_veth', false);
@@ -630,20 +654,20 @@ if hiera('step') >= 3 {
include ::cinder
class { '::cinder::api':
- sync_db => $sync_db,
+ sync_db => $sync_db,
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::cinder::scheduler' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::cinder::volume' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
include ::cinder::glance
- class {'cinder::setup_test_volume':
+ class { '::cinder::setup_test_volume':
size => join([hiera('cinder_lvm_loop_device_size'), 'M']),
}
@@ -668,7 +692,7 @@ if hiera('step') >= 3 {
$ceph_pools = hiera('ceph_pools')
ceph::pool { $ceph_pools : }
- $cinder_pool_requires = [Ceph::Pool['volumes']]
+ $cinder_pool_requires = [Ceph::Pool[hiera('cinder_rbd_pool_name')]]
} else {
$cinder_pool_requires = []
@@ -678,7 +702,7 @@ if hiera('step') >= 3 {
$cinder_rbd_backend = 'tripleo_ceph'
cinder::backend::rbd { $cinder_rbd_backend :
- rbd_pool => 'volumes',
+ rbd_pool => hiera('cinder_rbd_pool_name'),
rbd_user => 'openstack',
rbd_secret_uuid => hiera('ceph::profile::params::fsid'),
require => $cinder_pool_requires,
@@ -723,18 +747,18 @@ if hiera('step') >= 3 {
if hiera('cinder_enable_nfs_backend', false) {
$cinder_nfs_backend = 'tripleo_nfs'
- if ($::selinux != "false") {
+ if str2bool($::selinux) {
selboolean { 'virt_use_nfs':
- value => on,
- persistent => true,
+ value => on,
+ persistent => true,
} -> Package['nfs-utils']
}
- package {'nfs-utils': } ->
+ package { 'nfs-utils': } ->
cinder::backend::nfs { $cinder_nfs_backend:
- nfs_servers => hiera('cinder_nfs_servers'),
- nfs_mount_options => hiera('cinder_nfs_mount_options'),
- nfs_shares_config => '/etc/cinder/shares-nfs.conf',
+ nfs_servers => hiera('cinder_nfs_servers'),
+ nfs_mount_options => hiera('cinder_nfs_mount_options'),
+ nfs_shares_config => '/etc/cinder/shares-nfs.conf',
}
}
@@ -746,7 +770,7 @@ if hiera('step') >= 3 {
# swift proxy
class { '::swift::proxy' :
manage_service => $non_pcmk_start,
- enabled => $non_pcmk_start,
+ enabled => $non_pcmk_start,
}
include ::swift::proxy::proxy_logging
include ::swift::proxy::healthcheck
@@ -760,21 +784,21 @@ if hiera('step') >= 3 {
include ::swift::proxy::formpost
# swift storage
- if str2bool(hiera('enable_swift_storage', 'true')) {
+ if str2bool(hiera('enable_swift_storage', true)) {
class {'::swift::storage::all':
- mount_check => str2bool(hiera('swift_mount_check'))
+ mount_check => str2bool(hiera('swift_mount_check')),
}
class {'::swift::storage::account':
manage_service => $non_pcmk_start,
- enabled => $non_pcmk_start,
+ enabled => $non_pcmk_start,
}
class {'::swift::storage::container':
manage_service => $non_pcmk_start,
- enabled => $non_pcmk_start,
+ enabled => $non_pcmk_start,
}
class {'::swift::storage::object':
manage_service => $non_pcmk_start,
- enabled => $non_pcmk_start,
+ enabled => $non_pcmk_start,
}
if(!defined(File['/srv/node'])) {
file { '/srv/node':
@@ -790,47 +814,47 @@ if hiera('step') >= 3 {
}
# Ceilometer
- $ceilometer_backend = downcase(hiera('ceilometer_backend'))
- case $ceilometer_backend {
- /mysql/ : {
+ case downcase(hiera('ceilometer_backend')) {
+ /mysql/: {
$ceilometer_database_connection = hiera('ceilometer_mysql_conn_string')
}
- default : {
+ default: {
$mongo_node_string = join($mongo_node_ips_with_port, ',')
$ceilometer_database_connection = "mongodb://${mongo_node_string}/ceilometer?replicaSet=${mongodb_replset}"
}
}
include ::ceilometer
+ include ::ceilometer::config
class { '::ceilometer::api' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::ceilometer::agent::notification' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::ceilometer::agent::central' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::ceilometer::alarm::notifier' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::ceilometer::alarm::evaluator' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::ceilometer::collector' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
include ::ceilometer::expirer
class { '::ceilometer::db' :
database_connection => $ceilometer_database_connection,
sync_db => $sync_db,
}
- include ceilometer::agent::auth
+ include ::ceilometer::agent::auth
Cron <| title == 'ceilometer-expirer' |> { command => "sleep $((\$(od -A n -t d -N 3 /dev/urandom) % 86400)) && ${::ceilometer::params::expirer_command}" }
@@ -840,33 +864,37 @@ if hiera('step') >= 3 {
}
class { '::heat::api' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::heat::api_cfn' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::heat::api_cloudwatch' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
class { '::heat::engine' :
manage_service => false,
- enabled => false,
+ enabled => false,
}
# httpd/apache and horizon
# NOTE(gfidente): server-status can be consumed by the pacemaker resource agent
- include ::apache
+ class { '::apache' :
+ service_enable => false,
+ # service_manage => false, # <-- not supported with horizon&apache mod_wsgi?
+ }
include ::apache::mod::status
- $vhost_params = {
- add_listen => false,
- priority => 10,
+ if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') {
+ $_profile_support = 'cisco'
+ } else {
+ $_profile_support = 'None'
}
- class { 'horizon':
- cache_server_ip => hiera('memcache_node_ips', '127.0.0.1'),
- vhost_extra_params => $vhost_params,
- server_aliases => $::hostname,
+ $neutron_options = {'profile_support' => $_profile_support }
+ class { '::horizon':
+ cache_server_ip => hiera('memcache_node_ips', '127.0.0.1'),
+ neutron_options => $neutron_options,
}
$snmpd_user = hiera('snmpd_readonly_user_name')
@@ -874,7 +902,7 @@ if hiera('step') >= 3 {
authtype => 'MD5',
authpass => hiera('snmpd_readonly_user_password'),
}
- class { 'snmp':
+ class { '::snmp':
agentaddress => ['udp:161','udp6:[::1]:161'],
snmpd_config => [ join(['rouser ', hiera('snmpd_readonly_user_name')]), 'proc cron', 'includeAllDisks 10%', 'master agentx', 'trapsink localhost public', 'iquerySecName internalUser', 'rouser internalUser', 'defaultMonitors yes', 'linkUpDownNotifications yes' ],
}
@@ -890,12 +918,16 @@ if hiera('step') >= 4 {
# Keystone
pacemaker::resource::service { $::keystone::params::service_name :
- clone_params => "interleave=true",
+ clone_params => 'interleave=true',
+ verify_on_create => true,
+ require => [File['/etc/keystone/ssl/certs/ca.pem'],
+ File['/etc/keystone/ssl/private/signing_key.pem'],
+ File['/etc/keystone/ssl/certs/signing_cert.pem']],
}
pacemaker::constraint::base { 'haproxy-then-keystone-constraint':
constraint_type => 'order',
- first_resource => "haproxy-clone",
+ first_resource => 'haproxy-clone',
second_resource => "${::keystone::params::service_name}-clone",
first_action => 'start',
second_action => 'start',
@@ -904,7 +936,7 @@ if hiera('step') >= 4 {
}
pacemaker::constraint::base { 'rabbitmq-then-keystone-constraint':
constraint_type => 'order',
- first_resource => "rabbitmq-clone",
+ first_resource => 'rabbitmq-clone',
second_resource => "${::keystone::params::service_name}-clone",
first_action => 'start',
second_action => 'start',
@@ -913,7 +945,7 @@ if hiera('step') >= 4 {
}
pacemaker::constraint::base { 'memcached-then-keystone-constraint':
constraint_type => 'order',
- first_resource => "memcached-clone",
+ first_resource => 'memcached-clone',
second_resource => "${::keystone::params::service_name}-clone",
first_action => 'start',
second_action => 'start',
@@ -922,7 +954,7 @@ if hiera('step') >= 4 {
}
pacemaker::constraint::base { 'galera-then-keystone-constraint':
constraint_type => 'order',
- first_resource => "galera-master",
+ first_resource => 'galera-master',
second_resource => "${::keystone::params::service_name}-clone",
first_action => 'promote',
second_action => 'start',
@@ -932,11 +964,11 @@ if hiera('step') >= 4 {
# Cinder
pacemaker::resource::service { $::cinder::params::api_service :
- clone_params => "interleave=true",
+ clone_params => 'interleave=true',
require => Pacemaker::Resource::Service[$::keystone::params::service_name],
}
pacemaker::resource::service { $::cinder::params::scheduler_service :
- clone_params => "interleave=true",
+ clone_params => 'interleave=true',
}
pacemaker::resource::service { $::cinder::params::volume_service : }
@@ -950,45 +982,45 @@ if hiera('step') >= 4 {
Pacemaker::Resource::Service[$::keystone::params::service_name]],
}
pacemaker::constraint::base { 'cinder-api-then-cinder-scheduler-constraint':
- constraint_type => "order",
- first_resource => "${::cinder::params::api_service}-clone",
+ constraint_type => 'order',
+ first_resource => "${::cinder::params::api_service}-clone",
second_resource => "${::cinder::params::scheduler_service}-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Service[$::cinder::params::api_service],
- Pacemaker::Resource::Service[$::cinder::params::scheduler_service]],
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::cinder::params::api_service],
+ Pacemaker::Resource::Service[$::cinder::params::scheduler_service]],
}
pacemaker::constraint::colocation { 'cinder-scheduler-with-cinder-api-colocation':
- source => "${::cinder::params::scheduler_service}-clone",
- target => "${::cinder::params::api_service}-clone",
- score => "INFINITY",
+ source => "${::cinder::params::scheduler_service}-clone",
+ target => "${::cinder::params::api_service}-clone",
+ score => 'INFINITY',
require => [Pacemaker::Resource::Service[$::cinder::params::api_service],
Pacemaker::Resource::Service[$::cinder::params::scheduler_service]],
}
pacemaker::constraint::base { 'cinder-scheduler-then-cinder-volume-constraint':
- constraint_type => "order",
- first_resource => "${::cinder::params::scheduler_service}-clone",
- second_resource => "${::cinder::params::volume_service}",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Service[$::cinder::params::scheduler_service],
- Pacemaker::Resource::Service[$::cinder::params::volume_service]],
+ constraint_type => 'order',
+ first_resource => "${::cinder::params::scheduler_service}-clone",
+ second_resource => $::cinder::params::volume_service,
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::cinder::params::scheduler_service],
+ Pacemaker::Resource::Service[$::cinder::params::volume_service]],
}
pacemaker::constraint::colocation { 'cinder-volume-with-cinder-scheduler-colocation':
- source => "${::cinder::params::volume_service}",
- target => "${::cinder::params::scheduler_service}-clone",
- score => "INFINITY",
+ source => $::cinder::params::volume_service,
+ target => "${::cinder::params::scheduler_service}-clone",
+ score => 'INFINITY',
require => [Pacemaker::Resource::Service[$::cinder::params::scheduler_service],
Pacemaker::Resource::Service[$::cinder::params::volume_service]],
}
# Glance
pacemaker::resource::service { $::glance::params::registry_service_name :
- clone_params => "interleave=true",
+ clone_params => 'interleave=true',
require => Pacemaker::Resource::Service[$::keystone::params::service_name],
}
pacemaker::resource::service { $::glance::params::api_service_name :
- clone_params => "interleave=true",
+ clone_params => 'interleave=true',
}
pacemaker::constraint::base { 'keystone-then-glance-registry-constraint':
@@ -1001,18 +1033,18 @@ if hiera('step') >= 4 {
Pacemaker::Resource::Service[$::keystone::params::service_name]],
}
pacemaker::constraint::base { 'glance-registry-then-glance-api-constraint':
- constraint_type => "order",
+ constraint_type => 'order',
first_resource => "${::glance::params::registry_service_name}-clone",
second_resource => "${::glance::params::api_service_name}-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Service[$::glance::params::registry_service_name],
- Pacemaker::Resource::Service[$::glance::params::api_service_name]],
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::glance::params::registry_service_name],
+ Pacemaker::Resource::Service[$::glance::params::api_service_name]],
}
pacemaker::constraint::colocation { 'glance-api-with-glance-registry-colocation':
source => "${::glance::params::api_service_name}-clone",
target => "${::glance::params::registry_service_name}-clone",
- score => "INFINITY",
+ score => 'INFINITY',
require => [Pacemaker::Resource::Service[$::glance::params::registry_service_name],
Pacemaker::Resource::Service[$::glance::params::api_service_name]],
}
@@ -1024,151 +1056,154 @@ if hiera('step') >= 4 {
# https://bugzilla.redhat.com/show_bug.cgi?id=1233061
exec { '/usr/bin/systemctl start neutron-server && /usr/bin/sleep 5' : } ->
pacemaker::resource::service { $::neutron::params::server_service:
- op_params => "start timeout=90",
- clone_params => "interleave=true",
- require => Pacemaker::Resource::Service[$::keystone::params::service_name]
+ clone_params => 'interleave=true',
+ require => Pacemaker::Resource::Service[$::keystone::params::service_name],
}
pacemaker::resource::service { $::neutron::params::l3_agent_service:
- clone_params => "interleave=true",
+ clone_params => 'interleave=true',
}
pacemaker::resource::service { $::neutron::params::dhcp_agent_service:
- clone_params => "interleave=true",
+ clone_params => 'interleave=true',
}
pacemaker::resource::service { $::neutron::params::ovs_agent_service:
- clone_params => "interleave=true",
+ clone_params => 'interleave=true',
}
pacemaker::resource::service { $::neutron::params::metadata_agent_service:
- clone_params => "interleave=true",
+ clone_params => 'interleave=true',
}
pacemaker::resource::ocf { $::neutron::params::ovs_cleanup_service:
- ocf_agent_name => "neutron:OVSCleanup",
- clone_params => "interleave=true",
+ ocf_agent_name => 'neutron:OVSCleanup',
+ clone_params => 'interleave=true',
}
pacemaker::resource::ocf { 'neutron-netns-cleanup':
- ocf_agent_name => "neutron:NetnsCleanup",
- clone_params => "interleave=true",
- }
- pacemaker::constraint::base { 'keystone-to-neutron-server-constraint':
- constraint_type => "order",
- first_resource => "${::keystone::params::service_name}-clone",
- second_resource => "${::neutron::params::server_service}-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Service[$::keystone::params::service_name],
- Pacemaker::Resource::Service[$::neutron::params::server_service]],
- }
- pacemaker::constraint::base { 'neutron-server-to-neutron-ovs-cleanup-constraint':
- constraint_type => "order",
- first_resource => "${::neutron::params::server_service}-clone",
- second_resource => "${::neutron::params::ovs_cleanup_service}-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Service[$::neutron::params::server_service],
- Pacemaker::Resource::Ocf["${::neutron::params::ovs_cleanup_service}"]],
+ ocf_agent_name => 'neutron:NetnsCleanup',
+ clone_params => 'interleave=true',
}
+
+ # neutron - one chain ovs-cleanup-->netns-cleanup-->ovs-agent
pacemaker::constraint::base { 'neutron-ovs-cleanup-to-netns-cleanup-constraint':
- constraint_type => "order",
- first_resource => "${::neutron::params::ovs_cleanup_service}-clone",
- second_resource => "neutron-netns-cleanup-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Ocf["${::neutron::params::ovs_cleanup_service}"],
- Pacemaker::Resource::Ocf['neutron-netns-cleanup']],
+ constraint_type => 'order',
+ first_resource => "${::neutron::params::ovs_cleanup_service}-clone",
+ second_resource => 'neutron-netns-cleanup-clone',
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Ocf[$::neutron::params::ovs_cleanup_service],
+ Pacemaker::Resource::Ocf['neutron-netns-cleanup']],
}
pacemaker::constraint::colocation { 'neutron-ovs-cleanup-to-netns-cleanup-colocation':
- source => "neutron-netns-cleanup-clone",
- target => "${::neutron::params::ovs_cleanup_service}-clone",
- score => "INFINITY",
- require => [Pacemaker::Resource::Ocf["${::neutron::params::ovs_cleanup_service}"],
+ source => 'neutron-netns-cleanup-clone',
+ target => "${::neutron::params::ovs_cleanup_service}-clone",
+ score => 'INFINITY',
+ require => [Pacemaker::Resource::Ocf[$::neutron::params::ovs_cleanup_service],
Pacemaker::Resource::Ocf['neutron-netns-cleanup']],
}
pacemaker::constraint::base { 'neutron-netns-cleanup-to-openvswitch-agent-constraint':
- constraint_type => "order",
- first_resource => "neutron-netns-cleanup-clone",
+ constraint_type => 'order',
+ first_resource => 'neutron-netns-cleanup-clone',
second_resource => "${::neutron::params::ovs_agent_service}-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Ocf["neutron-netns-cleanup"],
- Pacemaker::Resource::Service["${::neutron::params::ovs_agent_service}"]],
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Ocf['neutron-netns-cleanup'],
+ Pacemaker::Resource::Service[$::neutron::params::ovs_agent_service]],
}
pacemaker::constraint::colocation { 'neutron-netns-cleanup-to-openvswitch-agent-colocation':
- source => "${::neutron::params::ovs_agent_service}-clone",
- target => "neutron-netns-cleanup-clone",
- score => "INFINITY",
- require => [Pacemaker::Resource::Ocf["neutron-netns-cleanup"],
- Pacemaker::Resource::Service["${::neutron::params::ovs_agent_service}"]],
+ source => "${::neutron::params::ovs_agent_service}-clone",
+ target => 'neutron-netns-cleanup-clone',
+ score => 'INFINITY',
+ require => [Pacemaker::Resource::Ocf['neutron-netns-cleanup'],
+ Pacemaker::Resource::Service[$::neutron::params::ovs_agent_service]],
+ }
+
+ #another chain keystone-->neutron-server-->ovs-agent-->dhcp-->l3
+ pacemaker::constraint::base { 'keystone-to-neutron-server-constraint':
+ constraint_type => 'order',
+ first_resource => "${::keystone::params::service_name}-clone",
+ second_resource => "${::neutron::params::server_service}-clone",
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::keystone::params::service_name],
+ Pacemaker::Resource::Service[$::neutron::params::server_service]],
+ }
+ pacemaker::constraint::base { 'neutron-server-to-openvswitch-agent-constraint':
+ constraint_type => 'order',
+ first_resource => "${::neutron::params::server_service}-clone",
+ second_resource => "${::neutron::params::ovs_agent_service}-clone",
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::neutron::params::server_service],
+ Pacemaker::Resource::Service[$::neutron::params::ovs_agent_service]],
}
pacemaker::constraint::base { 'neutron-openvswitch-agent-to-dhcp-agent-constraint':
- constraint_type => "order",
- first_resource => "${::neutron::params::ovs_agent_service}-clone",
+ constraint_type => 'order',
+ first_resource => "${::neutron::params::ovs_agent_service}-clone",
second_resource => "${::neutron::params::dhcp_agent_service}-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Service["${::neutron::params::ovs_agent_service}"],
- Pacemaker::Resource::Service["${::neutron::params::dhcp_agent_service}"]],
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::neutron::params::ovs_agent_service],
+ Pacemaker::Resource::Service[$::neutron::params::dhcp_agent_service]],
}
pacemaker::constraint::colocation { 'neutron-openvswitch-agent-to-dhcp-agent-colocation':
- source => "${::neutron::params::dhcp_agent_service}-clone",
- target => "${::neutron::params::ovs_agent_service}-clone",
- score => "INFINITY",
- require => [Pacemaker::Resource::Service["${::neutron::params::ovs_agent_service}"],
- Pacemaker::Resource::Service["${::neutron::params::dhcp_agent_service}"]],
+ source => "${::neutron::params::dhcp_agent_service}-clone",
+ target => "${::neutron::params::ovs_agent_service}-clone",
+ score => 'INFINITY',
+ require => [Pacemaker::Resource::Service[$::neutron::params::ovs_agent_service],
+ Pacemaker::Resource::Service[$::neutron::params::dhcp_agent_service]],
}
pacemaker::constraint::base { 'neutron-dhcp-agent-to-l3-agent-constraint':
- constraint_type => "order",
- first_resource => "${::neutron::params::dhcp_agent_service}-clone",
+ constraint_type => 'order',
+ first_resource => "${::neutron::params::dhcp_agent_service}-clone",
second_resource => "${::neutron::params::l3_agent_service}-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Service["${::neutron::params::dhcp_agent_service}"],
- Pacemaker::Resource::Service["${::neutron::params::l3_agent_service}"]]
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::neutron::params::dhcp_agent_service],
+ Pacemaker::Resource::Service[$::neutron::params::l3_agent_service]],
}
pacemaker::constraint::colocation { 'neutron-dhcp-agent-to-l3-agent-colocation':
- source => "${::neutron::params::l3_agent_service}-clone",
- target => "${::neutron::params::dhcp_agent_service}-clone",
- score => "INFINITY",
- require => [Pacemaker::Resource::Service["${::neutron::params::dhcp_agent_service}"],
- Pacemaker::Resource::Service["${::neutron::params::l3_agent_service}"]]
+ source => "${::neutron::params::l3_agent_service}-clone",
+ target => "${::neutron::params::dhcp_agent_service}-clone",
+ score => 'INFINITY',
+ require => [Pacemaker::Resource::Service[$::neutron::params::dhcp_agent_service],
+ Pacemaker::Resource::Service[$::neutron::params::l3_agent_service]],
}
pacemaker::constraint::base { 'neutron-l3-agent-to-metadata-agent-constraint':
- constraint_type => "order",
- first_resource => "${::neutron::params::l3_agent_service}-clone",
+ constraint_type => 'order',
+ first_resource => "${::neutron::params::l3_agent_service}-clone",
second_resource => "${::neutron::params::metadata_agent_service}-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Service["${::neutron::params::l3_agent_service}"],
- Pacemaker::Resource::Service["${::neutron::params::metadata_agent_service}"]]
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::neutron::params::l3_agent_service],
+ Pacemaker::Resource::Service[$::neutron::params::metadata_agent_service]],
}
pacemaker::constraint::colocation { 'neutron-l3-agent-to-metadata-agent-colocation':
- source => "${::neutron::params::metadata_agent_service}-clone",
- target => "${::neutron::params::l3_agent_service}-clone",
- score => "INFINITY",
- require => [Pacemaker::Resource::Service["${::neutron::params::l3_agent_service}"],
- Pacemaker::Resource::Service["${::neutron::params::metadata_agent_service}"]]
+ source => "${::neutron::params::metadata_agent_service}-clone",
+ target => "${::neutron::params::l3_agent_service}-clone",
+ score => 'INFINITY',
+ require => [Pacemaker::Resource::Service[$::neutron::params::l3_agent_service],
+ Pacemaker::Resource::Service[$::neutron::params::metadata_agent_service]],
}
# Nova
pacemaker::resource::service { $::nova::params::api_service_name :
- clone_params => "interleave=true",
- op_params => "start timeout=90s monitor start-delay=10s",
+ clone_params => 'interleave=true',
+ op_params => 'start timeout=90s monitor start-delay=10s',
}
pacemaker::resource::service { $::nova::params::conductor_service_name :
- clone_params => "interleave=true",
- op_params => "start timeout=90s monitor start-delay=10s",
+ clone_params => 'interleave=true',
+ op_params => 'start timeout=90s monitor start-delay=10s',
}
pacemaker::resource::service { $::nova::params::consoleauth_service_name :
- clone_params => "interleave=true",
- op_params => "start timeout=90s monitor start-delay=10s",
- require => Pacemaker::Resource::Service[$::keystone::params::service_name],
+ clone_params => 'interleave=true',
+ op_params => 'start timeout=90s monitor start-delay=10s',
+ require => Pacemaker::Resource::Service[$::keystone::params::service_name],
}
pacemaker::resource::service { $::nova::params::vncproxy_service_name :
- clone_params => "interleave=true",
- op_params => "start timeout=90s monitor start-delay=10s",
+ clone_params => 'interleave=true',
+ op_params => 'start timeout=90s monitor start-delay=10s',
}
pacemaker::resource::service { $::nova::params::scheduler_service_name :
- clone_params => "interleave=true",
- op_params => "start timeout=90s monitor start-delay=10s",
+ clone_params => 'interleave=true',
+ op_params => 'start timeout=90s monitor start-delay=10s',
}
pacemaker::constraint::base { 'keystone-then-nova-consoleauth-constraint':
@@ -1181,77 +1216,85 @@ if hiera('step') >= 4 {
Pacemaker::Resource::Service[$::keystone::params::service_name]],
}
pacemaker::constraint::base { 'nova-consoleauth-then-nova-vncproxy-constraint':
- constraint_type => "order",
+ constraint_type => 'order',
first_resource => "${::nova::params::consoleauth_service_name}-clone",
second_resource => "${::nova::params::vncproxy_service_name}-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Service[$::nova::params::consoleauth_service_name],
- Pacemaker::Resource::Service[$::nova::params::vncproxy_service_name]],
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::nova::params::consoleauth_service_name],
+ Pacemaker::Resource::Service[$::nova::params::vncproxy_service_name]],
}
pacemaker::constraint::colocation { 'nova-vncproxy-with-nova-consoleauth-colocation':
- source => "${::nova::params::vncproxy_service_name}-clone",
- target => "${::nova::params::consoleauth_service_name}-clone",
- score => "INFINITY",
+ source => "${::nova::params::vncproxy_service_name}-clone",
+ target => "${::nova::params::consoleauth_service_name}-clone",
+ score => 'INFINITY',
require => [Pacemaker::Resource::Service[$::nova::params::consoleauth_service_name],
Pacemaker::Resource::Service[$::nova::params::vncproxy_service_name]],
}
- # FIXME(gfidente): novncproxy will not start unless websockify is updated to 0.6
- # which is not the case for f20 nor f21; ucomment when it becomes available
- #pacemaker::constraint::base { 'nova-vncproxy-then-nova-api-constraint':
- # constraint_type => "order",
- # first_resource => "${::nova::params::vncproxy_service_name}-clone",
- # second_resource => "${::nova::params::api_service_name}-clone",
- # first_action => "start",
- # second_action => "start",
- # require => [Pacemaker::Resource::Service[$::nova::params::vncproxy_service_name],
- # Pacemaker::Resource::Service[$::nova::params::api_service_name]],
- #}
- #pacemaker::constraint::colocation { 'nova-api-with-nova-vncproxy-colocation':
- # source => "${::nova::params::api_service_name}-clone",
- # target => "${::nova::params::vncproxy_service_name}-clone",
- # score => "INFINITY",
- # require => [Pacemaker::Resource::Service[$::nova::params::vncproxy_service_name],
- # Pacemaker::Resource::Service[$::nova::params::api_service_name]],
- #}
+ pacemaker::constraint::base { 'nova-vncproxy-then-nova-api-constraint':
+ constraint_type => 'order',
+ first_resource => "${::nova::params::vncproxy_service_name}-clone",
+ second_resource => "${::nova::params::api_service_name}-clone",
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::nova::params::vncproxy_service_name],
+ Pacemaker::Resource::Service[$::nova::params::api_service_name]],
+ }
+ pacemaker::constraint::colocation { 'nova-api-with-nova-vncproxy-colocation':
+ source => "${::nova::params::api_service_name}-clone",
+ target => "${::nova::params::vncproxy_service_name}-clone",
+ score => 'INFINITY',
+ require => [Pacemaker::Resource::Service[$::nova::params::vncproxy_service_name],
+ Pacemaker::Resource::Service[$::nova::params::api_service_name]],
+ }
pacemaker::constraint::base { 'nova-api-then-nova-scheduler-constraint':
- constraint_type => "order",
+ constraint_type => 'order',
first_resource => "${::nova::params::api_service_name}-clone",
second_resource => "${::nova::params::scheduler_service_name}-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Service[$::nova::params::api_service_name],
- Pacemaker::Resource::Service[$::nova::params::scheduler_service_name]],
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::nova::params::api_service_name],
+ Pacemaker::Resource::Service[$::nova::params::scheduler_service_name]],
}
pacemaker::constraint::colocation { 'nova-scheduler-with-nova-api-colocation':
- source => "${::nova::params::scheduler_service_name}-clone",
- target => "${::nova::params::api_service_name}-clone",
- score => "INFINITY",
+ source => "${::nova::params::scheduler_service_name}-clone",
+ target => "${::nova::params::api_service_name}-clone",
+ score => 'INFINITY',
require => [Pacemaker::Resource::Service[$::nova::params::api_service_name],
Pacemaker::Resource::Service[$::nova::params::scheduler_service_name]],
}
pacemaker::constraint::base { 'nova-scheduler-then-nova-conductor-constraint':
- constraint_type => "order",
+ constraint_type => 'order',
first_resource => "${::nova::params::scheduler_service_name}-clone",
second_resource => "${::nova::params::conductor_service_name}-clone",
- first_action => "start",
- second_action => "start",
- require => [Pacemaker::Resource::Service[$::nova::params::scheduler_service_name],
- Pacemaker::Resource::Service[$::nova::params::conductor_service_name]],
+ first_action => 'start',
+ second_action => 'start',
+ require => [Pacemaker::Resource::Service[$::nova::params::scheduler_service_name],
+ Pacemaker::Resource::Service[$::nova::params::conductor_service_name]],
}
pacemaker::constraint::colocation { 'nova-conductor-with-nova-scheduler-colocation':
- source => "${::nova::params::conductor_service_name}-clone",
- target => "${::nova::params::scheduler_service_name}-clone",
- score => "INFINITY",
+ source => "${::nova::params::conductor_service_name}-clone",
+ target => "${::nova::params::scheduler_service_name}-clone",
+ score => 'INFINITY',
require => [Pacemaker::Resource::Service[$::nova::params::scheduler_service_name],
Pacemaker::Resource::Service[$::nova::params::conductor_service_name]],
}
# Ceilometer
- pacemaker::resource::service { $::ceilometer::params::agent_central_service_name :
- clone_params => 'interleave=true',
- require => [Pacemaker::Resource::Service[$::keystone::params::service_name],
- Pacemaker::Resource::Service[$::mongodb::params::service_name]],
+ case downcase(hiera('ceilometer_backend')) {
+ /mysql/: {
+ pacemaker::resource::service { $::ceilometer::params::agent_central_service_name :
+ clone_params => 'interleave=true',
+ require => Pacemaker::Resource::Service[$::keystone::params::service_name],
+ }
+ }
+ default: {
+ pacemaker::resource::service { $::ceilometer::params::agent_central_service_name :
+ clone_params => 'interleave=true',
+ require => [Pacemaker::Resource::Service[$::keystone::params::service_name],
+ Pacemaker::Resource::Service[$::mongodb::params::service_name]],
+ }
+ }
}
pacemaker::resource::service { $::ceilometer::params::collector_service_name :
clone_params => 'interleave=true',
@@ -1273,6 +1316,22 @@ if hiera('step') >= 4 {
clone_params => 'interleave=true',
resource_params => 'startdelay=10',
}
+ # Fedora doesn't know `require-all` parameter for constraints yet
+ if $::operatingsystem == 'Fedora' {
+ $redis_ceilometer_constraint_params = undef
+ } else {
+ $redis_ceilometer_constraint_params = 'require-all=false'
+ }
+ pacemaker::constraint::base { 'redis-then-ceilometer-central-constraint':
+ constraint_type => 'order',
+ first_resource => 'redis-master',
+ second_resource => "${::ceilometer::params::agent_central_service_name}-clone",
+ first_action => 'promote',
+ second_action => 'start',
+ constraint_params => $redis_ceilometer_constraint_params,
+ require => [Pacemaker::Resource::Ocf['redis'],
+ Pacemaker::Resource::Service[$::ceilometer::params::agent_central_service_name]],
+ }
pacemaker::constraint::base { 'keystone-then-ceilometer-central-constraint':
constraint_type => 'order',
first_resource => "${::keystone::params::service_name}-clone",
@@ -1411,8 +1470,8 @@ if hiera('step') >= 4 {
second_resource => "${::heat::params::api_cfn_service_name}-clone",
first_action => 'start',
second_action => 'start',
- require => [Pacemaker::Resource::Service[$::heat::params::api_service_name],
- Pacemaker::Resource::Service[$::heat::params::api_cfn_service_name]],
+ require => [Pacemaker::Resource::Service[$::heat::params::api_service_name],
+ Pacemaker::Resource::Service[$::heat::params::api_cfn_service_name]],
}
pacemaker::constraint::colocation { 'heat-api-cfn-with-heat-api-colocation':
source => "${::heat::params::api_cfn_service_name}-clone",
@@ -1427,8 +1486,8 @@ if hiera('step') >= 4 {
second_resource => "${::heat::params::api_cloudwatch_service_name}-clone",
first_action => 'start',
second_action => 'start',
- require => [Pacemaker::Resource::Service[$::heat::params::api_cloudwatch_service_name],
- Pacemaker::Resource::Service[$::heat::params::api_cfn_service_name]],
+ require => [Pacemaker::Resource::Service[$::heat::params::api_cloudwatch_service_name],
+ Pacemaker::Resource::Service[$::heat::params::api_cfn_service_name]],
}
pacemaker::constraint::colocation { 'heat-api-cloudwatch-with-heat-api-cfn-colocation':
source => "${::heat::params::api_cloudwatch_service_name}-clone",
@@ -1443,8 +1502,8 @@ if hiera('step') >= 4 {
second_resource => "${::heat::params::engine_service_name}-clone",
first_action => 'start',
second_action => 'start',
- require => [Pacemaker::Resource::Service[$::heat::params::api_cloudwatch_service_name],
- Pacemaker::Resource::Service[$::heat::params::engine_service_name]],
+ require => [Pacemaker::Resource::Service[$::heat::params::api_cloudwatch_service_name],
+ Pacemaker::Resource::Service[$::heat::params::engine_service_name]],
}
pacemaker::constraint::colocation { 'heat-engine-with-heat-api-cloudwatch-colocation':
source => "${::heat::params::engine_service_name}-clone",
@@ -1465,10 +1524,52 @@ if hiera('step') >= 4 {
# Horizon
pacemaker::resource::service { $::horizon::params::http_service:
- clone_params => "interleave=true",
+ clone_params => 'interleave=true',
}
+ #VSM
+ if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') {
+ pacemaker::resource::ocf { 'vsm-p' :
+ ocf_agent_name => 'heartbeat:VirtualDomain',
+ resource_params => 'force_stop=true config=/var/spool/cisco/vsm/vsm_primary_deploy.xml',
+ require => Class['n1k_vsm'],
+ meta_params => 'resource-stickiness=INFINITY',
+ }
+ if str2bool(hiera('n1k_vsm::pacemaker_control', true)) {
+ pacemaker::resource::ocf { 'vsm-s' :
+ ocf_agent_name => 'heartbeat:VirtualDomain',
+ resource_params => 'force_stop=true config=/var/spool/cisco/vsm/vsm_secondary_deploy.xml',
+ require => Class['n1k_vsm'],
+ meta_params => 'resource-stickiness=INFINITY',
+ }
+ pacemaker::constraint::colocation { 'vsm-colocation-contraint':
+ source => 'vsm-p',
+ target => 'vsm-s',
+ score => '-INFINITY',
+ require => [Pacemaker::Resource::Ocf['vsm-p'],
+ Pacemaker::Resource::Ocf['vsm-s']],
+ }
+ }
+ }
}
} #END STEP 4
+
+if hiera('step') >= 5 {
+
+ if $pacemaker_master {
+
+ class {'::keystone::roles::admin' :
+ require => Pacemaker::Resource::Service[$::keystone::params::service_name],
+ } ->
+ class {'::keystone::endpoint' :
+ require => Pacemaker::Resource::Service[$::keystone::params::service_name],
+ }
+
+ }
+
+} #END STEP 5
+
+$package_manifest_name = join(['/var/lib/tripleo/installed-packages/overcloud_controller_pacemaker', hiera('step')])
+package_manifest{$package_manifest_name: ensure => present}
diff --git a/puppet/manifests/overcloud_object.pp b/puppet/manifests/overcloud_object.pp
index 59db696e..5f0b4c82 100644
--- a/puppet/manifests/overcloud_object.pp
+++ b/puppet/manifests/overcloud_object.pp
@@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-include tripleo::packages
+include ::tripleo::packages
create_resources(sysctl::value, hiera('sysctl_settings'), {})
@@ -22,8 +22,8 @@ if count(hiera('ntp::servers')) > 0 {
}
include ::swift
-class {'swift::storage::all':
- mount_check => str2bool(hiera('swift_mount_check'))
+class { '::swift::storage::all':
+ mount_check => str2bool(hiera('swift_mount_check')),
}
if(!defined(File['/srv/node'])) {
file { '/srv/node':
@@ -43,9 +43,10 @@ snmp::snmpv3_user { $snmpd_user:
authtype => 'MD5',
authpass => hiera('snmpd_readonly_user_password'),
}
-class { 'snmp':
+class { '::snmp':
agentaddress => ['udp:161','udp6:[::1]:161'],
snmpd_config => [ 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') \ No newline at end of file
+hiera_include('object_classes')
+package_manifest{'/var/lib/tripleo/installed-packages/overcloud_object': ensure => present}
diff --git a/puppet/manifests/overcloud_volume.pp b/puppet/manifests/overcloud_volume.pp
index d1f6d6a5..7f24959a 100644
--- a/puppet/manifests/overcloud_volume.pp
+++ b/puppet/manifests/overcloud_volume.pp
@@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-include tripleo::packages
+include ::tripleo::packages
create_resources(sysctl::value, hiera('sysctl_settings'), {})
@@ -47,9 +47,10 @@ snmp::snmpv3_user { $snmpd_user:
authtype => 'MD5',
authpass => hiera('snmpd_readonly_user_password'),
}
-class { 'snmp':
+class { '::snmp':
agentaddress => ['udp:161','udp6:[::1]:161'],
snmpd_config => [ 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('volume_classes') \ No newline at end of file
+hiera_include('volume_classes')
+package_manifest{'/var/lib/tripleo/installed-packages/overcloud_volume': ensure => present}
diff --git a/puppet/manifests/ringbuilder.pp b/puppet/manifests/ringbuilder.pp
index 14fbafdd..4296208b 100644
--- a/puppet/manifests/ringbuilder.pp
+++ b/puppet/manifests/ringbuilder.pp
@@ -13,7 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
-include tripleo::packages
+include ::tripleo::packages
define add_devices(
$swift_zones = '1'
@@ -37,31 +37,33 @@ define add_devices(
$base = regsubst($name,'^r1.*-(.*)$','\1')
$object = regsubst($base, '%PORT%', '6000')
ring_object_device { $object:
- zone => '1',
- weight => 100,
+ zone => '1',
+ weight => 100,
}
$container = regsubst($base, '%PORT%', '6001')
ring_container_device { $container:
- zone => '1',
- weight => 100,
+ zone => '1',
+ weight => 100,
}
$account = regsubst($base, '%PORT%', '6002')
ring_account_device { $account:
- zone => '1',
- weight => 100,
+ zone => '1',
+ weight => 100,
}
}
class tripleo::ringbuilder (
$swift_zones = '1',
$devices = '',
- $build_ring = 'True',
+ $build_ring = true,
$part_power,
$replicas,
$min_part_hours,
) {
- if str2bool(downcase("$build_ring")) {
+ validate_bool($build_ring)
+
+ if $build_ring {
$device_array = strip(split(rstrip($devices), ','))
@@ -74,7 +76,7 @@ class tripleo::ringbuilder (
# add all other devices
add_devices {$device_array:
- swift_zones => $swift_zones
+ swift_zones => $swift_zones,
} ->
# rebalance
@@ -90,3 +92,5 @@ class tripleo::ringbuilder (
}
include ::tripleo::ringbuilder
+
+package_manifest{'/var/lib/tripleo/installed-packages/ringbuilder': ensure => present}
diff --git a/puppet/swift-storage-post.yaml b/puppet/swift-storage-post.yaml
index ee50c86a..d22f5386 100644
--- a/puppet/swift-storage-post.yaml
+++ b/puppet/swift-storage-post.yaml
@@ -2,6 +2,10 @@ heat_template_version: 2015-04-30
description: 'OpenStack swift storage node post deployment for Puppet'
parameters:
+ ConfigDebug:
+ default: false
+ description: Whether to run config management (e.g. Puppet) in debug mode.
+ type: boolean
servers:
type: json
NodeConfigIdentifiers:
@@ -15,6 +19,8 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: puppet
+ options:
+ enable_debug: {get_param: ConfigDebug}
outputs:
- name: result
config:
@@ -32,6 +38,8 @@ resources:
type: OS::Heat::SoftwareConfig
properties:
group: puppet
+ options:
+ enable_debug: {get_param: ConfigDebug}
outputs:
- name: result
config:
diff --git a/puppet/swift-storage-puppet.yaml b/puppet/swift-storage.yaml
index 5c4ff5a1..22ec6096 100644
--- a/puppet/swift-storage-puppet.yaml
+++ b/puppet/swift-storage.yaml
@@ -130,6 +130,7 @@ resources:
NetworkConfig:
type: OS::TripleO::ObjectStorage::Net::SoftwareConfig
properties:
+ ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
@@ -155,6 +156,7 @@ resources:
config:
hiera:
hierarchy:
+ - '"%{::uuid}"'
- heat_config_%{::deploy_config_name}
- object_extraconfig
- extraconfig
@@ -187,6 +189,7 @@ resources:
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}
+ tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
SwiftStorageHieraDeploy:
@@ -210,8 +213,17 @@ resources:
params:
server: {get_param: NtpServer}
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]}]}
+ # Hook for site-specific additional pre-deployment config,
+ # applying to all nodes, e.g node registration/unregistration
+ NodeExtraConfig:
+ depends_on: SwiftStorageHieraDeploy
+ type: OS::TripleO::NodeExtraConfig
+ properties:
+ server: {get_resource: SwiftStorage}
+
UpdateConfig:
type: OS::TripleO::Tasks::PackageUpdate
@@ -254,4 +266,8 @@ outputs:
value: {get_attr: [StorageMgmtPort, ip_address]}
config_identifier:
description: identifier which changes if the node configuration may need re-applying
- value: {get_attr: [SwiftStorageHieraDeploy, deploy_stdout]}
+ value:
+ list_join:
+ - ','
+ - - {get_attr: [SwiftStorageHieraDeploy, deploy_stdout]}
+ - {get_param: UpdateIdentifier}