Generate MySQL client config if service requires database
authorDamien Ciabrini <dciabrin@redhat.com>
Fri, 7 Jul 2017 14:44:26 +0000 (10:44 -0400)
committerDamien Ciabrini <dciabrin@redhat.com>
Thu, 27 Jul 2017 17:41:13 +0000 (13:41 -0400)
Services that access database have to read an extra MySQL configuration file
/etc/my.cnf.d/tripleo.cnf which holds client-only settings, like client bind
address and SSL configuration. The configuration file is thus used by
containerized services, but also by non-containerized services that still
run on the host.

In order to generate that client configuration file appropriately both on the
host and for containers, 1) the MySQLClient service must be included by the
role; 2) every containerized service which uses the database must include the
mysql::client profile in the docker-puppet config generation step.

By including the mysql::client profile in each containerized service, we ensure
that any change in configuration file will be reflected in the service's
/var/lib/config-data/{service}, and that paunch will restart the service's
container automatically.

We now only rely on MySQLClient from puppet/services, to make it possible to
generate /etc/my.cnf.d/tripleo.cnf on the host, and to set the hiera keys that
drive the generation of that config file in containers via docker-puppet.

We include a new YAML validation step to ensure that any service which depends
on MySQL will initialize the mysql::client profile during the docker-puppet
step.

Change-Id: I0dab1dc9caef1e749f1c42cfefeba179caebc8d7

44 files changed:
docker/services/aodh-api.yaml
docker/services/aodh-evaluator.yaml
docker/services/aodh-listener.yaml
docker/services/aodh-notifier.yaml
docker/services/cinder-api.yaml
docker/services/cinder-backup.yaml
docker/services/cinder-scheduler.yaml
docker/services/cinder-volume.yaml
docker/services/congress.yaml
docker/services/database/mysql-client.yaml [deleted file]
docker/services/ec2-api.yaml
docker/services/glance-api.yaml
docker/services/gnocchi-metricd.yaml
docker/services/gnocchi-statsd.yaml
docker/services/heat-engine.yaml
docker/services/ironic-api.yaml
docker/services/ironic-conductor.yaml
docker/services/keystone.yaml
docker/services/manila-api.yaml
docker/services/manila-scheduler.yaml
docker/services/manila-share.yaml
docker/services/mistral-api.yaml
docker/services/mistral-engine.yaml
docker/services/mistral-executor.yaml
docker/services/neutron-api.yaml
docker/services/nova-api.yaml
docker/services/nova-compute.yaml
docker/services/nova-conductor.yaml
docker/services/nova-consoleauth.yaml
docker/services/nova-ironic.yaml
docker/services/nova-libvirt.yaml
docker/services/nova-placement.yaml
docker/services/nova-scheduler.yaml
docker/services/nova-vnc-proxy.yaml
docker/services/octavia-api.yaml
docker/services/pacemaker/cinder-backup.yaml
docker/services/pacemaker/cinder-volume.yaml
docker/services/panko-api.yaml
docker/services/sahara-api.yaml
docker/services/sahara-engine.yaml
docker/services/tacker.yaml
docker/services/zaqar.yaml
environments/docker.yaml
tools/yaml-validate.py

index 70b43eb..8afb6d2 100644 (file)
@@ -49,6 +49,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   AodhApiPuppetBase:
       type: ../../puppet/services/aodh-api.yaml
       properties:
@@ -68,7 +71,10 @@ outputs:
           - get_attr: [AodhApiPuppetBase, role_data, config_settings]
           - apache::default_vhost: false
       step_config: &step_config
-        get_attr: [AodhApiPuppetBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [AodhApiPuppetBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [AodhApiPuppetBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index f75c57b..86bdfdf 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   AodhEvaluatorBase:
     type: ../../puppet/services/aodh-evaluator.yaml
     properties:
@@ -61,7 +64,10 @@ outputs:
         map_merge:
           - get_attr: [AodhEvaluatorBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [AodhEvaluatorBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [AodhEvaluatorBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [AodhEvaluatorBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 9db2ffb..3f986ab 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   AodhListenerBase:
     type: ../../puppet/services/aodh-listener.yaml
     properties:
@@ -61,7 +64,10 @@ outputs:
         map_merge:
           - get_attr: [AodhListenerBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [AodhListenerBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [AodhListenerBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [AodhListenerBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index c16c016..852120c 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   AodhNotifierBase:
     type: ../../puppet/services/aodh-notifier.yaml
     properties:
@@ -61,7 +64,10 @@ outputs:
         map_merge:
           - get_attr: [AodhNotifierBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [AodhNotifierBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [AodhNotifierBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [AodhNotifierBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 7804fdb..f5b4a66 100644 (file)
@@ -49,6 +49,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   CinderBase:
     type: ../../puppet/services/cinder-api.yaml
     properties:
@@ -66,7 +69,10 @@ outputs:
       service_name: {get_attr: [CinderBase, role_data, service_name]}
       config_settings: {get_attr: [CinderBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [CinderBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [CinderBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [CinderBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index de637f3..33147d2 100644 (file)
@@ -43,6 +43,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   CinderBase:
     type: ../../puppet/services/cinder-backup.yaml
     properties:
@@ -60,7 +63,10 @@ outputs:
       service_name: {get_attr: [CinderBase, role_data, service_name]}
       config_settings: {get_attr: [CinderBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [CinderBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [CinderBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [CinderBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 1bae005..1ac3187 100644 (file)
@@ -43,6 +43,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   CinderBase:
     type: ../../puppet/services/cinder-scheduler.yaml
     properties:
@@ -60,7 +63,10 @@ outputs:
       service_name: {get_attr: [CinderBase, role_data, service_name]}
       config_settings: {get_attr: [CinderBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [CinderBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [CinderBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [CinderBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index ce81fbf..2ead0d5 100644 (file)
@@ -51,6 +51,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   CinderBase:
     type: ../../puppet/services/cinder-volume.yaml
     properties:
@@ -75,6 +78,7 @@ outputs:
           - "\n"
           - - "include ::tripleo::profile::base::lvm"
             - get_attr: [CinderBase, role_data, step_config]
+            - get_attr: [MySQLClient, role_data, step_config]
       service_config_settings: {get_attr: [CinderBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index e49682f..08170ce 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   CongressBase:
     type: ../../puppet/services/congress.yaml
     properties:
@@ -61,7 +64,10 @@ outputs:
         map_merge:
           - get_attr: [CongressBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [CongressBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [CongressBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [CongressBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
diff --git a/docker/services/database/mysql-client.yaml b/docker/services/database/mysql-client.yaml
deleted file mode 100644 (file)
index d45d58e..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-heat_template_version: pike
-
-description: >
-  Configuration for containerized MySQL clients
-
-parameters:
-  DockerMysqlClientConfigImage:
-    description: The container image to use for the mysql_client config_volume
-    type: string
-  ServiceData:
-    default: {}
-    description: Dictionary packing service data
-    type: json
-  ServiceNetMap:
-    default: {}
-    description: Mapping of service_name -> network name. Typically set
-                 via parameter_defaults in the resource registry.  This
-                 mapping overrides those in ServiceNetMapDefaults.
-    type: json
-  DefaultPasswords:
-    default: {}
-    type: json
-  RoleName:
-    default: ''
-    description: Role name on which the service is applied
-    type: string
-  RoleParameters:
-    default: {}
-    description: Parameters specific to the role
-    type: json
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-  EnableInternalTLS:
-    type: boolean
-    default: false
-  InternalTLSCAFile:
-    default: '/etc/ipa/ca.crt'
-    type: string
-    description: Specifies the default CA cert to use if TLS is used for
-                 services in the internal network.
-
-outputs:
-  role_data:
-    description: Role for setting mysql client parameters
-    value:
-      service_name: mysql_client
-      config_settings:
-        tripleo::profile::base::database::mysql::client::mysql_client_bind_address: {get_param: [ServiceNetMap, MysqlNetwork]}
-        tripleo::profile::base::database::mysql::client::enable_ssl: {get_param: EnableInternalTLS}
-        tripleo::profile::base::database::mysql::client::ssl_ca: {get_param: InternalTLSCAFile}
-      # BEGIN DOCKER SETTINGS #
-      step_config: ""
-      puppet_config:
-        config_volume: mysql_client
-        puppet_tags: file # set this even though file is the default
-        step_config: "include ::tripleo::profile::base::database::mysql::client"
-        config_image: {get_param: DockerMysqlClientConfigImage}
-      # no need for a docker config, this service only generates configuration files
-      docker_config: {}
index 9f1ecbc..1d4ddd3 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   Ec2ApiPuppetBase:
       type: ../../puppet/services/ec2-api.yaml
       properties:
@@ -58,7 +61,10 @@ outputs:
       service_name: {get_attr: [Ec2ApiPuppetBase, role_data, service_name]}
       config_settings: {get_attr: [Ec2ApiPuppetBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [Ec2ApiPuppetBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [Ec2ApiPuppetBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [Ec2ApiPuppetBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index f4c724b..044eb28 100644 (file)
@@ -50,6 +50,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   GlanceApiPuppetBase:
     type: ../../puppet/services/glance-api.yaml
     properties:
@@ -70,7 +73,10 @@ outputs:
           - get_attr: [GlanceApiPuppetBase, role_data, config_settings]
           - glance::api::sync_db: false
       step_config: &step_config
-        get_attr: [GlanceApiPuppetBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [GlanceApiPuppetBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [GlanceApiPuppetBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS #
       puppet_config:
index 6778543..5a6958a 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   GnocchiMetricdBase:
     type: ../../puppet/services/gnocchi-metricd.yaml
     properties:
@@ -59,7 +62,10 @@ outputs:
       service_name: {get_attr: [GnocchiMetricdBase, role_data, service_name]}
       config_settings: {get_attr: [GnocchiMetricdBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [GnocchiMetricdBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [GnocchiMetricdBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [GnocchiMetricdBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 00d218d..19e658c 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   GnocchiStatsdBase:
     type: ../../puppet/services/gnocchi-statsd.yaml
     properties:
@@ -59,7 +62,10 @@ outputs:
       service_name: {get_attr: [GnocchiStatsdBase, role_data, service_name]}
       config_settings: {get_attr: [GnocchiStatsdBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [GnocchiStatsdBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [GnocchiStatsdBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [GnocchiStatsdBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 789f3f9..a20dc13 100644 (file)
@@ -43,6 +43,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   HeatBase:
     type: ../../puppet/services/heat-engine.yaml
     properties:
@@ -63,7 +66,10 @@ outputs:
           - get_attr: [HeatBase, role_data, config_settings]
           - apache::default_vhost: false
       step_config: &step_config
-        get_attr: [HeatBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [HeatBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [HeatBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 90978f3..2a9735b 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   IronicApiBase:
     type: ../../puppet/services/ironic-api.yaml
     properties:
@@ -62,7 +65,10 @@ outputs:
           - get_attr: [IronicApiBase, role_data, config_settings]
           - apache::default_vhost: false
       step_config: &step_config
-        get_attr: [IronicApiBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [IronicApiBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [IronicApiBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 6368bd2..37f4d46 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   IronicConductorBase:
     type: ../../puppet/services/ironic-conductor.yaml
     properties:
@@ -69,7 +72,10 @@ outputs:
           - ironic::pxe::http_root: /var/lib/ironic/httpboot
           - ironic::conductor::http_root: /var/lib/ironic/httpboot
       step_config: &step_config
-        get_attr: [IronicConductorBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [IronicConductorBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [IronicConductorBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 7ecfc32..c461f97 100644 (file)
@@ -55,6 +55,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   KeystoneBase:
     type: ../../puppet/services/keystone.yaml
     properties:
@@ -83,6 +86,7 @@ outputs:
           - "\n"
           - - "['Keystone_user', 'Keystone_endpoint', 'Keystone_domain', 'Keystone_tenant', 'Keystone_user_role', 'Keystone_role', 'Keystone_service'].each |String $val| { noop_resource($val) }"
             - {get_attr: [KeystoneBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [KeystoneBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index c33f409..7b2dbfa 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   ManilaApiPuppetBase:
     type: ../../puppet/services/manila-api.yaml
     properties:
@@ -57,7 +60,10 @@ outputs:
       service_name: {get_attr: [ManilaApiPuppetBase, role_data, service_name]}
       config_settings: {get_attr: [ManilaApiPuppetBase, role_data, config_settings]}
       step_config: &step_config
-        {get_attr: [ManilaApiPuppetBase, role_data, step_config]}
+        list_join:
+          - "\n"
+          - - {get_attr: [ManilaApiPuppetBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [ManilaApiPuppetBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS #
       puppet_config:
index 730d33f..7b5dfec 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   ManilaSchedulerPuppetBase:
     type: ../../puppet/services/manila-scheduler.yaml
     properties:
@@ -57,7 +60,10 @@ outputs:
       service_name: {get_attr: [ManilaSchedulerPuppetBase, role_data, service_name]}
       config_settings: {get_attr: [ManilaSchedulerPuppetBase, role_data, config_settings]}
       step_config: &step_config
-        {get_attr: [ManilaSchedulerPuppetBase, role_data, step_config]}
+        list_join:
+          - "\n"
+          - - {get_attr: [ManilaSchedulerPuppetBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [ManilaSchedulerPuppetBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS #
       puppet_config:
index b427815..332ba86 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   ManilaBase:
     type: ../../puppet/services/manila-share.yaml
     properties:
@@ -59,7 +62,10 @@ outputs:
       service_name: {get_attr: [ManilaBase, role_data, service_name]}
       config_settings: {get_attr: [ManilaBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [ManilaBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [ManilaBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [ManilaBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 73db374..38b97ae 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   MistralApiBase:
     type: ../../puppet/services/mistral-api.yaml
     properties:
@@ -61,7 +64,10 @@ outputs:
         map_merge:
           - get_attr: [MistralApiBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [MistralApiBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [MistralApiBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [MistralApiBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 4c6b300..2b498be 100644 (file)
@@ -43,6 +43,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   MistralBase:
     type: ../../puppet/services/mistral-engine.yaml
     properties:
@@ -62,7 +65,10 @@ outputs:
         map_merge:
           - get_attr: [MistralBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [MistralBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [MistralBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [MistralBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index ea54c57..e106fe4 100644 (file)
@@ -43,6 +43,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   MistralBase:
     type: ../../puppet/services/mistral-executor.yaml
     properties:
@@ -62,7 +65,10 @@ outputs:
         map_merge:
           - get_attr: [MistralBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [MistralBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [MistralBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [MistralBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index a9125c8..b4fce22 100644 (file)
@@ -49,6 +49,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   NeutronBase:
     type: ../../puppet/services/neutron-api.yaml
     properties:
@@ -68,7 +71,10 @@ outputs:
         map_merge:
           - get_attr: [NeutronBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [NeutronBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [NeutronBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [NeutronBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 4bec803..800549b 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   NovaApiBase:
     type: ../../puppet/services/nova-api.yaml
     properties:
@@ -69,6 +72,7 @@ outputs:
           - "\n"
           - - "['Nova_cell_v2'].each |String $val| { noop_resource($val) }"
             - {get_attr: [NovaApiBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [NovaApiBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index c6e848a..39d1740 100644 (file)
@@ -47,6 +47,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   NovaComputeBase:
     type: ../../puppet/services/nova-compute.yaml
     properties:
@@ -66,7 +69,10 @@ outputs:
       config_settings:
         get_attr: [NovaComputeBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [NovaComputeBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [NovaComputeBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       puppet_config:
         config_volume: nova_libvirt
         puppet_tags: nova_config,nova_paste_api_ini
index 9f66657..ae73705 100644 (file)
@@ -43,6 +43,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   NovaConductorBase:
     type: ../../puppet/services/nova-conductor.yaml
     properties:
@@ -60,7 +63,10 @@ outputs:
       service_name: {get_attr: [NovaConductorBase, role_data, service_name]}
       config_settings: {get_attr: [NovaConductorBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [NovaConductorBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [NovaConductorBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [NovaConductorBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 0d3d1ec..715a861 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   NovaConsoleauthPuppetBase:
     type: ../../puppet/services/nova-consoleauth.yaml
     properties:
@@ -59,7 +62,10 @@ outputs:
       service_name: {get_attr: [NovaConsoleauthPuppetBase, role_data, service_name]}
       config_settings: {get_attr: [NovaConsoleauthPuppetBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [NovaConsoleauthPuppetBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [NovaConsoleauthPuppetBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [NovaConsoleauthPuppetBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 17068b4..543758a 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   NovaIronicBase:
     type: ../../puppet/services/nova-ironic.yaml
     properties:
@@ -59,7 +62,10 @@ outputs:
       service_name: {get_attr: [NovaIronicBase, role_data, service_name]}
       config_settings: {get_attr: [NovaIronicBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [NovaIronicBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [NovaIronicBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       puppet_config:
         config_volume: nova
         puppet_tags: nova_config,nova_paste_api_ini
index 973b0eb..2f3851a 100644 (file)
@@ -74,6 +74,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   NovaLibvirtBase:
     type: ../../puppet/services/nova-libvirt.yaml
     properties:
@@ -93,7 +96,10 @@ outputs:
       config_settings:
         get_attr: [NovaLibvirtBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [NovaLibvirtBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [NovaLibvirtBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       puppet_config:
         config_volume: nova_libvirt
         puppet_tags: libvirtd_config,nova_config,file,exec
index 7350db2..01b86e0 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   NovaPlacementBase:
     type: ../../puppet/services/nova-placement.yaml
     properties:
@@ -62,7 +65,10 @@ outputs:
           - get_attr: [NovaPlacementBase, role_data, config_settings]
           - apache::default_vhost: false
       step_config: &step_config
-        get_attr: [NovaPlacementBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [NovaPlacementBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [NovaPlacementBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 5c1aa30..8d8a635 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   NovaSchedulerBase:
     type: ../../puppet/services/nova-scheduler.yaml
     properties:
@@ -59,7 +62,10 @@ outputs:
       service_name: {get_attr: [NovaSchedulerBase, role_data, service_name]}
       config_settings: {get_attr: [NovaSchedulerBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [NovaSchedulerBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [NovaSchedulerBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [NovaSchedulerBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 37831ff..c5f651d 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   NovaVncProxyPuppetBase:
     type: ../../puppet/services/nova-vnc-proxy.yaml
     properties:
@@ -59,7 +62,10 @@ outputs:
       service_name: {get_attr: [NovaVncProxyPuppetBase, role_data, service_name]}
       config_settings: {get_attr: [NovaVncProxyPuppetBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [NovaVncProxyPuppetBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [NovaVncProxyPuppetBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [NovaVncProxyPuppetBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index f5b4bae..86730eb 100644 (file)
@@ -50,6 +50,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   OctaviaApiPuppetBase:
     type: ../../puppet/services/octavia-api.yaml
     properties:
@@ -67,7 +70,10 @@ outputs:
       service_name: {get_attr: [OctaviaApiPuppetBase, role_data, service_name]}
       config_settings: {get_attr: [OctaviaApiPuppetBase, role_data, config_settings]}
       step_config: &step_config
-        get_attr: [OctaviaApiPuppetBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [OctaviaApiPuppetBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [OctaviaApiPuppetBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS #
       puppet_config:
index 26ae9bc..c6a80ef 100644 (file)
@@ -52,6 +52,9 @@ parameters:
 
 resources:
 
+  MySQLClient:
+    type: ../../../puppet/services/database/mysql-client.yaml
+
   CinderBackupBase:
     type: ../../../puppet/services/cinder-backup.yaml
     properties:
@@ -82,7 +85,11 @@ outputs:
       puppet_config:
         config_volume: cinder
         puppet_tags: cinder_config,file,concat,file_line
-        step_config: {get_attr: [CinderBackupBase, role_data, step_config]}
+        step_config:
+          list_join:
+            - "\n"
+            - - {get_attr: [CinderBackupBase, role_data, step_config]}
+              - {get_attr: [MySQLClient, role_data, step_config]}
         config_image: {get_param: DockerCinderConfigImage}
       kolla_config:
         /var/lib/kolla/config_files/cinder_backup.json:
index 262e999..3c1b7a7 100644 (file)
@@ -48,6 +48,9 @@ parameters:
 
 resources:
 
+  MySQLClient:
+    type: ../../../puppet/services/database/mysql-client.yaml
+
   CinderBase:
     type: ../../../puppet/services/cinder-volume.yaml
     properties:
@@ -76,7 +79,11 @@ outputs:
       puppet_config:
         config_volume: cinder
         puppet_tags: cinder_config,file,concat,file_line
-        step_config: {get_attr: [CinderBase, role_data, step_config]}
+        step_config:
+          list_join:
+            - "\n"
+            - - {get_attr: [CinderBase, role_data, step_config]}
+              - {get_attr: [MySQLClient, role_data, step_config]}
         config_image: {get_param: DockerCinderConfigImage}
       kolla_config:
         /var/lib/kolla/config_files/cinder_volume.json:
index ad2fa0f..01c1738 100644 (file)
@@ -51,6 +51,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   PankoApiPuppetBase:
     type: ../../puppet/services/panko-api.yaml
     properties:
@@ -71,7 +74,10 @@ outputs:
           - get_attr: [PankoApiPuppetBase, role_data, config_settings]
           - apache::default_vhost: false
       step_config: &step_config
-        get_attr: [PankoApiPuppetBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [PankoApiPuppetBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [PankoApiPuppetBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS #
       puppet_config:
index bff2fda..b0c3736 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   SaharaApiPuppetBase:
     type: ../../puppet/services/sahara-api.yaml
     properties:
@@ -60,7 +63,10 @@ outputs:
           - get_attr: [SaharaApiPuppetBase, role_data, config_settings]
           - sahara::sync_db: false
       step_config: &step_config
-        get_attr: [SaharaApiPuppetBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [SaharaApiPuppetBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [SaharaApiPuppetBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS #
       puppet_config:
index 01d4bb9..b166029 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   SaharaEnginePuppetBase:
     type: ../../puppet/services/sahara-engine.yaml
     properties:
@@ -60,7 +63,10 @@ outputs:
           - get_attr: [SaharaEnginePuppetBase, role_data, config_settings]
           - sahara::sync_db: false
       step_config: &step_config
-        get_attr: [SaharaEnginePuppetBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [SaharaEnginePuppetBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [SaharaEnginePuppetBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS #
       puppet_config:
index cdcb4d2..1b7d78c 100644 (file)
@@ -42,6 +42,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   TackerBase:
     type: ../../puppet/services/tacker.yaml
     properties:
@@ -61,7 +64,10 @@ outputs:
         map_merge:
           - get_attr: [TackerBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [TackerBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [TackerBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [TackerBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index 061a4a7..8902f0d 100644 (file)
@@ -49,6 +49,9 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
+  MySQLClient:
+    type: ../../puppet/services/database/mysql-client.yaml
+
   ZaqarBase:
     type: ../../puppet/services/zaqar.yaml
     properties:
@@ -66,7 +69,10 @@ outputs:
       service_name: {get_attr: [ZaqarBase, role_data, service_name]}
       config_settings: {get_attr: [ZaqarBase, role_data, config_settings]}
       step_config: &step_config
-       get_attr: [ZaqarBase, role_data, step_config]
+        list_join:
+          - "\n"
+          - - {get_attr: [ZaqarBase, role_data, step_config]}
+            - {get_attr: [MySQLClient, role_data, step_config]}
       service_config_settings: {get_attr: [ZaqarBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
index a750461..34285ef 100644 (file)
@@ -33,7 +33,6 @@ resource_registry:
   OS::TripleO::Services::NeutronDhcpAgent: ../docker/services/neutron-dhcp.yaml
   OS::TripleO::Services::NeutronL3Agent: ../docker/services/neutron-l3.yaml
   OS::TripleO::Services::MySQL: ../docker/services/database/mysql.yaml
-  OS::TripleO::Services::MySQLClient: ../docker/services/database/mysql-client.yaml
   OS::TripleO::Services::RabbitMQ: ../docker/services/rabbitmq.yaml
   OS::TripleO::Services::MongoDb: ../docker/services/database/mongodb.yaml
   OS::TripleO::Services::Redis: ../docker/services/database/redis.yaml
index 374cd6e..3a2691d 100755 (executable)
@@ -207,6 +207,22 @@ def validate_hci_computehci_role(hci_role_filename, hci_role_tpl):
     return 0
 
 
+def search(item, check_item, check_key):
+    if check_item(item):
+        return True
+    elif isinstance(item, list):
+        for i in item:
+            if search(i, check_item, check_key):
+                return True
+    elif isinstance(item, dict):
+        for k in item.keys():
+            if check_key(k, item[k]):
+                return True
+            elif search(item[k], check_item, check_key):
+                return True
+    return False
+
+
 def validate_mysql_connection(settings):
     no_op = lambda *args: False
     error_status = [0]
@@ -228,25 +244,69 @@ def validate_mysql_connection(settings):
                 error_status[0] = 1
         return False
 
-    def search(item, check_item, check_key):
-        if check_item(item):
-            return True
-        elif isinstance(item, list):
-            for i in item:
-                if search(i, check_item, check_key):
-                    return True
-        elif isinstance(item, dict):
-            for k in item.keys():
-                if check_key(k, item[k]):
-                    return True
-                elif search(item[k], check_item, check_key):
-                    return True
-        return False
-
     search(settings, no_op, validate_mysql_uri)
     return error_status[0]
 
 
+def validate_docker_service_mysql_usage(filename, tpl):
+    no_op = lambda *args: False
+    included_res = []
+
+    def match_included_res(item):
+        is_config_setting = isinstance(item, list) and len(item) > 1 and \
+            item[1:] == ['role_data', 'config_settings']
+        if is_config_setting:
+            included_res.append(item[0])
+        return is_config_setting
+
+    def match_use_mysql_protocol(items):
+        return items == ['EndpointMap', 'MysqlInternal', 'protocol']
+
+    all_content = []
+
+    def read_all(incfile, inctpl):
+        # search for included content
+        content = inctpl['outputs']['role_data']['value'].get('config_settings',{})
+        all_content.append(content)
+        included_res[:] = []
+        if search(content, match_included_res, no_op):
+            files = [inctpl['resources'][x]['type'] for x in included_res]
+            # parse included content
+            for r, f in zip(included_res, files):
+                # disregard class names, only consider file names
+                if 'OS::' in f:
+                    continue
+                newfile = os.path.normpath(os.path.dirname(incfile)+'/'+f)
+                newtmp = yaml.load(open(newfile).read())
+                read_all(newfile, newtmp)
+
+    read_all(filename, tpl)
+    if search(all_content, match_use_mysql_protocol, no_op):
+        # ensure this service includes the mysqlclient service
+        resources = tpl['resources']
+        mysqlclient = [x for x in resources
+                       if resources[x]['type'].endswith('mysql-client.yaml')]
+        if len(mysqlclient) == 0:
+            print("ERROR: containerized service %s uses mysql but "
+                  "resource mysql-client.yaml is not used"
+                  % filename)
+            return 1
+
+        # and that mysql::client puppet module is included in puppet-config
+        match_mysqlclient = \
+            lambda x: x == [mysqlclient[0], 'role_data', 'step_config']
+        role_data = tpl['outputs']['role_data']
+        puppet_config = role_data['value']['puppet_config']['step_config']
+        if not search(puppet_config, match_mysqlclient, no_op):
+            print("ERROR: containerized service %s uses mysql but "
+                  "puppet_config section does not include "
+                  "::tripleo::profile::base::database::mysql::client"
+                  % filename)
+            return 1
+
+    return 0
+
+
 def validate_docker_service(filename, tpl):
     if 'outputs' in tpl and 'role_data' in tpl['outputs']:
         if 'value' not in tpl['outputs']['role_data']:
@@ -275,6 +335,10 @@ def validate_docker_service(filename, tpl):
                     return 1
 
         if 'puppet_config' in role_data:
+            if validate_docker_service_mysql_usage(filename, tpl):
+                print('ERROR: could not validate use of mysql service for %s.'
+                      % filename)
+                return 1
             puppet_config = role_data['puppet_config']
             for key in puppet_config:
                 if key in REQUIRED_DOCKER_PUPPET_CONFIG_SECTIONS: