diff options
49 files changed, 571 insertions, 146 deletions
diff --git a/bootstrap-config.yaml b/bootstrap-config.yaml index 6082dbce..c87670e3 100644 --- a/bootstrap-config.yaml +++ b/bootstrap-config.yaml @@ -12,6 +12,7 @@ resources: BootstrapNodeConfigImpl: type: OS::Heat::StructuredConfig properties: + group: os-apply-config config: bootstrap_host: bootstrap_nodeid: {get_param: bootstrap_nodeid} diff --git a/ceph-storage-post.yaml b/ceph-storage-post.yaml index 06c2a291..734f90bd 100644 --- a/ceph-storage-post.yaml +++ b/ceph-storage-post.yaml @@ -6,6 +6,9 @@ description: 'Ceph Storage Post Deployment' parameters: servers: type: json + NodeConfigIdentifiers: + type: json + description: Value which changes if the node configuration may need to be re-applied resources: diff --git a/ceph-storage.yaml b/ceph-storage.yaml index 138e6ea5..15092bae 100644 --- a/ceph-storage.yaml +++ b/ceph-storage.yaml @@ -39,6 +39,9 @@ parameters: description: > Setting to a previously unused value during stack-update will trigger package update on all nodes + Hostname: + type: string + default: '' # Defaults to Heat created hostname resources: CephStorage: @@ -52,6 +55,7 @@ resources: - network: ctlplane user_data_format: SOFTWARE_CONFIG user_data: {get_resource: NodeUserData} + name: {get_param: Hostname} NodeUserData: type: OS::TripleO::NodeUserData @@ -148,3 +152,6 @@ outputs: storage_mgmt_ip_address: description: IP address of the server in the storage_mgmt network value: {get_attr: [StorageMgmtPort, ip_address]} + config_identifier: + description: identifier which changes if the node configuration may need re-applying + value: "None - NO_SIGNAL" diff --git a/cinder-storage-post.yaml b/cinder-storage-post.yaml index 8943c502..ad4e0460 100644 --- a/cinder-storage-post.yaml +++ b/cinder-storage-post.yaml @@ -6,6 +6,9 @@ description: 'Common Block Storage Post Deployment' parameters: servers: type: json + NodeConfigIdentifiers: + type: json + description: Value which changes if the node configuration may need to be re-applied resources: diff --git a/cinder-storage.yaml b/cinder-storage.yaml index 9541ed1c..be088d66 100644 --- a/cinder-storage.yaml +++ b/cinder-storage.yaml @@ -71,6 +71,10 @@ parameters: default: "9292" description: Glance port. type: string + GlanceProtocol: + default: http + description: Protocol to use when connecting to glance, set to https for SSL. + type: string KeyName: default: default description: Name of an existing EC2 KeyPair to enable SSH access to the instances @@ -106,6 +110,20 @@ parameters: description: > Setting to a previously unused value during stack-update will trigger package update on all nodes + Hostname: + type: string + default: '' # Defaults to Heat created hostname + ServiceNetMap: + default: {} + description: Mapping of service_name -> network name. Typically set + via parameter_defaults in the resource registry. + type: json + GlanceApiVirtualIP: + type: string + default: '' + MysqlVirtualIP: + type: string + default: '' resources: BlockStorage: @@ -119,6 +137,7 @@ resources: - network: ctlplane user_data_format: SOFTWARE_CONFIG user_data: {get_resource: NodeUserData} + name: {get_param: Hostname} NodeUserData: type: OS::TripleO::NodeUserData @@ -203,3 +222,6 @@ outputs: storage_mgmt_ip_address: description: IP address of the server in the storage_mgmt network value: {get_attr: [StorageMgmtPort, ip_address]} + config_identifier: + description: identifier which changes if the node configuration may need re-applying + value: "None - NO_SIGNAL" diff --git a/compute-post.yaml b/compute-post.yaml index e568a5a6..695690d4 100644 --- a/compute-post.yaml +++ b/compute-post.yaml @@ -6,6 +6,9 @@ description: 'Compute Post Deployment' parameters: servers: type: json + NodeConfigIdentifiers: + type: json + description: Value which changes if the node configuration may need to be re-applied resources: diff --git a/compute.yaml b/compute.yaml index abd59103..4a9a92b9 100644 --- a/compute.yaml +++ b/compute.yaml @@ -254,6 +254,9 @@ parameters: description: > Setting to a previously unused value during stack-update will trigger package update on all nodes + Hostname: + type: string + default: '' # Defaults to Heat created hostname resources: @@ -270,6 +273,7 @@ resources: - network: ctlplane user_data_format: SOFTWARE_CONFIG user_data: {get_resource: NodeUserData} + name: {get_param: Hostname} NodeUserData: type: OS::TripleO::NodeUserData @@ -473,3 +477,6 @@ outputs: description: Heat resource handle for the Nova compute server value: {get_resource: NovaCompute} + config_identifier: + description: identifier which changes if the node configuration may need re-applying + value: "None - NO_SIGNAL" diff --git a/controller-post.yaml b/controller-post.yaml index 926adeae..aac96357 100644 --- a/controller-post.yaml +++ b/controller-post.yaml @@ -6,6 +6,9 @@ description: 'Controller Post Deployment' parameters: servers: type: json + NodeConfigIdentifiers: + type: json + description: Value which changes if the node configuration may need to be re-applied resources: diff --git a/controller.yaml b/controller.yaml index 9fc91562..01c69f02 100644 --- a/controller.yaml +++ b/controller.yaml @@ -71,11 +71,6 @@ parameters: default: true description: Whether to use Galera instead of regular MariaDB. type: boolean - EnablePacemaker: - default: false - description: If enabled services will be monitored by Pacemaker; it - will manage VIPs as well, in place of Keepalived. - type: boolean EnableCephStorage: default: false description: Whether to deploy Ceph Storage (OSD) on the Controller @@ -447,6 +442,9 @@ parameters: description: > Setting to a previously unused value during stack-update will trigger package update on all nodes + Hostname: + type: string + default: '' # Defaults to Heat created hostname resources: @@ -461,6 +459,7 @@ resources: - network: ctlplane user_data_format: SOFTWARE_CONFIG user_data: {get_resource: NodeUserData} + name: {get_param: Hostname} NodeUserData: type: OS::TripleO::NodeUserData @@ -1047,3 +1046,6 @@ outputs: template: "IP:11211" params: IP: {get_attr: [Controller, networks, ctlplane, 0]} + config_identifier: + description: identifier which changes if the node configuration may need re-applying + value: "None - NO_SIGNAL" diff --git a/environments/puppet-pacemaker.yaml b/environments/puppet-pacemaker.yaml index 70e1b3ed..f235cf8f 100644 --- a/environments/puppet-pacemaker.yaml +++ b/environments/puppet-pacemaker.yaml @@ -2,6 +2,3 @@ # Overcloud controller with Pacemaker. resource_registry: OS::TripleO::ControllerConfig: ../puppet/controller-config-pacemaker.yaml - -parameter_defaults: - RedisVirtualIP: 192.0.2.142 diff --git a/extraconfig/post_deploy/example.yaml b/extraconfig/post_deploy/example.yaml index 6b816d40..1d3dca25 100644 --- a/extraconfig/post_deploy/example.yaml +++ b/extraconfig/post_deploy/example.yaml @@ -20,7 +20,7 @@ resources: echo "extra" > /root/extra ExtraDeployments: - type: OS::Heat::StructuredDeployments + type: OS::Heat::SoftwareDeployments properties: servers: {get_param: servers} config: {get_resource: ExtraConfig} diff --git a/extraconfig/post_deploy/rhel-registration/rhel-registration.yaml b/extraconfig/post_deploy/rhel-registration/rhel-registration.yaml index cbf8f8b5..bf6c88cd 100644 --- a/extraconfig/post_deploy/rhel-registration/rhel-registration.yaml +++ b/extraconfig/post_deploy/rhel-registration/rhel-registration.yaml @@ -71,7 +71,7 @@ resources: config: {get_file: scripts/rhel-registration} RHELRegistrationDeployment: - type: OS::Heat::StructuredDeployments + type: OS::Heat::SoftwareDeployments properties: servers: {get_param: servers} config: {get_resource: RHELRegistration} @@ -104,7 +104,7 @@ resources: - name: REG_METHOD RHELUnregistrationDeployment: - type: OS::Heat::StructuredDeployments + type: OS::Heat::SoftwareDeployments properties: servers: {get_param: servers} config: {get_resource: RHELUnregistration} diff --git a/network/config/bond-with-vlans/ceph-storage.yaml b/network/config/bond-with-vlans/ceph-storage.yaml index 90617b30..ed9fff7a 100644 --- a/network/config/bond-with-vlans/ceph-storage.yaml +++ b/network/config/bond-with-vlans/ceph-storage.yaml @@ -2,7 +2,7 @@ heat_template_version: 2015-04-30 description: > Software Config to drive os-net-config with 2 bonded nics on a bridge - with a VLANs attached for the ceph storage role. + with VLANs attached for the ceph storage role. parameters: ExternalIpSubnet: @@ -25,6 +25,20 @@ parameters: default: '' description: IP address/subnet on the tenant network type: string + BondInterfaceOvsOptions: + default: '' + description: The ovs_options string for the bond interface. Set things like + lacp=active and/or bond_mode=balance-slb using this option. + type: string + StorageNetworkVlanID: + default: 30 + description: Vlan ID for the storage network traffic. + type: number + StorageMgmtNetworkVlanID: + default: 40 + description: Vlan ID for the storage mgmt network traffic. + type: number + resources: OsNetConfigImpl: @@ -36,7 +50,7 @@ resources: network_config: - type: ovs_bridge - name: {get_input: bridge_name} + name: br-storage use_dhcp: true members: - @@ -51,7 +65,7 @@ resources: - type: ovs_bond name: bond1 - ovs_options: vlan_mode=trunk trunks=10,20,30,40,50 + ovs_options: {get_param: BondInterfaceOvsOptions} members: - type: interface @@ -63,14 +77,14 @@ resources: - type: vlan device: bond1 - vlan_id: 30 + vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan device: bond1 - vlan_id: 40 + vlan_id: {get_param: StorageMgmtNetworkVlanID} addresses: - ip_netmask: {get_param: StorageMgmtIpSubnet} diff --git a/network/config/bond-with-vlans/cinder-storage.yaml b/network/config/bond-with-vlans/cinder-storage.yaml index 95204d35..95733fca 100644 --- a/network/config/bond-with-vlans/cinder-storage.yaml +++ b/network/config/bond-with-vlans/cinder-storage.yaml @@ -2,7 +2,7 @@ heat_template_version: 2015-04-30 description: > Software Config to drive os-net-config with 2 bonded nics on a bridge - with a VLANs attached for the cinder storage role. + with VLANs attached for the cinder storage role. parameters: ExternalIpSubnet: @@ -25,6 +25,23 @@ parameters: default: '' description: IP address/subnet on the tenant network type: string + BondInterfaceOvsOptions: + default: '' + description: The ovs_options string for the bond interface. Set things like + lacp=active and/or bond_mode=balance-slb using this option. + type: string + InternalApiNetworkVlanID: + default: 20 + description: Vlan ID for the internal_api network traffic. + type: number + StorageNetworkVlanID: + default: 30 + description: Vlan ID for the storage network traffic. + type: number + StorageMgmtNetworkVlanID: + default: 40 + description: Vlan ID for the storage mgmt network traffic. + type: number resources: OsNetConfigImpl: @@ -36,7 +53,7 @@ resources: network_config: - type: ovs_bridge - name: {get_input: bridge_name} + name: br-storage use_dhcp: true members: - @@ -51,7 +68,7 @@ resources: - type: ovs_bond name: bond1 - ovs_options: vlan_mode=trunk trunks=10,20,30,40,50 + ovs_options: {get_param: BondInterfaceOvsOptions} members: - type: interface @@ -63,21 +80,21 @@ resources: - type: vlan device: bond1 - vlan_id: 20 + vlan_id: {get_param: InternalApiNetworkVlanID} addresses: - ip_netmask: {get_param: InternalApiIpSubnet} - type: vlan device: bond1 - vlan_id: 30 + vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan device: bond1 - vlan_id: 40 + vlan_id: {get_param: StorageMgmtNetworkVlanID} addresses: - ip_netmask: {get_param: StorageMgmtIpSubnet} diff --git a/network/config/bond-with-vlans/compute.yaml b/network/config/bond-with-vlans/compute.yaml index d7113c8c..709b3b5b 100644 --- a/network/config/bond-with-vlans/compute.yaml +++ b/network/config/bond-with-vlans/compute.yaml @@ -2,7 +2,7 @@ heat_template_version: 2015-04-30 description: > Software Config to drive os-net-config with 2 bonded nics on a bridge - with a VLANs attached for the compute role. + with VLANs attached for the compute role. parameters: ExternalIpSubnet: @@ -25,6 +25,23 @@ parameters: default: '' description: IP address/subnet on the tenant network type: string + BondInterfaceOvsOptions: + default: '' + description: The ovs_options string for the bond interface. Set things like + lacp=active and/or bond_mode=balance-slb using this option. + type: string + InternalApiNetworkVlanID: + default: 20 + description: Vlan ID for the internal_api network traffic. + type: number + StorageNetworkVlanID: + default: 30 + description: Vlan ID for the storage network traffic. + type: number + TenantNetworkVlanID: + default: 50 + description: Vlan ID for the tenant network traffic. + type: number resources: OsNetConfigImpl: @@ -51,7 +68,7 @@ resources: - type: ovs_bond name: bond1 - ovs_options: vlan_mode=trunk trunks=10,20,30,40,50 + ovs_options: {get_param: BondInterfaceOvsOptions} members: - type: interface @@ -63,21 +80,21 @@ resources: - type: vlan device: bond1 - vlan_id: 20 + vlan_id: {get_param: InternalApiNetworkVlanID} addresses: - ip_netmask: {get_param: InternalApiIpSubnet} - type: vlan device: bond1 - vlan_id: 30 + vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan device: bond1 - vlan_id: 50 + vlan_id: {get_param: TenantNetworkVlanID} addresses: - ip_netmask: {get_param: TenantIpSubnet} diff --git a/network/config/bond-with-vlans/controller.yaml b/network/config/bond-with-vlans/controller.yaml index 478581c2..16a0dec2 100644 --- a/network/config/bond-with-vlans/controller.yaml +++ b/network/config/bond-with-vlans/controller.yaml @@ -2,7 +2,7 @@ heat_template_version: 2015-04-30 description: > Software Config to drive os-net-config with 2 bonded nics on a bridge - with a VLANs attached for the controller role. + with VLANs attached for the controller role. parameters: ExternalIpSubnet: @@ -25,6 +25,31 @@ parameters: default: '' description: IP address/subnet on the tenant network type: string + BondInterfaceOvsOptions: + default: '' + description: The ovs_options string for the bond interface. Set things like + lacp=active and/or bond_mode=balance-slb using this option. + type: string + ExternalNetworkVlanID: + default: 10 + description: Vlan ID for the external network traffic. + type: number + InternalApiNetworkVlanID: + default: 20 + description: Vlan ID for the internal_api network traffic. + type: number + StorageNetworkVlanID: + default: 30 + description: Vlan ID for the storage network traffic. + type: number + StorageMgmtNetworkVlanID: + default: 40 + description: Vlan ID for the storage mgmt network traffic. + type: number + TenantNetworkVlanID: + default: 50 + description: Vlan ID for the tenant network traffic. + type: number resources: OsNetConfigImpl: @@ -51,7 +76,7 @@ resources: - type: ovs_bond name: bond1 - ovs_options: vlan_mode=trunk trunks=10,20,30,40,50 + ovs_options: {get_param: BondInterfaceOvsOptions} members: - type: interface @@ -63,35 +88,35 @@ resources: - type: vlan device: bond1 - vlan_id: 10 + vlan_id: {get_param: ExternalNetworkVlanID} addresses: - ip_netmask: {get_param: ExternalIpSubnet} - type: vlan device: bond1 - vlan_id: 20 + vlan_id: {get_param: InternalApiNetworkVlanID} addresses: - ip_netmask: {get_param: InternalApiIpSubnet} - type: vlan device: bond1 - vlan_id: 30 + vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan device: bond1 - vlan_id: 40 + vlan_id: {get_param: StorageMgmtNetworkVlanID} addresses: - ip_netmask: {get_param: StorageMgmtIpSubnet} - type: vlan device: bond1 - vlan_id: 50 + vlan_id: {get_param: TenantNetworkVlanID} addresses: - ip_netmask: {get_param: TenantIpSubnet} diff --git a/network/config/bond-with-vlans/swift-storage.yaml b/network/config/bond-with-vlans/swift-storage.yaml index 337fef5b..6549ce7a 100644 --- a/network/config/bond-with-vlans/swift-storage.yaml +++ b/network/config/bond-with-vlans/swift-storage.yaml @@ -2,7 +2,7 @@ heat_template_version: 2015-04-30 description: > Software Config to drive os-net-config with 2 bonded nics on a bridge - with a VLANs attached for the swift storage role. + with VLANs attached for the swift storage role. parameters: ExternalIpSubnet: @@ -25,6 +25,23 @@ parameters: default: '' description: IP address/subnet on the tenant network type: string + BondInterfaceOvsOptions: + default: '' + description: The ovs_options string for the bond interface. Set things like + lacp=active and/or bond_mode=balance-slb using this option. + type: string + InternalApiNetworkVlanID: + default: 20 + description: Vlan ID for the internal_api network traffic. + type: number + StorageNetworkVlanID: + default: 30 + description: Vlan ID for the storage network traffic. + type: number + StorageMgmtNetworkVlanID: + default: 40 + description: Vlan ID for the storage mgmt network traffic. + type: number resources: OsNetConfigImpl: @@ -36,7 +53,7 @@ resources: network_config: - type: ovs_bridge - name: {get_input: bridge_name} + name: br-storage use_dhcp: true members: - @@ -51,7 +68,7 @@ resources: - type: ovs_bond name: bond1 - ovs_options: vlan_mode=trunk trunks=10,20,30,40,50 + ovs_options: {get_param: BondInterfaceOvsOptions} members: - type: interface @@ -63,21 +80,21 @@ resources: - type: vlan device: bond1 - vlan_id: 20 + vlan_id: {get_param: InternalApiNetworkVlanID} addresses: - ip_netmask: {get_param: InternalApiIpSubnet} - type: vlan device: bond1 - vlan_id: 30 + vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan device: bond1 - vlan_id: 40 + vlan_id: {get_param: StorageMgmtNetworkVlanID} addresses: - ip_netmask: {get_param: StorageMgmtIpSubnet} diff --git a/network/config/single-nic-vlans/ceph-storage.yaml b/network/config/single-nic-vlans/ceph-storage.yaml index 0bc6253c..4a25f763 100644 --- a/network/config/single-nic-vlans/ceph-storage.yaml +++ b/network/config/single-nic-vlans/ceph-storage.yaml @@ -25,6 +25,14 @@ parameters: default: '' description: IP address/subnet on the tenant network type: string + StorageNetworkVlanID: + default: 30 + description: Vlan ID for the storage network traffic. + type: number + StorageMgmtNetworkVlanID: + default: 40 + description: Vlan ID for the storage mgmt network traffic. + type: number resources: OsNetConfigImpl: @@ -36,26 +44,23 @@ resources: network_config: - type: ovs_bridge - name: {get_input: bridge_name} + name: br-storage use_dhcp: true members: - type: interface name: nic1 - ovs_options: vlan_mode=trunk trunks=10,20,30,40,50 # force the MAC address of the bridge to this interface primary: true - type: vlan - device: bond1 - vlan_id: 30 + vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan - device: bond1 - vlan_id: 40 + vlan_id: {get_param: StorageMgmtNetworkVlanID} addresses: - ip_netmask: {get_param: StorageMgmtIpSubnet} diff --git a/network/config/single-nic-vlans/cinder-storage.yaml b/network/config/single-nic-vlans/cinder-storage.yaml index 1ca239c1..397b1ecd 100644 --- a/network/config/single-nic-vlans/cinder-storage.yaml +++ b/network/config/single-nic-vlans/cinder-storage.yaml @@ -25,6 +25,18 @@ parameters: default: '' description: IP address/subnet on the tenant network type: string + InternalApiNetworkVlanID: + default: 20 + description: Vlan ID for the internal_api network traffic. + type: number + StorageNetworkVlanID: + default: 30 + description: Vlan ID for the storage network traffic. + type: number + StorageMgmtNetworkVlanID: + default: 40 + description: Vlan ID for the storage mgmt network traffic. + type: number resources: OsNetConfigImpl: @@ -36,33 +48,29 @@ resources: network_config: - type: ovs_bridge - name: {get_input: bridge_name} + name: br-storage use_dhcp: true members: - type: interface name: nic1 - ovs_options: vlan_mode=trunk trunks=10,20,30,40,50 # force the MAC address of the bridge to this interface primary: true - type: vlan - device: bond1 - vlan_id: 20 + vlan_id: {get_param: InternalApiNetworkVlanID} addresses: - ip_netmask: {get_param: InternalApiIpSubnet} - type: vlan - device: bond1 - vlan_id: 30 + vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan - device: bond1 - vlan_id: 40 + vlan_id: {get_param: StorageMgmtNetworkVlanID} addresses: - ip_netmask: {get_param: StorageMgmtIpSubnet} diff --git a/network/config/single-nic-vlans/compute.yaml b/network/config/single-nic-vlans/compute.yaml index 93fe0b50..c73aed5e 100644 --- a/network/config/single-nic-vlans/compute.yaml +++ b/network/config/single-nic-vlans/compute.yaml @@ -25,6 +25,18 @@ parameters: default: '' description: IP address/subnet on the tenant network type: string + InternalApiNetworkVlanID: + default: 20 + description: Vlan ID for the internal_api network traffic. + type: number + StorageNetworkVlanID: + default: 30 + description: Vlan ID for the storage network traffic. + type: number + TenantNetworkVlanID: + default: 50 + description: Vlan ID for the tenant network traffic. + type: number resources: OsNetConfigImpl: @@ -42,24 +54,23 @@ resources: - type: interface name: nic1 - ovs_options: vlan_mode=trunk trunks=10,20,30,40,50 # force the MAC address of the bridge to this interface primary: true - type: vlan - vlan_id: 20 + vlan_id: {get_param: InternalApiNetworkVlanID} addresses: - ip_netmask: {get_param: InternalApiIpSubnet} - type: vlan - vlan_id: 30 + vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan - vlan_id: 50 + vlan_id: {get_param: TenantNetworkVlanID} addresses: - ip_netmask: {get_param: TenantIpSubnet} diff --git a/network/config/single-nic-vlans/controller.yaml b/network/config/single-nic-vlans/controller.yaml index 5e1d5d44..ca0cbcad 100644 --- a/network/config/single-nic-vlans/controller.yaml +++ b/network/config/single-nic-vlans/controller.yaml @@ -25,6 +25,26 @@ parameters: default: '' description: IP address/subnet on the tenant network type: string + ExternalNetworkVlanID: + default: 10 + description: Vlan ID for the external network traffic. + type: number + InternalApiNetworkVlanID: + default: 20 + description: Vlan ID for the internal_api network traffic. + type: number + StorageNetworkVlanID: + default: 30 + description: Vlan ID for the storage network traffic. + type: number + StorageMgmtNetworkVlanID: + default: 40 + description: Vlan ID for the storage mgmt network traffic. + type: number + TenantNetworkVlanID: + default: 50 + description: Vlan ID for the tenant network traffic. + type: number resources: OsNetConfigImpl: @@ -42,36 +62,35 @@ resources: - type: interface name: nic1 - ovs_options: vlan_mode=trunk trunks=10,20,30,40,50 # force the MAC address of the bridge to this interface primary: true - type: vlan - vlan_id: 10 + vlan_id: {get_param: ExternalNetworkVlanID} addresses: - ip_netmask: {get_param: ExternalIpSubnet} - type: vlan - vlan_id: 20 + vlan_id: {get_param: InternalApiNetworkVlanID} addresses: - ip_netmask: {get_param: InternalApiIpSubnet} - type: vlan - vlan_id: 30 + vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan - vlan_id: 40 + vlan_id: {get_param: StorageMgmtNetworkVlanID} addresses: - ip_netmask: {get_param: StorageMgmtIpSubnet} - type: vlan - vlan_id: 50 + vlan_id: {get_param: TenantNetworkVlanID} addresses: - ip_netmask: {get_param: TenantIpSubnet} diff --git a/network/config/single-nic-vlans/swift-storage.yaml b/network/config/single-nic-vlans/swift-storage.yaml index b2477175..f033ced7 100644 --- a/network/config/single-nic-vlans/swift-storage.yaml +++ b/network/config/single-nic-vlans/swift-storage.yaml @@ -25,6 +25,18 @@ parameters: default: '' description: IP address/subnet on the tenant network type: string + InternalApiNetworkVlanID: + default: 20 + description: Vlan ID for the internal_api network traffic. + type: number + StorageNetworkVlanID: + default: 30 + description: Vlan ID for the storage network traffic. + type: number + StorageMgmtNetworkVlanID: + default: 40 + description: Vlan ID for the storage mgmt network traffic. + type: number resources: OsNetConfigImpl: @@ -36,33 +48,29 @@ resources: network_config: - type: ovs_bridge - name: {get_input: bridge_name} + name: br-storage use_dhcp: true members: - type: interface name: nic1 - ovs_options: vlan_mode=trunk trunks=10,20,30,40,50 # force the MAC address of the bridge to this interface primary: true - type: vlan - device: bond1 - vlan_id: 20 + vlan_id: {get_param: InternalApiNetworkVlanID} addresses: - ip_netmask: {get_param: InternalApiIpSubnet} - type: vlan - device: bond1 - vlan_id: 30 + vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan - device: bond1 - vlan_id: 40 + vlan_id: {get_param: StorageMgmtNetworkVlanID} addresses: - ip_netmask: {get_param: StorageMgmtIpSubnet} diff --git a/network/external.yaml b/network/external.yaml index e9aa5b32..bf4bdfe7 100644 --- a/network/external.yaml +++ b/network/external.yaml @@ -33,7 +33,10 @@ parameters: default: external_subnet description: The name of the external subnet in Neutron. type: string - + ExternalAllocationPools: + default: [{'start': '10.0.0.4', 'end': '10.0.0.250'}] + description: Ip allocation pool range for the external network. + type: json resources: ExternalNetwork: @@ -51,6 +54,7 @@ resources: enable_dhcp: {get_param: ExternalNetEnableDHCP} name: {get_param: ExternalSubnetName} network: {get_resource: ExternalNetwork} + allocation_pools: {get_param: ExternalAllocationPools} outputs: OS::stack_id: diff --git a/network/internal_api.yaml b/network/internal_api.yaml index 5abfb117..c7e822e9 100644 --- a/network/internal_api.yaml +++ b/network/internal_api.yaml @@ -33,6 +33,10 @@ parameters: default: internal_api_subnet description: The name of the internal API subnet in Neutron. type: string + InternalApiAllocationPools: + default: [{'start': '172.16.2.4', 'end': '172.16.2.250'}] + description: Ip allocation pool range for the internal API network. + type: json resources: InternalApiNetwork: @@ -50,6 +54,7 @@ resources: enable_dhcp: {get_param: InternalApiNetEnableDHCP} name: {get_param: InternalApiSubnetName} network: {get_resource: InternalApiNetwork} + allocation_pools: {get_param: InternalApiAllocationPools} outputs: OS::stack_id: diff --git a/network/storage.yaml b/network/storage.yaml index 1f60adf4..d403f9e5 100644 --- a/network/storage.yaml +++ b/network/storage.yaml @@ -33,6 +33,10 @@ parameters: default: storage_subnet description: The name of the storage subnet in Neutron. type: string + StorageAllocationPools: + default: [{'start': '172.16.1.4', 'end': '172.16.1.250'}] + description: Ip allocation pool range for the storage network. + type: json resources: StorageNetwork: @@ -50,6 +54,7 @@ resources: enable_dhcp: {get_param: StorageNetEnableDHCP} name: {get_param: StorageSubnetName} network: {get_resource: StorageNetwork} + allocation_pools: {get_param: StorageAllocationPools} outputs: OS::stack_id: diff --git a/network/storage_mgmt.yaml b/network/storage_mgmt.yaml index e97d4364..d0c919b5 100644 --- a/network/storage_mgmt.yaml +++ b/network/storage_mgmt.yaml @@ -33,6 +33,10 @@ parameters: default: storage_mgmt_subnet description: The name of the Storage management subnet in Neutron. type: string + StorageMgmtAllocationPools: + default: [{'start': '172.16.3.4', 'end': '172.16.3.250'}] + description: Ip allocation pool range for the storage mgmt network. + type: json resources: StorageMgmtNetwork: @@ -50,6 +54,7 @@ resources: enable_dhcp: {get_param: StorageMgmtNetEnableDHCP} name: {get_param: StorageMgmtSubnetName} network: {get_resource: StorageMgmtNetwork} + allocation_pools: {get_param: StorageMgmtAllocationPools} outputs: OS::stack_id: diff --git a/network/tenant.yaml b/network/tenant.yaml index db7f99f3..055b87b8 100644 --- a/network/tenant.yaml +++ b/network/tenant.yaml @@ -33,6 +33,10 @@ parameters: default: tenant_subnet description: The name of the tenant subnet in Neutron. type: string + TenantAllocationPools: + default: [{'start': '172.16.0.4', 'end': '172.16.0.250'}] + description: Ip allocation pool range for the tenant network. + type: json resources: TenantNetwork: @@ -50,6 +54,7 @@ resources: enable_dhcp: {get_param: TenantNetEnableDHCP} name: {get_param: TenantSubnetName} network: {get_resource: TenantNetwork} + allocation_pools: {get_param: TenantAllocationPools} outputs: OS::stack_id: diff --git a/overcloud-resource-registry-puppet.yaml b/overcloud-resource-registry-puppet.yaml index 213dfc59..c9041c6b 100644 --- a/overcloud-resource-registry-puppet.yaml +++ b/overcloud-resource-registry-puppet.yaml @@ -2,7 +2,7 @@ resource_registry: OS::TripleO::BlockStorage: puppet/cinder-storage-puppet.yaml OS::TripleO::BlockStorage::Net::SoftwareConfig: net-config-noop.yaml OS::TripleO::Compute: puppet/compute-puppet.yaml - OS::TripleO::Compute::Net::SoftwareConfig: net-config-bridge.yaml + OS::TripleO::Compute::Net::SoftwareConfig: net-config-noop.yaml OS::TripleO::SoftwareDeployment: OS::Heat::StructuredDeployment OS::TripleO::Controller: puppet/controller-puppet.yaml OS::TripleO::Controller::Net::SoftwareConfig: net-config-bridge.yaml diff --git a/overcloud-without-mergepy.yaml b/overcloud-without-mergepy.yaml index 89bc97e5..5d175468 100644 --- a/overcloud-without-mergepy.yaml +++ b/overcloud-without-mergepy.yaml @@ -58,12 +58,6 @@ parameters: default: '' description: Set to True to enable debugging on all services. type: string - DefaultSignalTransport: - default: CFN_SIGNAL - description: Transport to use for software-config signals. - type: string - constraints: - - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ] GlancePort: default: "9292" description: Glance port. @@ -267,11 +261,6 @@ parameters: default: true description: Whether to use Galera instead of regular MariaDB. type: boolean - EnablePacemaker: - default: false - description: If enabled services will be monitored by Pacemaker; it - will manage VIPs as well, in place of Keepalived. - type: boolean ControllerEnableCephStorage: default: false description: Whether to deploy Ceph Storage (OSD) on the Controller @@ -496,7 +485,7 @@ parameters: - custom_constraint: nova.flavor ServiceNetMap: default: - NeutronLocalIp: tenant + NeutronTenantNetwork: tenant CeilometerApiNetwork: internal_api MongoDbNetwork: internal_api CinderApiNetwork: internal_api @@ -509,6 +498,7 @@ parameters: HeatApiNetwork: internal_api NovaApiNetwork: internal_api NovaMetadataNetwork: internal_api + NovaVncProxyNetwork: internal_api SwiftMgmtNetwork: storage_mgmt SwiftProxyNetwork: storage HorizonNetwork: internal_api @@ -562,7 +552,32 @@ parameters: constraints: - custom_constraint: nova.flavor -# Identifiers to trigger tasks on nodes + # Hostname format for each role + # Note %index% is translated into the index of the node, e.g 0/1/2 etc + # and %stackname% is replaced with OS::stack_name in the template below. + # If you want to use the heat generated names, pass '' (empty string). + ControllerHostnameFormat: + type: string + description: Format for Controller node hostnames + default: '%stackname%-controller-%index%' + ComputeHostnameFormat: + type: string + description: Format for Compute node hostnames + default: '%stackname%-novacompute-%index%' + BlockStorageHostnameFormat: + type: string + description: Format for BlockStorage node hostnames + default: '%stackname%-blockstorage-%index%' + ObjectStorageHostnameFormat: + type: string + description: Format for SwiftStorage node hostnames + default: '%stackname%-objectstorage-%index%' + CephStorageHostnameFormat: + type: string + description: Format for CephStorage node hostnames + default: '%stackname%-cephstorage-%index%' + + # Identifiers to trigger tasks on nodes UpdateIdentifier: default: '' type: string @@ -570,6 +585,8 @@ parameters: Setting to a previously unused value during stack-update will trigger package update on all nodes + + resources: HeatAuthEncryptionKey: @@ -608,7 +625,6 @@ resources: ControllerExtraConfig: {get_param: controllerExtraConfig} Debug: {get_param: Debug} EnableGalera: {get_param: EnableGalera} - EnablePacemaker: {get_param: EnablePacemaker} EnableCephStorage: {get_param: ControllerEnableCephStorage} EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage} ExtraConfig: {get_param: ExtraConfig} @@ -682,6 +698,11 @@ resources: KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]} NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]} UpdateIdentifier: {get_param: UpdateIdentifier} + Hostname: + str_replace: + template: {get_param: ControllerHostnameFormat} + params: + '%stackname%': {get_param: 'OS::stack_name'} Compute: type: OS::Heat::ResourceGroup @@ -740,6 +761,11 @@ resources: SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword} ServiceNetMap: {get_param: ServiceNetMap} UpdateIdentifier: {get_param: UpdateIdentifier} + Hostname: + str_replace: + template: {get_param: ComputeHostnameFormat} + params: + '%stackname%': {get_param: 'OS::stack_name'} BlockStorage: type: OS::Heat::ResourceGroup @@ -756,15 +782,25 @@ resources: # Purpose of the dedicated BlockStorage nodes should be to use their local LVM CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend} CinderPassword: {get_param: CinderPassword} - VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} KeyName: {get_param: KeyName} Flavor: {get_param: OvercloudBlockStorageFlavor} + VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} + GlancePort: {get_param: GlancePort} + GlanceProtocol: {get_param: GlanceProtocol} + GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]} RabbitPassword: {get_param: RabbitPassword} RabbitUserName: {get_param: RabbitUserName} RabbitClientUseSSL: {get_param: RabbitClientUseSSL} RabbitClientPort: {get_param: RabbitClientPort} NtpServer: {get_param: NtpServer} UpdateIdentifier: {get_param: UpdateIdentifier} + Hostname: + str_replace: + template: {get_param: BlockStorageHostnameFormat} + params: + '%stackname%': {get_param: 'OS::stack_name'} + ServiceNetMap: {get_param: ServiceNetMap} + MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]} ObjectStorage: type: OS::Heat::ResourceGroup @@ -784,6 +820,12 @@ resources: Replicas: { get_param: SwiftReplicas} NtpServer: {get_param: NtpServer} UpdateIdentifier: {get_param: UpdateIdentifier} + ServiceNetMap: {get_param: ServiceNetMap} + Hostname: + str_replace: + template: {get_param: ObjectStorageHostnameFormat} + params: + '%stackname%': {get_param: 'OS::stack_name'} CephStorage: type: OS::Heat::ResourceGroup @@ -799,6 +841,11 @@ resources: NtpServer: {get_param: NtpServer} ServiceNetMap: {get_param: ServiceNetMap} UpdateIdentifier: {get_param: UpdateIdentifier} + Hostname: + str_replace: + template: {get_param: CephStorageHostnameFormat} + params: + '%stackname%': {get_param: 'OS::stack_name'} ControllerIpListMap: type: OS::TripleO::Network::Ports::NetIpListMap @@ -958,21 +1005,18 @@ resources: properties: config: {get_attr: [ControllerBootstrapNodeConfig, config_id]} servers: {get_attr: [Controller, attributes, nova_server_resource]} - signal_transport: NO_SIGNAL ControllerSwiftDeployment: type: OS::Heat::StructuredDeployments properties: config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]} servers: {get_attr: [Controller, attributes, nova_server_resource]} - signal_transport: NO_SIGNAL ObjectStorageSwiftDeployment: type: OS::Heat::StructuredDeployments properties: config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]} servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]} - signal_transport: NO_SIGNAL SwiftDevicesAndProxyConfig: type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig @@ -1011,6 +1055,7 @@ resources: ControllerClusterConfig: type: OS::Heat::StructuredConfig properties: + group: os-apply-config config: corosync: nodes: {get_attr: [Controller, corosync_node]} @@ -1028,7 +1073,6 @@ resources: properties: config: {get_resource: ControllerClusterConfig} servers: {get_attr: [Controller, attributes, nova_server_resource]} - signal_transport: NO_SIGNAL ControllerAllNodesDeployment: type: OS::Heat::StructuredDeployments @@ -1066,30 +1110,36 @@ resources: depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment] properties: servers: {get_attr: [Controller, attributes, nova_server_resource]} + NodeConfigIdentifiers: {get_attr: [Controller, attributes, config_identifier]} ComputeNodesPostDeployment: type: OS::TripleO::ComputePostDeployment depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment] properties: servers: {get_attr: [Compute, attributes, nova_server_resource]} + NodeConfigIdentifiers: {get_attr: [Compute, attributes, config_identifier]} ObjectStorageNodesPostDeployment: type: OS::TripleO::ObjectStoragePostDeployment depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment] properties: servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]} + NodeConfigIdentifiers: {get_attr: [ObjectStorage, attributes, config_identifier]} + BlockStorageNodesPostDeployment: type: OS::TripleO::BlockStoragePostDeployment depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment] properties: servers: {get_attr: [BlockStorage, attributes, nova_server_resource]} + NodeConfigIdentifiers: {get_attr: [BlockStorage, attributes, config_identifier]} CephStorageNodesPostDeployment: type: OS::TripleO::CephStoragePostDeployment depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment] properties: servers: {get_attr: [CephStorage, attributes, nova_server_resource]} + NodeConfigIdentifiers: {get_attr: [CephStorage, attributes, config_identifier]} outputs: KeystoneURL: diff --git a/puppet/all-nodes-config.yaml b/puppet/all-nodes-config.yaml index c50d6820..060f4c81 100644 --- a/puppet/all-nodes-config.yaml +++ b/puppet/all-nodes-config.yaml @@ -78,6 +78,8 @@ resources: - {get_param: ceph_storage_hosts} hiera: datafiles: + RedHat: + raw_data: {get_file: hieradata/RedHat.yaml} all_nodes: mapped_data: controller_node_ips: diff --git a/puppet/bootstrap-config.yaml b/puppet/bootstrap-config.yaml index c88ed408..d88eebdf 100644 --- a/puppet/bootstrap-config.yaml +++ b/puppet/bootstrap-config.yaml @@ -12,6 +12,7 @@ resources: BootstrapNodeConfigImpl: type: OS::Heat::StructuredConfig properties: + group: os-apply-config config: hiera: datafiles: diff --git a/puppet/ceph-storage-post-puppet.yaml b/puppet/ceph-storage-post-puppet.yaml index eb62ba1e..1b5b944d 100644 --- a/puppet/ceph-storage-post-puppet.yaml +++ b/puppet/ceph-storage-post-puppet.yaml @@ -6,6 +6,10 @@ description: > parameters: servers: type: json + NodeConfigIdentifiers: + type: json + description: Value which changes if the node configuration may need to be re-applied + resources: CephStoragePuppetConfig: @@ -22,6 +26,8 @@ resources: properties: servers: {get_param: servers} config: {get_resource: CephStoragePuppetConfig} + input_values: + update_identifier: {get_param: NodeConfigIdentifiers} # Note, this should come last, so use depends_on to ensure # this is created after any other resources. diff --git a/puppet/ceph-storage-puppet.yaml b/puppet/ceph-storage-puppet.yaml index 1ab381af..245d8ebb 100644 --- a/puppet/ceph-storage-puppet.yaml +++ b/puppet/ceph-storage-puppet.yaml @@ -39,6 +39,9 @@ parameters: description: > Setting to a previously unused value during stack-update will trigger package update on all nodes + Hostname: + type: string + default: '' # Defaults to Heat created hostname resources: CephStorage: @@ -52,6 +55,7 @@ resources: - network: ctlplane user_data_format: SOFTWARE_CONFIG user_data: {get_resource: NodeUserData} + name: {get_param: Hostname} NodeUserData: type: OS::TripleO::NodeUserData @@ -86,6 +90,7 @@ resources: CephStorageDeployment: type: OS::Heat::StructuredDeployment + depends_on: NetworkDeployment properties: config: {get_resource: CephStorageConfig} server: {get_resource: CephStorage} @@ -138,7 +143,7 @@ outputs: hosts_entry: value: str_replace: - template: "IP HOST" + template: "IP HOST.localdomain HOST" params: IP: {get_attr: [CephStorage, networks, ctlplane, 0]} HOST: {get_attr: [CephStorage, name]} @@ -152,3 +157,7 @@ outputs: storage_mgmt_ip_address: description: IP address of the server in the storage_mgmt network 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]} + diff --git a/puppet/cinder-storage-post.yaml b/puppet/cinder-storage-post.yaml index f17a1567..24d2b8a3 100644 --- a/puppet/cinder-storage-post.yaml +++ b/puppet/cinder-storage-post.yaml @@ -4,6 +4,9 @@ description: 'OpenStack cinder storage post deployment for Puppet' parameters: servers: type: json + NodeConfigIdentifiers: + type: json + description: Value which changes if the node configuration may need to be re-applied resources: diff --git a/puppet/cinder-storage-puppet.yaml b/puppet/cinder-storage-puppet.yaml index 74df116a..cc8d17c4 100644 --- a/puppet/cinder-storage-puppet.yaml +++ b/puppet/cinder-storage-puppet.yaml @@ -25,7 +25,7 @@ parameters: default: '' description: Set to True to enable debugging on all services. type: string - VirtualIP: + VirtualIP: # deprecated. Use per service VIPs instead. default: '' type: string ExtraConfig: @@ -75,6 +75,10 @@ parameters: default: "9292" description: Glance port. type: string + GlanceProtocol: + default: http + description: Protocol to use when connecting to glance, set to https for SSL. + type: string KeyName: default: default description: Name of an existing EC2 KeyPair to enable SSH access to the instances @@ -117,6 +121,20 @@ parameters: description: > Setting to a previously unused value during stack-update will trigger package update on all nodes + Hostname: + type: string + default: '' # Defaults to Heat created hostname + ServiceNetMap: + default: {} + description: Mapping of service_name -> network name. Typically set + via parameter_defaults in the resource registry. + type: json + GlanceApiVirtualIP: + type: string + default: '' + MysqlVirtualIP: + type: string + default: '' resources: BlockStorage: @@ -130,6 +148,7 @@ resources: - network: ctlplane user_data_format: SOFTWARE_CONFIG user_data: {get_resource: NodeUserData} + name: {get_param: Hostname} NodeUserData: type: OS::TripleO::NodeUserData @@ -156,6 +175,13 @@ resources: StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]} StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]} + NetIpMap: + type: OS::TripleO::Network::Ports::NetIpMap + properties: + InternalApiIp: {get_attr: [InternalApiPort, ip_address]} + StorageIp: {get_attr: [StoragePort, ip_address]} + StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]} + NetworkDeployment: type: OS::TripleO::SoftwareDeployment properties: @@ -164,12 +190,13 @@ resources: BlockStorageDeployment: type: OS::Heat::StructuredDeployment + depends_on: NetworkDeployment properties: server: {get_resource: BlockStorage} config: {get_resource: BlockStorageConfig} input_values: debug: {get_param: Debug} - cinder_dsn: {list_join: ['', ['mysql://cinder:', {get_param: CinderPassword}, '@', {get_param: VirtualIP} , '/cinder']]} + cinder_dsn: {list_join: ['', ['mysql://cinder:', {get_param: CinderPassword}, '@', {get_param: MysqlVirtualIP} , '/cinder']]} snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName} snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword} cinder_lvm_loop_device_size: @@ -179,6 +206,15 @@ resources: size: {get_param: CinderLVMLoopDeviceSize} cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend} cinder_iscsi_helper: {get_param: CinderISCSIHelper} + cinder_iscsi_ip_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]} + glance_api_servers: + list_join: + - '' + - - {get_param: GlanceProtocol} + - '://' + - {get_param: GlanceApiVirtualIP} + - ':' + - {get_param: GlancePort} rabbit_username: {get_param: RabbitUserName} rabbit_password: {get_param: RabbitPassword} rabbit_client_use_ssl: {get_param: RabbitClientUseSSL} @@ -189,7 +225,6 @@ resources: params: server: {get_param: NtpServer} enable_package_install: {get_param: EnablePackageInstall} - signal_transport: NO_SIGNAL # Map heat metadata into hiera datafiles BlockStorageConfig: @@ -209,8 +244,6 @@ resources: raw_data: {get_file: hieradata/common.yaml} volume: raw_data: {get_file: hieradata/volume.yaml} - oac_data: - cinder_iscsi_ip_address: local-ipv4 mapped_data: # Cinder cinder::debug: {get_input: debug} @@ -222,6 +255,8 @@ resources: cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl} cinder::rabbit_port: {get_input: rabbit_client_port} cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend} + cinder_iscsi_ip_address: {get_input: cinder_iscsi_ip_address} + cinder::glance::glance_api_servers: {get_input: glance_api_servers} ntp::servers: {get_input: ntp_servers} enable_package_install: {get_input: enable_package_install} snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name} @@ -243,7 +278,7 @@ outputs: hosts_entry: value: str_replace: - template: "IP HOST" + template: "IP HOST.localdomain HOST" params: IP: {get_attr: [BlockStorage, networks, ctlplane, 0]} HOST: {get_attr: [BlockStorage, name]} @@ -260,3 +295,6 @@ outputs: storage_mgmt_ip_address: description: IP address of the server in the storage_mgmt network 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]} diff --git a/puppet/compute-post-puppet.yaml b/puppet/compute-post-puppet.yaml index ca5eb649..b4a6126b 100644 --- a/puppet/compute-post-puppet.yaml +++ b/puppet/compute-post-puppet.yaml @@ -6,6 +6,10 @@ description: > parameters: servers: type: json + NodeConfigIdentifiers: + type: json + description: Value which changes if the node configuration may need to be re-applied + resources: @@ -23,6 +27,8 @@ resources: properties: servers: {get_param: servers} config: {get_resource: ComputePuppetConfig} + input_values: + update_identifier: {get_param: NodeConfigIdentifiers} # Note, this should come last, so use depends_on to ensure # this is created after any other resources. diff --git a/puppet/compute-puppet.yaml b/puppet/compute-puppet.yaml index 12e701dd..7e49bc22 100644 --- a/puppet/compute-puppet.yaml +++ b/puppet/compute-puppet.yaml @@ -258,6 +258,9 @@ parameters: description: > Setting to a previously unused value during stack-update will trigger package update on all nodes + Hostname: + type: string + default: '' # Defaults to Heat created hostname resources: @@ -274,6 +277,7 @@ resources: - network: ctlplane user_data_format: SOFTWARE_CONFIG user_data: {get_resource: NodeUserData} + name: {get_param: Hostname} NodeUserData: type: OS::TripleO::NodeUserData @@ -310,7 +314,6 @@ resources: NetworkDeployment: type: OS::TripleO::SoftwareDeployment properties: - signal_transport: NO_SIGNAL config: {get_resource: NetworkConfig} server: {get_resource: NovaCompute} input_values: @@ -338,8 +341,6 @@ resources: raw_data: {get_file: hieradata/ceph.yaml} compute: raw_data: {get_file: hieradata/compute.yaml} - oac_data: - nova::compute::vncserver_proxyclient_address: local-ipv4 mapped_data: nova::debug: {get_input: debug} nova::rabbit_userid: {get_input: rabbit_username} @@ -352,6 +353,7 @@ resources: nova::compute::vncproxy_host: {get_input: nova_public_ip} nova_enable_rbd_backend: {get_input: nova_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} ceilometer::rabbit_userid: {get_input: rabbit_username} ceilometer::rabbit_password: {get_input: rabbit_password} @@ -394,8 +396,8 @@ resources: NovaComputeDeployment: type: OS::TripleO::SoftwareDeployment + depends_on: NetworkDeployment properties: - signal_transport: NO_SIGNAL config: {get_resource: NovaComputeConfig} server: {get_resource: NovaCompute} input_values: @@ -406,6 +408,7 @@ resources: nova_api_host: {get_param: NovaApiHost} nova_password: {get_param: NovaPassword} nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend} + 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} ceilometer_compute_agent: {get_param: CeilometerComputeAgent} @@ -427,7 +430,7 @@ resources: - {get_param: GlancePort} neutron_flat_networks: {get_param: NeutronFlatNetworks} neutron_host: {get_param: NeutronHost} - neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronLocalIp]}]} + neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]} neutron_tenant_network_type: {get_param: NeutronNetworkType} neutron_tunnel_types: {get_param: NeutronTunnelTypes} neutron_network_vlan_ranges: @@ -505,7 +508,7 @@ outputs: Server's IP address and hostname in the /etc/hosts format value: str_replace: - template: "IP HOST" + template: "IP HOST.localdomain HOST" params: IP: {get_attr: [NovaCompute, networks, ctlplane, 0]} HOST: {get_attr: [NovaCompute, name]} @@ -513,3 +516,7 @@ outputs: description: Heat resource handle for the Nova compute server value: {get_resource: NovaCompute} + config_identifier: + description: identifier which changes if the node configuration may need re-applying + value: {get_attr: [NovaComputeDeployment, deploy_stdout]} + diff --git a/puppet/controller-post-puppet.yaml b/puppet/controller-post-puppet.yaml index 373daba2..e88561e6 100644 --- a/puppet/controller-post-puppet.yaml +++ b/puppet/controller-post-puppet.yaml @@ -6,6 +6,10 @@ description: > parameters: servers: type: json + NodeConfigIdentifiers: + type: json + description: Value which changes if the node configuration may need to be re-applied + resources: @@ -23,6 +27,7 @@ resources: config: {get_resource: ControllerPuppetConfig} input_values: step: 1 + update_identifier: {get_param: NodeConfigIdentifiers} actions: ['CREATE'] # no need for two passes on an UPDATE ControllerServicesBaseDeployment_Step2: @@ -33,6 +38,7 @@ resources: config: {get_resource: ControllerPuppetConfig} input_values: step: 2 + update_identifier: {get_param: NodeConfigIdentifiers} actions: ['CREATE'] # no need for two passes on an UPDATE ControllerRingbuilderPuppetConfig: @@ -54,6 +60,8 @@ resources: properties: servers: {get_param: servers} config: {get_resource: ControllerRingbuilderPuppetConfig} + input_values: + update_identifier: {get_param: NodeConfigIdentifiers} ControllerOvercloudServicesDeployment_Step4: type: OS::Heat::StructuredDeployments @@ -63,6 +71,7 @@ resources: config: {get_resource: ControllerPuppetConfig} input_values: step: 3 + update_identifier: {get_param: NodeConfigIdentifiers} ControllerOvercloudServicesDeployment_Step5: type: OS::Heat::StructuredDeployments @@ -72,6 +81,7 @@ resources: config: {get_resource: ControllerPuppetConfig} input_values: step: 4 + update_identifier: {get_param: NodeConfigIdentifiers} # Note, this should come last, so use depends_on to ensure # this is created after any other resources. diff --git a/puppet/controller-puppet.yaml b/puppet/controller-puppet.yaml index 05bd27ab..1e563331 100644 --- a/puppet/controller-puppet.yaml +++ b/puppet/controller-puppet.yaml @@ -76,11 +76,6 @@ parameters: default: true description: Whether to use Galera instead of regular MariaDB. type: boolean - EnablePacemaker: - default: false - description: If enabled services will be monitored by Pacemaker; it - will manage VIPs as well, in place of Keepalived. - type: boolean EnableCephStorage: default: false description: Whether to deploy Ceph Storage (OSD) on the Controller @@ -460,6 +455,9 @@ parameters: description: > Setting to a previously unused value during stack-update will trigger package update on all nodes + Hostname: + type: string + default: '' # Defaults to Heat created hostname resources: @@ -474,6 +472,7 @@ resources: - network: ctlplane user_data_format: SOFTWARE_CONFIG user_data: {get_resource: NodeUserData} + name: {get_param: Hostname} NodeUserData: type: OS::TripleO::NodeUserData @@ -533,7 +532,6 @@ resources: NetworkDeployment: type: OS::TripleO::SoftwareDeployment properties: - signal_transport: NO_SIGNAL config: {get_resource: NetworkConfig} server: {get_resource: Controller} input_values: @@ -542,8 +540,8 @@ resources: ControllerDeployment: type: OS::TripleO::SoftwareDeployment + depends_on: NetworkDeployment properties: - signal_transport: NO_SIGNAL config: {get_resource: ControllerConfig} server: {get_resource: Controller} input_values: @@ -693,6 +691,12 @@ resources: ceilometer_backend: {get_param: CeilometerBackend} ceilometer_metering_secret: {get_param: CeilometerMeteringSecret} ceilometer_password: {get_param: CeilometerPassword} + ceilometer_coordination_url: + list_join: + - '' + - - 'redis://' + - {get_param: RedisVirtualIP} + - ':6379' ceilometer_dsn: list_join: - '' @@ -749,7 +753,7 @@ resources: keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]} 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, NeutronLocalIp]}]} + neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]} ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]} nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]} nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]} @@ -951,6 +955,7 @@ resources: ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri} ceilometer::agent::auth::auth_password: {get_input: ceilometer_password} ceilometer::agent::auth::auth_url: {get_input: keystone_auth_address} + ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url} snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name} snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password} @@ -971,8 +976,10 @@ resources: nova::network::neutron::neutron_admin_password: {get_input: neutron_password} nova::network::neutron::neutron_url: {get_input: neutron_url} nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url} + nova::vncproxy::host: {get_input: nova_api_network} # Horizon + apache::ip: {get_input: horizon_network} horizon::django_debug: {get_input: debug} horizon::secret_key: {get_input: horizon_secret} horizon::bind_address: {get_input: horizon_network} @@ -1040,7 +1047,7 @@ outputs: Server's IP address and hostname in the /etc/hosts format value: str_replace: - template: IP HOST CLOUDNAME + template: IP HOST.localdomain HOST CLOUDNAME params: IP: {get_attr: [Controller, networks, ctlplane, 0]} HOST: {get_attr: [Controller, name]} @@ -1063,3 +1070,6 @@ outputs: template: "IP:11211" params: IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]} + config_identifier: + description: identifier which changes if the controller configuration may need re-applying + value: {get_attr: [ControllerDeployment, deploy_stdout]} diff --git a/puppet/hieradata/RedHat.yaml b/puppet/hieradata/RedHat.yaml index f42c7159..25902828 100644 --- a/puppet/hieradata/RedHat.yaml +++ b/puppet/hieradata/RedHat.yaml @@ -1,2 +1,9 @@ # RedHat specific overrides go here rabbitmq::package_provider: 'yum' + +# The Galera package should work in cluster and +# non-cluster modes based on the config file. +# We set the package name here explicitly so +# that it matches what we pre-install +# in tripleo-puppet-elements. +mysql::server::package_name: 'mariadb-galera-server' diff --git a/puppet/hieradata/controller.yaml b/puppet/hieradata/controller.yaml index 4a506239..3de9bd91 100644 --- a/puppet/hieradata/controller.yaml +++ b/puppet/hieradata/controller.yaml @@ -48,7 +48,6 @@ swift::proxy::pipeline: - 'tempurl' - 'formpost' - 'staticweb' - - 'ceilometer' - 'authtoken' - 'keystone' - 'proxy-logging' @@ -88,13 +87,12 @@ pacemaker::corosync::manage_fw: false # horizon horizon::allowed_hosts: '*' +horizon::django_session_engine: 'django.contrib.sessions.backends.cache' +# mysql mysql::server::manage_config_file: true -tripleo::loadbalancer::galera_master_ip: "%{hiera('bootstrap_nodeid_ip')}" -tripleo::loadbalancer::galera_master_hostname: "%{hiera('bootstrap_nodeid')}" - tripleo::loadbalancer::keystone_admin: true tripleo::loadbalancer::keystone_public: true tripleo::loadbalancer::neutron: true @@ -112,3 +110,4 @@ tripleo::loadbalancer::ceilometer: true tripleo::loadbalancer::heat_api: true tripleo::loadbalancer::heat_cloudwatch: true tripleo::loadbalancer::heat_cfn: true +tripleo::loadbalancer::horizon: true diff --git a/puppet/manifests/overcloud_controller.pp b/puppet/manifests/overcloud_controller.pp index 19ed97fb..bc20bad5 100644 --- a/puppet/manifests/overcloud_controller.pp +++ b/puppet/manifests/overcloud_controller.pp @@ -364,7 +364,6 @@ if hiera('step') >= 3 { include ::swift::proxy::keystone include ::swift::proxy::authtoken include ::swift::proxy::staticweb - include ::swift::proxy::ceilometer include ::swift::proxy::ratelimit include ::swift::proxy::catch_errors include ::swift::proxy::tempurl diff --git a/puppet/manifests/overcloud_controller_pacemaker.pp b/puppet/manifests/overcloud_controller_pacemaker.pp index b5bed6dc..a57465c0 100644 --- a/puppet/manifests/overcloud_controller_pacemaker.pp +++ b/puppet/manifests/overcloud_controller_pacemaker.pp @@ -55,8 +55,8 @@ if hiera('step') >= 1 { class { '::tripleo::loadbalancer' : controller_hosts => $controller_node_ips, controller_hosts_names => $controller_node_names, - redis => false, manage_vip => false, + mysql_clustercheck => true, haproxy_service_manage => false, } @@ -157,12 +157,18 @@ if hiera('step') >= 1 { config_file => $mysql_config_file, override_options => $mysqld_options, service_manage => false, + service_enabled => false, } } if hiera('step') >= 2 { + # NOTE(gfidente): the following vars are needed on all nodes so they + # need to stay out of pacemaker_master conditional + $mongo_node_ips_with_port = suffix(hiera('mongo_node_ips'), ':27017') + $mongodb_replset = hiera('mongodb::server::replset') + if $pacemaker_master { # FIXME: we should not have to access tripleo::loadbalancer class @@ -222,12 +228,8 @@ if hiera('step') >= 2 { } # NOTE (spredzy) : The replset can only be run # once all the nodes have joined the cluster. - $mongo_node_ips = hiera('mongo_node_ips') - $mongo_node_ips_with_port = suffix($mongo_node_ips, ':27017') - $mongo_node_string = join($mongo_node_ips_with_port, ',') - $mongodb_pacemaker_resource = Pacemaker::Resource::Service[$::mongodb::params::service_name] - $mongodb_replset = hiera('mongodb::server::replset') mongodb_conn_validator { $mongo_node_ips_with_port : + timeout => '600', require => Pacemaker::Resource::Service[$::mongodb::params::service_name], before => Mongodb_replset[$mongodb_replset], } @@ -659,6 +661,7 @@ if hiera('step') >= 3 { $ceilometer_database_connection = hiera('ceilometer_mysql_conn_string') } default : { + $mongo_node_string = join($mongo_node_ips_with_port, ',') $ceilometer_database_connection = "mongodb://${mongo_node_string}/ceilometer?replicaSet=${mongodb_replset}" } } @@ -674,7 +677,6 @@ if hiera('step') >= 3 { class { '::ceilometer::agent::central' : manage_service => false, enabled => false, - coordination_url => "redis://${redis_vip}:6379", } class { '::ceilometer::alarm::notifier' : manage_service => false, @@ -718,11 +720,18 @@ if hiera('step') >= 3 { enabled => false, } - # Horizon - $vhost_params = { add_listen => false } + # httpd/apache and horizon + # NOTE(gfidente): server-status can be consumed by the pacemaker resource agent + include ::apache + include ::apache::mod::status + $vhost_params = { + add_listen => false, + priority => 10, + } class { 'horizon': cache_server_ip => hiera('memcache_node_ips', '127.0.0.1'), vhost_extra_params => $vhost_params, + server_aliases => $::hostname, } $snmpd_user = hiera('snmpd_readonly_user_name') @@ -1081,7 +1090,7 @@ if hiera('step') >= 4 { pacemaker::resource::service { $::ceilometer::params::agent_central_service_name : clone_params => 'interleave=true', require => [Pacemaker::Resource::Service[$::keystone::params::service_name], - $mongodb_pacemaker_resource], + Pacemaker::Resource::Service[$::mongodb::params::service_name]], } pacemaker::resource::service { $::ceilometer::params::collector_service_name : clone_params => 'interleave=true', @@ -1103,6 +1112,15 @@ if hiera('step') >= 4 { clone_params => 'interleave=true', resource_params => 'startdelay=10', } + pacemaker::constraint::base { 'keystone-then-ceilometer-central-constraint': + constraint_type => 'order', + first_resource => "${::keystone::params::service_name}-clone", + second_resource => "${::ceilometer::params::agent_central_service_name}-clone", + first_action => 'start', + second_action => 'start', + require => [Pacemaker::Resource::Service[$::ceilometer::params::agent_central_service_name], + Pacemaker::Resource::Service[$::keystone::params::service_name]], + } pacemaker::constraint::base { 'ceilometer-central-then-ceilometer-collector-constraint': constraint_type => 'order', first_resource => "${::ceilometer::params::agent_central_service_name}-clone", @@ -1212,15 +1230,6 @@ if hiera('step') >= 4 { require => [Pacemaker::Resource::Service[$::ceilometer::params::agent_central_service_name], Pacemaker::Resource::Ip['vip-redis']], } - pacemaker::constraint::base { 'keystone-then-ceilometer-central-constraint': - constraint_type => 'order', - first_resource => "${::keystone::params::service_name}-clone", - second_resource => "${::ceilometer::params::agent_central_service_name}-clone", - first_action => 'start', - second_action => 'start', - require => [Pacemaker::Resource::Service[$::ceilometer::params::agent_central_service_name], - Pacemaker::Resource::Service[$::keystone::params::service_name]], - } # Heat pacemaker::resource::service { $::heat::params::api_service_name : @@ -1235,6 +1244,15 @@ if hiera('step') >= 4 { pacemaker::resource::service { $::heat::params::engine_service_name : clone_params => 'interleave=true', } + pacemaker::constraint::base { 'keystone-then-heat-api-constraint': + constraint_type => 'order', + first_resource => "${::keystone::params::service_name}-clone", + second_resource => "${::heat::params::api_service_name}-clone", + first_action => 'start', + second_action => 'start', + require => [Pacemaker::Resource::Service[$::heat::params::api_service_name], + Pacemaker::Resource::Service[$::keystone::params::service_name]], + } pacemaker::constraint::base { 'heat-api-then-heat-api-cfn-constraint': constraint_type => 'order', first_resource => "${::heat::params::api_service_name}-clone", @@ -1293,6 +1311,12 @@ if hiera('step') >= 4 { Pacemaker::Resource::Service[$::ceilometer::params::agent_notification_service_name]], } + # Horizon + pacemaker::resource::service { $::horizon::params::http_service: + clone_params => "interleave=true", + } + + } } #END STEP 4 diff --git a/puppet/manifests/overcloud_volume.pp b/puppet/manifests/overcloud_volume.pp index 80cf6a21..edfeaeca 100644 --- a/puppet/manifests/overcloud_volume.pp +++ b/puppet/manifests/overcloud_volume.pp @@ -31,6 +31,7 @@ if count(hiera('ntp::servers')) > 0 { } include ::cinder +include ::cinder::glance include ::cinder::volume include ::cinder::setup_test_volume diff --git a/puppet/swift-storage-post.yaml b/puppet/swift-storage-post.yaml index 7a3c1abb..ee50c86a 100644 --- a/puppet/swift-storage-post.yaml +++ b/puppet/swift-storage-post.yaml @@ -4,6 +4,10 @@ description: 'OpenStack swift storage node post deployment for Puppet' parameters: servers: type: json + NodeConfigIdentifiers: + type: json + description: Value which changes if the node configuration may need to be re-applied + resources: @@ -21,6 +25,8 @@ resources: properties: servers: {get_param: servers} config: {get_resource: StoragePuppetConfig} + input_values: + update_identifier: {get_param: NodeConfigIdentifiers} StorageRingbuilderPuppetConfig: type: OS::Heat::SoftwareConfig @@ -37,6 +43,8 @@ resources: properties: servers: {get_param: servers} config: {get_resource: StorageRingbuilderPuppetConfig} + input_values: + update_identifier: {get_param: NodeConfigIdentifiers} # Note, this should come last, so use depends_on to ensure # this is created after any other resources. diff --git a/puppet/swift-storage-puppet.yaml b/puppet/swift-storage-puppet.yaml index 2268f41f..82922a87 100644 --- a/puppet/swift-storage-puppet.yaml +++ b/puppet/swift-storage-puppet.yaml @@ -57,6 +57,14 @@ parameters: description: > Setting to a previously unused value during stack-update will trigger package update on all nodes + ServiceNetMap: + default: {} + description: Mapping of service_name -> network name. Typically set + via parameter_defaults in the resource registry. + type: json + Hostname: + type: string + default: '' # Defaults to Heat created hostname resources: @@ -70,6 +78,7 @@ resources: - network: ctlplane user_data_format: SOFTWARE_CONFIG user_data: {get_resource: NodeUserData} + name: {get_param: Hostname} NodeUserData: type: OS::TripleO::NodeUserData @@ -96,6 +105,13 @@ resources: StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]} StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]} + NetIpMap: + type: OS::TripleO::Network::Ports::NetIpMap + properties: + InternalApiIp: {get_attr: [InternalApiPort, ip_address]} + StorageIp: {get_attr: [StoragePort, ip_address]} + StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]} + NetworkDeployment: type: OS::TripleO::SoftwareDeployment properties: @@ -111,6 +127,8 @@ resources: hierarchy: - heat_config_%{::deploy_config_name} - object + - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig + - all_nodes # provided by allNodesConfig - '"%{::osfamily}"' - common datafiles: @@ -118,29 +136,29 @@ resources: raw_data: {get_file: hieradata/common.yaml} object: raw_data: {get_file: hieradata/object.yaml} - oac_data: # data we map in from other OAC configurations - tripleo::ringbuilder::devices: swift.devices mapped_data: # data supplied directly to this deployment configuration, etc swift::swift_hash_suffix: { get_input: swift_hash_suffix } tripleo::ringbuilder::part_power: { get_input: swift_part_power } tripleo::ringbuilder::replicas: {get_input: swift_replicas } # Swift - swift::storage::all::storage_local_net_ip: {get_input: local_ip} + swift::storage::all::storage_local_net_ip: {get_input: swift_management_network} swift_mount_check: {get_input: swift_mount_check } tripleo::ringbuilder::min_part_hours: { get_input: swift_min_part_hours } ntp::servers: {get_input: ntp_servers} # NOTE(dprince): build_ring support is currently not wired in. # See: https://review.openstack.org/#/c/109225/ tripleo::ringbuilder::build_ring: True + snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name} + snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password} enable_package_install: {get_input: enable_package_install} SwiftStorageHieraDeploy: type: OS::Heat::StructuredDeployment + depends_on: NetworkDeployment properties: server: {get_resource: SwiftStorage} config: {get_resource: SwiftStorageHieraConfig} - signal_transport: NO_SIGNAL input_values: local_ip: {get_attr: [SwiftStorage, networks, ctlplane, 0]} snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName} @@ -156,6 +174,7 @@ resources: params: server: {get_param: NtpServer} enable_package_install: {get_param: EnablePackageInstall} + swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]} UpdateConfig: type: OS::TripleO::Tasks::PackageUpdate @@ -173,7 +192,7 @@ outputs: hosts_entry: value: str_replace: - template: "IP HOST" + template: "IP HOST.localdomain HOST" params: IP: {get_attr: [SwiftStorage, networks, ctlplane, 0]} HOST: {get_attr: [SwiftStorage, name]} @@ -187,7 +206,7 @@ outputs: str_replace: template: 'r1z1-IP:%PORT%/d1' params: - IP: {get_attr: [SwiftStorage, networks, ctlplane, 0]} + IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]} internal_api_ip_address: description: IP address of the server in the internal_api network value: {get_attr: [InternalApiPort, ip_address]} @@ -197,3 +216,7 @@ outputs: storage_mgmt_ip_address: description: IP address of the server in the storage_mgmt network 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]} + diff --git a/puppet/vip-config.yaml b/puppet/vip-config.yaml index c083821e..1dec489c 100644 --- a/puppet/vip-config.yaml +++ b/puppet/vip-config.yaml @@ -27,7 +27,6 @@ resources: horizon_vip: {get_input: horizon_vip} redis_vip: {get_input: redis_vip} mysql_vip: {get_input: mysql_vip} - mysql_vip: {get_input: mysql_vip} tripleo::loadbalancer::public_virtual_ip: {get_input: public_virtual_ip} tripleo::loadbalancer::controller_virtual_ip: {get_input: control_virtual_ip} tripleo::loadbalancer::internal_api_virtual_ip: {get_input: internal_api_virtual_ip} diff --git a/swift-storage-post.yaml b/swift-storage-post.yaml index 53490d71..1b1c406d 100644 --- a/swift-storage-post.yaml +++ b/swift-storage-post.yaml @@ -6,6 +6,9 @@ description: 'Swift Storage Post Deployment' parameters: servers: type: json + NodeConfigIdentifiers: + type: json + description: Value which changes if the node configuration may need to be re-applied resources: diff --git a/swift-storage.yaml b/swift-storage.yaml index c2819349..e4cacf3c 100644 --- a/swift-storage.yaml +++ b/swift-storage.yaml @@ -88,6 +88,9 @@ parameters: description: > Setting to a previously unused value during stack-update will trigger package update on all nodes + Hostname: + type: string + default: '' # Defaults to Heat created hostname resources: SwiftConfig: @@ -118,6 +121,7 @@ resources: - network: ctlplane user_data_format: SOFTWARE_CONFIG user_data: {get_resource: NodeUserData} + name: {get_param: Hostname} NodeUserData: type: OS::TripleO::NodeUserData @@ -194,3 +198,6 @@ outputs: storage_mgmt_ip_address: description: IP address of the server in the storage_mgmt network value: {get_attr: [StorageMgmtPort, ip_address]} + config_identifier: + description: identifier which changes if the node configuration may need re-applying + value: "None - NO_SIGNAL" |