diff --git a/Makefile b/Makefile index 2db9d45e94..dd7e5fb3d9 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ $(VALIDATE): # - overcloud-vlan-port.yaml to activate the VLAN auto-assignment from Neutron # - nfs-source.yaml to configure Cinder with NFS overcloud.yaml: overcloud-source.yaml block-storage.yaml swift-deploy.yaml swift-source.yaml swift-storage-source.yaml ssl-source.yaml nova-compute-config.yaml $(overcloud_source_deps) - python ./tripleo_heat_merge/merge.py --hot --scale NovaCompute=$${COMPUTESCALE:-'1'} --scale controller=$${CONTROLSCALE:-'1'} --scale SwiftStorage=$${SWIFTSTORAGESCALE:-'0'} --scale BlockStorage=$${BLOCKSTORAGESCALE:-'0'} overcloud-source.yaml block-storage.yaml swift-source.yaml swift-storage-source.yaml ssl-source.yaml swift-deploy.yaml nova-compute-config.yaml ${CONTROLEXTRA} > $@.tmp + python ./tripleo_heat_merge/merge.py --hot --scale NovaCompute=$${COMPUTESCALE:-'1'} --scale controller=$${CONTROLSCALE:-'1'} --scale SwiftStorage=$${SWIFTSTORAGESCALE:-'0'} --scale BlockStorage=$${BLOCKSTORAGESCALE:-'0'} --scale CephStorage=$${CEPHSTORAGESCALE:-'0'} overcloud-source.yaml block-storage.yaml swift-source.yaml swift-storage-source.yaml ssl-source.yaml swift-deploy.yaml nova-compute-config.yaml ${CONTROLEXTRA} > $@.tmp mv $@.tmp $@ undercloud-vm.yaml: undercloud-source.yaml undercloud-vm-nova-config.yaml undercloud-vm-nova-deploy.yaml diff --git a/ceph-source.yaml b/ceph-source.yaml new file mode 100644 index 0000000000..512053f415 --- /dev/null +++ b/ceph-source.yaml @@ -0,0 +1,106 @@ +heat_template_version: 2013-05-23 +description: 'Common Ceph Storage Configuration' +parameters: + CephStorageImage: + type: string + default: overcloud-ceph-storage + OvercloudCephStorageFlavor: + default: baremetal + description: Flavor for Ceph storage nodes to request when deploying. + type: string + CephClusterFSID: + default: '' + type: string + description: The Ceph cluster FSID. + CephMonKey: + default: '' + description: The Ceph monitors key. + type: string + CephAdminKey: + default: '' + description: The Ceph admin client key. + type: string +resources: + CephStorage0: + type: OS::Nova::Server + properties: + image: + {get_param: CephStorageImage} + flavor: {get_param: OvercloudCephStorageFlavor} + key_name: {get_param: KeyName} + user_data_format: SOFTWARE_CONFIG + CephStorage0AllNodesDeployment: + depends_on: [CephStorage0Deployment,controller0CephDeployment] + type: OS::Heat::StructuredDeployment + properties: + server: {get_resource: CephStorage0} + config: {get_resource: allNodesConfig} + signal_transport: {get_param: DefaultSignalTransport} + CephStorage0Deployment: + type: OS::Heat::StructuredDeployment + properties: + server: {get_resource: CephStorage0} + config: {get_resource: CephStorage0Config} + signal_transport: NO_SIGNAL + CephStorage0Config: + type: OS::Heat::StructuredConfig + properties: + group: os-apply-config + config: + ceph: + fsid: {get_param: CephClusterFSID} + keyrings: + admin: + key: {get_param: CephAdminKey} + mon_nodes: + Merge::Map: + controller0: + ip: {get_attr: [controller0, networks, ctlplane, 0]} + name: {get_attr: [controller0, name]} + controller0CephDeployment: + type: OS::Heat::StructuredDeployment + properties: + server: {get_resource: controller0} + config: {get_resource: controller0CephConfig} + signal_transport: NO_SIGNAL + controller0CephConfig: + type: OS::Heat::StructuredConfig + properties: + group: os-apply-config + config: + cinder: + include_ceph_backend: true + ceph: + fsid: {get_param: CephClusterFSID} + keyrings: + mon: + key: {get_param: CephMonKey} + admin: + key: {get_param: CephAdminKey} + mon_nodes: + Merge::Map: + controller0: + ip: {get_attr: [controller0, networks, ctlplane, 0]} + name: {get_attr: [controller0, name]} + NovaCompute0CephDeployment: + depends_on: [controller0CephDeployment] + type: OS::Heat::StructuredDeployment + properties: + server: {get_resource: NovaCompute0} + config: {get_resource: NovaCompute0CephConfig} + signal_transport: NO_SIGNAL + NovaCompute0CephConfig: + type: OS::Heat::StructuredConfig + properties: + group: os-apply-config + config: + ceph: + fsid: {get_param: CephClusterFSID} + keyrings: + admin: + key: {get_param: CephAdminKey} + mon_nodes: + Merge::Map: + controller0: + ip: {get_attr: [controller0, networks, ctlplane, 0]} + name: {get_attr: [controller0, name]} diff --git a/ceph-storage-puppet.yaml b/ceph-storage-puppet.yaml new file mode 100644 index 0000000000..c9aa7bcf0d --- /dev/null +++ b/ceph-storage-puppet.yaml @@ -0,0 +1,2 @@ +heat_template_version: 2014-10-16 +description: 'Common Ceph Storage Configuration by Puppet' diff --git a/ceph-storage.yaml b/ceph-storage.yaml new file mode 100644 index 0000000000..2f5104ba14 --- /dev/null +++ b/ceph-storage.yaml @@ -0,0 +1,105 @@ +heat_template_version: 2014-10-16 +description: 'Common Ceph Storage Configuration' +parameters: + Image: + type: string + default: overcloud-ceph-storage + KeyName: + default: default + description: Name of an existing EC2 KeyPair to enable SSH access to the instances + type: string + Flavor: + default: baremetal + description: Flavor for block storage nodes to request when deploying. + type: string + CephClusterFSID: + default: '' + type: string + description: The Ceph cluster FSID. + CephMonKey: + default: '' + description: The Ceph monitors key. + type: string + CephAdminKey: + default: '' + description: The Ceph admin client key. + type: string + CephMonitors: + default: '' + description: The list of ip/names to use as Ceph monitors + type: string +resources: + CephStorage: + type: OS::Nova::Server + properties: + image: + {get_param: Image} + flavor: {get_param: OvercloudCephStorageFlavor} + key_name: {get_param: KeyName} + user_data_format: SOFTWARE_CONFIG + networks: + - network: ctlplane + CephStorageDeployment: + type: OS::Heat::StructuredDeployment + properties: + server: {get_resource: CephStorage} + config: {get_resource: CephStorageConfig} + signal_transport: NO_SIGNAL + CephStorageConfig: + type: OS::Heat::StructuredConfig + properties: + group: os-apply-config + config: + ceph: + fsid: {get_param: CephClusterFSID} + keyrings: + admin: + key: {get_param: CephAdminKey} + mon_nodes: {get_param: CephMonitors} + ControllerCephDeployment: + type: OS::Heat::StructuredDeployment + properties: + server: {get_resource: Controller} + config: {get_resource: ControllerCephConfig} + signal_transport: NO_SIGNAL + ControllerCephConfig: + type: OS::Heat::StructuredConfig + properties: + group: os-apply-config + config: + cinder: + include_ceph_backend: true + ceph: + fsid: {get_param: CephClusterFSID} + keyrings: + mon: + key: {get_param: CephMonKey} + admin: + key: {get_param: CephAdminKey} + mon_nodes: {get_param: CephMonitors} + NovaComputeCephDeployment: + depends_on: [ControllerCephDeployment] + type: OS::Heat::StructuredDeployment + properties: + server: {get_resource: NovaCompute} + config: {get_resource: NovaComputeCephConfig} + signal_transport: NO_SIGNAL + NovaComputeCephConfig: + type: OS::Heat::StructuredConfig + properties: + group: os-apply-config + config: + ceph: + fsid: {get_param: CephClusterFSID} + keyrings: + admin: + key: {get_param: CephAdminKey} + mon_nodes: {get_param: CephMonitors} +outputs: + hosts_entry: + value: + str_replace: + template: "IP HOST HOST.novalocal" + params: + IP: {get_attr: [CephStorage, networks, ctlplane, 0]} + HOST: {get_attr: [CephStorage, name]} diff --git a/overcloud-resource-registry-puppet.yaml b/overcloud-resource-registry-puppet.yaml index f8e7cc9e95..f7b237c8f5 100644 --- a/overcloud-resource-registry-puppet.yaml +++ b/overcloud-resource-registry-puppet.yaml @@ -5,6 +5,7 @@ resource_registry: OS::TripleO::Controller: controller-puppet.yaml OS::TripleO::ObjectStorage: swift-storage-puppet.yaml OS::TripleO::Net::SoftwareConfig: net-config-bridge.yaml + OS::TripleO::CephStorage: ceph-storage-puppet.yaml # NOTE(dprince): requires a new release of python-heatclient #default_parameters: diff --git a/overcloud-resource-registry.yaml b/overcloud-resource-registry.yaml index 8a1398b6ea..2b2c357cd8 100644 --- a/overcloud-resource-registry.yaml +++ b/overcloud-resource-registry.yaml @@ -5,3 +5,4 @@ resource_registry: OS::TripleO::Controller: controller.yaml OS::TripleO::ObjectStorage: swift-storage.yaml OS::TripleO::Net::SoftwareConfig: net-config-noop.yaml + OS::TripleO::CephStorage: ceph-storage.yaml diff --git a/overcloud-without-mergepy.yaml b/overcloud-without-mergepy.yaml index b7f529a343..2261d647c8 100644 --- a/overcloud-without-mergepy.yaml +++ b/overcloud-without-mergepy.yaml @@ -194,7 +194,18 @@ parameters: description: The user password for SNMPd with readonly rights running on all Overcloud nodes type: string hidden: true - + CephClusterFSID: + default: '' + type: string + description: The Ceph cluster FSID. + CephMonKey: + default: '' + description: The Ceph monitors key. + type: string + CephAdminKey: + default: '' + description: The Ceph admin client key. + type: string # Controller-specific params AdminToken: @@ -468,6 +479,18 @@ parameters: default: overcloud-swift-storage type: string +# Ceph storage specific parameters + CephStorageCount: + type: number + default: 0 + CephStorageImage: + default: overcloud-ceph-storage + type: string + OvercloudCephStorageFlavor: + default: baremetal + description: Flavor for Ceph storage nodes to request when deploying. + type: string + resources: Controller: @@ -630,6 +653,20 @@ resources: Replicas: { get_param: SwiftReplicas} NtpServer: {get_param: NtpServer} + CephStorage: + type: OS::Heat::ResourceGroup + properties: + count: {get_param: CephStorageCount} + resource_def: + type: OS::TripleO::CephStorage + properties: + Image: {get_param: CephStorageImage} + KeyName: {get_param: KeyName} + Flavor: {get_param: OvercloudCephStorageFlavor} + CephClusterFSID: {get_param: CephClusterFSID} + CephMonKey: {get_param: CephMonKey} + CephAdminKey: {get_param: CephAdminKey} + CephMonitors: {get_attr: [Controller, corosync_node]} allNodesConfig: type: OS::Heat::StructuredConfig @@ -651,6 +688,9 @@ resources: - list_join: - "\n" - {get_attr: [ObjectStorage, hosts_entry]} + - list_join: + - "\n" + - {get_attr: [CephStorage, hosts_entry]} rabbit: nodes: list_join: