Configure BlockStorage services via resource chains
authorGiulio Fidente <gfidente@redhat.com>
Mon, 30 May 2016 14:47:11 +0000 (16:47 +0200)
committerKeith Schincke <keith.schincke@gmail.com>
Thu, 30 Jun 2016 01:56:17 +0000 (21:56 -0400)
Wires the steps into the BlockStorage role and ensures
the installed-packages list is written on a per-step basis on
all roles, as it happens on the controllers already.

Change-Id: Iaec8ad3b2afbef6d586b7b46abaa1434cdb62f41

overcloud.yaml
puppet/cinder-storage-post.yaml
puppet/cinder-storage.yaml
puppet/manifests/overcloud_cephstorage.pp
puppet/manifests/overcloud_compute.pp
puppet/manifests/overcloud_object.pp
puppet/manifests/overcloud_volume.pp

index 0abc512..9c2b802 100644 (file)
@@ -66,10 +66,6 @@ parameters:
     default: ''
     type: string
     description: List of externally managed Ceph Mon Host IPs. Only used for external Ceph deployments.
-  CinderEnableIscsiBackend:
-    default: true
-    description: Whether to enable or not the Iscsi backend for Cinder
-    type: boolean
   CinderEnableRbdBackend:
     default: false
     description: Whether to enable or not the Rbd backend for Cinder
@@ -296,18 +292,6 @@ parameters:
     type: json
 
   # Controller-specific params
-  CinderLVMLoopDeviceSize:
-    default: 10280
-    description: The size of the loopback file used by the cinder LVM driver.
-    type: number
-  CinderPassword:
-    description: The password for the cinder service account, used by cinder-api.
-    type: string
-    hidden: true
-  CinderISCSIHelper:
-    default: lioadm
-    description: The iSCSI helper to use with cinder.
-    type: string
   ControllerCount:
     type: number
     default: 1
@@ -626,7 +610,13 @@ parameters:
     type: json
     description: Optional scheduler hints to pass to nova
     default: {}
-
+  BlockStorageServices:
+    default:
+      - OS::TripleO::Services::CinderVolume
+    description: A list of service resources (configured in the Heat
+                 resource_registry) which represent nested stacks
+                 for each service that should get installed on the BlockStorage nodes.
+    type: comma_delimited_list
 
 # Object storage specific parameters
   ObjectStorageCount:
@@ -993,6 +983,11 @@ resources:
           NodeIndex: '%index%'
           ServiceConfigSettings: {get_attr: [ComputeServiceChain, config_settings]}
 
+  BlockStorageServiceChain:
+    type: OS::TripleO::Services
+    properties:
+      Services: {get_param: BlockStorageServices}
+      EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
 
   BlockStorage:
     type: OS::Heat::ResourceGroup
@@ -1003,21 +998,9 @@ resources:
       resource_def:
         type: OS::TripleO::BlockStorage
         properties:
-          Debug: {get_param: Debug}
           Image: {get_param: BlockStorageImage}
-          CinderISCSIHelper: {get_param: CinderISCSIHelper}
-          CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
-          # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
-          CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
-          CinderPassword: {get_param: CinderPassword}
           KeyName: {get_param: KeyName}
           Flavor: {get_param: OvercloudBlockStorageFlavor}
-          VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
-          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}
           TimeZone: {get_param: TimeZone}
           NtpServer: {get_param: NtpServer}
           UpdateIdentifier: {get_param: UpdateIdentifier}
@@ -1027,13 +1010,13 @@ resources:
               params:
                 '%stackname%': {get_param: 'OS::stack_name'}
           ServiceNetMap: {get_param: ServiceNetMap}
-          EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
           ExtraConfig: {get_param: ExtraConfig}
           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
           CloudDomain: {get_param: CloudDomain}
           ServerMetadata: {get_param: ServerMetadata}
           SchedulerHints: {get_param: BlockStorageSchedulerHints}
           NodeIndex: '%index%'
+          ServiceConfigSettings: {get_attr: [BlockStorageServiceChain, config_settings]}
 
   ObjectStorageServiceChain:
     type: OS::TripleO::Services
@@ -1502,6 +1485,8 @@ resources:
         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
         deployment_identifier: {get_param: DeployIdentifier}
+      StepConfig: {get_attr: [BlockStorageServiceChain, step_config]}
+
 
   CephStorageNodesPostDeployment:
     type: OS::TripleO::CephStoragePostDeployment
index f470203..fa1516f 100644 (file)
@@ -11,6 +11,10 @@ parameters:
   NodeConfigIdentifiers:
      type: json
      description: Value which changes if the node configuration may need to be re-applied
+  StepConfig:
+    type: string
+    description: Config manifests that will be used to step through the deployment.
+    default: ''
 
 resources:
 
@@ -32,22 +36,55 @@ resources:
       group: puppet
       options:
         enable_debug: {get_param: ConfigDebug}
+        enable_hiera: True
+        enable_facter: False
+      inputs:
+      - name: step
       outputs:
       - name: result
       config:
-        get_file: manifests/overcloud_volume.pp
+        list_join:
+        - ''
+        - - get_file: manifests/overcloud_volume.pp
+          - {get_param: StepConfig}
 
-  VolumeDeployment_Step1:
+  VolumeDeployment_Step2:
     type: OS::Heat::StructuredDeployments
+    depends_on: VolumeArtifactsDeploy
     properties:
-      name: VolumeDeployment_Step1
+      name: VolumeDeployment_Step2
       servers:  {get_param: servers}
       config: {get_resource: VolumePuppetConfig}
+      input_values:
+        step: 2
+        update_identifier: {get_param: NodeConfigIdentifiers}
+
+  VolumeDeployment_Step3:
+    type: OS::Heat::StructuredDeployments
+    depends_on: VolumeDeployment_Step2
+    properties:
+      name: VolumeDeployment_Step3
+      servers:  {get_param: servers}
+      config: {get_resource: VolumePuppetConfig}
+      input_values:
+        step: 3
+        update_identifier: {get_param: NodeConfigIdentifiers}
+
+  VolumeDeployment_Step4:
+    type: OS::Heat::StructuredDeployments
+    depends_on: VolumeDeployment_Step3
+    properties:
+      name: VolumeDeployment_Step4
+      servers:  {get_param: servers}
+      config: {get_resource: VolumePuppetConfig}
+      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.
   ExtraConfig:
-    depends_on: VolumeDeployment_Step1
+    depends_on: VolumeDeployment_Step4
     type: OS::TripleO::NodeExtraConfigPost
     properties:
         servers: {get_param: servers}
index d760de5..7f45b83 100644 (file)
@@ -4,29 +4,6 @@ parameters:
   Image:
     default: overcloud-cinder-volume
     type: string
-  CinderEnableIscsiBackend:
-    default: true
-    description: Whether to enable or not the Iscsi backend for Cinder
-    type: boolean
-  CinderISCSIHelper:
-    default: lioadm
-    description: The iSCSI helper to use with cinder.
-    type: string
-  CinderLVMLoopDeviceSize:
-    default: 10280
-    description: The size of the loopback file used by the cinder LVM driver.
-    type: number
-  CinderPassword:
-    description: The password for the cinder service and db account, used by cinder-api.
-    type: string
-    hidden: true
-  Debug:
-    default: ''
-    description: Set to True to enable debugging on all services.
-    type: string
-  VirtualIP: # deprecated. Use per service VIPs instead.
-    default: ''
-    type: string
   ExtraConfig:
     default: {}
     description: |
@@ -50,22 +27,6 @@ parameters:
     default: default
     description: Name of an existing Nova key pair to enable SSH access to the instances
     type: string
-  RabbitPassword:
-    type: string
-    hidden: true
-  RabbitUserName:
-    default: 'guest'
-    type: string
-  RabbitClientUseSSL:
-    default: false
-    description: >
-        Rabbit client subscriber parameter to specify
-        an SSL connection to the RabbitMQ host.
-    type: string
-  RabbitClientPort:
-    default: 5672
-    description: Set rabbit subscriber port, change this if using SSL
-    type: number
   SnmpdReadonlyUserName:
     default: ro_snmp_user
     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
@@ -100,18 +61,10 @@ parameters:
     description: Mapping of service_name -> network name. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
   TimeZone:
     default: 'UTC'
     description: The timezone to be set on Cinder nodes.
     type: string
-  GlanceApiVirtualIP:
-    type: string
-    default: ''
   NetworkDeploymentActions:
     type: comma_delimited_list
     description: >
@@ -143,7 +96,9 @@ parameters:
   NodeIndex:
     type: number
     default: 0
-
+  ServiceConfigSettings:
+    type: json
+    default: {}
 
 resources:
   BlockStorage:
@@ -277,35 +232,13 @@ resources:
       server: {get_resource: BlockStorage}
       config: {get_resource: BlockStorageConfig}
       input_values:
-        debug: {get_param: Debug}
-        cinder_dsn:
-          list_join:
-            - ''
-            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
-              - '://cinder:'
-              - {get_param: CinderPassword}
-              - '@'
-              - {get_param: [EndpointMap, MysqlInternal, host]}
-              - '/cinder'
         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
-        cinder_lvm_loop_device_size:
-          str_replace:
-            template: sizeM
-            params:
-              size: {get_param: CinderLVMLoopDeviceSize}
-        cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
-        cinder_iscsi_helper: {get_param: CinderISCSIHelper}
         cinder_iscsi_ip_address:
           str_replace:
             template: "'IP'"
             params:
               IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
-        glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
-        rabbit_username: {get_param: RabbitUserName}
-        rabbit_password: {get_param: RabbitPassword}
-        rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
-        rabbit_client_port: {get_param: RabbitClientPort}
         ntp_servers: {get_param: NtpServer}
         timezone: {get_param: TimeZone}
         enable_package_install: {get_param: EnablePackageInstall}
@@ -323,6 +256,7 @@ resources:
             - heat_config_%{::deploy_config_name}
             - volume_extraconfig
             - extraconfig
+            - service_configs
             - volume
             - all_nodes # provided by allNodesConfig
             - '"%{::osfamily}"'
@@ -330,6 +264,8 @@ resources:
             - network
           merge_behavior: deeper
           datafiles:
+            service_configs:
+              mapped_data: {get_param: ServiceConfigSettings}
             common:
               raw_data: {get_file: hieradata/common.yaml}
             network:
@@ -345,17 +281,7 @@ resources:
               raw_data: {get_file: hieradata/volume.yaml}
               mapped_data:
                 # Cinder
-                cinder::debug: {get_input: debug}
-                cinder::setup_test_volume::size: {get_input: cinder_lvm_loop_device_size}
-                cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
-                cinder::database_connection: {get_input: cinder_dsn}
-                cinder::rabbit_userid: {get_input: rabbit_username}
-                cinder::rabbit_password: {get_input: rabbit_password}
-                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}
+                tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_ip_address: {get_input: cinder_iscsi_ip_address}
                 ntp::servers: {get_input: ntp_servers}
                 timezone::timezone: {get_input: timezone}
                 tripleo::packages::enable_install: {get_input: enable_package_install}
index e69353b..31d14e7 100644 (file)
@@ -54,5 +54,7 @@ if hiera('step') >= 3 {
   include ::ceph::profile::osd
 
   hiera_include('ceph_classes')
-  package_manifest{'/var/lib/tripleo/installed-packages/overcloud_ceph': ensure => present}
 }
+
+$package_manifest_name = join(['/var/lib/tripleo/installed-packages/overcloud_ceph', hiera('step')])
+package_manifest{$package_manifest_name: ensure => present}
index da84927..8db39b0 100644 (file)
@@ -205,6 +205,7 @@ if hiera('step') >= 4 {
   }
 
   hiera_include('compute_classes')
-  package_manifest{ '/var/lib/tripleo/installed-packages/overcloud_compute': ensure => present }
-
 }
+
+$package_manifest_name = join(['/var/lib/tripleo/installed-packages/overcloud_compute', hiera('step')])
+package_manifest{$package_manifest_name: ensure => present}
index 5b6a9e5..512e5a3 100644 (file)
@@ -39,4 +39,5 @@ if hiera('step') >= 4 {
   hiera_include('object_classes')
 }
 
-package_manifest{'/var/lib/tripleo/installed-packages/overcloud_object': ensure => present}
+$package_manifest_name = join(['/var/lib/tripleo/installed-packages/overcloud_object', hiera('step')])
+package_manifest{$package_manifest_name: ensure => present}
index 134dc43..9a8fb6f 100644 (file)
 include ::tripleo::packages
 include ::tripleo::firewall
 
-create_resources(kmod::load, hiera('kernel_modules'), {})
-create_resources(sysctl::value, hiera('sysctl_settings'), {})
-Exec <| tag == 'kmod::load' |>  -> Sysctl <| |>
+if hiera('step') >= 1 {
+
+  create_resources(kmod::load, hiera('kernel_modules'), {})
+  create_resources(sysctl::value, hiera('sysctl_settings'), {})
+  Exec <| tag == 'kmod::load' |>  -> Sysctl <| |>
+
+  include ::timezone
+
+  if count(hiera('ntp::servers')) > 0 {
+    include ::ntp
+  }
 
-if count(hiera('ntp::servers')) > 0 {
-  include ::ntp
 }
 
-include ::timezone
+if hiera('step') >= 4 {
 
-include ::cinder
-include ::cinder::config
-include ::cinder::glance
-include ::cinder::volume
-include ::cinder::setup_test_volume
+  include ::cinder
+  include ::cinder::config
+  include ::cinder::glance
+  include ::cinder::volume
+  include ::cinder::setup_test_volume
 
-$cinder_enable_iscsi = hiera('cinder_enable_iscsi_backend', true)
-if $cinder_enable_iscsi {
-  $cinder_iscsi_backend = 'tripleo_iscsi'
+  $cinder_enable_iscsi = hiera('cinder_enable_iscsi_backend', true)
+  if $cinder_enable_iscsi {
+    $cinder_iscsi_backend = 'tripleo_iscsi'
 
-  cinder::backend::iscsi { $cinder_iscsi_backend :
-    iscsi_ip_address => hiera('cinder_iscsi_ip_address'),
-    iscsi_helper     => hiera('cinder_iscsi_helper'),
+    cinder::backend::iscsi { $cinder_iscsi_backend :
+      iscsi_ip_address => hiera('cinder_iscsi_ip_address'),
+      iscsi_helper     => hiera('cinder_iscsi_helper'),
+    }
   }
-}
 
-$cinder_enabled_backends = any2array($cinder_iscsi_backend)
-class { '::cinder::backends' :
-  enabled_backends => union($cinder_enabled_backends, hiera('cinder_user_enabled_backends')),
-}
+  $cinder_enabled_backends = any2array($cinder_iscsi_backend)
+  class { '::cinder::backends' :
+    enabled_backends => union($cinder_enabled_backends, hiera('cinder_user_enabled_backends')),
+  }
 
-$snmpd_user = hiera('snmpd_readonly_user_name')
-snmp::snmpv3_user { $snmpd_user:
-  authtype => 'MD5',
-  authpass => hiera('snmpd_readonly_user_password'),
-}
-class { '::snmp':
-  agentaddress => ['udp:161','udp6:[::1]:161'],
-  snmpd_config => [ join(['createUser ', hiera('snmpd_readonly_user_name'), ' MD5 "', hiera('snmpd_readonly_user_password'), '"']), join(['rouser ', hiera('snmpd_readonly_user_name')]), 'proc  cron', 'includeAllDisks  10%', 'master agentx', 'trapsink localhost public', 'iquerySecName internalUser', 'rouser internalUser', 'defaultMonitors yes', 'linkUpDownNotifications yes' ],
+  $snmpd_user = hiera('snmpd_readonly_user_name')
+  snmp::snmpv3_user { $snmpd_user:
+    authtype => 'MD5',
+    authpass => hiera('snmpd_readonly_user_password'),
+  }
+  class { '::snmp':
+    agentaddress => ['udp:161','udp6:[::1]:161'],
+    snmpd_config => [ join(['createUser ', hiera('snmpd_readonly_user_name'), ' MD5 "', hiera('snmpd_readonly_user_password'), '"']), join(['rouser ', hiera('snmpd_readonly_user_name')]), 'proc  cron', 'includeAllDisks  10%', 'master agentx', 'trapsink localhost public', 'iquerySecName internalUser', 'rouser internalUser', 'defaultMonitors yes', 'linkUpDownNotifications yes' ],
+  }
+
+  hiera_include('volume_classes')
 }
 
-hiera_include('volume_classes')
-package_manifest{'/var/lib/tripleo/installed-packages/overcloud_volume': ensure => present}
+$package_manifest_name = join(['/var/lib/tripleo/installed-packages/overcloud_volume', hiera('step')])
+package_manifest{$package_manifest_name: ensure => present}