From 874e07dee16f75c1147da535a475c4435ed8ea9a Mon Sep 17 00:00:00 2001 From: Giulio Fidente Date: Mon, 24 Nov 2014 16:55:22 -0500 Subject: Add Ceph related templates needed to configure Cinder with Ceph The new ceph-source.yaml file provides the config settings needed by the elements which configure Ceph on controllers (monitors) and storage nodes (OSDs) as well as the Cinder backend which uses it. There is also a without-mergepy copy named ceph-storage.yaml Change-Id: I954861536c41b2a7e6cbd86a0f0b55004eed4c70 --- Makefile | 2 +- ceph-source.yaml | 106 ++++++++++++++++++++++++++++++++ ceph-storage-puppet.yaml | 2 + ceph-storage.yaml | 105 +++++++++++++++++++++++++++++++ overcloud-resource-registry-puppet.yaml | 1 + overcloud-resource-registry.yaml | 1 + overcloud-without-mergepy.yaml | 42 ++++++++++++- 7 files changed, 257 insertions(+), 2 deletions(-) create mode 100644 ceph-source.yaml create mode 100644 ceph-storage-puppet.yaml create mode 100644 ceph-storage.yaml diff --git a/Makefile b/Makefile index 2db9d45e..dd7e5fb3 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 00000000..512053f4 --- /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 00000000..c9aa7bcf --- /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 00000000..2f5104ba --- /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 f8e7cc9e..f7b237c8 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 8a1398b6..2b2c357c 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 b7f529a3..2261d647 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: -- cgit 1.2.3-korg