Merge "Added OvS permission workaround for enabling DPDK"
authorJenkins <jenkins@review.openstack.org>
Thu, 13 Jul 2017 18:33:29 +0000 (18:33 +0000)
committerGerrit Code Review <review@openstack.org>
Thu, 13 Jul 2017 18:33:29 +0000 (18:33 +0000)
176 files changed:
bindep.txt
capabilities-map.yaml
ci/common/all-nodes-validation-disabled.yaml [new file with mode: 0644]
ci/environments/multinode-containers.yaml
ci/environments/multinode.yaml
ci/environments/scenario001-multinode-containers.yaml
ci/environments/scenario001-multinode.yaml
ci/environments/scenario002-multinode-containers.yaml
ci/environments/scenario002-multinode.yaml
ci/environments/scenario003-multinode-containers.yaml
ci/environments/scenario003-multinode.yaml
ci/environments/scenario004-multinode-containers.yaml
ci/environments/scenario004-multinode.yaml
ci/environments/scenario006-multinode-containers.yaml [new file with mode: 0644]
deployed-server/deployed-server-environment-output.yaml [new file with mode: 0644]
docker/docker-puppet.py
docker/services/README.rst
docker/services/aodh-api.yaml
docker/services/aodh-evaluator.yaml
docker/services/aodh-listener.yaml
docker/services/aodh-notifier.yaml
docker/services/ceilometer-agent-central.yaml
docker/services/ceilometer-agent-compute.yaml
docker/services/ceilometer-agent-ipmi.yaml
docker/services/ceilometer-agent-notification.yaml
docker/services/cinder-api.yaml
docker/services/cinder-backup.yaml
docker/services/cinder-scheduler.yaml
docker/services/cinder-volume.yaml
docker/services/collectd.yaml
docker/services/congress.yaml [moved from docker/services/congress-api.yaml with 83% similarity]
docker/services/database/mongodb.yaml
docker/services/database/mysql.yaml
docker/services/database/redis.yaml
docker/services/ec2-api.yaml
docker/services/etcd.yaml
docker/services/glance-api.yaml
docker/services/gnocchi-api.yaml
docker/services/gnocchi-metricd.yaml
docker/services/gnocchi-statsd.yaml
docker/services/haproxy.yaml
docker/services/heat-api-cfn.yaml
docker/services/heat-api.yaml
docker/services/heat-engine.yaml
docker/services/horizon.yaml
docker/services/ironic-api.yaml
docker/services/ironic-conductor.yaml
docker/services/ironic-pxe.yaml
docker/services/iscsid.yaml
docker/services/keystone.yaml
docker/services/manila-api.yaml
docker/services/manila-scheduler.yaml
docker/services/manila-share.yaml [new file with mode: 0644]
docker/services/memcached.yaml
docker/services/mistral-api.yaml
docker/services/mistral-engine.yaml
docker/services/mistral-executor.yaml
docker/services/neutron-api.yaml
docker/services/neutron-dhcp.yaml
docker/services/neutron-l3.yaml
docker/services/neutron-metadata.yaml
docker/services/neutron-ovs-agent.yaml
docker/services/neutron-plugin-ml2.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/octavia-health-manager.yaml
docker/services/octavia-housekeeping.yaml
docker/services/octavia-worker.yaml
docker/services/opendaylight-api.yaml [new file with mode: 0644]
docker/services/pacemaker/clustercheck.yaml
docker/services/pacemaker/database/mysql.yaml
docker/services/pacemaker/database/redis.yaml
docker/services/pacemaker/haproxy.yaml
docker/services/pacemaker/rabbitmq.yaml
docker/services/panko-api.yaml
docker/services/rabbitmq.yaml
docker/services/sahara-api.yaml
docker/services/sahara-engine.yaml
docker/services/sensu-client.yaml
docker/services/swift-proxy.yaml
docker/services/swift-storage.yaml
docker/services/tacker.yaml
docker/services/zaqar.yaml
environments/disable-telemetry.yaml
environments/docker-centos-tripleoupstream.yaml [new file with mode: 0644]
environments/docker-services-tls-everywhere.yaml
environments/docker.yaml
environments/major-upgrade-composable-steps-docker.yaml
environments/neutron-ml2-bigswitch.yaml
environments/overcloud-baremetal.j2.yaml
environments/overcloud-services.yaml
environments/services-docker/congress.yaml
environments/services-docker/manila.yaml
environments/services-docker/neutron-opendaylight.yaml [new file with mode: 0644]
environments/services/neutron-lbaasv2.yaml [new file with mode: 0644]
environments/storage/cinder-netapp-config.yaml
extraconfig/pre_deploy/rhel-registration/rhel-registration.yaml
extraconfig/pre_network/config_then_reboot.yaml
extraconfig/pre_network/host_config_and_reboot.role.j2.yaml
extraconfig/pre_network/host_config_and_reboot.yaml
extraconfig/tasks/ssh/host_public_key.yaml
network/config/bond-with-vlans/compute.yaml
network/config/bond-with-vlans/networker.yaml [new file with mode: 0644]
network/config/multiple-nics/compute.yaml
network/config/multiple-nics/networker.yaml [new file with mode: 0644]
network/config/single-nic-linux-bridge-vlans/compute.yaml
network/config/single-nic-linux-bridge-vlans/networker.yaml [new file with mode: 0644]
network/config/single-nic-vlans/compute.yaml
network/config/single-nic-vlans/networker.yaml [new file with mode: 0644]
network/external.yaml
network/external_v6.yaml
network/internal_api.yaml
network/internal_api_v6.yaml
network/management_v6.yaml
network/ports/net_ip_map.yaml
network/storage.yaml
network/storage_mgmt.yaml
network/storage_mgmt_v6.yaml
network/storage_v6.yaml
network/tenant.yaml
network/tenant_v6.yaml
overcloud-resource-registry-puppet.j2.yaml
overcloud.j2.yaml
puppet/blockstorage-role.yaml
puppet/cephstorage-role.yaml
puppet/compute-role.yaml
puppet/controller-role.yaml
puppet/objectstorage-role.yaml
puppet/role.role.j2.yaml
puppet/services/aodh-base.yaml
puppet/services/barbican-api.yaml
puppet/services/ceilometer-base.yaml
puppet/services/ceph-mon.yaml
puppet/services/cinder-api.yaml
puppet/services/congress.yaml
puppet/services/disabled/ceilometer-api-disabled.yaml [new file with mode: 0644]
puppet/services/glance-api.yaml
puppet/services/heat-base.yaml
puppet/services/keystone.yaml
puppet/services/manila-base.yaml
puppet/services/mistral-base.yaml
puppet/services/neutron-base.yaml
puppet/services/neutron-lbaas.yaml [new file with mode: 0644]
puppet/services/nova-base.yaml
puppet/services/nova-compute.yaml
puppet/services/octavia-base.yaml
puppet/services/qdr.yaml
puppet/services/sahara-base.yaml
puppet/services/tacker.yaml
releasenotes/notes/deployed-server-environment-output-d838c782f76823b7.yaml [new file with mode: 0644]
releasenotes/notes/enable-neutron-lbaas-integration-b72126f2c7e71cee.yaml [new file with mode: 0644]
releasenotes/notes/notification-driver-noop-e322ca6704a5bc50.yaml [new file with mode: 0644]
releasenotes/notes/roles-data-validation-7845702b5ed85366.yaml [new file with mode: 0644]
releasenotes/source/conf.py
requirements.txt
roles/Controller.yaml
roles/Networker.yaml
roles/Undercloud.yaml
roles_data.yaml
roles_data_undercloud.yaml
test-requirements.txt
tools/process-templates.py
tools/roles-data-generate-samples.sh [new file with mode: 0755]
tools/roles-data-generate.py [new file with mode: 0755]
tools/roles-data-validation.sh [new file with mode: 0755]
tools/yaml-validate.py
tox.ini
validation-scripts/all-nodes.sh

index 4f9b425..d42375e 100644 (file)
@@ -1,2 +1,4 @@
 # This is a cross-platform list tracking distribution packages needed by tests;
 # see http://docs.openstack.org/infra/bindep/ for additional information.
+libssl-dev [platform:dpkg]
+openssl-devel [platform:rpm]
index 1fe7790..d0ec015 100644 (file)
@@ -305,6 +305,11 @@ topics:
             description: Enables Neutron BGPVPN Service Plugin
             requires:
               - overcloud-resource-registry-puppet.yaml
+          - file: environments/services/neutron-lbaasv2.yaml
+            title: Neutron LBaaSv2 Service Plugin
+            description: Enables Neutron LBaaSv2 Service Plugin and Agent
+            requires:
+              - overcloud-resource-registry-puppet.yaml
           - file: environments/neutron-ml2-bigswitch.yaml
             title: BigSwitch Extensions
             description: >
diff --git a/ci/common/all-nodes-validation-disabled.yaml b/ci/common/all-nodes-validation-disabled.yaml
new file mode 100644 (file)
index 0000000..5b67642
--- /dev/null
@@ -0,0 +1,43 @@
+heat_template_version: pike
+
+description: >
+  Software Config to drive validations that occur on all nodes.
+  Note, you need the heat-config-script element built into your
+  images, due to the script group below.
+
+  This implementation of the validations is a noop that always reports success.
+
+parameters:
+  PingTestIps:
+    default: ''
+    description: A string containing a space separated list of IP addresses used to ping test each available network interface.
+    type: string
+  ValidateFqdn:
+    default: false
+    description: Optional validation to ensure FQDN as set by Nova matches the name set in /etc/hosts.
+    type: boolean
+  ValidateNtp:
+    default: true
+    description: Validation to ensure at least one time source is accessible.
+    type: boolean
+
+resources:
+  AllNodesValidationsImpl:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      inputs:
+        - name: ping_test_ips
+          default: {get_param: PingTestIps}
+        - name: validate_fqdn
+          default: {get_param: ValidateFqdn}
+        - name: validate_ntp
+          default: {get_param: ValidateNtp}
+      config: |
+        #!/bin/bash
+        exit 0
+
+outputs:
+  OS::stack_id:
+    description: The ID of the AllNodesValidationsImpl resource.
+    value: {get_resource: AllNodesValidationsImpl}
index 8997041..10a2c8c 100644 (file)
@@ -13,6 +13,9 @@ resource_registry:
   # mapping at all. After we stop CI'ing Ocata->Pike upgrade, we can
   # remove this.
   OS::TripleO::Services::Docker: OS::Heat::None
+  # Some infra instances don't pass the ping test but are otherwise working.
+  # Since the OVB jobs also test this functionality we can shut it off here.
+  OS::TripleO::AllNodes::Validation: ../common/all-nodes-validation-disabled.yaml
 
 parameter_defaults:
   ControllerServices:
index 102787a..1752a2f 100644 (file)
@@ -10,6 +10,9 @@ resource_registry:
   OS::TripleO::Tasks::ControllerPreConfig: ../../extraconfig/tasks/pre_puppet_pacemaker.yaml
   OS::TripleO::Tasks::ControllerPostConfig: ../../extraconfig/tasks/post_puppet_pacemaker.yaml
   OS::TripleO::Tasks::ControllerPostPuppetRestart: ../../extraconfig/tasks/post_puppet_pacemaker_restart.yaml
+  # Some infra instances don't pass the ping test but are otherwise working.
+  # Since the OVB jobs also test this functionality we can shut it off here.
+  OS::TripleO::AllNodes::Validation: ../common/all-nodes-validation-disabled.yaml
 
 parameter_defaults:
   ControllerServices:
index 7c32381..89339d1 100644 (file)
@@ -13,7 +13,7 @@ resource_registry:
   OS::TripleO::Services::PankoApi: ../../docker/services/panko-api.yaml
   OS::TripleO::Services::Collectd: ../../docker/services/collectd.yaml
   OS::TripleO::Services::Tacker: ../../docker/services/tacker.yaml
-  OS::TripleO::Services::Congress: ../../docker/services/congress-api.yaml
+  OS::TripleO::Services::Congress: ../../docker/services/congress.yaml
   # TODO fluentd is being containerized: https://review.openstack.org/#/c/467072/
   OS::TripleO::Services::FluentdClient: ../../puppet/services/logging/fluentd-client.yaml
   OS::TripleO::Services::SensuClient: ../../docker/services/sensu-client.yaml
@@ -23,6 +23,9 @@ resource_registry:
   # mapping at all. After we stop CI'ing Ocata->Pike upgrade, we can
   # remove this.
   OS::TripleO::Services::Docker: OS::Heat::None
+  # Some infra instances don't pass the ping test but are otherwise working.
+  # Since the OVB jobs also test this functionality we can shut it off here.
+  OS::TripleO::AllNodes::Validation: ../common/all-nodes-validation-disabled.yaml
 
 parameter_defaults:
   ControllerServices:
index ad4fa10..8abd079 100644 (file)
@@ -21,6 +21,9 @@ resource_registry:
   OS::TripleO::Tasks::ControllerPostPuppetRestart: ../../extraconfig/tasks/post_puppet_pacemaker_restart.yaml
   OS::TripleO::Services::FluentdClient: ../../puppet/services/logging/fluentd-client.yaml
   OS::TripleO::Services::SensuClient: ../../puppet/services/monitoring/sensu-client.yaml
+  # Some infra instances don't pass the ping test but are otherwise working.
+  # Since the OVB jobs also test this functionality we can shut it off here.
+  OS::TripleO::AllNodes::Validation: ../common/all-nodes-validation-disabled.yaml
 
 parameter_defaults:
   ControllerServices:
index 92c834b..0708863 100644 (file)
@@ -16,6 +16,9 @@ resource_registry:
   # mapping at all. After we stop CI'ing Ocata->Pike upgrade, we can
   # remove this.
   OS::TripleO::Services::Docker: OS::Heat::None
+  # Some infra instances don't pass the ping test but are otherwise working.
+  # Since the OVB jobs also test this functionality we can shut it off here.
+  OS::TripleO::AllNodes::Validation: ../common/all-nodes-validation-disabled.yaml
 
 parameter_defaults:
   ControllerServices:
index ed0f7e2..79b74af 100644 (file)
@@ -15,6 +15,9 @@ resource_registry:
   OS::TripleO::Tasks::ControllerPreConfig: ../../extraconfig/tasks/pre_puppet_pacemaker.yaml
   OS::TripleO::Tasks::ControllerPostConfig: ../../extraconfig/tasks/post_puppet_pacemaker.yaml
   OS::TripleO::Tasks::ControllerPostPuppetRestart: ../../extraconfig/tasks/post_puppet_pacemaker_restart.yaml
+  # Some infra instances don't pass the ping test but are otherwise working.
+  # Since the OVB jobs also test this functionality we can shut it off here.
+  OS::TripleO::AllNodes::Validation: ../common/all-nodes-validation-disabled.yaml
 
 parameter_defaults:
   ControllerServices:
index 7b917ae..8e1b3a0 100644 (file)
@@ -17,6 +17,9 @@ resource_registry:
   # mapping at all. After we stop CI'ing Ocata->Pike upgrade, we can
   # remove this.
   OS::TripleO::Services::Docker: OS::Heat::None
+  # Some infra instances don't pass the ping test but are otherwise working.
+  # Since the OVB jobs also test this functionality we can shut it off here.
+  OS::TripleO::AllNodes::Validation: ../common/all-nodes-validation-disabled.yaml
 
 parameter_defaults:
   ControllerServices:
index d1c8bc1..2cce168 100644 (file)
@@ -14,6 +14,9 @@ resource_registry:
   OS::TripleO::Tasks::ControllerPreConfig: ../../extraconfig/tasks/pre_puppet_pacemaker.yaml
   OS::TripleO::Tasks::ControllerPostConfig: ../../extraconfig/tasks/post_puppet_pacemaker.yaml
   OS::TripleO::Tasks::ControllerPostPuppetRestart: ../../extraconfig/tasks/post_puppet_pacemaker_restart.yaml
+  # Some infra instances don't pass the ping test but are otherwise working.
+  # Since the OVB jobs also test this functionality we can shut it off here.
+  OS::TripleO::AllNodes::Validation: ../common/all-nodes-validation-disabled.yaml
 
 parameter_defaults:
   ControllerServices:
index 1d6d591..ba53016 100644 (file)
@@ -27,6 +27,9 @@ resource_registry:
   # mapping at all. After we stop CI'ing Ocata->Pike upgrade, we can
   # remove this.
   OS::TripleO::Services::Docker: OS::Heat::None
+  # Some infra instances don't pass the ping test but are otherwise working.
+  # Since the OVB jobs also test this functionality we can shut it off here.
+  OS::TripleO::AllNodes::Validation: ../common/all-nodes-validation-disabled.yaml
 
 
 parameter_defaults:
index e473d0b..8bf805d 100644 (file)
@@ -25,6 +25,9 @@ resource_registry:
   OS::TripleO::Services::Redis: ../../puppet/services/pacemaker/database/redis.yaml
   OS::TripleO::Services::MySQL: ../../puppet/services/pacemaker/database/mysql.yaml
   OS::TripleO::Services::Keepalived: OS::Heat::None
+  # Some infra instances don't pass the ping test but are otherwise working.
+  # Since the OVB jobs also test this functionality we can shut it off here.
+  OS::TripleO::AllNodes::Validation: ../common/all-nodes-validation-disabled.yaml
 
 
 parameter_defaults:
diff --git a/ci/environments/scenario006-multinode-containers.yaml b/ci/environments/scenario006-multinode-containers.yaml
new file mode 100644 (file)
index 0000000..97db897
--- /dev/null
@@ -0,0 +1,60 @@
+resource_registry:
+  OS::TripleO::Controller::Net::SoftwareConfig: ../common/net-config-multinode.yaml
+  OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode.yaml
+  OS::TripleO::Services::NovaIronic: ../docker/services/nova-ironic.yaml
+  OS::TripleO::Services::IronicApi: ../docker/services/ironic-api.yaml
+  OS::TripleO::Services::IronicConductor: ../docker/services/ironic-conductor.yaml
+  OS::TripleO::Services::IronicPxe: ../docker/services/ironic-pxe.yaml
+  OS::TripleO::Services::Docker: OS::Heat::None
+
+parameter_defaults:
+  ControllerServices:
+    - OS::TripleO::Services::Docker
+    - OS::TripleO::Services::Kernel
+    - OS::TripleO::Services::Keystone
+    - OS::TripleO::Services::GlanceApi
+    - OS::TripleO::Services::IronicApi
+    - OS::TripleO::Services::IronicConductor
+    - OS::TripleO::Services::IronicPxe
+    - OS::TripleO::Services::MySQL
+    - OS::TripleO::Services::MySQLClient
+    - OS::TripleO::Services::NeutronDhcpAgent
+    - OS::TripleO::Services::NeutronL3Agent
+    - OS::TripleO::Services::NeutronMetadataAgent
+    - OS::TripleO::Services::NeutronServer
+    - OS::TripleO::Services::NeutronCorePlugin
+    - OS::TripleO::Services::NeutronOvsAgent
+    - OS::TripleO::Services::RabbitMQ
+    - OS::TripleO::Services::HAproxy
+    - OS::TripleO::Services::Keepalived
+    - OS::TripleO::Services::Memcached
+    - OS::TripleO::Services::Pacemaker
+    - OS::TripleO::Services::NovaConductor
+    - OS::TripleO::Services::NovaApi
+    - OS::TripleO::Services::NovaIronic
+    - OS::TripleO::Services::NovaPlacement
+    - OS::TripleO::Services::NovaMetadata
+    - OS::TripleO::Services::NovaScheduler
+    - OS::TripleO::Services::Ntp
+    - OS::TripleO::Services::Snmp
+    - OS::TripleO::Services::Sshd
+    - OS::TripleO::Services::Securetty
+    - OS::TripleO::Services::Timezone
+    - OS::TripleO::Services::MongoDb
+    - OS::TripleO::Services::Redis
+    - OS::TripleO::Services::TripleoPackages
+    - OS::TripleO::Services::TripleoFirewall
+
+  Debug: true
+  BannerText: |
+    ******************************************************************
+    * This system is for the use of authorized users only. Usage of  *
+    * this system may be monitored and recorded by system personnel. *
+    * Anyone using this system expressly consents to such monitoring *
+    * and is advised that if such monitoring reveals possible        *
+    * evidence of criminal activity, system personnel may provide    *
+    * the evidence from such monitoring to law enforcement officials.*
+    ******************************************************************
+  # we don't deploy Swift so we switch to file backend.
+  GlanceBackend: 'file'
+  IronicCleaningDiskErase: 'metadata'
diff --git a/deployed-server/deployed-server-environment-output.yaml b/deployed-server/deployed-server-environment-output.yaml
new file mode 100644 (file)
index 0000000..eaf7745
--- /dev/null
@@ -0,0 +1,65 @@
+heat_template_version: pike
+
+parameters:
+  RoleCounts:
+    type: json
+    default: {}
+  VipMap:
+    type: json
+    default: {}
+  DeployedServerPortMap:
+    type: json
+    default: {}
+  DeployedServerDeploymentSwiftDataMap:
+    type: json
+    default: {}
+  DefaultRouteIp:
+    type: string
+    default: 192.168.24.1
+
+resources:
+
+  DeployedServerPortMapParameter:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+        DeployedServerPortMap:
+          map_merge:
+            - {get_param: DeployedServerPortMap}
+            - control_virtual_ip:
+                fixed_ips:
+                  - ip_address: {get_param: [VipMap, ctlplane]}
+            - redis_virtual_ip:
+                fixed_ips:
+                  - ip_address: {get_param: [VipMap, redis]}
+
+  ResourceRegistry:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+          OS::TripleO::DeployedServer::ControlPlanePort: tripleo-heat-templates/deployed-server/deployed-neutron-port.yaml
+          OS::TripleO::Network::Ports::ControlPlaneVipPort: tripleo-heat-templates/deployed-server/deployed-neutron-port.yaml
+
+  DeployedServerEnvironment:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+        resource_registry:
+          {get_attr: [ResourceRegistry, value]}
+        parameter_defaults:
+          map_merge:
+            - {get_attr: [DeployedServerPortMapParameter, value]}
+            - DeploymentSwiftDataMap: {get_param: DeployedServerDeploymentSwiftDataMap}
+            - EC2MetadataIp: {get_param: DefaultRouteIp}
+            - ControlPlaneDefaultRoute: {get_param: DefaultRouteIp}
+            - {get_param: RoleCounts}
+
+outputs:
+  deployed_server_environment:
+    description:
+      Environment data that can be used as input into the services stack when
+      using split-stack.
+    value: {get_attr: [DeployedServerEnvironment, value]}
index 4c193e4..01acde0 100755 (executable)
@@ -195,15 +195,17 @@ def mp_puppet_config((config_volume, puppet_tags, manifest, config_image, volume
             TAGS="--tags \"$PUPPET_TAGS\""
         fi
 
-        # workaround LP1696283
-        mkdir -p /etc/ssh
-        touch /etc/ssh/ssh_known_hosts
+        # Create a reference timestamp to easily find all files touched by
+        # puppet. The sync ensures we get all the files we want due to
+        # different timestamp.
+        touch /tmp/the_origin_of_time
+        sync
 
         FACTER_hostname=$HOSTNAME FACTER_uuid=docker /usr/bin/puppet apply --verbose $TAGS /etc/config.pp
 
         # Disables archiving
         if [ -z "$NO_ARCHIVE" ]; then
-            archivedirs=("/etc" "/root" "/var/lib/ironic/tftpboot" "/var/lib/ironic/httpboot" "/var/www")
+            archivedirs=("/etc" "/root" "/opt" "/var/lib/ironic/tftpboot" "/var/lib/ironic/httpboot" "/var/www" "/var/spool/cron")
             rsync_srcs=""
             for d in "${archivedirs[@]}"; do
                 if [ -d "$d" ]; then
@@ -216,7 +218,7 @@ def mp_puppet_config((config_volume, puppet_tags, manifest, config_image, volume
             # This is useful for debugging
             mkdir -p /var/lib/config-data/puppet-generated/${NAME}
             rsync -a -R -0 --delay-updates --delete-after \
-                          --files-from=<(find $rsync_srcs -newer /etc/ssh/ssh_known_hosts -print0) \
+                          --files-from=<(find $rsync_srcs -newer /tmp/the_origin_of_time -not -path '/etc/puppet*' -print0) \
                           / /var/lib/config-data/puppet-generated/${NAME}
 
             # Write a checksum of the config-data dir, this is used as a
@@ -306,9 +308,9 @@ for config_volume in configs:
     volumes = service[4] if len(service) > 4 else []
 
     if puppet_tags:
-        puppet_tags = "file,file_line,concat,augeas,%s" % puppet_tags
+        puppet_tags = "file,file_line,concat,augeas,cron,%s" % puppet_tags
     else:
-        puppet_tags = "file,file_line,concat,augeas"
+        puppet_tags = "file,file_line,concat,augeas,cron"
 
     process_map.append([config_volume, puppet_tags, manifest, config_image, volumes])
 
index 84ac842..ce255ba 100644 (file)
@@ -74,7 +74,7 @@ are re-asserted when applying latter ones.
      * puppet_tags: Puppet resource tag names that are used to generate config
        files with puppet. Only the named config resources are used to generate
        a config file. Any service that specifies tags will have the default
-       tags of 'file,concat,file_line,augeas' appended to the setting.
+       tags of 'file,concat,file_line,augeas,cron' appended to the setting.
        Example: keystone_config
 
      * config_volume: The name of the volume (directory) where config files
index 3be0f18..fc1c316 100644 (file)
@@ -84,6 +84,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/aodh_api.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/aodh
               owner: aodh:aodh
@@ -125,11 +130,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/aodh_api.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/aodh/etc/aodh/:/etc/aodh/:ro
-                  - /var/lib/config-data/aodh/etc/httpd/conf/:/etc/httpd/conf/:ro
-                  - /var/lib/config-data/aodh/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                  - /var/lib/config-data/aodh/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
-                  - /var/lib/config-data/aodh/var/www/:/var/www/:ro
+                  - /var/lib/config-data/puppet-generated/aodh/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/aodh:/var/log/aodh
                   -
                     if:
index 108a552..2398baa 100644 (file)
@@ -76,6 +76,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/aodh_evaluator.json:
           command: /usr/bin/aodh-evaluator
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/aodh
               owner: aodh:aodh
@@ -95,7 +100,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/aodh_evaluator.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/aodh/etc/aodh/:/etc/aodh/:ro
+                  - /var/lib/config-data/puppet-generated/aodh/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/aodh:/var/log/aodh
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index d78af5b..9e89385 100644 (file)
@@ -76,6 +76,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/aodh_listener.json:
           command: /usr/bin/aodh-listener
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/aodh
               owner: aodh:aodh
@@ -95,7 +100,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/aodh_listener.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/aodh/etc/aodh/:/etc/aodh/:ro
+                  - /var/lib/config-data/puppet-generated/aodh/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/aodh:/var/log/aodh
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index abfb374..0fc65ff 100644 (file)
@@ -76,6 +76,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/aodh_notifier.json:
           command: /usr/bin/aodh-notifier
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/aodh
               owner: aodh:aodh
@@ -95,7 +100,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/aodh_notifier.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/aodh/etc/aodh/:/etc/aodh/:ro
+                  - /var/lib/config-data/puppet-generated/aodh/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/aodh:/var/log/aodh
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index af1f47a..cef7b88 100644 (file)
@@ -74,6 +74,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/ceilometer_agent_central.json:
           command: /usr/bin/ceilometer-polling --polling-namespaces central
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_3:
           ceilometer_init_log:
@@ -97,7 +102,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/ceilometer_agent_central.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/ceilometer/etc/ceilometer/:/etc/ceilometer/:ro
+                  - /var/lib/config-data/puppet-generated/ceilometer/:/var/lib/kolla/config_files/src:ro
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
         step_5:
index 3cc440b..ecb8e89 100644 (file)
@@ -74,6 +74,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/ceilometer_agent_compute.json:
           command: /usr/bin/ceilometer-polling --polling-namespaces compute
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_4:
           ceilometer_agent_compute:
@@ -89,7 +94,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/ceilometer_agent_compute.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/ceilometer/etc/ceilometer/:/etc/ceilometer/:ro
+                  - /var/lib/config-data/puppet-generated/ceilometer/:/var/lib/kolla/config_files/src:ro
                   - /var/run/libvirt:/var/run/libvirt:ro
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 7d02939..4bf7515 100644 (file)
@@ -74,6 +74,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/ceilometer-agent-ipmi.json:
           command: /usr/bin/ceilometer-polling --polling-namespaces ipmi
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_3:
           ceilometer_init_log:
@@ -97,7 +102,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/ceilometer-agent-ipmi.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/ceilometer/etc/ceilometer/:/etc/ceilometer/:ro
+                  - /var/lib/config-data/puppet-generated/ceilometer/:/var/lib/kolla/config_files/src:ro
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
       upgrade_tasks:
index b2e85bb..a1579cc 100644 (file)
@@ -74,6 +74,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/ceilometer_agent_notification.json:
           command: /usr/bin/ceilometer-agent-notification
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_3:
           ceilometer_init_log:
@@ -97,7 +102,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/ceilometer_agent_notification.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/ceilometer/etc/ceilometer/:/etc/ceilometer/:ro
+                  - /var/lib/config-data/puppet-generated/ceilometer/:/var/lib/kolla/config_files/src:ro
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
       upgrade_tasks:
index 6a5d74b..07315e7 100644 (file)
@@ -81,6 +81,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/cinder_api.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/cinder
               owner: cinder:cinder
@@ -128,9 +133,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/cinder_api.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/cinder/etc/cinder/:/etc/cinder/:ro
-                  - /var/lib/config-data/cinder/etc/httpd/:/etc/httpd/:ro
-                  - /var/lib/config-data/cinder/var/www/:/var/www/:ro
+                  - /var/lib/config-data/puppet-generated/cinder/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/cinder:/var/log/cinder
                   -
                     if:
index 2cde6f1..8de1201 100644 (file)
@@ -75,6 +75,19 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/cinder_backup.json:
           command: /usr/bin/cinder-backup --config-file /usr/share/cinder/cinder-dist.conf --config-file /etc/cinder/cinder.conf
+          config_files:
+            # NOTE(mandre): the copy of ceph conf will need to go once we
+            # generate a ceph.conf for cinder in puppet
+            # Copy ceph config files before cinder ones as a precaution, for
+            # the later one to take precendence in case of duplicate files.
+            - source: "/var/lib/kolla/config_files/src-ceph/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/lib/cinder
               owner: cinder:cinder
@@ -106,8 +119,9 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/cinder_backup.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/cinder/etc/cinder/:/etc/cinder/:ro
-                  - /var/lib/config-data/ceph/etc/ceph/:/etc/ceph/:ro #FIXME: we need to generate a ceph.conf with puppet for this
+                  - /var/lib/config-data/puppet-generated/cinder/:/var/lib/kolla/config_files/src:ro
+                  # FIXME: we need to generate a ceph.conf with puppet for this
+                  - /var/lib/config-data/puppet-generated/ceph/:/var/lib/kolla/config_files/src-ceph:ro
                   - /dev/:/dev/
                   - /run/:/run/
                   - /sys:/sys
index bcf32b2..8281385 100644 (file)
@@ -75,6 +75,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/cinder_scheduler.json:
           command: /usr/bin/cinder-scheduler --config-file /usr/share/cinder/cinder-dist.conf --config-file /etc/cinder/cinder.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/cinder
               owner: cinder:cinder
@@ -102,7 +107,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/cinder_scheduler.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/cinder/etc/cinder/:/etc/cinder/:ro
+                  - /var/lib/config-data/puppet-generated/cinder/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/cinder:/var/log/cinder
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 5517384..0ce098a 100644 (file)
@@ -83,6 +83,19 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/cinder_volume.json:
           command: /usr/bin/cinder-volume --config-file /usr/share/cinder/cinder-dist.conf --config-file /etc/cinder/cinder.conf
+          config_files:
+            # NOTE(mandre): the copy of ceph conf will need to go once we
+            # generate a ceph.conf for cinder in puppet
+            # Copy ceph config files before cinder ones as a precaution, for
+            # the later one to take precendence in case of duplicate files.
+            - source: "/var/lib/kolla/config_files/src-ceph/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/cinder
               owner: cinder:cinder
@@ -111,8 +124,9 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/cinder_volume.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/cinder/etc/cinder/:/etc/cinder/:ro
-                  - /var/lib/config-data/ceph/etc/ceph/:/etc/ceph/:ro #FIXME: we need to generate a ceph.conf with puppet for this
+                  - /var/lib/config-data/puppet-generated/cinder/:/var/lib/kolla/config_files/src:ro
+                  # FIXME: we need to generate a ceph.conf with puppet for this
+                  - /var/lib/config-data/puppet-generated/ceph/:/var/lib/kolla/config_files/src-ceph:ro
                   - /dev/:/dev/
                   - /run/:/run/
                   - /sys:/sys
index e674115..0593e41 100644 (file)
@@ -79,6 +79,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/collectd.json:
           command: /usr/sbin/collectd -f
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/collectd
               owner: collectd:collectd
@@ -99,9 +104,7 @@ outputs:
                 -
                   - /var/run/docker.sock:/var/run/docker.sock:rw
                   - /var/lib/kolla/config_files/collectd.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/collectd/etc/collectd.conf:/etc/collectd.conf:ro
-                  - /var/lib/config-data/collectd/etc/collectd.d:/etc/collectd.d:ro
-                  - /var/log/containers/collectd:/var/log/collectd:rw
+                  - /var/lib/config-data/puppet-generated/collectd/:/var/lib/kolla/config_files/src:ro
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
       host_prep_tasks:
similarity index 83%
rename from docker/services/congress-api.yaml
rename to docker/services/congress.yaml
index 52395d5..1d3ea0d 100644 (file)
@@ -44,7 +44,7 @@ resources:
   ContainersCommon:
     type: ./containers-common.yaml
 
-  CongressApiBase:
+  CongressBase:
     type: ../../puppet/services/congress.yaml
     properties:
       EndpointMap: {get_param: EndpointMap}
@@ -57,13 +57,13 @@ outputs:
   role_data:
     description: Role data for the Congress API role.
     value:
-      service_name: {get_attr: [CongressApiBase, role_data, service_name]}
+      service_name: {get_attr: [CongressBase, role_data, service_name]}
       config_settings:
         map_merge:
-          - get_attr: [CongressApiBase, role_data, config_settings]
+          - get_attr: [CongressBase, role_data, config_settings]
       step_config: &step_config
-        get_attr: [CongressApiBase, role_data, step_config]
-      service_config_settings: {get_attr: [CongressApiBase, role_data, service_config_settings]}
+        get_attr: [CongressBase, role_data, step_config]
+      service_config_settings: {get_attr: [CongressBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
         config_volume: congress
@@ -76,6 +76,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/congress_api.json:
           command: /usr/bin/congress-server --config-file=/etc/congress/congress.conf --log-file=/var/log/congress/api.log
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/congress
               owner: congress:congress
@@ -104,7 +109,10 @@ outputs:
               list_concat:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
-                  - /var/lib/config-data/congress/etc/:/etc/:ro
+                  # FIXME(mandre) mounting /etc rw to workaround LP1696283
+                  # This should go away anyway and mount the exact files it
+                  # needs or use kolla set_configs.py
+                  - /var/lib/config-data/congress/etc/:/etc/
                   - /var/log/containers/congress:/var/log/congress
             command: "/usr/bin/bootstrap_host_exec congress su congress -s /bin/bash -c 'congress-db-manage --config-file /etc/congress/congress.conf upgrade head'"
         step_4:
@@ -119,7 +127,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/congress_api.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/congress/etc/congress/:/etc/congress/:ro
+                  - /var/lib/config-data/puppet-generated/congress/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/congress:/var/log/congress
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 7b620c5..b5e7dea 100644 (file)
@@ -76,6 +76,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/mongodb.json:
           command: /usr/bin/mongod --unixSocketPrefix=/var/run/mongodb --config /etc/mongod.conf run
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/lib/mongodb
               owner: mongodb:mongodb
@@ -94,8 +99,7 @@ outputs:
             privileged: false
             volumes: &mongodb_volumes
               - /var/lib/kolla/config_files/mongodb.json:/var/lib/kolla/config_files/config.json
-              - /var/lib/config-data/mongodb/etc/mongod.conf:/etc/mongod.conf:ro
-              - /var/lib/config-data/mongodb/etc/mongos.conf:/etc/mongos.conf:ro
+              - /var/lib/config-data/puppet-generated/mongodb/:/var/lib/kolla/config_files/src:ro
               - /etc/localtime:/etc/localtime:ro
               - /var/log/containers/mongodb:/var/log/mongodb
               - /var/lib/mongodb:/var/lib/mongodb
index 725b2b4..6156535 100644 (file)
@@ -85,6 +85,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/mysql.json:
           command: /usr/bin/mysqld_safe
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/lib/mysql
               owner: mysql:mysql
@@ -111,7 +116,7 @@ outputs:
             command: ['bash', '-c', 'test -e /var/lib/mysql/mysql || kolla_start']
             volumes: &mysql_volumes
               - /var/lib/kolla/config_files/mysql.json:/var/lib/kolla/config_files/config.json
-              - /var/lib/config-data/mysql/etc/my.cnf.d:/etc/my.cnf.d:ro
+              - /var/lib/config-data/puppet-generated/mysql/:/var/lib/kolla/config_files/src:ro
               - /etc/localtime:/etc/localtime:ro
               - /etc/hosts:/etc/hosts:ro
               - /var/lib/mysql:/var/lib/mysql
index 0a490cd..494fe61 100644 (file)
@@ -75,6 +75,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/redis.json:
           command: /usr/bin/redis-server /etc/redis.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/run/redis
               owner: redis:redis
@@ -102,7 +107,7 @@ outputs:
             volumes:
               - /run:/run
               - /var/lib/kolla/config_files/redis.json:/var/lib/kolla/config_files/config.json:ro
-              - /var/lib/config-data/redis/etc/redis.conf:/etc/redis.conf:ro
+              - /var/lib/config-data/puppet-generated/redis/:/var/lib/kolla/config_files/src:ro
               - /etc/localtime:/etc/localtime:ro
               - /var/log/containers/redis:/var/log/redis
             environment:
index d4cfe49..e02a146 100644 (file)
@@ -74,12 +74,22 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/ec2_api.json:
           command: /usr/bin/ec2-api
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/ec2api
               owner: ec2api:ec2api
               recurse: true
         /var/lib/kolla/config_files/ec2_api_metadata.json:
           command: /usr/bin/ec2-api-metadata
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/ec2api # default log dir for metadata service as well
               owner: ec2api:ec2api
@@ -125,7 +135,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/ec2_api.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/ec2_api/etc/ec2api/:/etc/ec2api/:ro
+                  - /var/lib/config-data/puppet-generated/ec2_api/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/ec2_api:/var/log/ec2api
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
@@ -139,7 +149,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/ec2_api_metadata.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/ec2_api/etc/ec2api/:/etc/ec2api/:ro
+                  - /var/lib/config-data/puppet-generated/ec2_api/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/ec2_api_metadata:/var/log/ec2api
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 3c7c81b..eb661af 100644 (file)
@@ -78,6 +78,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/etcd.json:
           command: /usr/bin/etcd --config-file /etc/etcd/etcd.yml
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/lib/etcd
               owner: etcd:etcd
@@ -96,7 +101,7 @@ outputs:
               - /var/lib/etcd:/var/lib/etcd
               - /etc/localtime:/etc/localtime:ro
               - /var/lib/kolla/config_files/etcd.json:/var/lib/kolla/config_files/config.json:ro
-              - /var/lib/config-data/etcd/etc/etcd/etcd.yml:/etc/etcd/etcd.yml:ro
+              - /var/lib/config-data/puppet-generated/etcd/:/var/lib/kolla/config_files/src:ro
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
       docker_puppet_tasks:
index 4fadef9..17d9110 100644 (file)
@@ -85,8 +85,18 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/glance_api.json:
           command: /usr/bin/glance-api --config-file /usr/share/glance/glance-api-dist.conf --config-file /etc/glance/glance-api.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/glance_api_tls_proxy.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         # Kolla_bootstrap/db_sync runs before permissions set by kolla_config
         step_2:
@@ -112,7 +122,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/glance_api.json:/var/lib/kolla/config_files/config.json
-                  - /var/lib/config-data/glance_api/etc/glance/:/etc/glance/:ro
+                  - /var/lib/config-data/puppet-generated/glance_api/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/glance:/var/log/glance
             environment:
               - KOLLA_BOOTSTRAP=True
@@ -142,9 +152,7 @@ outputs:
                         - {get_attr: [ContainersCommon, volumes]}
                         -
                           - /var/lib/kolla/config_files/glance_api_tls_proxy.json:/var/lib/kolla/config_files/config.json:ro
-                          - /var/lib/config-data/glance_api/etc/httpd/conf/:/etc/httpd/conf/:ro
-                          - /var/lib/config-data/glance_api/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                          - /var/lib/config-data/glance_api/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
+                          - /var/lib/config-data/puppet-generated/glance_api/:/var/lib/kolla/config_files/src:ro
                           - /etc/pki/tls/certs/httpd:/etc/pki/tls/certs/httpd:ro
                           - /etc/pki/tls/private/httpd:/etc/pki/tls/private/httpd:ro
                     environment:
index cf31d25..140e93d 100644 (file)
@@ -84,6 +84,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/gnocchi_api.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/gnocchi
               owner: gnocchi:gnocchi
@@ -125,11 +130,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/gnocchi_api.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/gnocchi/etc/gnocchi/:/etc/gnocchi/:ro
-                  - /var/lib/config-data/gnocchi/etc/httpd/conf/:/etc/httpd/conf/:ro
-                  - /var/lib/config-data/gnocchi/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                  - /var/lib/config-data/gnocchi/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
-                  - /var/lib/config-data/gnocchi/var/www/:/var/www/:ro
+                  - /var/lib/config-data/puppet-generated/gnocchi/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/gnocchi:/var/log/gnocchi
                   -
                     if:
index 3a05d57..e7ebb3c 100644 (file)
@@ -74,6 +74,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/gnocchi_metricd.json:
           command: /usr/bin/gnocchi-metricd
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/gnocchi
               owner: gnocchi:gnocchi
@@ -93,7 +98,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/gnocchi_metricd.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/gnocchi/etc/gnocchi/:/etc/gnocchi/:ro
+                  - /var/lib/config-data/puppet-generated/gnocchi/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/gnocchi:/var/log/gnocchi
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index c3523b5..e346182 100644 (file)
@@ -74,6 +74,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/gnocchi_statsd.json:
           command: /usr/bin/gnocchi-statsd
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/gnocchi
               owner: gnocchi:gnocchi
@@ -93,7 +98,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/gnocchi_statsd.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/gnocchi/etc/gnocchi/:/etc/gnocchi/:ro
+                  - /var/lib/config-data/puppet-generated/gnocchi/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/gnocchi:/var/log/gnocchi
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 242f075..c24e107 100644 (file)
@@ -42,6 +42,11 @@ parameters:
     default: /dev/log
     description: Syslog address where HAproxy will send its log
     type: string
+  DeployedSSLCertificatePath:
+    default: '/etc/pki/tls/private/overcloud_endpoint.pem'
+    description: >
+        The filepath of the certificate as it will be stored in the controller.
+    type: string
   RedisPassword:
     description: The password for Redis
     type: string
@@ -93,9 +98,20 @@ outputs:
           list_join:
             - '/'
             - [ {get_param: DockerNamespace}, {get_param: DockerHAProxyConfigImage} ]
+        volumes: &deployed_cert_mount
+          - list_join:
+            - ':'
+            - - {get_param: DeployedSSLCertificatePath}
+              - {get_param: DeployedSSLCertificatePath}
+              - 'ro'
       kolla_config:
         /var/lib/kolla/config_files/haproxy.json:
           command: haproxy -f /etc/haproxy/haproxy.cfg
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_1:
           haproxy:
@@ -109,9 +125,10 @@ outputs:
             volumes:
               list_concat:
                 - {get_attr: [ContainersCommon, volumes]}
+                - *deployed_cert_mount
                 -
                   - /var/lib/kolla/config_files/haproxy.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/haproxy/etc/:/etc/:ro
+                  - /var/lib/config-data/puppet-generated/haproxy/:/var/lib/kolla/config_files/src:ro
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
       metadata_settings:
index 1905281..8dee510 100644 (file)
@@ -85,6 +85,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/heat_api_cfn.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/heat
               owner: heat:heat
@@ -107,11 +112,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/heat_api_cfn.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/heat_api_cfn/etc/heat/:/etc/heat/:ro
-                  - /var/lib/config-data/heat_api_cfn/etc/httpd/conf/:/etc/httpd/conf/:ro
-                  - /var/lib/config-data/heat_api_cfn/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                  - /var/lib/config-data/heat_api_cfn/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
-                  - /var/lib/config-data/heat_api_cfn/var/www/:/var/www/:ro
+                  - /var/lib/config-data/puppet-generated/heat_api_cfn/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/heat:/var/log/heat
                   -
                     if:
index c0cec93..adaf999 100644 (file)
@@ -85,6 +85,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/heat_api.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/heat
               owner: heat:heat
@@ -107,11 +112,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/heat_api.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/heat_api/etc/heat/:/etc/heat/:ro
-                  - /var/lib/config-data/heat_api/etc/httpd/conf/:/etc/httpd/conf/:ro
-                  - /var/lib/config-data/heat_api/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                  - /var/lib/config-data/heat_api/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
-                  - /var/lib/config-data/heat_api/var/www/:/var/www/:ro
+                  - /var/lib/config-data/puppet-generated/heat_api/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/heat:/var/log/heat
                   -
                     if:
index 676dbb1..14e9027 100644 (file)
@@ -78,6 +78,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/heat_engine.json:
           command: /usr/bin/heat-engine --config-file /usr/share/heat/heat-dist.conf --config-file /etc/heat/heat.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/heat
               owner: heat:heat
@@ -119,7 +124,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/heat_engine.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/heat/etc/heat/:/etc/heat/:ro
+                  - /var/lib/config-data/puppet-generated/heat/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/heat:/var/log/heat
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 5797b20..c512327 100644 (file)
@@ -81,6 +81,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/horizon.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/horizon/
               owner: apache:apache
@@ -117,8 +122,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/horizon.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/horizon/etc/httpd:/etc/httpd:ro
-                  - /var/lib/config-data/horizon/etc/openstack-dashboard:/etc/openstack-dashboard:ro
+                  - /var/lib/config-data/puppet-generated/horizon/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/horizon:/var/log/horizon
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 183ed5c..d18221d 100644 (file)
@@ -12,9 +12,9 @@ parameters:
     description: image
     default: 'centos-binary-ironic-api:latest'
     type: string
-  DockerIronicConfigImage:
-    description: The container image to use for the ironic config_volume
-    default: 'centos-binary-ironic-pxe:latest'
+  DockerIronicApiConfigImage:
+    description: The container image to use for the ironic_api config_volume
+    default: 'centos-binary-ironic-api:latest'
     type: string
   EndpointMap:
     default: {}
@@ -67,16 +67,21 @@ outputs:
       service_config_settings: {get_attr: [IronicApiBase, role_data, service_config_settings]}
       # BEGIN DOCKER SETTINGS
       puppet_config:
-        config_volume: ironic
+        config_volume: ironic_api
         puppet_tags: ironic_config
         step_config: *step_config
         config_image:
           list_join:
             - '/'
-            - [ {get_param: DockerNamespace}, {get_param: DockerIronicConfigImage} ]
+            - [ {get_param: DockerNamespace}, {get_param: DockerIronicApiConfigImage} ]
       kolla_config:
         /var/lib/kolla/config_files/ironic_api.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/ironic
               owner: ironic:ironic
@@ -106,7 +111,7 @@ outputs:
               list_concat:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
-                  - /var/lib/config-data/ironic/etc/ironic:/etc/ironic:ro
+                  - /var/lib/config-data/ironic_api/etc/ironic:/etc/ironic:ro
                   - /var/log/containers/ironic:/var/log/ironic
             command: "/usr/bin/bootstrap_host_exec ironic_api su ironic -s /bin/bash -c 'ironic-dbsync --config-file /etc/ironic/ironic.conf'"
         step_4:
@@ -121,11 +126,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/ironic_api.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/ironic/etc/ironic:/etc/ironic:ro
-                  - /var/lib/config-data/ironic/etc/httpd/conf/:/etc/httpd/conf/:ro
-                  - /var/lib/config-data/ironic/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                  - /var/lib/config-data/ironic/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
-                  - /var/lib/config-data/ironic/var/www/:/var/www/:ro
+                  - /var/lib/config-data/puppet-generated/ironic_api/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/ironic:/var/log/ironic
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index f47a3e4..bf239b6 100644 (file)
@@ -84,6 +84,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/ironic_conductor.json:
           command: /usr/bin/ironic-conductor
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/lib/ironic
               owner: ironic:ironic
@@ -107,7 +112,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/ironic_conductor.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/ironic/etc/ironic/:/etc/ironic/:ro
+                  - /var/lib/config-data/puppet-generated/ironic/:/var/lib/kolla/config_files/src:ro
                   - /lib/modules:/lib/modules:ro
                   - /sys:/sys
                   - /dev:/dev
index f518b9d..a82a3af 100644 (file)
@@ -64,8 +64,18 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/ironic_pxe_http.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/ironic_pxe_tftp.json:
           command: /usr/sbin/in.tftpd --foreground --user root --address 0.0.0.0:69 --map-file /var/lib/ironic/tftpboot/map-file /var/lib/ironic/tftpboot
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/ironic
               owner: ironic:ironic
@@ -86,17 +96,8 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/ironic_pxe_tftp.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/ironic/etc/ironic/:/etc/ironic/:ro
-                  # TODO(mandre) check how docker like mounting in a bind-mounted tree
-                  # This directory may contain migrated data from BM
+                  - /var/lib/config-data/puppet-generated/ironic/:/var/lib/kolla/config_files/src:ro
                   - /var/lib/ironic:/var/lib/ironic/
-                  # These files were generated by puppet inside the config container
-                  # TODO(mandre) check the mount permission (ro/rw)
-                  - /var/lib/config-data/ironic/var/lib/ironic/tftpboot/chain.c32:/var/lib/ironic/tftpboot/chain.c32
-                  - /var/lib/config-data/ironic/var/lib/ironic/tftpboot/pxelinux.0:/var/lib/ironic/tftpboot/pxelinux.0
-                  - /var/lib/config-data/ironic/var/lib/ironic/tftpboot/ipxe.efi:/var/lib/ironic/tftpboot/ipxe.efi
-                  - /var/lib/config-data/ironic/var/lib/ironic/tftpboot/undionly.kpxe:/var/lib/ironic/tftpboot/undionly.kpxe
-                  - /var/lib/config-data/ironic/var/lib/ironic/tftpboot/map-file:/var/lib/ironic/tftpboot/map-file
                   - /dev/log:/dev/log
                   - /var/log/containers/ironic:/var/log/ironic
             environment:
@@ -112,11 +113,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/ironic_pxe_http.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/ironic/etc/ironic/:/etc/ironic/:ro
-                  - /var/lib/config-data/ironic/etc/httpd/conf/:/etc/httpd/conf/:ro
-                  - /var/lib/config-data/ironic/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                  - /var/lib/config-data/ironic/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
-                  - /var/lib/config-data/ironic/var/www/:/var/www/:ro
+                  - /var/lib/config-data/puppet-generated/ironic/:/var/lib/kolla/config_files/src:ro
                   - /var/lib/ironic:/var/lib/ironic/
                   - /var/log/containers/ironic:/var/log/ironic
             environment:
index 86f2d3b..c98a921 100644 (file)
@@ -100,6 +100,7 @@ outputs:
           when: stat_iscsid_socket.stat.exists
       upgrade_tasks:
         - name: stat /lib/systemd/system/iscsid.service
+          tags: step2
           stat: path=/lib/systemd/system/iscsid.service
           register: stat_iscsid_service
         - name: Stop and disable iscsid service
@@ -107,6 +108,7 @@ outputs:
           service: name=iscsid state=stopped enabled=no
           when: stat_iscsid_service.stat.exists
         - name: stat /lib/systemd/system/iscsid.socket
+          tags: step2
           stat: path=/lib/systemd/system/iscsid.socket
           register: stat_iscsid_socket
         - name: Stop and disable iscsid.socket service
index b6cfa21..a3f0861 100644 (file)
@@ -97,6 +97,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/keystone.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         # Kolla_bootstrap/db sync runs before permissions set by kolla_config
         step_2:
@@ -121,11 +126,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/keystone.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/keystone/var/www/:/var/www/:ro
-                  - /var/lib/config-data/keystone/etc/keystone/:/etc/keystone/:ro
-                  - /var/lib/config-data/keystone/etc/httpd/conf/:/etc/httpd/conf/:ro
-                  - /var/lib/config-data/keystone/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                  - /var/lib/config-data/keystone/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
+                  - /var/lib/config-data/puppet-generated/keystone/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/keystone:/var/log/keystone
                   -
                     if:
index 66dc6c3..f47743c 100644 (file)
@@ -72,6 +72,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/manila_api.json:
           command: /usr/bin/manila-api --config-file /usr/share/manila/manila-dist.conf --config-file /etc/manila/manila.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/manila
               owner: manila:manila
@@ -110,7 +115,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/manila_api.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/manila/etc/manila/:/etc/manila/:ro
+                  - /var/lib/config-data/puppet-generated/manila/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/manila:/var/log/manila
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index d4170e4..a319a03 100644 (file)
@@ -72,6 +72,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/manila_scheduler.json:
           command: /usr/bin/manila-scheduler --config-file /usr/share/manila/manila-dist.conf --config-file /etc/manila/manila.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/manila
               owner: manila:manila
@@ -90,7 +95,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/manila_scheduler.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/manila/etc/manila/:/etc/manila/:ro
+                  - /var/lib/config-data/puppet-generated/manila/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/manila:/var/log/manila
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
diff --git a/docker/services/manila-share.yaml b/docker/services/manila-share.yaml
new file mode 100644 (file)
index 0000000..227f28f
--- /dev/null
@@ -0,0 +1,118 @@
+heat_template_version: pike
+
+description: >
+  OpenStack containerized Manila Share service
+
+parameters:
+  DockerNamespace:
+    description: namespace
+    default: 'tripleoupstream'
+    type: string
+  DockerManilaShareImage:
+    description: image
+    default: 'centos-binary-manila-share:latest'
+    type: string
+  DockerManilaConfigImage:
+    description: image
+    default: 'centos-binary-manila-base:latest'
+    type: string
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    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
+
+resources:
+
+  ContainersCommon:
+    type: ./containers-common.yaml
+
+  ManilaBase:
+    type: ../../puppet/services/manila-share.yaml
+    properties:
+      EndpointMap: {get_param: EndpointMap}
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+      RoleName: {get_param: RoleName}
+      RoleParameters: {get_param: RoleParameters}
+
+outputs:
+  role_data:
+    description: Role data for the Manila Share role.
+    value:
+      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]
+      service_config_settings: {get_attr: [ManilaBase, role_data, service_config_settings]}
+      # BEGIN DOCKER SETTINGS
+      puppet_config:
+        config_volume: manila
+        puppet_tags: manila_config
+        step_config: *step_config
+        config_image:
+          list_join:
+            - '/'
+            - [ {get_param: DockerNamespace}, {get_param: DockerManilaConfigImage} ]
+      kolla_config:
+        /var/lib/kolla/config_files/manila_share.json:
+          command: /usr/bin/manila-share --config-file /usr/share/manila/manila-dist.conf --config-file /etc/manila/manila.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
+            # NOTE(gfidente): ceph-ansible generated
+            - source: "/var/lib/kolla/config_files/src-ceph/*"
+              dest: "/etc/ceph"
+              merge: true
+              preserve_properties: true
+          permissions:
+            - path: /var/log/manila
+              owner: manila:manila
+              recurse: true
+      docker_config:
+        step_4:
+          manila_share:
+            image: &manila_share_image
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerManilaShareImage} ]
+            net: host
+            restart: always
+            volumes:
+               list_concat:
+                 - {get_attr: [ContainersCommon, volumes]}
+                 -
+                   - /var/lib/kolla/config_files/manila_share.json:/var/lib/kolla/config_files/config.json:ro
+                   - /var/lib/config-data/puppet-generated/manila/:/var/lib/kolla/config_files/src:ro
+                   - /var/log/containers/manila:/var/log/manila
+                   - /etc/ceph/:/var/lib/kolla/config_files/src-ceph:ro
+            environment:
+              - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
+      host_prep_tasks:
+        - name: create persistent directories
+          file:
+            path: /var/log/containers/manila
+            state: directory
+      upgrade_tasks:
+        - name: Stop and disable manila_share service
+          tags: step2
+          service: name=openstack-manila-share state=stopped enabled=no
index 3d41c17..ef4a7ab 100644 (file)
@@ -100,8 +100,6 @@ outputs:
                   - /var/lib/config-data/memcached/etc/sysconfig/memcached:/etc/sysconfig/memcached:ro
             # TODO(bogdando) capture memcached syslog logs from a container
             command: ['/bin/bash', '-c', 'source /etc/sysconfig/memcached; /usr/bin/memcached -p ${PORT} -u ${USER} -m ${CACHESIZE} -c ${MAXCONN} $OPTIONS']
-            environment:
-              - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
       upgrade_tasks:
         - name: Stop and disable memcached service
           tags: step2
index f128428..4b2c102 100644 (file)
@@ -76,6 +76,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/mistral_api.json:
           command: /usr/bin/mistral-server --config-file=/etc/mistral/mistral.conf --log-file=/var/log/mistral/api.log --server=api
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/mistral
               owner: mistral:mistral
@@ -136,7 +141,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/mistral_api.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/mistral/etc/mistral/:/etc/mistral/:ro
+                  - /var/lib/config-data/puppet-generated/mistral/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/mistral:/var/log/mistral
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 712f4ba..8b8e32b 100644 (file)
@@ -77,6 +77,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/mistral_engine.json:
           command: /usr/bin/mistral-server --config-file=/etc/mistral/mistral.conf --log-file=/var/log/mistral/engine.log --server=engine
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/mistral
               owner: mistral:mistral
@@ -97,7 +102,7 @@ outputs:
                 -
                   - /run:/run
                   - /var/lib/kolla/config_files/mistral_engine.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/mistral/etc/mistral/:/etc/mistral/:ro
+                  - /var/lib/config-data/puppet-generated/mistral/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/mistral:/var/log/mistral
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 5a35ba9..9ae0721 100644 (file)
@@ -77,6 +77,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/mistral_executor.json:
           command: /usr/bin/mistral-server --config-file=/etc/mistral/mistral.conf --log-file=/var/log/mistral/executor.log --server=executor
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/mistral
               owner: mistral:mistral
@@ -96,7 +101,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/mistral_executor.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/mistral/etc/mistral/:/etc/mistral/:ro
+                  - /var/lib/config-data/puppet-generated/mistral/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   # FIXME: this is required in order for Nova cells
                   # initialization workflows on the Undercloud. Need to
index 2890dec..a2e5e17 100644 (file)
@@ -83,12 +83,22 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/neutron_api.json:
           command: /usr/bin/neutron-server --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin.ini --config-dir /etc/neutron/conf.d/common --config-dir /etc/neutron/conf.d/neutron-server
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/neutron
               owner: neutron:neutron
               recurse: true
         /var/lib/kolla/config_files/neutron_server_tls_proxy.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         # db sync runs before permissions set by kolla_config
         step_2:
@@ -132,7 +142,7 @@ outputs:
                     - {get_attr: [ContainersCommon, volumes]}
                     -
                       - /var/lib/kolla/config_files/neutron_api.json:/var/lib/kolla/config_files/config.json:ro
-                      - /var/lib/config-data/neutron/etc/neutron/:/etc/neutron/:ro
+                      - /var/lib/config-data/puppet-generated/neutron/:/var/lib/kolla/config_files/src:ro
                       - /var/log/containers/neutron:/var/log/neutron
                 environment:
                   - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
@@ -148,9 +158,7 @@ outputs:
                         - {get_attr: [ContainersCommon, volumes]}
                         -
                           - /var/lib/kolla/config_files/neutron_server_tls_proxy.json:/var/lib/kolla/config_files/config.json:ro
-                          - /var/lib/config-data/neutron/etc/httpd/conf/:/etc/httpd/conf/:ro
-                          - /var/lib/config-data/neutron/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                          - /var/lib/config-data/neutron/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
+                          - /var/lib/config-data/puppet-generated/neutron/:/var/lib/kolla/config_files/src:ro
                           - /etc/pki/tls/certs/httpd:/etc/pki/tls/certs/httpd:ro
                           - /etc/pki/tls/private/httpd:/etc/pki/tls/private/httpd:ro
                     environment:
index 460b2ee..93401b9 100644 (file)
@@ -76,6 +76,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/neutron_dhcp.json:
           command: /usr/bin/neutron-dhcp-agent --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/dhcp_agent.ini --log-file /var/log/neutron/dhcp-agent.log --config-dir /etc/neutron/conf.d/common --config-dir /etc/neutron/conf.d/neutron-dhcp-agent
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/neutron
               owner: neutron:neutron
@@ -96,7 +101,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/neutron_dhcp.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/neutron/etc/neutron/:/etc/neutron/:ro
+                  - /var/lib/config-data/puppet-generated/neutron/:/var/lib/kolla/config_files/src:ro
                   - /lib/modules:/lib/modules:ro
                   - /run/:/run
                   - /var/log/containers/neutron:/var/log/neutron
index b692f73..1db48b3 100644 (file)
@@ -72,6 +72,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/neutron_l3_agent.json:
           command: /usr/bin/neutron-l3-agent --config-file /usr/share/neutron/neutron-dist.conf --config-dir /usr/share/neutron/l3_agent --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/l3_agent.ini --config-dir /etc/neutron/conf.d/common --config-dir /etc/neutron/conf.d/neutron-l3-agent
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/neutron
               owner: neutron:neutron
@@ -92,7 +97,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/neutron_l3_agent.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/neutron/etc/neutron/:/etc/neutron/:ro
+                  - /var/lib/config-data/puppet-generated/neutron/:/var/lib/kolla/config_files/src:ro
                   - /lib/modules:/lib/modules:ro
                   - /run:/run
                   - /var/log/containers/neutron:/var/log/neutron
index 493b97b..d03ea9a 100644 (file)
@@ -72,6 +72,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/neutron_metadata_agent.json:
           command: /usr/bin/neutron-metadata-agent --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/metadata_agent.ini --config-dir /etc/neutron/conf.d/common --config-dir /etc/neutron/conf.d/neutron-metadata-agent
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/neutron
               owner: neutron:neutron
@@ -92,7 +97,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/neutron_metadata_agent.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/neutron/etc/neutron/:/etc/neutron/:ro
+                  - /var/lib/config-data/puppet-generated/neutron/:/var/lib/kolla/config_files/src:ro
                   - /lib/modules:/lib/modules:ro
                   - /run:/run
                   - /var/log/containers/neutron:/var/log/neutron
index 27919a3..de7115b 100644 (file)
@@ -72,6 +72,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/neutron_ovs_agent.json:
           command: /usr/bin/neutron-openvswitch-agent --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/openvswitch_agent.ini --config-file /etc/neutron/plugins/ml2/ml2_conf.ini --config-dir /etc/neutron/conf.d/common
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/neutron
               owner: neutron:neutron
@@ -92,7 +97,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/neutron_ovs_agent.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/neutron/etc/neutron/:/etc/neutron/:ro
+                  - /var/lib/config-data/puppet-generated/neutron/:/var/lib/kolla/config_files/src:ro
                   - /lib/modules:/lib/modules:ro
                   - /run:/run
                   - /var/log/containers/neutron:/var/log/neutron
index 7211014..aa62bde 100644 (file)
@@ -38,7 +38,7 @@ parameters:
 resources:
 
   NeutronBase:
-    type: ../../puppet/services/neutron-plugin-ml2.yaml
+    type: OS::TripleO::Docker::NeutronMl2PluginBase
     properties:
       EndpointMap: {get_param: EndpointMap}
       ServiceNetMap: {get_param: ServiceNetMap}
@@ -60,7 +60,7 @@ outputs:
       # BEGIN DOCKER SETTINGS
       puppet_config:
         config_volume: 'neutron'
-        puppet_tags: ''
+        puppet_tags: neutron_plugin_ml2
         step_config: *step_config
         config_image:
           list_join:
index 5d410fb..9282c93 100644 (file)
@@ -83,6 +83,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/nova_api.json:
           command: /usr/bin/nova-api
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/nova
               owner: nova:nova
@@ -107,11 +112,10 @@ outputs:
             net: host
             detach: false
             user: root
-            volumes: &nova_api_volumes
+            volumes: &nova_api_bootstrap_volumes
               list_concat:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
-                  - /var/lib/kolla/config_files/nova_api.json:/var/lib/kolla/config_files/config.json:ro
                   - /var/lib/config-data/nova/etc/nova/:/etc/nova/:ro
                   - /var/log/containers/nova:/var/log/nova
             command: "/usr/bin/bootstrap_host_exec nova_api su nova -s /bin/bash -c '/usr/bin/nova-manage api_db sync'"
@@ -124,14 +128,14 @@ outputs:
             net: host
             detach: false
             user: root
-            volumes: *nova_api_volumes
+            volumes: *nova_api_bootstrap_volumes
             command: "/usr/bin/bootstrap_host_exec nova_api su nova -s /bin/bash -c '/usr/bin/nova-manage cell_v2 map_cell0'"
           nova_api_create_default_cell:
             start_order: 2
             image: *nova_api_image
             net: host
             detach: false
-            volumes: *nova_api_volumes
+            volumes: *nova_api_bootstrap_volumes
             # NOTE: allowing the exit code 2 is a dirty way of making
             # this idempotent (if the resource already exists a conflict
             # is raised)
@@ -143,7 +147,7 @@ outputs:
             image: *nova_api_image
             net: host
             detach: false
-            volumes: *nova_api_volumes
+            volumes: *nova_api_bootstrap_volumes
             user: root
             command: "/usr/bin/bootstrap_host_exec nova_api su nova -s /bin/bash -c '/usr/bin/nova-manage db sync'"
         step_4:
@@ -154,16 +158,32 @@ outputs:
             user: nova
             privileged: true
             restart: always
+            volumes: &nova_api_volumes
+              list_concat:
+                - {get_attr: [ContainersCommon, volumes]}
+                -
+                  - /var/lib/kolla/config_files/nova_api.json:/var/lib/kolla/config_files/config.json:ro
+                  - /var/lib/config-data/puppet-generated/nova/:/var/lib/kolla/config_files/src:ro
+                  - /var/log/containers/nova:/var/log/nova
+            environment:
+              - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
+          nova_api_cron:
+            image: *nova_api_image
+            net: host
+            user: root
+            privileged: true
+            restart: always
             volumes: *nova_api_volumes
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
+            command: "/usr/sbin/crond -n"
         step_5:
           nova_api_discover_hosts:
             start_order: 1
             image: *nova_api_image
             net: host
             detach: false
-            volumes: *nova_api_volumes
+            volumes: *nova_api_bootstrap_volumes
             user: root
             command: "/usr/bin/bootstrap_host_exec nova_api su nova -s /bin/bash -c '/usr/bin/nova-manage cell_v2 discover_hosts'"
       host_prep_tasks:
index 1277a8f..101934f 100644 (file)
@@ -80,6 +80,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/nova_compute.json:
           command: /usr/bin/nova-compute --config-file /etc/nova/nova.conf --config-file /etc/nova/rootwrap.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/nova
               owner: nova:nova
@@ -104,7 +109,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/nova_compute.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/nova_libvirt/etc/nova/:/etc/nova/:ro
+                  - /var/lib/config-data/puppet-generated/nova_libvirt/:/var/lib/kolla/config_files/src:ro
                   - /dev:/dev
                   - /etc/iscsi:/etc/iscsi
                   - /lib/modules:/lib/modules:ro
index 266180c..35c361f 100644 (file)
@@ -75,6 +75,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/nova_conductor.json:
           command: /usr/bin/nova-conductor
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/nova
               owner: nova:nova
@@ -94,7 +99,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/nova_conductor.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/nova/etc/nova/:/etc/nova/:ro
+                  - /var/lib/config-data/puppet-generated/nova/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/nova:/var/log/nova
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index d836797..0939bba 100644 (file)
@@ -74,6 +74,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/nova_consoleauth.json:
           command: /usr/bin/nova-consoleauth
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/nova
               owner: nova:nova
@@ -93,7 +98,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/nova_consoleauth.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/nova/etc/nova/:/etc/nova/:ro
+                  - /var/lib/config-data/puppet-generated/nova/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/nova:/var/log/nova
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 8f98839..294293f 100644 (file)
@@ -72,6 +72,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/nova_ironic.json:
           command: /usr/bin/nova-compute --config-file /etc/nova/nova.conf --config-file /etc/nova/rootwrap.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/nova
               owner: nova:nova
@@ -95,7 +100,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/nova_ironic.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/nova/etc/nova/:/etc/nova/:ro
+                  - /var/lib/config-data/puppet-generated/nova/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /dev:/dev
                   - /etc/iscsi:/etc/iscsi
index f1a48cf..d5d8018 100644 (file)
@@ -110,6 +110,11 @@ outputs:
               - use_tls_for_live_migration
               - /usr/sbin/libvirtd --listen --config /etc/libvirt/libvirtd.conf
               - /usr/sbin/libvirtd --config /etc/libvirt/libvirtd.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/nova
               owner: nova:nova
@@ -130,7 +135,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/nova_libvirt.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/nova_libvirt/etc/libvirt/:/etc/libvirt/:ro
+                  - /var/lib/config-data/puppet-generated/nova_libvirt/:/var/lib/kolla/config_files/src:ro
                   - /lib/modules:/lib/modules:ro
                   - /dev:/dev
                   - /run:/run
index 251bbaa..464dfe7 100644 (file)
@@ -77,6 +77,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/nova_placement.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/nova
               owner: nova:nova
@@ -98,11 +103,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/nova_placement.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/nova_placement/etc/nova/:/etc/nova/:ro
-                  - /var/lib/config-data/nova_placement/etc/httpd/conf/:/etc/httpd/conf/:ro
-                  - /var/lib/config-data/nova_placement/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                  - /var/lib/config-data/nova_placement/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
-                  - /var/lib/config-data/nova_placement/var/www/:/var/www/:ro
+                  - /var/lib/config-data/puppet-generated/nova_placement/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/nova:/var/log/nova
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index fbb3abc..a2b2734 100644 (file)
@@ -74,6 +74,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/nova_scheduler.json:
           command: /usr/bin/nova-scheduler
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/nova
               owner: nova:nova
@@ -93,7 +98,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/nova_scheduler.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/nova/etc/nova/:/etc/nova/:ro
+                  - /var/lib/config-data/puppet-generated/nova/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /var/log/containers/nova:/var/log/nova
             environment:
index c2b9c3b..35e6949 100644 (file)
@@ -74,6 +74,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/nova_vnc_proxy.json:
           command: /usr/bin/nova-novncproxy --web /usr/share/novnc/
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/nova
               owner: nova:nova
@@ -93,7 +98,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/nova_vnc_proxy.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/nova/etc/nova/:/etc/nova/:ro
+                  - /var/lib/config-data/puppet-generated/nova/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/nova:/var/log/nova
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 728162f..075e491 100644 (file)
@@ -82,8 +82,18 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/octavia_api.json:
           command: /usr/bin/octavia-api --config-file /usr/share/octavia/octavia-dist.conf --config-file /etc/octavia/octavia.conf --log-file /var/log/octavia/api.log --config-dir /etc/octavia/conf.d/common --config-dir /etc/octavia/conf.d/octavia-api
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/octavia_api_tls_proxy.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         # Kolla_bootstrap/db_sync runs before permissions set by kolla_config
         step_2:
@@ -95,7 +105,12 @@ outputs:
                 - [ {get_param: DockerNamespace}, {get_param: DockerOctaviaApiImage} ]
             user: root
             volumes:
-              - /var/lib/config-data/octavia/etc/octavia:/etc/octavia/
+              # NOTE(mandre) we need extra dir for the service in /etc/octavia/conf.d
+              # It is normally created as part of the RPM install, but it is
+              # missing here because we use the same config_volume for all
+              # octavia services, hence the same container image to generate
+              # configuration.
+              - /var/lib/config-data/puppet-generated/octavia/etc/octavia:/etc/octavia/
               - /var/log/containers/octavia:/var/log/octavia
             command: ['/bin/bash', '-c', 'mkdir -p /etc/octavia/conf.d/octavia-api; chown -R octavia:octavia /etc/octavia/conf.d/octavia-api; chown -R octavia:octavia /var/log/octavia']
         step_3:
@@ -106,11 +121,10 @@ outputs:
             privileged: false
             detach: false
             user: root
-            volumes: &octavia_volumes
+            volumes:
               list_concat:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
-                  - /var/lib/kolla/config_files/octavia_api.json:/var/lib/kolla/config_files/config.json:ro
                   - /var/lib/config-data/octavia/etc/octavia/:/etc/octavia/:ro
                   - /var/log/containers/octavia:/var/log/octavia
             command: "/usr/bin/bootstrap_host_exec octavia_api su octavia -s /bin/bash -c '/usr/bin/octavia-db-manage upgrade head'"
@@ -122,7 +136,13 @@ outputs:
                 net: host
                 privileged: false
                 restart: always
-                volumes: *octavia_volumes
+                volumes:
+                  list_concat:
+                    - {get_attr: [ContainersCommon, volumes]}
+                    -
+                      - /var/lib/kolla/config_files/octavia_api.json:/var/lib/kolla/config_files/config.json:ro
+                      - /var/lib/config-data/puppet-generated/octavia/:/var/lib/kolla/config_files/src:ro
+                      - /var/log/containers/octavia:/var/log/octavia
                 environment:
                   - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
             - if:
@@ -138,7 +158,7 @@ outputs:
                         - {get_attr: [ContainersCommon, volumes]}
                         -
                           - /var/lib/kolla/config_files/octavia_api_tls_proxy.json:/var/lib/kolla/config_files/config.json:ro
-                          - /var/lib/config-data/octavia/etc/httpd/:/etc/httpd/:ro
+                          - /var/lib/config-data/puppet-generated/octavia/:/var/lib/kolla/config_files/src:ro
                           - /etc/pki/tls/certs/httpd:/etc/pki/tls/certs/httpd:ro
                           - /etc/pki/tls/private/httpd:/etc/pki/tls/private/httpd:ro
                     environment:
index 2228e36..0e49329 100644 (file)
@@ -75,6 +75,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/octavia_health_manager.json:
           command: /usr/bin/octavia-health-manager --config-file /usr/share/octavia/octavia-dist.conf --config-file /etc/octavia/octavia.conf --log-file /var/log/octavia/health-manager.log --config-dir /etc/octavia/conf.d/common --config-dir /etc/octavia/conf.d/octavia-health-manager
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_2:
           octavia_health_manager_init_dirs:
@@ -85,7 +90,12 @@ outputs:
                 - [ {get_param: DockerNamespace}, {get_param: DockerOctaviaHealthManagerImage} ]
             user: root
             volumes:
-              - /var/lib/config-data/octavia/etc/octavia:/etc/octavia/
+              # NOTE(mandre) we need extra dir for the service in /etc/octavia/conf.d
+              # It is normally created as part of the RPM install, but it is
+              # missing here because we use the same config_volume for all
+              # octavia services, hence the same container image to generate
+              # configuration.
+              - /var/lib/config-data/puppet-generated/octavia/etc/octavia:/etc/octavia/
             command: ['/bin/bash', '-c', 'mkdir -p /etc/octavia/conf.d/octavia-health-manager; chown -R octavia:octavia /etc/octavia/conf.d/octavia-health-manager']
         step_4:
           octavia_health_manager:
@@ -99,7 +109,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/octavia_health_manager.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/octavia/etc/octavia/:/etc/octavia/:ro
+                  - /var/lib/config-data/puppet-generated/octavia/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/octavia:/var/log/octavia
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index c2986c6..be2c445 100644 (file)
@@ -75,6 +75,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/octavia_housekeeping.json:
           command: /usr/bin/octavia-housekeeping --config-file /usr/share/octavia/octavia-dist.conf --config-file /etc/octavia/octavia.conf --log-file /var/log/octavia/housekeeping.log --config-dir /etc/octavia/conf.d/common --config-dir /etc/octavia/conf.d/octavia-housekeeping
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_2:
           octavia_housekeeping_init_dirs:
@@ -85,7 +90,12 @@ outputs:
                 - [ {get_param: DockerNamespace}, {get_param: DockerOctaviaHousekeepingImage} ]
             user: root
             volumes:
-              - /var/lib/config-data/octavia/etc/octavia:/etc/octavia/
+              # NOTE(mandre) we need extra dir for the service in /etc/octavia/conf.d
+              # It is normally created as part of the RPM install, but it is
+              # missing here because we use the same config_volume for all
+              # octavia services, hence the same container image to generate
+              # configuration.
+              - /var/lib/config-data/puppet-generated/octavia/etc/octavia:/etc/octavia/
             command: ['/bin/bash', '-c', 'mkdir -p /etc/octavia/conf.d/octavia-housekeeping; chown -R octavia:octavia /etc/octavia/conf.d/octavia-housekeeping']
         step_4:
           octavia_housekeeping:
@@ -99,7 +109,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/octavia_housekeeping.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/octavia/etc/octavia/:/etc/octavia/:ro
+                  - /var/lib/config-data/puppet-generated/octavia/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/octavia:/var/log/octavia
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 4129512..9becb25 100644 (file)
@@ -75,6 +75,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/octavia_worker.json:
           command: /usr/bin/octavia-worker --config-file /usr/share/octavia/octavia-dist.conf --config-file /etc/octavia/octavia.conf --log-file /var/log/octavia/worker.log --config-dir /etc/octavia/conf.d/common --config-dir /etc/octavia/conf.d/octavia-worker
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_2:
           octavia_worker_init_dirs:
@@ -85,7 +90,12 @@ outputs:
                 - [ {get_param: DockerNamespace}, {get_param: DockerOctaviaWorkerImage} ]
             user: root
             volumes:
-              - /var/lib/config-data/octavia/etc/octavia:/etc/octavia/
+              # NOTE(mandre) we need extra dir for the service in /etc/octavia/conf.d
+              # It is normally created as part of the RPM install, but it is
+              # missing here because we use the same config_volume for all
+              # octavia services, hence the same container image to generate
+              # configuration.
+              - /var/lib/config-data/puppet-generated/octavia/etc/octavia:/etc/octavia/
             command: ['/bin/bash', '-c', 'mkdir -p /etc/octavia/conf.d/octavia-worker; chown -R octavia:octavia /etc/octavia/conf.d/octavia-worker']
         step_4:
           octavia_worker:
@@ -99,7 +109,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/octavia_worker.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/octavia/etc/octavia/:/etc/octavia/:ro
+                  - /var/lib/config-data/puppet-generated/octavia/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/octavia:/var/log/octavia
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
diff --git a/docker/services/opendaylight-api.yaml b/docker/services/opendaylight-api.yaml
new file mode 100644 (file)
index 0000000..5610d1b
--- /dev/null
@@ -0,0 +1,116 @@
+heat_template_version: pike
+
+description: >
+  OpenStack containerized OpenDaylight API service
+
+parameters:
+  DockerNamespace:
+    description: namespace
+    default: 'tripleoupstream'
+    type: string
+  DockerOpendaylightApiImage:
+    description: image
+    default: 'centos-binary-opendaylight:latest'
+    type: string
+  DockerOpendaylightConfigImage:
+    description: image
+    default: 'centos-binary-opendaylight:latest'
+    type: string
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    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
+
+resources:
+
+  ContainersCommon:
+    type: ./containers-common.yaml
+
+  OpenDaylightBase:
+    type: ../../puppet/services/opendaylight-api.yaml
+    properties:
+      EndpointMap: {get_param: EndpointMap}
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+      RoleName: {get_param: RoleName}
+      RoleParameters: {get_param: RoleParameters}
+
+outputs:
+  role_data:
+    description: Role data for the OpenDaylight API role.
+    value:
+      service_name: {get_attr: [OpenDaylightBase, role_data, service_name]}
+      config_settings:
+        map_merge:
+          - get_attr: [OpenDaylightBase, role_data, config_settings]
+      step_config: &step_config
+        list_join:
+          - "\n"
+          - - get_attr: [OpenDaylightBase, role_data, step_config]
+            - "include tripleo::profile::base::neutron::opendaylight::create_cluster"
+      # BEGIN DOCKER SETTINGS
+      puppet_config:
+        config_volume: opendaylight
+        # 'file,concat,file_line,augeas' are included by default
+        puppet_tags: odl_user,tripleo::profile::base::neutron::opendaylight::configure_cluster
+        step_config: *step_config
+        config_image:
+          list_join:
+            - '/'
+            - [ {get_param: DockerNamespace}, {get_param: DockerOpendaylightConfigImage} ]
+      kolla_config:
+        /var/lib/kolla/config_files/opendaylight_api.json:
+          command: /opt/opendaylight/bin/karaf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
+          permissions:
+            - path: /opt/opendaylight
+              owner: odl:odl
+              recurse: true
+      docker_config:
+        step_1:
+          opendaylight_api:
+            start_order: 0
+            image: &odl_api_image
+              list_join:
+                - '/'
+                - [ {get_param: DockerNamespace}, {get_param: DockerOpendaylightApiImage} ]
+            privileged: false
+            net: host
+            detach: true
+            user: odl
+            restart: always
+            volumes:
+              list_concat:
+                - {get_attr: [ContainersCommon, volumes]}
+                -
+                  - /var/lib/kolla/config_files/opendaylight_api.json:/var/lib/kolla/config_files/config.json:ro
+                  - /var/lib/config-data/puppet-generated/opendaylight/:/var/lib/kolla/config_files/src:ro
+            environment:
+              - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
+
+      upgrade_tasks:
+        - name: Stop and disable opendaylight_api service
+          tags: step2
+          service: name=opendaylight state=stopped enabled=no
index 9fd9402..007aa9c 100644 (file)
@@ -75,18 +75,10 @@ outputs:
         /var/lib/kolla/config_files/clustercheck.json:
           command: /usr/sbin/xinetd -dontfork
           config_files:
-          - dest: /etc/xinetd.conf
-            source: /var/lib/kolla/config_files/src/etc/xinetd.conf
-            owner: mysql
-            perm: '0644'
-          - dest: /etc/xinetd.d/galera-monitor
-            source: /var/lib/kolla/config_files/src/etc/xinetd.d/galera-monitor
-            owner: mysql
-            perm: '0644'
-          - dest: /etc/sysconfig/clustercheck
-            source: /var/lib/kolla/config_files/src/etc/sysconfig/clustercheck
-            owner: mysql
-            perm: '0600'
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_2:
           clustercheck:
@@ -102,7 +94,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/clustercheck.json:/var/lib/kolla/config_files/config.json
-                  - /var/lib/config-data/clustercheck/:/var/lib/kolla/config_files/src:ro
+                  - /var/lib/config-data/puppet-generated/clustercheck/:/var/lib/kolla/config_files/src:ro
                   - /var/lib/mysql:/var/lib/mysql
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index fb1400f..3d996f7 100644 (file)
@@ -89,22 +89,14 @@ outputs:
         /var/lib/kolla/config_files/mysql.json:
           command: /usr/sbin/pacemaker_remoted
           config_files:
-          - dest: /etc/libqb/force-filesystem-sockets
-            source: /dev/null
-            owner: root
-            perm: '0644'
-          - dest: /etc/my.cnf
-            source: /var/lib/kolla/config_files/src/etc/my.cnf
-            owner: mysql
-            perm: '0644'
-          - dest: /etc/my.cnf.d/galera.cnf
-            source: /var/lib/kolla/config_files/src/etc/my.cnf.d/galera.cnf
-            owner: mysql
-            perm: '0644'
-          - dest: /etc/sysconfig/clustercheck
-            source: /var/lib/kolla/config_files/src/etc/sysconfig/clustercheck
-            owner: root
-            perm: '0600'
+            - dest: /etc/libqb/force-filesystem-sockets
+              source: /dev/null
+              owner: root
+              perm: '0644'
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_1:
           mysql_data_ownership:
@@ -129,7 +121,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/mysql.json:/var/lib/kolla/config_files/config.json
-                  - /var/lib/config-data/mysql/:/var/lib/kolla/config_files/src:ro
+                  - /var/lib/config-data/puppet-generated/mysql/:/var/lib/kolla/config_files/src:ro
                   - /var/lib/mysql:/var/lib/mysql
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
@@ -173,8 +165,6 @@ outputs:
               - /usr/share/openstack-puppet/modules:/usr/share/openstack-puppet/modules:ro
               - /etc/corosync/corosync.conf:/etc/corosync/corosync.conf:ro
               - /dev/shm:/dev/shm:rw
-              - /var/lib/config-data/mysql/etc/my.cnf:/etc/my.cnf:ro
-              - /var/lib/config-data/mysql/etc/my.cnf.d:/etc/my.cnf.d:ro
               - /var/lib/mysql:/var/lib/mysql:rw
       host_prep_tasks:
         - name: create /var/lib/mysql
index 2ff15fe..ff6de15 100644 (file)
@@ -90,6 +90,11 @@ outputs:
               source: /dev/null
               owner: root
               perm: '0644'
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
+              optional: true
           permissions:
             - path: /var/run/redis
               owner: redis:redis
index 704ffab..1b104a2 100644 (file)
@@ -30,6 +30,11 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  DeployedSSLCertificatePath:
+    default: '/etc/pki/tls/private/overcloud_endpoint.pem'
+    description: >
+        The filepath of the certificate as it will be stored in the controller.
+    type: string
   RoleName:
     default: ''
     description: Role name on which the service is applied
@@ -81,9 +86,21 @@ outputs:
           list_join:
             - '/'
             - [ {get_param: DockerNamespace}, {get_param: DockerHAProxyConfigImage} ]
+        volumes: &deployed_cert_mount
+          - list_join:
+            - ':'
+            - - {get_param: DeployedSSLCertificatePath}
+              - {get_param: DeployedSSLCertificatePath}
+              - 'ro'
       kolla_config:
         /var/lib/kolla/config_files/haproxy.json:
           command: haproxy -f /etc/haproxy/haproxy.cfg
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
+              optional: true
       docker_config:
         step_2:
           haproxy_init_bundle:
@@ -110,17 +127,20 @@ outputs:
                           - 'include ::tripleo::profile::pacemaker::haproxy_bundle'
             image: *haproxy_image
             volumes:
-              # puppet saves iptables rules in /etc/sysconfig
-              - /etc/sysconfig:/etc/sysconfig:rw
-              # saving rules require accessing /usr/libexec/iptables/iptables.init, just bind-mount
-              # the necessary bit and prevent systemd to try to reload the service in the container
-              - /usr/libexec/iptables:/usr/libexec/iptables:ro
-              - /usr/libexec/initscripts/legacy-actions:/usr/libexec/initscripts/legacy-actions:ro
-              - /etc/hosts:/etc/hosts:ro
-              - /etc/localtime:/etc/localtime:ro
-              - /etc/puppet:/tmp/puppet-etc:ro
-              - /usr/share/openstack-puppet/modules:/usr/share/openstack-puppet/modules:ro
-              - /etc/corosync/corosync.conf:/etc/corosync/corosync.conf:ro
-              - /dev/shm:/dev/shm:rw
+              list_concat:
+                - *deployed_cert_mount
+                -
+                  # puppet saves iptables rules in /etc/sysconfig
+                  - /etc/sysconfig:/etc/sysconfig:rw
+                  # saving rules require accessing /usr/libexec/iptables/iptables.init, just bind-mount
+                  # the necessary bit and prevent systemd to try to reload the service in the container
+                  - /usr/libexec/iptables:/usr/libexec/iptables:ro
+                  - /usr/libexec/initscripts/legacy-actions:/usr/libexec/initscripts/legacy-actions:ro
+                  - /etc/hosts:/etc/hosts:ro
+                  - /etc/localtime:/etc/localtime:ro
+                  - /etc/puppet:/tmp/puppet-etc:ro
+                  - /usr/share/openstack-puppet/modules:/usr/share/openstack-puppet/modules:ro
+                  - /etc/corosync/corosync.conf:/etc/corosync/corosync.conf:ro
+                  - /dev/shm:/dev/shm:rw
       metadata_settings:
         get_attr: [HAProxyBase, role_data, metadata_settings]
index ab1a612..b8ff6bf 100644 (file)
@@ -88,6 +88,10 @@ outputs:
             source: /dev/null
             owner: root
             perm: '0644'
+          - source: "/var/lib/kolla/config_files/src/*"
+            dest: "/"
+            merge: true
+            preserve_properties: true
           permissions:
            - path: /var/lib/rabbitmq
              owner: rabbitmq:rabbitmq
@@ -106,7 +110,7 @@ outputs:
             privileged: false
             volumes:
               - /var/lib/kolla/config_files/rabbitmq.json:/var/lib/kolla/config_files/config.json:ro
-              - /var/lib/config-data/rabbitmq/etc/rabbitmq:/etc/rabbitmq:ro
+              - /var/lib/config-data/puppet-generated/rabbitmq/:/var/lib/kolla/config_files/src:ro
               - /etc/hosts:/etc/hosts:ro
               - /etc/localtime:/etc/localtime:ro
               - /var/lib/rabbitmq:/var/lib/rabbitmq
index 0f55606..fa1a707 100644 (file)
@@ -86,6 +86,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/panko_api.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/panko
               owner: panko:panko
@@ -127,11 +132,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/panko_api.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/panko/etc/panko/:/etc/panko/:ro
-                  - /var/lib/config-data/panko/etc/httpd/conf/:/etc/httpd/conf/:ro
-                  - /var/lib/config-data/panko/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                  - /var/lib/config-data/panko/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
-                  - /var/lib/config-data/panko/var/www/:/var/www/:ro
+                  - /var/lib/config-data/puppet-generated/panko/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/panko:/var/log/panko
                   -
                     if:
index f42f2ed..dd7c26a 100644 (file)
@@ -84,6 +84,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/rabbitmq.json:
           command: /usr/lib/rabbitmq/bin/rabbitmq-server
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/lib/rabbitmq
               owner: rabbitmq:rabbitmq
@@ -114,7 +119,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/rabbitmq.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/rabbitmq/etc/rabbitmq/:/etc/rabbitmq/:ro
+                  - /var/lib/config-data/puppet-generated/rabbitmq/:/var/lib/kolla/config_files/src:ro
                   - /var/lib/rabbitmq:/var/lib/rabbitmq
                   - /var/log/containers/rabbitmq:/var/log/rabbitmq
             environment:
@@ -142,7 +147,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/rabbitmq.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/rabbitmq/etc/rabbitmq/:/etc/rabbitmq/:ro
+                  - /var/lib/config-data/puppet-generated/rabbitmq/:/var/lib/kolla/config_files/src:ro
                   - /var/lib/rabbitmq:/var/lib/rabbitmq
                   - /var/log/containers/rabbitmq:/var/log/rabbitmq
             environment:
index 32d6458..8d10165 100644 (file)
@@ -75,6 +75,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/sahara-api.json:
           command: /usr/bin/sahara-api --config-file /etc/sahara/sahara.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/lib/sahara
               owner: sahara:sahara
@@ -93,11 +98,10 @@ outputs:
             privileged: false
             detach: false
             user: root
-            volumes: &sahara_volumes
+            volumes:
               list_concat:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
-                  - /var/lib/kolla/config_files/sahara-api.json:/var/lib/kolla/config_files/config.json
                   - /var/lib/config-data/sahara/etc/sahara/:/etc/sahara/:ro
                   - /lib/modules:/lib/modules:ro
                   - /var/lib/sahara:/var/lib/sahara
@@ -109,7 +113,15 @@ outputs:
             net: host
             privileged: false
             restart: always
-            volumes: *sahara_volumes
+            volumes:
+              list_concat:
+                - {get_attr: [ContainersCommon, volumes]}
+                -
+                  - /var/lib/kolla/config_files/sahara-api.json:/var/lib/kolla/config_files/config.json
+                  - /var/lib/config-data/puppet-generated/sahara/:/var/lib/kolla/config_files/src:ro
+                  - /lib/modules:/lib/modules:ro
+                  - /var/lib/sahara:/var/lib/sahara
+                  - /var/log/containers/sahara:/var/log/sahara
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
       host_prep_tasks:
index 99a51c9..1b11ab7 100644 (file)
@@ -75,6 +75,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/sahara-engine.json:
           command: /usr/bin/sahara-engine --config-file /etc/sahara/sahara.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/lib/sahara
               owner: sahara:sahara
@@ -92,12 +97,12 @@ outputs:
             net: host
             privileged: false
             restart: always
-            volumes: &sahara_volumes
+            volumes:
               list_concat:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/sahara-engine.json:/var/lib/kolla/config_files/config.json
-                  - /var/lib/config-data/sahara/etc/sahara/:/etc/sahara/:ro
+                  - /var/lib/config-data/puppet-generated/sahara/:/var/lib/kolla/config_files/src:ro
                   - /var/lib/sahara:/var/lib/sahara
                   - /var/log/containers/sahara:/var/log/sahara
             environment:
index 42b0c57..1d1eae3 100644 (file)
@@ -109,6 +109,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/sensu-client.json:
           command: /usr/bin/sensu-client -d /etc/sensu/conf.d/ -l /var/log/sensu/sensu-client.log
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/sensu
               owner: sensu:sensu
@@ -133,7 +138,7 @@ outputs:
                 -
                   - /var/run/docker.sock:/var/run/docker.sock:rw
                   - /var/lib/kolla/config_files/sensu-client.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/sensu/etc/sensu/:/etc/sensu/:ro
+                  - /var/lib/config-data/puppet-generated/sensu/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/sensu:/var/log/sensu:rw
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index d7a7fe4..7753896 100644 (file)
@@ -81,12 +81,22 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/swift_proxy.json:
           command: /usr/bin/swift-proxy-server /etc/swift/proxy-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/swift
               owner: swift:swift
               recurse: true
         /var/lib/kolla/config_files/swift_proxy_tls_proxy.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_4:
           map_merge:
@@ -103,9 +113,7 @@ outputs:
                     - {get_attr: [ContainersCommon, volumes]}
                     -
                       - /var/lib/kolla/config_files/swift_proxy.json:/var/lib/kolla/config_files/config.json:ro
-                      # FIXME I'm mounting /etc/swift as rw.  Are the rings written to
-                      # at all during runtime?
-                      - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                      - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                       - /run:/run
                       - /srv/node:/srv/node
                       - /dev:/dev
@@ -124,9 +132,7 @@ outputs:
                         - {get_attr: [ContainersCommon, volumes]}
                         -
                           - /var/lib/kolla/config_files/swift_proxy_tls_proxy.json:/var/lib/kolla/config_files/config.json:ro
-                          - /var/lib/config-data/swift/etc/httpd/conf/:/etc/httpd/conf/:ro
-                          - /var/lib/config-data/swift/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                          - /var/lib/config-data/swift/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
+                          - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                           - /etc/pki/tls/certs/httpd:/etc/pki/tls/certs/httpd:ro
                           - /etc/pki/tls/private/httpd:/etc/pki/tls/private/httpd:ro
                     environment:
index f2b8c47..a07c92a 100644 (file)
@@ -95,36 +95,106 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/swift_account_auditor.json:
           command: /usr/bin/swift-account-auditor /etc/swift/account-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_account_reaper.json:
           command: /usr/bin/swift-account-reaper /etc/swift/account-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_account_replicator.json:
           command: /usr/bin/swift-account-replicator /etc/swift/account-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_account_server.json:
           command: /usr/bin/swift-account-server /etc/swift/account-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_container_auditor.json:
           command: /usr/bin/swift-container-auditor /etc/swift/container-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_container_replicator.json:
           command: /usr/bin/swift-container-replicator /etc/swift/container-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_container_updater.json:
           command: /usr/bin/swift-container-updater /etc/swift/container-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_container_server.json:
           command: /usr/bin/swift-container-server /etc/swift/container-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_object_auditor.json:
           command: /usr/bin/swift-object-auditor /etc/swift/object-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_object_expirer.json:
           command: /usr/bin/swift-object-expirer /etc/swift/object-expirer.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_object_replicator.json:
           command: /usr/bin/swift-object-replicator /etc/swift/object-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_object_updater.json:
           command: /usr/bin/swift-object-updater /etc/swift/object-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/swift_object_server.json:
           command: /usr/bin/swift-object-server /etc/swift/object-server.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/swift
               owner: swift:swift
               recurse: true
-        /var/lib/kolla/config_files/swift_xinetd_rsync.json:
-          command: /usr/sbin/xinetd -dontfork
+        /var/lib/kolla/config_files/swift_rsync.json:
+          command: /usr/bin/rsync --daemon --no-detach --config=/etc/rsyncd.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
       docker_config:
         step_3:
           # The puppet config sets this up but we don't have a way to mount the named
@@ -150,7 +220,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_account_auditor.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -167,7 +237,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_account_reaper.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -183,7 +253,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_account_replicator.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -199,7 +269,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_account_server.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -218,7 +288,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_container_auditor.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -234,7 +304,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_container_replicator.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -250,7 +320,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_container_updater.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -266,7 +336,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_container_server.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -285,7 +355,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_object_auditor.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -304,7 +374,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_object_expirer.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -320,7 +390,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_object_replicator.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -336,7 +406,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_object_updater.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
@@ -352,13 +422,13 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/swift_object_server.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc/swift:/etc/swift:rw
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
                   - /var/log/containers/swift:/var/log/swift
             environment: *kolla_env
-          swift_xinetd_rsync:
+          swift_rsync:
             image: *swift_object_image
             net: host
             user: root
@@ -368,8 +438,8 @@ outputs:
               list_concat:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
-                  - /var/lib/kolla/config_files/swift_xinetd_rsync.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/swift/etc:/etc
+                  - /var/lib/kolla/config_files/swift_rsync.json:/var/lib/kolla/config_files/config.json:ro
+                  - /var/lib/config-data/puppet-generated/swift/:/var/lib/kolla/config_files/src:ro
                   - /run:/run
                   - /srv/node:/srv/node
                   - /dev:/dev
index 84175c5..793a174 100644 (file)
@@ -76,6 +76,11 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/tacker_api.json:
           command: /usr/bin/tacker-server --config-file=/etc/tacker/tacker.conf --log-file=/var/log/tacker/api.log
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/tacker
               owner: tacker:tacker
@@ -104,7 +109,10 @@ outputs:
               list_concat:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
-                  - /var/lib/config-data/tacker/etc/:/etc/:ro
+                  # FIXME(mandre) mounting /etc rw to workaround LP1696283
+                  # This should go away anyway and mount the exact files it
+                  # needs or use kolla set_configs.py
+                  - /var/lib/config-data/tacker/etc/:/etc/
                   - /var/log/containers/tacker:/var/log/tacker
             command: "/usr/bin/bootstrap_host_exec tacker su tacker -s /bin/bash -c 'tacker-db-manage --config-file /etc/tacker/tacker.conf upgrade head'"
         step_4:
@@ -118,7 +126,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/tacker_api.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/tacker/etc/tacker/:/etc/tacker/:ro
+                  - /var/lib/config-data/puppet-generated/tacker/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/tacker:/var/log/tacker
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 17524e5..ea1fd76 100644 (file)
@@ -74,8 +74,18 @@ outputs:
       kolla_config:
         /var/lib/kolla/config_files/zaqar.json:
           command: /usr/sbin/httpd -DFOREGROUND
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
         /var/lib/kolla/config_files/zaqar_websocket.json:
           command: /usr/bin/zaqar-server --config-file /etc/zaqar/zaqar.conf --config-file /etc/zaqar/1.conf
+          config_files:
+            - source: "/var/lib/kolla/config_files/src/*"
+              dest: "/"
+              merge: true
+              preserve_properties: true
           permissions:
             - path: /var/log/zaqar
               owner: zaqar:zaqar
@@ -98,11 +108,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/zaqar.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/zaqar/etc/zaqar/:/etc/zaqar/:ro
-                  - /var/lib/config-data/zaqar/var/www/:/var/www/:ro
-                  - /var/lib/config-data/zaqar/etc/httpd/conf/:/etc/httpd/conf/:ro
-                  - /var/lib/config-data/zaqar/etc/httpd/conf.d/:/etc/httpd/conf.d/:ro
-                  - /var/lib/config-data/zaqar/etc/httpd/conf.modules.d/:/etc/httpd/conf.modules.d/:ro
+                  - /var/lib/config-data/puppet-generated/zaqar/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/zaqar:/var/log/zaqar
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
@@ -116,9 +122,7 @@ outputs:
                 - {get_attr: [ContainersCommon, volumes]}
                 -
                   - /var/lib/kolla/config_files/zaqar_websocket.json:/var/lib/kolla/config_files/config.json:ro
-                  - /var/lib/config-data/zaqar/etc/zaqar/:/etc/zaqar/:ro
-                  - /var/lib/config-data/zaqar/var/www/:/var/www/:ro
-                  - /var/lib/config-data/zaqar/etc/httpd/:/etc/httpd/:ro
+                  - /var/lib/config-data/puppet-generated/zaqar/:/var/lib/kolla/config_files/src:ro
                   - /var/log/containers/zaqar:/var/log/zaqar
             environment:
               - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
index 6249c28..52d0d27 100644 (file)
@@ -18,3 +18,6 @@ resource_registry:
   OS::TripleO::Services::AodhNotifier: OS::Heat::None
   OS::TripleO::Services::AodhListener: OS::Heat::None
   OS::TripleO::Services::PankoApi: OS::Heat::None
+
+parameter_defaults:
+  NotificationDriver: 'noop'
diff --git a/environments/docker-centos-tripleoupstream.yaml b/environments/docker-centos-tripleoupstream.yaml
new file mode 100644 (file)
index 0000000..9eb4536
--- /dev/null
@@ -0,0 +1,116 @@
+parameter_defaults:
+  # FIXME: Remove this when we uncomment at least one parameter in this file.
+  # It seems an environment file with empty parameter_defaults section has the
+  # potential to confuse Heat in a way that it doesn't deploy a single service
+  # on the overcloud in the multinode job.
+  # https://bugs.launchpad.net/tripleo/+bug/1703599
+  PlaceholderParameter: can be removed when we add a different param to this env file
+
+  #DockerAodhApiImage: 'tripleoupstream/centos-binary-aodh-api:latest'
+  #DockerAodhConfigImage: 'tripleoupstream/centos-binary-aodh-api:latest'
+  #DockerAodhEvaluatorImage: 'tripleoupstream/centos-binary-aodh-evaluator:latest'
+  #DockerAodhListenerImage: 'tripleoupstream/centos-binary-aodh-listener:latest'
+  #DockerAodhNotifierImage: 'tripleoupstream/centos-binary-aodh-notifier:latest'
+  #DockerCeilometerCentralImage: 'tripleoupstream/centos-binary-ceilometer-central:latest'
+  #DockerCeilometerComputeImage: 'tripleoupstream/centos-binary-ceilometer-compute:latest'
+  #DockerCeilometerConfigImage: 'tripleoupstream/centos-binary-ceilometer-central:latest'
+  #DockerCeilometerIpmiImage: 'tripleoupstream/centos-binary-ceilometer-ipmi:latest'
+  #DockerCeilometerNotificationImage: 'tripleoupstream/centos-binary-ceilometer-notification:latest'
+  #DockerCinderApiImage: 'tripleoupstream/centos-binary-cinder-api:latest'
+  #DockerCinderBackupImage: 'tripleoupstream/centos-binary-cinder-backup:latest'
+  #DockerCinderConfigImage: 'tripleoupstream/centos-binary-cinder-api:latest'
+  #DockerCinderSchedulerImage: 'tripleoupstream/centos-binary-cinder-scheduler:latest'
+  #DockerCinderVolumeImage: 'tripleoupstream/centos-binary-cinder-volume:latest'
+  #DockerClustercheckConfigImage: 'tripleoupstream/centos-binary-mariadb:latest'
+  #DockerClustercheckImage: 'tripleoupstream/centos-binary-mariadb:latest'
+  #DockerCollectdConfigImage: 'tripleoupstream/centos-binary-collectd:latest'
+  #DockerCollectdImage: 'tripleoupstream/centos-binary-collectd:latest'
+  #DockerCongressApiImage: 'tripleoupstream/centos-binary-congress-api:latest'
+  #DockerCongressConfigImage: 'tripleoupstream/centos-binary-congress-api:latest'
+  #DockerEc2ApiConfigImage: 'tripleoupstream/centos-binary-ec2-api:latest'
+  #DockerEc2ApiImage: 'tripleoupstream/centos-binary-ec2-api:latest'
+  #DockerEtcdConfigImage: 'tripleoupstream/centos-binary-etcd:latest'
+  #DockerEtcdImage: 'tripleoupstream/centos-binary-etcd:latest'
+  #DockerGlanceApiConfigImage: 'tripleoupstream/centos-binary-glance-api:latest'
+  #DockerGlanceApiImage: 'tripleoupstream/centos-binary-glance-api:latest'
+  #DockerGnocchiApiImage: 'tripleoupstream/centos-binary-gnocchi-api:latest'
+  #DockerGnocchiConfigImage: 'tripleoupstream/centos-binary-gnocchi-api:latest'
+  #DockerGnocchiMetricdImage: 'tripleoupstream/centos-binary-gnocchi-metricd:latest'
+  #DockerGnocchiStatsdImage: 'tripleoupstream/centos-binary-gnocchi-statsd:latest'
+  #DockerHAProxyConfigImage: 'tripleoupstream/centos-binary-haproxy:latest'
+  #DockerHAProxyImage: 'tripleoupstream/centos-binary-haproxy:latest'
+  #DockerHeatApiCfnConfigImage: 'tripleoupstream/centos-binary-heat-api-cfn:latest'
+  #DockerHeatApiCfnImage: 'tripleoupstream/centos-binary-heat-api-cfn:latest'
+  #DockerHeatApiConfigImage: 'tripleoupstream/centos-binary-heat-api:latest'
+  #DockerHeatApiImage: 'tripleoupstream/centos-binary-heat-api:latest'
+  #DockerHeatConfigImage: 'tripleoupstream/centos-binary-heat-api:latest'
+  #DockerHeatEngineImage: 'tripleoupstream/centos-binary-heat-engine:latest'
+  #DockerHorizonConfigImage: 'tripleoupstream/centos-binary-horizon:latest'
+  #DockerHorizonImage: 'tripleoupstream/centos-binary-horizon:latest'
+  #DockerIronicApiImage: 'tripleoupstream/centos-binary-ironic-api:latest'
+  #DockerIronicConductorImage: 'tripleoupstream/centos-binary-ironic-conductor:latest'
+  #DockerIronicConfigImage: 'tripleoupstream/centos-binary-ironic-pxe:latest'
+  #DockerIronicPxeImage: 'tripleoupstream/centos-binary-ironic-pxe:latest'
+  #DockerIscsidConfigImage: 'tripleoupstream/centos-binary-iscsid:latest'
+  #DockerIscsidImage: 'tripleoupstream/centos-binary-iscsid:latest'
+  #DockerKeystoneConfigImage: 'tripleoupstream/centos-binary-keystone:latest'
+  #DockerKeystoneImage: 'tripleoupstream/centos-binary-keystone:latest'
+  #DockerManilaApiImage: 'tripleoupstream/centos-binary-manila-api:latest'
+  #DockerManilaConfigImage: 'tripleoupstream/centos-binary-manila-api:latest'
+  #DockerManilaSchedulerImage: 'tripleoupstream/centos-binary-manila-scheduler:latest'
+  #DockerMemcachedConfigImage: 'tripleoupstream/centos-binary-memcached:latest'
+  #DockerMemcachedImage: 'tripleoupstream/centos-binary-memcached:latest'
+  #DockerMistralApiImage: 'tripleoupstream/centos-binary-mistral-api:latest'
+  #DockerMistralConfigImage: 'tripleoupstream/centos-binary-mistral-api:latest'
+  #DockerMistralEngineImage: 'tripleoupstream/centos-binary-mistral-engine:latest'
+  #DockerMistralExecutorImage: 'tripleoupstream/centos-binary-mistral-executor:latest'
+  #DockerMongodbConfigImage: 'tripleoupstream/centos-binary-mongodb:latest'
+  #DockerMongodbImage: 'tripleoupstream/centos-binary-mongodb:latest'
+  #DockerMultipathdConfigImage: 'tripleoupstream/centos-binary-multipathd:latest'
+  #DockerMultipathdImage: 'tripleoupstream/centos-binary-multipathd:latest'
+  #DockerMysqlClientConfigImage: 'tripleoupstream/centos-binary-mariadb:latest'
+  #DockerMysqlConfigImage: 'tripleoupstream/centos-binary-mariadb:latest'
+  #DockerMysqlImage: 'tripleoupstream/centos-binary-mariadb:latest'
+  #DockerNeutronApiImage: 'tripleoupstream/centos-binary-neutron-server:latest'
+  #DockerNeutronConfigImage: 'tripleoupstream/centos-binary-neutron-server:latest'
+  #DockerNeutronDHCPImage: 'tripleoupstream/centos-binary-neutron-dhcp-agent:latest'
+  #DockerNeutronL3AgentImage: 'tripleoupstream/centos-binary-neutron-l3-agent:latest'
+  #DockerNeutronMetadataImage: 'tripleoupstream/centos-binary-neutron-metadata-agent:latest'
+  #DockerNovaApiImage: 'tripleoupstream/centos-binary-nova-api:latest'
+  #DockerNovaComputeImage: 'tripleoupstream/centos-binary-nova-compute:latest'
+  #DockerNovaComputeIronicImage: 'tripleoupstream/centos-binary-nova-compute-ironic:latest'
+  #DockerNovaConductorImage: 'tripleoupstream/centos-binary-nova-conductor:latest'
+  #DockerNovaConfigImage: 'tripleoupstream/centos-binary-nova-base:latest'
+  #DockerNovaConsoleauthImage: 'tripleoupstream/centos-binary-nova-consoleauth:latest'
+  #DockerNovaLibvirtConfigImage: 'tripleoupstream/centos-binary-nova-compute:latest'
+  #DockerNovaLibvirtImage: 'tripleoupstream/centos-binary-nova-libvirt:latest'
+  #DockerNovaPlacementConfigImage: 'tripleoupstream/centos-binary-nova-placement-api:latest'
+  #DockerNovaPlacementImage: 'tripleoupstream/centos-binary-nova-placement-api:latest'
+  #DockerNovaSchedulerImage: 'tripleoupstream/centos-binary-nova-scheduler:latest'
+  #DockerNovaVncProxyImage: 'tripleoupstream/centos-binary-nova-novncproxy:latest'
+  #DockerOctaviaApiImage: 'tripleoupstream/centos-binary-octavia-api:latest'
+  #DockerOctaviaConfigImage: 'tripleoupstream/centos-binary-octavia-api:latest'
+  #DockerOctaviaHealthManagerImage: 'tripleoupstream/centos-binary-octavia-health-manager:latest'
+  #DockerOctaviaHousekeepingImage: 'tripleoupstream/centos-binary-octavia-housekeeping:latest'
+  #DockerOctaviaWorkerImage: 'tripleoupstream/centos-binary-octavia-worker:latest'
+  #DockerOpenvswitchImage: 'tripleoupstream/centos-binary-neutron-openvswitch-agent:latest'
+  #DockerPankoApiImage: 'tripleoupstream/centos-binary-panko-api:latest'
+  #DockerPankoConfigImage: 'tripleoupstream/centos-binary-panko-api:latest'
+  #DockerRabbitmqConfigImage: 'tripleoupstream/centos-binary-rabbitmq:latest'
+  #DockerRabbitmqImage: 'tripleoupstream/centos-binary-rabbitmq:latest'
+  #DockerRedisConfigImage: 'tripleoupstream/centos-binary-redis:latest'
+  #DockerRedisImage: 'tripleoupstream/centos-binary-redis:latest'
+  #DockerSaharaApiImage: 'tripleoupstream/centos-binary-sahara-api:latest'
+  #DockerSaharaConfigImage: 'tripleoupstream/centos-binary-sahara-api:latest'
+  #DockerSaharaEngineImage: 'tripleoupstream/centos-binary-sahara-engine:latest'
+  #DockerSensuClientImage: 'tripleoupstream/centos-binary-sensu-client:latest'
+  #DockerSensuConfigImage: 'tripleoupstream/centos-binary-sensu-client:latest'
+  #DockerSwiftAccountImage: 'tripleoupstream/centos-binary-swift-account:latest'
+  #DockerSwiftConfigImage: 'tripleoupstream/centos-binary-swift-proxy-server:latest'
+  #DockerSwiftContainerImage: 'tripleoupstream/centos-binary-swift-container:latest'
+  #DockerSwiftObjectImage: 'tripleoupstream/centos-binary-swift-object:latest'
+  #DockerSwiftProxyImage: 'tripleoupstream/centos-binary-swift-proxy-server:latest'
+  #DockerTackerConfigImage: 'tripleoupstream/centos-binary-tacker:latest'
+  #DockerTackerImage: 'tripleoupstream/centos-binary-tacker:latest'
+  #DockerZaqarConfigImage: 'tripleoupstream/centos-binary-zaqar:latest'
+  #DockerZaqarImage: 'tripleoupstream/centos-binary-zaqar:latest'
index 3ca0469..8d30449 100644 (file)
@@ -34,18 +34,3 @@ resource_registry:
 
   OS::TripleO::PostDeploySteps: ../docker/post.yaml
   OS::TripleO::PostUpgradeSteps: ../docker/post-upgrade.yaml
-
-parameter_defaults:
-  # To specify a local docker registry, enable these
-  # where 192.168.24.1 is the host running docker-distribution
-  #DockerNamespace: 192.168.24.1:8787/tripleoupstream
-  #DockerNamespaceIsRegistry: true
-
-  ComputeServices:
-    - OS::TripleO::Services::CACerts
-    - OS::TripleO::Services::CertmongerUser
-    - OS::TripleO::Services::NovaCompute
-    - OS::TripleO::Services::NovaLibvirt
-    - OS::TripleO::Services::ComputeNeutronOvsAgent
-    - OS::TripleO::Services::Docker
-    - OS::TripleO::Services::Sshd
index 03713e8..52b2dc0 100644 (file)
@@ -6,6 +6,8 @@ resource_registry:
   OS::TripleO::Compute::NodeUserData: ../docker/firstboot/setup_docker_host.yaml
 
   OS::TripleO::Services::Docker: ../puppet/services/docker.yaml
+  # Default Neutron ML2 puppet plugin to use when NeutronCorePlugin is set to ML2
+  OS::TripleO::Docker::NeutronMl2PluginBase: ../puppet/services/neutron-plugin-ml2.yaml
 
   #NOTE (dprince) add roles to be docker enabled as we support them
   OS::TripleO::Services::NovaLibvirt: ../docker/services/nova-libvirt.yaml
@@ -61,17 +63,3 @@ resource_registry:
 
   OS::TripleO::PostDeploySteps: ../docker/post.yaml
   OS::TripleO::PostUpgradeSteps: ../docker/post-upgrade.yaml
-
-parameter_defaults:
-  # To specify a local docker registry, enable these
-  # where 192.168.24.1 is the host running docker-distribution
-  #DockerNamespace: 192.168.24.1:8787/tripleoupstream
-  #DockerNamespaceIsRegistry: true
-
-  ComputeServices:
-    - OS::TripleO::Services::NovaCompute
-    - OS::TripleO::Services::NovaLibvirt
-    - OS::TripleO::Services::ComputeNeutronOvsAgent
-    - OS::TripleO::Services::Docker
-    - OS::TripleO::Services::CeilometerAgentCompute
-    - OS::TripleO::Services::Sshd
index 24eedf8..20340c7 100644 (file)
@@ -9,4 +9,6 @@ parameter_defaults:
   UpgradeLevelNovaCompute: auto
   UpgradeInitCommonCommand: |
     #!/bin/bash
+    set -eu
     # Ocata to Pike, put any needed host-level workarounds here
+    yum install -y ansible-pacemaker
index 8a4a144..c0ba906 100644 (file)
@@ -13,7 +13,6 @@ parameter_defaults:
   NeutronBigswitchRestproxyServerAuth:
   NeutronMechanismDrivers: openvswitch,bsn_ml2
   NeutronServicePlugins: bsn_l3,bsn_service_plugin
-  KeystoneNotificationDriver: messaging
 
   # Optional:
   # NeutronBigswitchRestproxyAutoSyncOnFailure:
index 668e28d..8d7bc8d 100644 (file)
@@ -4,6 +4,7 @@ resource_registry:
   OS::TripleO::DefaultPasswords: OS::Heat::None
   OS::TripleO::RandomString: OS::Heat::None
   OS::TripleO::AllNodesDeployment: OS::Heat::None
+  OS::TripleO::DeployedServerEnvironment: ../deployed-server/deployed-server-environment-output.yaml
 
 parameter_defaults:
   # Deploy no services
index c409b89..1d01cb3 100644 (file)
@@ -1,3 +1,6 @@
+resource_registry:
+  OS::TripleO::DeployedServerEnvironment: ../deployed-server/deployed-server-environment-output.yaml
+
 parameter_defaults:
   # Consistent Hostname format
   ControllerDeployedServerHostnameFormat: overcloud-controller-%index%
index 5d4c730..e1edd35 100644 (file)
@@ -1,2 +1,2 @@
 resource_registry:
-  OS::TripleO::Services::Congress: ../../docker/services/congress-api.yaml
+  OS::TripleO::Services::Congress: ../../docker/services/congress.yaml
index 795309f..eacdb1a 100644 (file)
@@ -1,3 +1,4 @@
 resource_registry:
   OS::TripleO::Services::ManilaApi: ../../docker/services/manila-api.yaml
   OS::TripleO::Services::ManilaScheduler: ../../docker/services/manila-scheduler.yaml
+  OS::TripleO::Services::ManilaShare: ../../docker/services/manila-share.yaml
diff --git a/environments/services-docker/neutron-opendaylight.yaml b/environments/services-docker/neutron-opendaylight.yaml
new file mode 100644 (file)
index 0000000..b749cb6
--- /dev/null
@@ -0,0 +1,16 @@
+# A Heat environment that can be used to deploy OpenDaylight with L3 DVR using Docker containers
+resource_registry:
+  OS::TripleO::Services::NeutronOvsAgent: OS::Heat::None
+  OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None
+  OS::TripleO::Services::ComputeNeutronCorePlugin: OS::Heat::None
+  OS::TripleO::Services::OpenDaylightApi: ../../docker/services/opendaylight-api.yaml
+  OS::TripleO::Services::OpenDaylightOvs: ../../puppet/services/opendaylight-ovs.yaml
+  OS::TripleO::Services::NeutronL3Agent: OS::Heat::None
+  OS::TripleO::Docker::NeutronMl2PluginBase: ../../puppet/services/neutron-plugin-ml2-odl.yaml
+
+parameter_defaults:
+  NeutronEnableForceMetadata: true
+  NeutronMechanismDrivers: 'opendaylight_v2'
+  NeutronServicePlugins: 'odl-router_v2,trunk'
+  DockerNeutronApiImage: 'centos-binary-neutron-server-opendaylight:latest'
+  DockerNeutronConfigImage: 'centos-binary-neutron-server-opendaylight:latest'
diff --git a/environments/services/neutron-lbaasv2.yaml b/environments/services/neutron-lbaasv2.yaml
new file mode 100644 (file)
index 0000000..9dee74e
--- /dev/null
@@ -0,0 +1,17 @@
+# A Heat environment file that can be used to deploy Neutron LBaaSv2 service
+#
+# Currently there are only two interface drivers for Neutron LBaaSv2
+# The default option is the standard OVS driver the other option is to be used
+# when linux bridges are used instead of OVS
+# In order to enable other backend, replace the content of NeutronLbaasInterfaceDriver
+#
+# - OVS: neutron.agent.linux.interface.OVSInterfaceDriver
+# - LinuxBridges: neutron.agent.linux.interface.BridgeInterfaceDriver
+resource_registry:
+  OS::TripleO::Services::NeutronLbaas: ../puppet/services/neutron-lbaas.yaml
+
+parameter_defaults:
+  NeutronLbaasInterfaceDriver: "neutron.agent.linux.interface.OVSInterfaceDriver"
+  NeutronLbaasDeviceDriver: "neutron.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver"
+  NeutronServiceProviders: ['LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default']
+
index 4cdba09..c118fe7 100644 (file)
@@ -34,6 +34,14 @@ parameter_defaults:
   # Type: string
   CinderNetappLogin: <None>
 
+  # 
+  # Type: string
+  CinderNetappNasSecureFileOperations: false
+
+  # 
+  # Type: string
+  CinderNetappNasSecureFilePermissions: false
+
   # 
   # Type: string
   CinderNetappNfsMountOptions: ''
index 96632bc..fb0d169 100644 (file)
@@ -59,6 +59,19 @@ parameters:
     description: |
       When enabled, the system will perform a yum update after performing the
       RHEL Registration process.
+  deployment_actions:
+    default: ['CREATE', 'UPDATE']
+    type: comma_delimited_list
+    description: >
+      List of stack actions that will trigger any deployments in this
+      templates. The actions will be an empty list of the server is in the
+      toplevel DeploymentServerBlacklist parameter's value.
+
+conditions:
+  deployment_actions_empty:
+    equals:
+      - {get_param: deployment_actions}
+      - []
 
 resources:
 
@@ -136,7 +149,11 @@ resources:
       name: RHELUnregistrationDeployment
       server:  {get_param: server}
       config: {get_resource: RHELUnregistration}
-      actions: ['DELETE'] # Only do this on DELETE
+      actions:
+        if:
+          - deployment_actions_empty
+          - []
+          - ['DELETE'] # Only do this on DELETE
       input_values:
         REG_METHOD: {get_param: rhel_reg_method}
 
@@ -169,7 +186,11 @@ resources:
       name: UpdateDeploymentAfterRHELRegistration
       config: {get_resource: YumUpdateConfigurationAfterRHELRegistration}
       server:  {get_param: server}
-      actions: ['CREATE'] # Only do this on CREATE
+      actions:
+        if:
+          - deployment_actions_empty
+          - []
+          - ['CREATE'] # Only do this on CREATE
 
 outputs:
   deploy_stdout:
index 48ba526..79cb7cb 100644 (file)
@@ -7,6 +7,19 @@ description: >
 parameters:
   server:
     type: string
+  deployment_actions:
+    default: ['CREATE', 'UPDATE']
+    type: comma_delimited_list
+    description: >
+      List of stack actions that will trigger any deployments in this
+      templates. The actions will be an empty list of the server is in the
+      toplevel DeploymentServerBlacklist parameter's value.
+
+conditions:
+  deployment_actions_empty:
+    equals:
+      - {get_param: deployment_actions}
+      - []
 
 resources:
 
@@ -24,6 +37,11 @@ resources:
       name: SomeDeployment
       server:  {get_param: server}
       config: {get_resource: SomeConfig}
+      actions:
+        if:
+          - deployment_actions_empty
+          - []
+          - ['CREATE'] # Only do this on CREATE
       actions: ['CREATE'] # Only do this on CREATE
 
   RebootConfig:
@@ -44,5 +62,9 @@ resources:
       name: RebootDeployment
       server:  {get_param: server}
       config: {get_resource: RebootConfig}
-      actions: ['CREATE'] # Only do this on CREATE
+      actions:
+        if:
+          - deployment_actions_empty
+          - []
+          - ['CREATE'] # Only do this on CREATE
       signal_transport: NO_SIGNAL
index 41d8f4f..fe52ef7 100644 (file)
@@ -19,6 +19,13 @@ parameters:
   {{role}}HostCpusList:
     type: string
     default: ""
+  deployment_actions:
+    default: ['CREATE', 'UPDATE']
+    type: comma_delimited_list
+    description: >
+      List of stack actions that will trigger any deployments in this
+      templates. The actions will be an empty list of the server is in the
+      toplevel DeploymentServerBlacklist parameter's value.
 
 parameter_group:
   - label: deprecated
@@ -38,6 +45,10 @@ conditions:
           equals:
           - get_param: {{role}}TunedProfileName
           - ""
+  deployment_actions_empty:
+    equals:
+      - {get_param: deployment_actions}
+      - []
 
 resources:
 
@@ -62,7 +73,11 @@ resources:
       name: HostParametersDeployment
       server:  {get_param: server}
       config: {get_resource: HostParametersConfig}
-      actions: ['CREATE'] # Only do this on CREATE
+      actions:
+        if:
+          - deployment_actions_empty
+          - []
+          - ['CREATE'] # Only do this on CREATE
       input_values:
         _KERNEL_ARGS_: {get_param: {{role}}KernelArgs}
         _TUNED_PROFILE_NAME_: {get_param: {{role}}TunedProfileName}
@@ -88,7 +103,11 @@ resources:
       name: RebootDeployment
       server:  {get_param: server}
       config: {get_resource: RebootConfig}
-      actions: ['CREATE'] # Only do this on CREATE
+      actions:
+        if:
+          - deployment_actions_empty
+          - []
+          - ['CREATE'] # Only do this on CREATE
       signal_transport: NO_SIGNAL
 
 outputs:
index 6ea5b69..31d0c1e 100644 (file)
@@ -95,6 +95,13 @@ parameters:
     default: "vfio-pci"
     description: DPDK Driver type
     type: string
+  deployment_actions:
+    default: ['CREATE', 'UPDATE']
+    type: comma_delimited_list
+    description: >
+      List of stack actions that will trigger any deployments in this
+      templates. The actions will be an empty list of the server is in the
+      toplevel DeploymentServerBlacklist parameter's value.
 
 conditions:
   is_host_config_required: {not: {equals: [{get_param: [RoleParameters, KernelArgs]}, ""]}}
@@ -117,6 +124,10 @@ conditions:
   socket_mem_empty: {equals: [{get_param: OvsDpdkSocketMemory}, '']}
   driver_not_set: {equals: [{get_param: OvsDpdkDriverType}, 'vfio-pci']}
   isol_cpus_empty: {equals: [{get_param: IsolCpusList}, '0']}
+  deployment_actions_empty:
+    equals:
+      - {get_param: deployment_actions}
+      - []
 
 resources:
   RoleParametersValue:
@@ -162,7 +173,11 @@ resources:
       name: HostParametersDeployment
       server:  {get_param: server}
       config: {get_resource: HostParametersConfig}
-      actions: ['CREATE'] # Only do this on CREATE
+      actions:
+        if:
+          - deployment_actions_empty
+          - []
+          - ['CREATE'] # Only do this on CREATE
       input_values:
         _KERNEL_ARGS_: {get_param: [RoleParameters, KernelArgs]}
         _TUNED_PROFILE_NAME_: {get_param: [RoleParameters, TunedProfileName]}
@@ -250,7 +265,11 @@ resources:
       name: RebootDeployment
       server:  {get_param: server}
       config: {get_resource: RebootConfig}
-      actions: ['CREATE'] # Only do this on CREATE
+      actions:
+        if:
+          - deployment_actions_empty
+          - []
+          - ['CREATE'] # Only do this on CREATE
       signal_transport: NO_SIGNAL
 
 outputs:
index e4ba0cc..02fdbf1 100644 (file)
@@ -7,6 +7,13 @@ parameters:
   server:
     description: ID of the node to apply this config to
     type: string
+  deployment_actions:
+    default: ['CREATE', 'UPDATE']
+    type: comma_delimited_list
+    description: >
+      List of stack actions that will trigger any deployments in this
+      templates. The actions will be an empty list of the server is in the
+      toplevel DeploymentServerBlacklist parameter's value.
 
 resources:
   SshHostPubKeyConfig:
@@ -28,6 +35,7 @@ resources:
     properties:
       config: {get_resource: SshHostPubKeyConfig}
       server: {get_param: server}
+      actions: {get_param: deployment_actions}
 
 
 outputs:
index 8fff137..882402a 100644 (file)
@@ -143,6 +143,12 @@ resources:
                   addresses:
                   - ip_netmask:
                       get_param: StorageIpSubnet
+                # Uncomment when including environments/hyperconverged-ceph.yaml
+                #- type: vlan
+                #  device: bond1
+                #  vlan_id: {get_param: StorageMgmtNetworkVlanID}
+                #  addresses:
+                #    - ip_netmask: {get_param: StorageMgmtIpSubnet}
                 - type: vlan
                   device: bond1
                   vlan_id:
@@ -153,16 +159,13 @@ resources:
                 # Uncomment when including environments/network-management.yaml
                 # If setting default route on the Management interface, comment
                 # out the default route on the Control Plane.
-                #-
-                #  type: vlan
+                #- type: vlan
                 #  device: bond1
                 #  vlan_id: {get_param: ManagementNetworkVlanID}
                 #  addresses:
-                #    -
-                #      ip_netmask: {get_param: ManagementIpSubnet}
+                #    - ip_netmask: {get_param: ManagementIpSubnet}
                 #  routes:
-                #    -
-                #      default: true
+                #    - default: true
                 #      next_hop: {get_param: ManagementInterfaceDefaultRoute}
 outputs:
   OS::stack_id:
diff --git a/network/config/bond-with-vlans/networker.yaml b/network/config/bond-with-vlans/networker.yaml
new file mode 100644 (file)
index 0000000..aa6e9da
--- /dev/null
@@ -0,0 +1,174 @@
+heat_template_version: pike
+description: >
+  Software Config to drive os-net-config with 2 bonded nics on a bridge with VLANs attached for a dedicated Neutron networker role.
+parameters:
+  ControlPlaneIp:
+    default: ''
+    description: IP address/subnet on the ctlplane network
+    type: string
+  ExternalIpSubnet:
+    default: ''
+    description: IP address/subnet on the external network
+    type: string
+  InternalApiIpSubnet:
+    default: ''
+    description: IP address/subnet on the internal API network
+    type: string
+  StorageIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage network
+    type: string
+  StorageMgmtIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage mgmt network
+    type: string
+  TenantIpSubnet:
+    default: ''
+    description: IP address/subnet on the tenant network
+    type: string
+  ManagementIpSubnet: # Only populated when including environments/network-management.yaml
+    default: ''
+    description: IP address/subnet on the management network
+    type: string
+  BondInterfaceOvsOptions:
+    default: bond_mode=active-backup
+    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
+    constraints:
+    - allowed_pattern: ^((?!balance.tcp).)*$
+      description: 'The balance-tcp bond mode is known to cause packet loss and
+        should not be used in BondInterfaceOvsOptions.
+        '
+  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
+  ManagementNetworkVlanID:
+    default: 60
+    description: Vlan ID for the management network traffic.
+    type: number
+  ControlPlaneDefaultRoute: # Override this via parameter_defaults
+    description: The default route of the control plane network.
+    type: string
+  ExternalInterfaceDefaultRoute:
+    default: 10.0.0.1
+    description: default route for the external network
+    type: string
+  ManagementInterfaceDefaultRoute: # Commented out by default in this template
+    default: unset
+    description: The default route of the management network.
+    type: string
+  ControlPlaneSubnetCidr: # Override this via parameter_defaults
+    default: '24'
+    description: The subnet CIDR of the control plane network.
+    type: string
+  DnsServers: # Override this via parameter_defaults
+    default: []
+    description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
+    type: comma_delimited_list
+  EC2MetadataIp: # Override this via parameter_defaults
+    description: The IP address of the EC2 metadata server.
+    type: string
+resources:
+  OsNetConfigImpl:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        str_replace:
+          template:
+            get_file: ../../scripts/run-os-net-config.sh
+          params:
+            $network_config:
+              network_config:
+              - type: interface
+                name: nic1
+                use_dhcp: false
+                addresses:
+                - ip_netmask:
+                    list_join:
+                    - /
+                    - - get_param: ControlPlaneIp
+                      - get_param: ControlPlaneSubnetCidr
+                routes:
+                - ip_netmask: 169.254.169.254/32
+                  next_hop:
+                    get_param: EC2MetadataIp
+              - type: ovs_bridge
+                name: bridge_name
+                dns_servers:
+                  get_param: DnsServers
+                members:
+                - type: ovs_bond
+                  name: bond1
+                  ovs_options:
+                    get_param: BondInterfaceOvsOptions
+                  members:
+                  - type: interface
+                    name: nic2
+                    primary: true
+                  - type: interface
+                    name: nic3
+                - type: vlan
+                  device: bond1
+                  vlan_id:
+                    get_param: ExternalNetworkVlanID
+                  addresses:
+                  - ip_netmask:
+                      get_param: ExternalIpSubnet
+                  routes:
+                  - default: true
+                    next_hop:
+                      get_param: ExternalInterfaceDefaultRoute
+                - type: vlan
+                  device: bond1
+                  vlan_id:
+                    get_param: InternalApiNetworkVlanID
+                  addresses:
+                  - ip_netmask:
+                      get_param: InternalApiIpSubnet
+                - type: vlan
+                  device: bond1
+                  vlan_id:
+                    get_param: TenantNetworkVlanID
+                  addresses:
+                  - ip_netmask:
+                      get_param: TenantIpSubnet
+                # Uncomment when including environments/network-management.yaml
+                # If setting default route on the Management interface, comment
+                # out the default route on the External interface. This will
+                # make the External API unreachable from remote subnets.
+                #-
+                #  type: vlan
+                #  device: bond1
+                #  vlan_id: {get_param: ManagementNetworkVlanID}
+                #  addresses:
+                #    -
+                #      ip_netmask: {get_param: ManagementIpSubnet}
+                #  routes:
+                #    -
+                #      default: true
+                #      next_hop: {get_param: ManagementInterfaceDefaultRoute}
+outputs:
+  OS::stack_id:
+    description: The OsNetConfigImpl resource.
+    value:
+      get_resource: OsNetConfigImpl
+
index 5549368..d1dc06a 100644 (file)
@@ -112,6 +112,12 @@ resources:
                 addresses:
                 - ip_netmask:
                     get_param: StorageIpSubnet
+              # Uncomment when including environments/hyperconverged-ceph.yaml
+              #- type: interface
+              #  name: nic3
+              #  use_dhcp: false
+              #  addresses:
+              #    - ip_netmask: {get_param: StorageMgmtIpSubnet}
               - type: interface
                 name: nic4
                 use_dhcp: false
@@ -132,16 +138,13 @@ resources:
             # Uncomment when including environments/network-management.yaml
             # If setting default route on the Management interface, comment
             # out the default route on the Control Plane.
-            #-
-            #  type: interface
+            #- type: interface
             #  name: nic7
             #  use_dhcp: false
             #  addresses:
-            #    -
-            #      ip_netmask: {get_param: ManagementIpSubnet}
+            #    - ip_netmask: {get_param: ManagementIpSubnet}
             #  routes:
-            #    -
-            #      default: true
+            #    - default: true
             #      next_hop: {get_param: ManagementInterfaceDefaultRoute}
 outputs:
   OS::stack_id:
diff --git a/network/config/multiple-nics/networker.yaml b/network/config/multiple-nics/networker.yaml
new file mode 100644 (file)
index 0000000..b251fb9
--- /dev/null
@@ -0,0 +1,159 @@
+heat_template_version: pike
+description: >
+  Software Config to drive os-net-config to configure multiple interfaces for a dedicated Neutron networker role.
+parameters:
+  ControlPlaneIp:
+    default: ''
+    description: IP address/subnet on the ctlplane network
+    type: string
+  ExternalIpSubnet:
+    default: ''
+    description: IP address/subnet on the external network
+    type: string
+  InternalApiIpSubnet:
+    default: ''
+    description: IP address/subnet on the internal API network
+    type: string
+  StorageIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage network
+    type: string
+  StorageMgmtIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage mgmt network
+    type: string
+  TenantIpSubnet:
+    default: ''
+    description: IP address/subnet on the tenant network
+    type: string
+  ManagementIpSubnet: # Only populated when including environments/network-management.yaml
+    default: ''
+    description: IP address/subnet on the management 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
+  ManagementNetworkVlanID:
+    default: 60
+    description: Vlan ID for the management network traffic.
+    type: number
+  ControlPlaneSubnetCidr: # Override this via parameter_defaults
+    default: '24'
+    description: The subnet CIDR of the control plane network.
+    type: string
+  ControlPlaneDefaultRoute: # Override this via parameter_defaults
+    description: The default route of the control plane network.
+    type: string
+  ExternalInterfaceDefaultRoute:
+    default: 10.0.0.1
+    description: default route for the external network
+    type: string
+  ManagementInterfaceDefaultRoute: # Commented out by default in this template
+    default: unset
+    description: The default route of the management network.
+    type: string
+  DnsServers: # Override this via parameter_defaults
+    default: []
+    description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
+    type: comma_delimited_list
+  EC2MetadataIp: # Override this via parameter_defaults
+    description: The IP address of the EC2 metadata server.
+    type: string
+resources:
+  OsNetConfigImpl:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        str_replace:
+          template:
+            get_file: ../../scripts/run-os-net-config.sh
+          params:
+            $network_config:
+              network_config:
+              - type: interface
+                name: nic1
+                use_dhcp: false
+                dns_servers:
+                  get_param: DnsServers
+                addresses:
+                - ip_netmask:
+                    list_join:
+                    - /
+                    - - get_param: ControlPlaneIp
+                      - get_param: ControlPlaneSubnetCidr
+                routes:
+                - ip_netmask: 169.254.169.254/32
+                  next_hop:
+                    get_param: EC2MetadataIp
+              - type: interface
+                name: nic4
+                use_dhcp: false
+                addresses:
+                - ip_netmask:
+                    get_param: InternalApiIpSubnet
+              - type: ovs_bridge
+                name: br-tenant
+                use_dhcp: false
+                addresses:
+                - ip_netmask:
+                    get_param: TenantIpSubnet
+                members:
+                - type: interface
+                  name: nic5
+                  use_dhcp: false
+                  primary: true
+              - type: ovs_bridge
+                name: bridge_name
+                dns_servers:
+                  get_param: DnsServers
+                use_dhcp: false
+                addresses:
+                - ip_netmask:
+                    get_param: ExternalIpSubnet
+                routes:
+                - default: true
+                  next_hop:
+                    get_param: ExternalInterfaceDefaultRoute
+                members:
+                - type: interface
+                  name: nic6
+                  primary: true
+            # Uncomment when including environments/network-management.yaml
+            # If setting default route on the Management interface, comment
+            # out the default route on the External interface. This will
+            # make the External API unreachable from remote subnets.
+            #-
+            #  type: interface
+            #  name: nic7
+            #  use_dhcp: false
+            #  addresses:
+            #    -
+            #      ip_netmask: {get_param: ManagementIpSubnet}
+            #  routes:
+            #    -
+            #      default: true
+            #      next_hop: {get_param: ManagementInterfaceDefaultRoute}
+outputs:
+  OS::stack_id:
+    description: The OsNetConfigImpl resource.
+    value:
+      get_resource: OsNetConfigImpl
+
index e36afd3..a637ef0 100644 (file)
@@ -125,6 +125,12 @@ resources:
                 addresses:
                 - ip_netmask:
                     get_param: StorageIpSubnet
+              # Uncomment when including environments/hyperconverged-ceph.yaml
+              #- type: vlan
+              #  vlan_id: {get_param: StorageMgmtNetworkVlanID}
+              #  device: bridge_name
+              #  addresses:
+              #    - ip_netmask: {get_param: StorageMgmtIpSubnet}
               - type: vlan
                 vlan_id:
                   get_param: TenantNetworkVlanID
@@ -135,16 +141,13 @@ resources:
               # Uncomment when including environments/network-management.yaml
               # If setting default route on the Management interface, comment
               # out the default route on the Control Plane.
-              #-
-              #  type: vlan
+              #- type: vlan
               #  vlan_id: {get_param: ManagementNetworkVlanID}
               #  device: bridge_name
               #  addresses:
-              #    -
-              #      ip_netmask: {get_param: ManagementIpSubnet}
+              #    - ip_netmask: {get_param: ManagementIpSubnet}
               #  routes:
-              #    -
-              #      default: true
+              #    - default: true
               #      next_hop: {get_param: ManagementInterfaceDefaultRoute}
 outputs:
   OS::stack_id:
diff --git a/network/config/single-nic-linux-bridge-vlans/networker.yaml b/network/config/single-nic-linux-bridge-vlans/networker.yaml
new file mode 100644 (file)
index 0000000..b1733de
--- /dev/null
@@ -0,0 +1,160 @@
+heat_template_version: pike
+description: >
+  Software Config to drive os-net-config to configure VLANs for a dedicated Neutron networker role.
+parameters:
+  ControlPlaneIp:
+    default: ''
+    description: IP address/subnet on the ctlplane network
+    type: string
+  ExternalIpSubnet:
+    default: ''
+    description: IP address/subnet on the external network
+    type: string
+  InternalApiIpSubnet:
+    default: ''
+    description: IP address/subnet on the internal API network
+    type: string
+  StorageIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage network
+    type: string
+  StorageMgmtIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage mgmt network
+    type: string
+  TenantIpSubnet:
+    default: ''
+    description: IP address/subnet on the tenant network
+    type: string
+  ManagementIpSubnet: # Only populated when including environments/network-management.yaml
+    default: ''
+    description: IP address/subnet on the management 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
+  ManagementNetworkVlanID:
+    default: 60
+    description: Vlan ID for the management network traffic.
+    type: number
+  ControlPlaneDefaultRoute: # Override this via parameter_defaults
+    description: The default route of the control plane network.
+    type: string
+  ExternalInterfaceDefaultRoute:
+    default: 10.0.0.1
+    description: default route for the external network
+    type: string
+  ManagementInterfaceDefaultRoute: # Commented out by default in this template
+    default: unset
+    description: The default route of the management network.
+    type: string
+  ControlPlaneSubnetCidr: # Override this via parameter_defaults
+    default: '24'
+    description: The subnet CIDR of the control plane network.
+    type: string
+  DnsServers: # Override this via parameter_defaults
+    default: []
+    description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
+    type: comma_delimited_list
+  EC2MetadataIp: # Override this via parameter_defaults
+    description: The IP address of the EC2 metadata server.
+    type: string
+resources:
+  OsNetConfigImpl:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        str_replace:
+          template:
+            get_file: ../../scripts/run-os-net-config.sh
+          params:
+            $network_config:
+              network_config:
+              - type: linux_bridge
+                name: bridge_name
+                use_dhcp: false
+                dns_servers:
+                  get_param: DnsServers
+                addresses:
+                - ip_netmask:
+                    list_join:
+                    - /
+                    - - get_param: ControlPlaneIp
+                      - get_param: ControlPlaneSubnetCidr
+                routes:
+                - ip_netmask: 169.254.169.254/32
+                  next_hop:
+                    get_param: EC2MetadataIp
+                - default: true
+                  next_hop:
+                    get_param: ControlPlaneDefaultRoute
+                members:
+                - type: interface
+                  # NOTE: "interface_name" will be replaced by the value of NeutronPublicInterface,
+                  # default is "nic1". Set this value via parameter_defaults in an environment file.
+                  name: interface_name
+                  primary: true
+              - type: vlan
+                vlan_id:
+                  get_param: ExternalNetworkVlanID
+                device: bridge_name
+                addresses:
+                - ip_netmask:
+                    get_param: ExternalIpSubnet
+                routes:
+                - default: true
+                  next_hop:
+                    get_param: ExternalInterfaceDefaultRoute
+              - type: vlan
+                vlan_id:
+                  get_param: InternalApiNetworkVlanID
+                device: bridge_name
+                addresses:
+                - ip_netmask:
+                    get_param: InternalApiIpSubnet
+              - type: vlan
+                vlan_id:
+                  get_param: TenantNetworkVlanID
+                device: bridge_name
+                addresses:
+                - ip_netmask:
+                    get_param: TenantIpSubnet
+              # Uncomment when including environments/network-management.yaml
+              # If setting default route on the Management interface, comment
+              # out the default route on the External interface. This will
+              # make the External API unreachable from remote subnets.
+              #-
+              #  type: vlan
+              #  vlan_id: {get_param: ManagementNetworkVlanID}
+              #  device: bridge_name
+              #  addresses:
+              #    -
+              #      ip_netmask: {get_param: ManagementIpSubnet}
+              #  routes:
+              #    -
+              #      default: true
+              #      next_hop: {get_param: ManagementInterfaceDefaultRoute}
+outputs:
+  OS::stack_id:
+    description: The OsNetConfigImpl resource.
+    value:
+      get_resource: OsNetConfigImpl
+
index 2201b0b..d2559d2 100644 (file)
@@ -38,6 +38,10 @@ parameters:
     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.
@@ -115,6 +119,11 @@ resources:
                   addresses:
                   - ip_netmask:
                       get_param: StorageIpSubnet
+                # Uncomment when including environments/hyperconverged-ceph.yaml
+                #- type: vlan
+                #  vlan_id: {get_param: StorageMgmtNetworkVlanID}
+                #  addresses:
+                #    - ip_netmask: {get_param: StorageMgmtIpSubnet}
                 - type: vlan
                   vlan_id:
                     get_param: TenantNetworkVlanID
@@ -124,15 +133,12 @@ resources:
                 # Uncomment when including environments/network-management.yaml
                 # If setting default route on the Management interface, comment
                 # out the default route on the Control Plane.
-                #-
-                #  type: vlan
+                #- type: vlan
                 #  vlan_id: {get_param: ManagementNetworkVlanID}
                 #  addresses:
-                #    -
-                #      ip_netmask: {get_param: ManagementIpSubnet}
+                #    - ip_netmask: {get_param: ManagementIpSubnet}
                 #  routes:
-                #    -
-                #      default: true
+                #    - default: true
                 #      next_hop: {get_param: ManagementInterfaceDefaultRoute}
 outputs:
   OS::stack_id:
diff --git a/network/config/single-nic-vlans/networker.yaml b/network/config/single-nic-vlans/networker.yaml
new file mode 100644 (file)
index 0000000..54a17e4
--- /dev/null
@@ -0,0 +1,152 @@
+heat_template_version: pike
+description: >
+  Software Config to drive os-net-config to configure VLANs for a dedicated Neutron networker role.
+parameters:
+  ControlPlaneIp:
+    default: ''
+    description: IP address/subnet on the ctlplane network
+    type: string
+  ExternalIpSubnet:
+    default: ''
+    description: IP address/subnet on the external network
+    type: string
+  InternalApiIpSubnet:
+    default: ''
+    description: IP address/subnet on the internal API network
+    type: string
+  StorageIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage network
+    type: string
+  StorageMgmtIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage mgmt network
+    type: string
+  TenantIpSubnet:
+    default: ''
+    description: IP address/subnet on the tenant network
+    type: string
+  ManagementIpSubnet: # Only populated when including environments/network-management.yaml
+    default: ''
+    description: IP address/subnet on the management 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
+  ManagementNetworkVlanID:
+    default: 60
+    description: Vlan ID for the management network traffic.
+    type: number
+  ControlPlaneDefaultRoute: # Override this via parameter_defaults
+    description: The default route of the control plane network.
+    type: string
+  ExternalInterfaceDefaultRoute:
+    default: 10.0.0.1
+    description: default route for the external network
+    type: string
+  ManagementInterfaceDefaultRoute: # Commented out by default in this template
+    default: unset
+    description: The default route of the management network.
+    type: string
+  ControlPlaneSubnetCidr: # Override this via parameter_defaults
+    default: '24'
+    description: The subnet CIDR of the control plane network.
+    type: string
+  DnsServers: # Override this via parameter_defaults
+    default: []
+    description: A list of DNS servers (2 max for some implementations) that will be added to resolv.conf.
+    type: comma_delimited_list
+  EC2MetadataIp: # Override this via parameter_defaults
+    description: The IP address of the EC2 metadata server.
+    type: string
+resources:
+  OsNetConfigImpl:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        str_replace:
+          template:
+            get_file: ../../scripts/run-os-net-config.sh
+          params:
+            $network_config:
+              network_config:
+              - type: ovs_bridge
+                name: bridge_name
+                use_dhcp: false
+                dns_servers:
+                  get_param: DnsServers
+                addresses:
+                - ip_netmask:
+                    list_join:
+                    - /
+                    - - get_param: ControlPlaneIp
+                      - get_param: ControlPlaneSubnetCidr
+                routes:
+                - ip_netmask: 169.254.169.254/32
+                  next_hop:
+                    get_param: EC2MetadataIp
+                members:
+                - type: interface
+                  name: nic1
+                  # force the MAC address of the bridge to this interface
+                  primary: true
+                - type: vlan
+                  vlan_id:
+                    get_param: ExternalNetworkVlanID
+                  addresses:
+                  - ip_netmask:
+                      get_param: ExternalIpSubnet
+                  routes:
+                  - default: true
+                    next_hop:
+                      get_param: ExternalInterfaceDefaultRoute
+                - type: vlan
+                  vlan_id:
+                    get_param: InternalApiNetworkVlanID
+                  addresses:
+                  - ip_netmask:
+                      get_param: InternalApiIpSubnet
+                - type: vlan
+                  vlan_id:
+                    get_param: TenantNetworkVlanID
+                  addresses:
+                  - ip_netmask:
+                      get_param: TenantIpSubnet
+                # Uncomment when including environments/network-management.yaml
+                # If setting default route on the Management interface, comment
+                # out the default route on the External interface. This will
+                # make the External API unreachable from remote subnets.
+                #-
+                #  type: vlan
+                #  vlan_id: {get_param: ManagementNetworkVlanID}
+                #  addresses:
+                #    -
+                #      ip_netmask: {get_param: ManagementIpSubnet}
+                #  routes:
+                #    -
+                #      default: true
+                #      next_hop: {get_param: ManagementInterfaceDefaultRoute}
+outputs:
+  OS::stack_id:
+    description: The OsNetConfigImpl resource.
+    value:
+      get_resource: OsNetConfigImpl
+
index 277c761..5b1023d 100644 (file)
@@ -15,7 +15,7 @@ parameters:
     type: json
   ExternalNetAdminStateUp:
     default: false
-    description: This admin state of the network.
+    description: The admin state of the network.
     type: boolean
   ExternalNetEnableDHCP:
     default: false
index e577c1c..29930bb 100644 (file)
@@ -16,7 +16,7 @@ parameters:
     type: json
   ExternalNetAdminStateUp:
     default: false
-    description: This admin state of of the network.
+    description: The admin state of the network.
     type: boolean
   ExternalNetShared:
     default: false
index 563e6d4..554b900 100644 (file)
@@ -15,7 +15,7 @@ parameters:
     type: json
   InternalApiNetAdminStateUp:
     default: false
-    description: This admin state of the network.
+    description: The admin state of the network.
     type: boolean
   InternalApiNetEnableDHCP:
     default: false
index 05a740b..a089aa7 100644 (file)
@@ -16,7 +16,7 @@ parameters:
     type: json
   InternalApiNetAdminStateUp:
     default: false
-    description: This admin state of of the network.
+    description: The admin state of the network.
     type: boolean
   InternalApiNetShared:
     default: false
index a44d34d..e2527c4 100644 (file)
@@ -16,7 +16,7 @@ parameters:
     type: json
   ManagementNetAdminStateUp:
     default: false
-    description: This admin state of of the network.
+    description: The admin state of the network.
     type: boolean
   ManagementNetShared:
     default: false
index 75818bf..a6971b0 100644 (file)
@@ -64,6 +64,7 @@ parameters:
   ManagementIpSubnet:
     default: ''
     type: string
+    description: IP address/subnet on the management network
   ManagementIpUri:
     default: ''
     type: string
index 0fb9cc0..5c68c4c 100644 (file)
@@ -15,7 +15,7 @@ parameters:
     type: json
   StorageNetAdminStateUp:
     default: false
-    description: This admin state of the network.
+    description: The admin state of the network.
     type: boolean
   StorageNetEnableDHCP:
     default: false
index 9869f0d..23c5b4b 100644 (file)
@@ -15,7 +15,7 @@ parameters:
     type: json
   StorageMgmtNetAdminStateUp:
     default: false
-    description: This admin state of the network.
+    description: The admin state of the network.
     type: boolean
   StorageMgmtNetEnableDHCP:
     default: false
index d6b1652..ea60b5e 100644 (file)
@@ -16,7 +16,7 @@ parameters:
     type: json
   StorageMgmtNetAdminStateUp:
     default: false
-    description: This admin state of of the network.
+    description: The admin state of the network.
     type: boolean
   StorageMgmtNetShared:
     default: false
index 0ec34ad..52bd42a 100644 (file)
@@ -16,7 +16,7 @@ parameters:
     type: json
   StorageNetAdminStateUp:
     default: false
-    description: This admin state of of the network.
+    description: The admin state of the network.
     type: boolean
   StorageNetShared:
     default: false
index 4881308..c50dca2 100644 (file)
@@ -15,7 +15,7 @@ parameters:
     type: json
   TenantNetAdminStateUp:
     default: false
-    description: This admin state of the network.
+    description: The admin state of the network.
     type: boolean
   TenantNetEnableDHCP:
     default: false
index bbc2b6b..c77c2cb 100644 (file)
@@ -16,7 +16,7 @@ parameters:
     type: json
   TenantNetAdminStateUp:
     default: false
-    description: This admin state of of the network.
+    description: The admin state of the network.
     type: boolean
   TenantNetShared:
     default: false
index 51cc85d..aaed260 100644 (file)
@@ -107,6 +107,8 @@ resource_registry:
   # Upgrade resources
   OS::TripleO::UpgradeConfig: puppet/upgrade_config.yaml
 
+  OS::TripleO::DeployedServerEnvironment: OS::Heat::None
+
   # services
   OS::TripleO::Services: services.yaml
   OS::TripleO::Services::Apache: puppet/services/apache.yaml
@@ -138,6 +140,7 @@ resource_registry:
   OS::TripleO::Services::NeutronL2gwApi: OS::Heat::None
   OS::TripleO::Services::NeutronL3Agent: puppet/services/neutron-l3.yaml
   OS::TripleO::Services::NeutronL2gwAgent: OS::Heat::None
+  OS::TripleO::Services::NeutronLbaasv2Agent: OS::Heat::None
   OS::TripleO::Services::NeutronMetadataAgent: puppet/services/neutron-metadata.yaml
   # FIXME(shardy) the duplicate NeutronServer line can be removed when we've updated
   # the multinode job ControllerServices after this patch merges
@@ -191,7 +194,7 @@ resource_registry:
   OS::TripleO::Services::Snmp: puppet/services/snmp.yaml
   OS::TripleO::Services::Tacker: OS::Heat::None
   OS::TripleO::Services::Timezone: puppet/services/time/timezone.yaml
-  OS::TripleO::Services::CeilometerApi: puppet/services/ceilometer-api.yaml
+  OS::TripleO::Services::CeilometerApi: puppet/services/disabled/ceilometer-api-disabled.yaml
   OS::TripleO::Services::CeilometerCollector: puppet/services/disabled/ceilometer-collector-disabled.yaml
   OS::TripleO::Services::CeilometerExpirer: puppet/services/disabled/ceilometer-expirer-disabled.yaml
   OS::TripleO::Services::CeilometerAgentCentral: puppet/services/ceilometer-agent-central.yaml
index 56a10a5..ea5b292 100644 (file)
@@ -680,6 +680,10 @@ resources:
       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
       # No tenant or management VIP required
+    # Because of nested get_attr functions in the KeystoneAdminVip output, we
+    # can't determine which attributes of VipMap are used until after
+    # ServiceNetMap's attribute values are available.
+    depends_on: ServiceNetMap
 
   # All Nodes Validations
   AllNodesValidationConfig:
@@ -778,6 +782,38 @@ resources:
         {{role.name}}: {get_attr: [{{role.name}}, attributes, os_collect_config]}
 {% endfor %}
 
+  DeployedServerEnvironment:
+    type: OS::TripleO::DeployedServerEnvironment
+    properties:
+      RoleCounts:
+{% for role in roles %}
+        {{role.name}}DeployedServerCount: {get_param: {{role.name}}Count}
+{% endfor %}
+      VipMap:
+        map_merge:
+          - {get_attr: [VipMap, net_ip_map]}
+          - redis: {get_attr: [RedisVirtualIP, ip_address]}
+      DeployedServerPortMap:
+        map_merge:
+          list_concat:
+{% for role in roles %}
+              - {get_attr: [{{role.name}}, deployed_server_port_map]}
+{% endfor %}
+      DeployedServerDeploymentSwiftDataMap:
+        map_merge:
+          list_concat:
+{% for role in roles %}
+              - {get_attr: [{{role.name}}, deployed_server_deployment_swift_data_map]}
+{% endfor %}
+      DefaultRouteIp:
+        str_split:
+          - ':'
+          - str_split:
+            - '/'
+            - {get_attr: [ServerOsCollectConfigData, value, {{primary_role_name}}, '0', request, metadata_url]}
+            - 2
+          - 0
+
 outputs:
   ManagedEndpoints:
     description: Asserts that the keystone endpoints have been provisioned.
@@ -787,6 +823,11 @@ outputs:
     value: {get_attr: [EndpointMapData, value, KeystonePublic, uri]}
   KeystoneAdminVip:
     description: Keystone Admin VIP endpoint
+    # Note that these nested get_attr functions require a dependency
+    # relationship between VipMap and ServiceNetMap, since we can't determine
+    # which attributes of VipMap are used until after ServiceNetMap's attribute
+    # values are available. If this is ever reworked to not use nested
+    # get_attr, that dependency can be removed.
     value: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
   EndpointMap:
     description: |
@@ -830,10 +871,7 @@ outputs:
 {% endfor %}
   ServerOsCollectConfigData:
     description: The os-collect-config configuration associated with each server resource
-    value:
-{% for role in roles %}
-      {{role.name}}: {get_attr: [{{role.name}}, attributes, os_collect_config]}
-{% endfor %}
+    value: {get_attr: [ServerOsCollectConfigData, value]}
   VipMap:
     description: Mapping of each network to VIP addresses. Also includes the Redis VIP.
     value:
@@ -843,3 +881,8 @@ outputs:
   ServerIdData:
     description: Mapping of each role to a list of nova server IDs and the bootstrap ID
     value: {get_attr: [ServerIdMap, value]}
+  DeployedServerEnvironment:
+    description:
+      Environment data that can be used as input into the services stack when
+      using split-stack.
+    value: {get_attr: [DeployedServerEnvironment, deployed_server_environment]}
index f28f606..7d58d1d 100644 (file)
@@ -409,6 +409,7 @@ resources:
       server: {get_resource: BlockStorage}
       RoleParameters: {get_param: RoleParameters}
       ServiceNames: {get_param: ServiceNames}
+      deployment_actions: {get_attr: [DeploymentActions, value]}
 
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
@@ -517,6 +518,9 @@ resources:
   NodeExtraConfig:
     depends_on: NodeTLSCAData
     type: OS::TripleO::NodeExtraConfig
+    # We have to use conditions here so that we don't break backwards
+    # compatibility with templates everywhere
+    condition: server_not_blacklisted
     properties:
         server: {get_resource: BlockStorage}
 
@@ -539,11 +543,21 @@ resources:
           - ['CREATE', 'UPDATE']
           - []
 
+  DeploymentActions:
+    type: OS::Heat::Value
+    properties:
+      value:
+        if:
+          - server_not_blacklisted
+          - ['CREATE', 'UPDATE']
+          - []
+
   SshHostPubKey:
     type: OS::TripleO::Ssh::HostPubKey
     depends_on: BlockStorageDeployment
     properties:
         server: {get_resource: BlockStorage}
+        deployment_actions: {get_attr: [DeploymentActions, value]}
 
 outputs:
   ip_address:
@@ -646,6 +660,45 @@ CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
   management_ip_address:
     description: IP address of the server in the management network
     value: {get_attr: [ManagementPort, ip_address]}
+  deployed_server_port_map:
+    description: |
+      Map of Heat created hostname of the server to ip address. This is the
+      hostname before it has been mapped with the HostnameMap parameter, and
+      the IP address from the ctlplane network. This map can be used to construct
+      the DeployedServerPortMap parameter when using split-stack.
+    value:
+      map_replace:
+        - hostname:
+            fixed_ips:
+              - ip_address: {get_attr: [BlockStorage, networks, ctlplane, 0]}
+        - keys:
+            hostname:
+              list_join:
+                - '-'
+                - - {get_param: Hostname}
+                  - ctlplane
+  deployed_server_deployment_swift_data_map:
+    description:
+      Map of Heat created hostname of the server to the Swift container and object
+      used to created the temporary url for metadata polling with
+      os-collect-config.
+    value:
+      map_replace:
+        - hostname:
+            container:
+              str_split:
+                - '/'
+                - {get_attr: [BlockStorage, os_collect_config, request, metadata_url]}
+                - 5
+            object:
+              str_split:
+                - '?'
+                - str_split:
+                    - '/'
+                    - {get_attr: [BlockStorage, os_collect_config, request, metadata_url]}
+                    - 6
+                - 0
+        - keys: {hostname: {get_param: Hostname}}
   os_collect_config:
     description: The os-collect-config configuration associated with this server resource
     value: {get_attr: [BlockStorage, os_collect_config]}
index 85b276d..48e5b97 100644 (file)
@@ -415,6 +415,7 @@ resources:
       server: {get_resource: CephStorage}
       RoleParameters: {get_param: RoleParameters}
       ServiceNames: {get_param: ServiceNames}
+      deployment_actions: {get_attr: [DeploymentActions, value]}
 
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
@@ -521,6 +522,9 @@ resources:
   CephStorageExtraConfigPre:
     depends_on: CephStorageDeployment
     type: OS::TripleO::CephStorageExtraConfigPre
+    # We have to use conditions here so that we don't break backwards
+    # compatibility with templates everywhere
+    condition: server_not_blacklisted
     properties:
         server: {get_resource: CephStorage}
 
@@ -529,6 +533,9 @@ resources:
   NodeExtraConfig:
     depends_on: [CephStorageExtraConfigPre, NodeTLSCAData]
     type: OS::TripleO::NodeExtraConfig
+    # We have to use conditions here so that we don't break backwards
+    # compatibility with templates everywhere
+    condition: server_not_blacklisted
     properties:
         server: {get_resource: CephStorage}
 
@@ -550,11 +557,21 @@ resources:
           - ['CREATE', 'UPDATE']
           - []
 
+  DeploymentActions:
+    type: OS::Heat::Value
+    properties:
+      value:
+        if:
+          - server_not_blacklisted
+          - ['CREATE', 'UPDATE']
+          - []
+
   SshHostPubKey:
     type: OS::TripleO::Ssh::HostPubKey
     depends_on: CephStorageDeployment
     properties:
         server: {get_resource: CephStorage}
+        deployment_actions: {get_attr: [DeploymentActions, value]}
 
 outputs:
   ip_address:
@@ -657,6 +674,45 @@ CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
   management_ip_address:
     description: IP address of the server in the management network
     value: {get_attr: [ManagementPort, ip_address]}
+  deployed_server_port_map:
+    description: |
+      Map of Heat created hostname of the server to ip address. This is the
+      hostname before it has been mapped with the HostnameMap parameter, and
+      the IP address from the ctlplane network. This map can be used to construct
+      the DeployedServerPortMap parameter when using split-stack.
+    value:
+      map_replace:
+        - hostname:
+            fixed_ips:
+              - ip_address: {get_attr: [CephStorage, networks, ctlplane, 0]}
+        - keys:
+            hostname:
+              list_join:
+                - '-'
+                - - {get_param: Hostname}
+                  - ctlplane
+  deployed_server_deployment_swift_data_map:
+    description:
+      Map of Heat created hostname of the server to the Swift container and object
+      used to created the temporary url for metadata polling with
+      os-collect-config.
+    value:
+      map_replace:
+        - hostname:
+            container:
+              str_split:
+                - '/'
+                - {get_attr: [CephStorage, os_collect_config, request, metadata_url]}
+                - 5
+            object:
+              str_split:
+                - '?'
+                - str_split:
+                    - '/'
+                    - {get_attr: [CephStorage, os_collect_config, request, metadata_url]}
+                    - 6
+                - 0
+        - keys: {hostname: {get_param: Hostname}}
   os_collect_config:
     description: The os-collect-config configuration associated with this server resource
     value: {get_attr: [CephStorage, os_collect_config]}
index 10d082c..3ad6f74 100644 (file)
@@ -418,6 +418,7 @@ resources:
       server: {get_resource: NovaCompute}
       RoleParameters: {get_param: RoleParameters}
       ServiceNames: {get_param: ServiceNames}
+      deployment_actions: {get_attr: [DeploymentActions, value]}
 
   NetworkConfig:
     type: OS::TripleO::Compute::Net::SoftwareConfig
@@ -544,6 +545,9 @@ resources:
   ComputeExtraConfigPre:
     depends_on: NovaComputeDeployment
     type: OS::TripleO::ComputeExtraConfigPre
+    # We have to use conditions here so that we don't break backwards
+    # compatibility with templates everywhere
+    condition: server_not_blacklisted
     properties:
         server: {get_resource: NovaCompute}
 
@@ -552,6 +556,9 @@ resources:
   NodeExtraConfig:
     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
     type: OS::TripleO::NodeExtraConfig
+    # We have to use conditions here so that we don't break backwards
+    # compatibility with templates everywhere
+    condition: server_not_blacklisted
     properties:
         server: {get_resource: NovaCompute}
 
@@ -574,11 +581,21 @@ resources:
         update_identifier:
           get_param: UpdateIdentifier
 
+  DeploymentActions:
+    type: OS::Heat::Value
+    properties:
+      value:
+        if:
+          - server_not_blacklisted
+          - ['CREATE', 'UPDATE']
+          - []
+
   SshHostPubKey:
     type: OS::TripleO::Ssh::HostPubKey
     depends_on: NovaComputeDeployment
     properties:
         server: {get_resource: NovaCompute}
+        deployment_actions: {get_attr: [DeploymentActions, value]}
 
 outputs:
   ip_address:
@@ -602,6 +619,45 @@ outputs:
   management_ip_address:
     description: IP address of the server in the management network
     value: {get_attr: [ManagementPort, ip_address]}
+  deployed_server_port_map:
+    description: |
+      Map of Heat created hostname of the server to ip address. This is the
+      hostname before it has been mapped with the HostnameMap parameter, and
+      the IP address from the ctlplane network. This map can be used to construct
+      the DeployedServerPortMap parameter when using split-stack.
+    value:
+      map_replace:
+        - hostname:
+            fixed_ips:
+              - ip_address: {get_attr: [NovaCompute, networks, ctlplane, 0]}
+        - keys:
+            hostname:
+              list_join:
+                - '-'
+                - - {get_param: Hostname}
+                  - ctlplane
+  deployed_server_deployment_swift_data_map:
+    description:
+      Map of Heat created hostname of the server to the Swift container and object
+      used to created the temporary url for metadata polling with
+      os-collect-config.
+    value:
+      map_replace:
+        - hostname:
+            container:
+              str_split:
+                - '/'
+                - {get_attr: [NovaCompute, os_collect_config, request, metadata_url]}
+                - 5
+            object:
+              str_split:
+                - '?'
+                - str_split:
+                    - '/'
+                    - {get_attr: [NovaCompute, os_collect_config, request, metadata_url]}
+                    - 6
+                - 0
+        - keys: {hostname: {get_param: Hostname}}
   hostname:
     description: Hostname of the server
     value: {get_attr: [NovaCompute, name]}
index ca08c65..cdc2ec6 100644 (file)
@@ -441,6 +441,7 @@ resources:
       server: {get_resource: Controller}
       RoleParameters: {get_param: RoleParameters}
       ServiceNames: {get_param: ServiceNames}
+      deployment_actions: {get_attr: [DeploymentActions, value]}
 
   NetworkConfig:
     type: OS::TripleO::Controller::Net::SoftwareConfig
@@ -524,7 +525,6 @@ resources:
       config: {get_resource: ControllerConfig}
       server: {get_resource: Controller}
       input_values:
-        bootstack_nodeid: {get_attr: [Controller, name]}
         enable_load_balancer: {get_param: EnableLoadBalancer}
         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
 
@@ -567,9 +567,6 @@ resources:
               - {get_param: ControllerExtraConfig}
           extraconfig: {get_param: ExtraConfig}
           controller:
-            # data supplied directly to this deployment configuration, etc
-            bootstack_nodeid: {get_input: bootstack_nodeid}
-            # Pacemaker
             enable_load_balancer: {get_input: enable_load_balancer}
 
             # Misc
@@ -587,6 +584,9 @@ resources:
   ControllerExtraConfigPre:
     depends_on: ControllerDeployment
     type: OS::TripleO::ControllerExtraConfigPre
+    # We have to use conditions here so that we don't break backwards
+    # compatibility with templates everywhere
+    condition: server_not_blacklisted
     properties:
         server: {get_resource: Controller}
 
@@ -595,6 +595,9 @@ resources:
   NodeExtraConfig:
     depends_on: [ControllerExtraConfigPre, NodeTLSData]
     type: OS::TripleO::NodeExtraConfig
+    # We have to use conditions here so that we don't break backwards
+    # compatibility with templates everywhere
+    condition: server_not_blacklisted
     properties:
         server: {get_resource: Controller}
 
@@ -617,11 +620,21 @@ resources:
         update_identifier:
           get_param: UpdateIdentifier
 
+  DeploymentActions:
+    type: OS::Heat::Value
+    properties:
+      value:
+        if:
+          - server_not_blacklisted
+          - ['CREATE', 'UPDATE']
+          - []
+
   SshHostPubKey:
     type: OS::TripleO::Ssh::HostPubKey
     depends_on: ControllerDeployment
     properties:
         server: {get_resource: Controller}
+        deployment_actions: {get_attr: [DeploymentActions, value]}
 
 outputs:
   ip_address:
@@ -645,6 +658,45 @@ outputs:
   management_ip_address:
     description: IP address of the server in the management network
     value: {get_attr: [ManagementPort, ip_address]}
+  deployed_server_port_map:
+    description:
+      Map of Heat created hostname of the server to ip address. This is the
+      hostname before it has been mapped with the HostnameMap parameter, and
+      the IP address from the ctlplane network. This map can be used to construct
+      the DeployedServerPortMap parameter when using split-stack.
+    value:
+      map_replace:
+        - hostname:
+            fixed_ips:
+              - ip_address: {get_attr: [Controller, networks, ctlplane, 0]}
+        - keys:
+            hostname:
+              list_join:
+                - '-'
+                - - {get_param: Hostname}
+                  - ctlplane
+  deployed_server_deployment_swift_data_map:
+    description:
+      Map of Heat created hostname of the server to the Swift container and object
+      used to created the temporary url for metadata polling with
+      os-collect-config.
+    value:
+      map_replace:
+        - hostname:
+            container:
+              str_split:
+                - '/'
+                - {get_attr: [Controller, os_collect_config, request, metadata_url]}
+                - 5
+            object:
+              str_split:
+                - '?'
+                - str_split:
+                    - '/'
+                    - {get_attr: [Controller, os_collect_config, request, metadata_url]}
+                    - 6
+                - 0
+        - keys: {hostname: {get_param: Hostname}}
   hostname:
     description: Hostname of the server
     value: {get_attr: [Controller, name]}
index 4a1670f..a03a9da 100644 (file)
@@ -409,6 +409,7 @@ resources:
       server: {get_resource: SwiftStorage}
       RoleParameters: {get_param: RoleParameters}
       ServiceNames: {get_param: ServiceNames}
+      deployment_actions: {get_attr: [DeploymentActions, value]}
 
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
@@ -517,6 +518,9 @@ resources:
   NodeExtraConfig:
     depends_on: NodeTLSCAData
     type: OS::TripleO::NodeExtraConfig
+    # We have to use conditions here so that we don't break backwards
+    # compatibility with templates everywhere
+    condition: server_not_blacklisted
     properties:
         server: {get_resource: SwiftStorage}
 
@@ -538,11 +542,21 @@ resources:
           - ['CREATE', 'UPDATE']
           - []
 
+  DeploymentActions:
+    type: OS::Heat::Value
+    properties:
+      value:
+        if:
+          - server_not_blacklisted
+          - ['CREATE', 'UPDATE']
+          - []
+
   SshHostPubKey:
     type: OS::TripleO::Ssh::HostPubKey
     depends_on: SwiftStorageHieraDeploy
     properties:
         server: {get_resource: SwiftStorage}
+        deployment_actions: {get_attr: [DeploymentActions, value]}
 
 outputs:
   ip_address:
@@ -645,6 +659,45 @@ CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
   management_ip_address:
     description: IP address of the server in the management network
     value: {get_attr: [ManagementPort, ip_address]}
+  deployed_server_port_map:
+    description: |
+      Map of Heat created hostname of the server to ip address. This is the
+      hostname before it has been mapped with the HostnameMap parameter, and
+      the IP address from the ctlplane network. This map can be used to construct
+      the DeployedServerPortMap parameter when using split-stack.
+    value:
+      map_replace:
+        - hostname:
+            fixed_ips:
+              - ip_address: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
+        - keys:
+            hostname:
+              list_join:
+                - '-'
+                - - {get_param: Hostname}
+                  - ctlplane
+  deployed_server_deployment_swift_data_map:
+    description:
+      Map of Heat created hostname of the server to the Swift container and object
+      used to created the temporary url for metadata polling with
+      os-collect-config.
+    value:
+      map_replace:
+        - hostname:
+            container:
+              str_split:
+                - '/'
+                - {get_attr: [SwiftStorage, os_collect_config, request, metadata_url]}
+                - 5
+            object:
+              str_split:
+                - '?'
+                - str_split:
+                    - '/'
+                    - {get_attr: [SwiftStorage, os_collect_config, request, metadata_url]}
+                    - 6
+                - 0
+        - keys: {hostname: {get_param: Hostname}}
   os_collect_config:
     description: The os-collect-config configuration associated with this server resource
     value: {get_attr: [SwiftStorage, os_collect_config]}
index 5aac089..039bd6b 100644 (file)
@@ -1,18 +1,18 @@
 heat_template_version: pike
-description: 'OpenStack {{role}} node configured by Puppet'
+description: 'OpenStack {{role.name}} node configured by Puppet'
 parameters:
-  Overcloud{{role}}Flavor:
-    description: Flavor for the {{role}} node.
+  Overcloud{{role.name}}Flavor:
+    description: Flavor for the {{role.name}} node.
     default: baremetal
     type: string
-{% if disable_constraints is not defined %}
+{% if role.disable_constraints is not defined %}
     constraints:
       - custom_constraint: nova.flavor
 {% endif %}
-  {{role}}Image:
+  {{role.name}}Image:
     type: string
     default: overcloud-full
-{% if disable_constraints is not defined %}
+{% if role.disable_constraints is not defined %}
     constraints:
       - custom_constraint: glance.image
 {% endif %}
@@ -24,7 +24,7 @@ parameters:
     description: Name of an existing Nova key pair to enable SSH access to the instances
     type: string
     default: default
-{% if disable_constraints is not defined %}
+{% if role.disable_constraints is not defined %}
     constraints:
       - custom_constraint: nova.keypair
 {% endif %}
@@ -63,14 +63,14 @@ parameters:
     default: {}
     description: |
       Additional hiera configuration to inject into the cluster. Note
-      that {{role}}ExtraConfig takes precedence over ExtraConfig.
+      that {{role.name}}ExtraConfig takes precedence over ExtraConfig.
     type: json
-  {{role}}ExtraConfig:
+  {{role.name}}ExtraConfig:
     default: {}
     description: |
       Role specific additional hiera configuration to inject into the cluster.
     type: json
-  {{role}}IPs:
+  {{role.name}}IPs:
     default: {}
     type: json
   NetworkDeploymentActions:
@@ -91,7 +91,7 @@ parameters:
     description: >
       The DNS domain used for the hosts. This must match the
       overcloud_domain_name configured on the undercloud.
-  {{role}}ServerMetadata:
+  {{role.name}}ServerMetadata:
     default: {}
     description: >
       Extra properties or metadata passed to Nova for the created nodes in
@@ -106,7 +106,7 @@ parameters:
       the overcloud. It's accessible via the Nova metadata API. This applies to
       all roles and is merged with a role-specific metadata parameter.
     type: json
-  {{role}}SchedulerHints:
+  {{role.name}}SchedulerHints:
     type: json
     description: Optional scheduler hints to pass to nova
     default: {}
@@ -203,16 +203,16 @@ conditions:
       - ""
 
 resources:
-  {{role}}:
-    type: OS::TripleO::{{role}}Server
+  {{role.name}}:
+    type: OS::TripleO::{{role.name}}Server
     metadata:
       os-collect-config:
         command: {get_param: ConfigCommand}
         splay: {get_param: ConfigCollectSplay}
     properties:
-      image: {get_param: {{role}}Image}
+      image: {get_param: {{role.name}}Image}
       image_update_policy: {get_param: ImageUpdatePolicy}
-      flavor: {get_param: Overcloud{{role}}Flavor}
+      flavor: {get_param: Overcloud{{role.name}}Flavor}
       key_name: {get_param: KeyName}
       networks:
         - network: ctlplane
@@ -226,9 +226,9 @@ resources:
       metadata:
         map_merge:
           - {get_param: ServerMetadata}
-          - {get_param: {{role}}ServerMetadata}
+          - {get_param: {{role.name}}ServerMetadata}
           - {get_param: ServiceMetadataSettings}
-      scheduler_hints: {get_param: {{role}}SchedulerHints}
+      scheduler_hints: {get_param: {{role.name}}SchedulerHints}
       deployment_swift_data:
         if:
           - deployment_swift_data_map_unset
@@ -261,83 +261,34 @@ resources:
   # For optional operator role-specific userdata
   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
   RoleUserData:
-    type: OS::TripleO::{{role}}::NodeUserData
+    type: OS::TripleO::{{role.name}}::NodeUserData
 
-  ExternalPort:
-    type: OS::TripleO::{{role}}::Ports::ExternalPort
+  {%- for network in networks %}
+  {{network.name}}Port:
+    type: OS::TripleO::{{role.name}}::Ports::{{network.name}}Port
     properties:
-      ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
-      IPPool: {get_param: {{role}}IPs}
-      NodeIndex: {get_param: NodeIndex}
-
-  InternalApiPort:
-    type: OS::TripleO::{{role}}::Ports::InternalApiPort
-    properties:
-      ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
-      IPPool: {get_param: {{role}}IPs}
-      NodeIndex: {get_param: NodeIndex}
-
-  StoragePort:
-    type: OS::TripleO::{{role}}::Ports::StoragePort
-    properties:
-      ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
-      IPPool: {get_param: {{role}}IPs}
-      NodeIndex: {get_param: NodeIndex}
-
-  StorageMgmtPort:
-    type: OS::TripleO::{{role}}::Ports::StorageMgmtPort
-    properties:
-      ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
-      IPPool: {get_param: {{role}}IPs}
-      NodeIndex: {get_param: NodeIndex}
-
-  TenantPort:
-    type: OS::TripleO::{{role}}::Ports::TenantPort
-    properties:
-      ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
-      IPPool: {get_param: {{role}}IPs}
-      NodeIndex: {get_param: NodeIndex}
-
-  ManagementPort:
-    type: OS::TripleO::{{role}}::Ports::ManagementPort
-    properties:
-      ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
-      IPPool: {get_param: {{role}}IPs}
+      ControlPlaneIP: {get_attr: [{{role.name}}, networks, ctlplane, 0]}
+      IPPool: {get_param: {{role.name}}IPs}
       NodeIndex: {get_param: NodeIndex}
+  {%- endfor %}
 
   NetworkConfig:
-    type: OS::TripleO::{{role}}::Net::SoftwareConfig
+    type: OS::TripleO::{{role.name}}::Net::SoftwareConfig
     properties:
-      ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
-      ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
-      InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
-      StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
-      StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
-      TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
-      ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
+      ControlPlaneIp: {get_attr: [{{role.name}}, networks, ctlplane, 0]}
+  {%- for network in networks %}
+      {{network.name}}IpSubnet: {get_attr: [{{network.name}}Port, ip_subnet]}
+  {%- endfor %}
 
   NetIpMap:
     type: OS::TripleO::Network::Ports::NetIpMap
     properties:
-      ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
-      ExternalIp: {get_attr: [ExternalPort, ip_address]}
-      ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
-      ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
-      InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
-      InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
-      InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
-      StorageIp: {get_attr: [StoragePort, ip_address]}
-      StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
-      StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
-      StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
-      StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
-      StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
-      TenantIp: {get_attr: [TenantPort, ip_address]}
-      TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
-      TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
-      ManagementIp: {get_attr: [ManagementPort, ip_address]}
-      ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
-      ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
+      ControlPlaneIp: {get_attr: [{{role.name}}, networks, ctlplane, 0]}
+  {%- for network in networks %}
+      {{network.name}}Ip: {get_attr: [{{network.name}}Port, ip_address]}
+      {{network.name}}IpSubnet: {get_attr: [{{network.name}}Port, ip_subnet]}
+      {{network.name}}IpUri: {get_attr: [{{network.name}}Port, ip_address_uri]}
+  {%- endfor %}
 
   NetHostMap:
     type: OS::Heat::Value
@@ -348,93 +299,94 @@ resources:
           fqdn:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - external
               - {get_param: CloudDomain}
           short:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - external
         internal_api:
           fqdn:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - internalapi
               - {get_param: CloudDomain}
           short:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - internalapi
         storage:
           fqdn:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - storage
               - {get_param: CloudDomain}
           short:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - storage
         storage_mgmt:
           fqdn:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - storagemgmt
               - {get_param: CloudDomain}
           short:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - storagemgmt
         tenant:
           fqdn:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - tenant
               - {get_param: CloudDomain}
           short:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - tenant
         management:
           fqdn:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - management
               - {get_param: CloudDomain}
           short:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - management
         ctlplane:
           fqdn:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - ctlplane
               - {get_param: CloudDomain}
           short:
             list_join:
             - '.'
-            - - {get_attr: [{{role}}, name]}
+            - - {get_attr: [{{role.name}}, name]}
               - ctlplane
 
   PreNetworkConfig:
-    type: OS::TripleO::{{role}}::PreNetworkConfig
+    type: OS::TripleO::{{role.name}}::PreNetworkConfig
     properties:
-      server: {get_resource: {{role}}}
+      server: {get_resource: {{role.name}}}
       RoleParameters: {get_param: RoleParameters}
       ServiceNames: {get_param: ServiceNames}
+      deployment_actions: {get_attr: [DeploymentActions, value]}
 
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
@@ -442,7 +394,7 @@ resources:
     properties:
       name: NetworkDeployment
       config: {get_resource: NetworkConfig}
-      server: {get_resource: {{role}}}
+      server: {get_resource: {{role.name}}}
       actions: {get_param: NetworkDeploymentActions}
       input_values:
         bridge_name: {get_param: NeutronPhysicalBridge}
@@ -453,7 +405,7 @@ resources:
           - {get_param: NetworkDeploymentActions}
           - []
 
-  {{role}}UpgradeInitConfig:
+  {{role.name}}UpgradeInitConfig:
     type: OS::Heat::SoftwareConfig
     properties:
       group: script
@@ -467,26 +419,26 @@ resources:
 
   # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
   # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
-  {{role}}UpgradeInitDeployment:
+  {{role.name}}UpgradeInitDeployment:
     type: OS::Heat::SoftwareDeployment
     depends_on: NetworkDeployment
     properties:
-      name: {{role}}UpgradeInitDeployment
-      server: {get_resource: {{role}}}
-      config: {get_resource: {{role}}UpgradeInitConfig}
+      name: {{role.name}}UpgradeInitDeployment
+      server: {get_resource: {{role.name}}}
+      config: {get_resource: {{role.name}}UpgradeInitConfig}
       actions:
         if:
           - server_not_blacklisted
           - ['CREATE', 'UPDATE']
           - []
 
-  {{role}}Deployment:
+  {{role.name}}Deployment:
     type: OS::Heat::StructuredDeployment
-    depends_on: {{role}}UpgradeInitDeployment
+    depends_on: {{role.name}}UpgradeInitDeployment
     properties:
-      name: {{role}}Deployment
-      config: {get_resource: {{role}}Config}
-      server: {get_resource: {{role}}}
+      name: {{role.name}}Deployment
+      config: {get_resource: {{role.name}}Config}
+      server: {get_resource: {{role.name}}}
       input_values:
         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
       actions:
@@ -495,7 +447,7 @@ resources:
           - ['CREATE', 'UPDATE']
           - []
 
-  {{role}}Config:
+  {{role.name}}Config:
     type: OS::Heat::StructuredConfig
     properties:
       group: hiera
@@ -504,11 +456,11 @@ resources:
           - '"%{::uuid}"'
           - heat_config_%{::deploy_config_name}
           - config_step
-          - {{role.lower()}}_extraconfig
+          - {{role.name.lower()}}_extraconfig
           - extraconfig
           - service_names
           - service_configs
-          - {{role.lower()}}
+          - {{role.name.lower()}}
           - bootstrap_node # provided by allNodesConfig
           - all_nodes # provided by allNodesConfig
           - vip_data # provided by allNodesConfig
@@ -522,9 +474,9 @@ resources:
             map_replace:
               - {get_param: ServiceConfigSettings}
               - values: {get_attr: [NetIpMap, net_ip_map]}
-          {{role.lower()}}_extraconfig: {get_param: {{role}}ExtraConfig}
+          {{role.name.lower()}}_extraconfig: {get_param: {{role.name}}ExtraConfig}
           extraconfig: {get_param: ExtraConfig}
-          {{role.lower()}}:
+          {{role.name.lower()}}:
             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
             tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: LoggingSources}
             tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: LoggingGroups}
@@ -538,25 +490,31 @@ resources:
 
   # Resource for site-specific injection of root certificate
   NodeTLSCAData:
-    depends_on: {{role}}Deployment
+    depends_on: {{role.name}}Deployment
     type: OS::TripleO::NodeTLSCAData
     properties:
-      server: {get_resource: {{role}}}
+      server: {get_resource: {{role.name}}}
 
   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
-  {{role}}ExtraConfigPre:
-    depends_on: {{role}}Deployment
-    type: OS::TripleO::{{role}}ExtraConfigPre
+  {{role.name}}ExtraConfigPre:
+    depends_on: {{role.name}}Deployment
+    type: OS::TripleO::{{role.name}}ExtraConfigPre
+    # We have to use conditions here so that we don't break backwards
+    # compatibility with templates everywhere
+    condition: server_not_blacklisted
     properties:
-        server: {get_resource: {{role}}}
+        server: {get_resource: {{role.name}}}
 
   # Hook for site-specific additional pre-deployment config,
   # applying to all nodes, e.g node registration/unregistration
   NodeExtraConfig:
-    depends_on: [{{role}}ExtraConfigPre, NodeTLSCAData]
+    depends_on: [{{role.name}}ExtraConfigPre, NodeTLSCAData]
     type: OS::TripleO::NodeExtraConfig
+    # We have to use conditions here so that we don't break backwards
+    # compatibility with templates everywhere
+    condition: server_not_blacklisted
     properties:
-        server: {get_resource: {{role}}}
+        server: {get_resource: {{role.name}}}
 
   UpdateConfig:
     type: OS::TripleO::Tasks::PackageUpdate
@@ -567,7 +525,7 @@ resources:
     properties:
       name: UpdateDeployment
       config: {get_resource: UpdateConfig}
-      server: {get_resource: {{role}}}
+      server: {get_resource: {{role.name}}}
       input_values:
         update_identifier:
           get_param: UpdateIdentifier
@@ -577,113 +535,124 @@ resources:
           - ['CREATE', 'UPDATE']
           - []
 
+  DeploymentActions:
+    type: OS::Heat::Value
+    properties:
+      value:
+        if:
+          - server_not_blacklisted
+          - ['CREATE', 'UPDATE']
+          - []
+
   SshHostPubKey:
     type: OS::TripleO::Ssh::HostPubKey
-    depends_on: {{role}}Deployment
+    depends_on: {{role.name}}Deployment
     properties:
-        server: {get_resource: {{role}}}
+        server: {get_resource: {{role.name}}}
+        deployment_actions: {get_attr: [DeploymentActions, value]}
 
 outputs:
   ip_address:
     description: IP address of the server in the ctlplane network
-    value: {get_attr: [{{role}}, networks, ctlplane, 0]}
+    value: {get_attr: [{{role.name}}, networks, ctlplane, 0]}
   hostname:
     description: Hostname of the server
-    value: {get_attr: [{{role}}, name]}
+    value: {get_attr: [{{role.name}}, name]}
   hostname_map:
     description: Mapping of network names to hostnames
     value:
-      external: {get_attr: [NetHostMap, value, external, fqdn]}
-      internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
-      storage: {get_attr: [NetHostMap, value, storage, fqdn]}
-      storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
-      tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
-      management: {get_attr: [NetHostMap, value, management, fqdn]}
+  {%- for network in networks %}
+      {{network.name_lower|default(network.name.lower())}}: {get_attr: [NetHostMap, value, {{network.name_lower|default(network.name.lower()) }}, fqdn]}
+  {%- endfor %}
       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
   hosts_entry:
     value:
       str_replace:
         template: |
           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
-          EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
-          INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
-          STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
-          STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
-          TENANTIP TENANTHOST.DOMAIN TENANTHOST
-          MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
+  {%- for network in networks %}
+          {{network.name}}IP {{network.name}}HOST.DOMAIN {{network.name}}HOST
+  {%- endfor %}
           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
         params:
-          PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
+          PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role.name}}HostnameResolveNetwork]}]}
           DOMAIN: {get_param: CloudDomain}
-          PRIMARYHOST: {get_attr: [{{role}}, name]}
-          EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
-          EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
-          INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
-          INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
-          STORAGEIP: {get_attr: [StoragePort, ip_address]}
-          STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
-          STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
-          STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
-          TENANTIP: {get_attr: [TenantPort, ip_address]}
-          TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
-          MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
-          MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
-          CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
+          PRIMARYHOST: {get_attr: [{{role.name}}, name]}
+  {%- for network in networks %}
+          {{network.name}}IP: {get_attr: [{{network.name}}Port, ip_address]}
+          {{network.name}}HOST: {get_attr: [NetHostMap, value, {{network.name_lower|default(network.name.lower())}}, short]}
+  {%- endfor %}
+          CTLPLANEIP: {get_attr: [{{role.name}}, networks, ctlplane, 0]}
           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
   known_hosts_entry:
     description: Entry for ssh known hosts
     value:
       str_replace:
         template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
-EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
-INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
-STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
-STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
-TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
-MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
+  {%- for network in networks %}
+{{network.name}}IP,{{network.name}}HOST.DOMAIN,{{network.name}}HOST,\
+  {%- endfor %}
 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
         params:
-          PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
+          PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role.name}}HostnameResolveNetwork]}]}
           DOMAIN: {get_param: CloudDomain}
-          PRIMARYHOST: {get_attr: [{{role}}, name]}
-          EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
-          EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
-          INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
-          INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
-          STORAGEIP: {get_attr: [StoragePort, ip_address]}
-          STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
-          STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
-          STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
-          TENANTIP: {get_attr: [TenantPort, ip_address]}
-          TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
-          MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
-          MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
-          CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
+          PRIMARYHOST: {get_attr: [{{role.name}}, name]}
+  {%- for network in networks %}
+          {{network.name}}IP: {get_attr: [{{network.name}}Port, ip_address]}
+          {{network.name}}HOST: {get_attr: [NetHostMap, value, {{network.name_lower|default(network.name.lower())}}, short]}
+  {%- endfor %}
+          CTLPLANEIP: {get_attr: [{{role.name}}, networks, ctlplane, 0]}
           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
           HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
   nova_server_resource:
-    description: Heat resource handle for {{role}} server
+    description: Heat resource handle for {{role.name}} server
     value:
-      {get_resource: {{role}}}
+      {get_resource: {{role.name}}}
     condition: server_not_blacklisted
-  external_ip_address:
-    description: IP address of the server in the external network
-    value: {get_attr: [ExternalPort, ip_address]}
-  internal_api_ip_address:
-    description: IP address of the server in the internal_api network
-    value: {get_attr: [InternalApiPort, ip_address]}
-  storage_ip_address:
-    description: IP address of the server in the storage network
-    value: {get_attr: [StoragePort, ip_address]}
-  storage_mgmt_ip_address:
-    description: IP address of the server in the storage_mgmt network
-    value: {get_attr: [StorageMgmtPort, ip_address]}
-  tenant_ip_address:
-    description: IP address of the server in the tenant network
-    value: {get_attr: [TenantPort, ip_address]}
-  management_ip_address:
-    description: IP address of the server in the management network
-    value: {get_attr: [ManagementPort, ip_address]}
+  deployed_server_port_map:
+    description: |
+      Map of Heat created hostname of the server to ip address. This is the
+      hostname before it has been mapped with the HostnameMap parameter, and
+      the IP address from the ctlplane network. This map can be used to construct
+      the DeployedServerPortMap parameter when using split-stack.
+    value:
+      map_replace:
+        - hostname:
+            fixed_ips:
+              - ip_address: {get_attr: [{{role.name}}, networks, ctlplane, 0]}
+        - keys:
+            hostname:
+              list_join:
+                - '-'
+                - - {get_param: Hostname}
+                  - ctlplane
+  deployed_server_deployment_swift_data_map:
+    description:
+      Map of Heat created hostname of the server to the Swift container and object
+      used to created the temporary url for metadata polling with
+      os-collect-config.
+    value:
+      map_replace:
+        - hostname:
+            container:
+              str_split:
+                - '/'
+                - {get_attr: [{{role.name}}, os_collect_config, request, metadata_url]}
+                - 5
+            object:
+              str_split:
+                - '?'
+                - str_split:
+                    - '/'
+                    - {get_attr: [{{role.name}}, os_collect_config, request, metadata_url]}
+                    - 6
+                - 0
+        - keys: {hostname: {get_param: Hostname}}
   os_collect_config:
     description: The os-collect-config configuration associated with this server resource
-    value: {get_attr: [{{role}}, os_collect_config]}
+    value: {get_attr: [{{role.name}}, os_collect_config]}
+  {%- for network in networks %}
+  {{network.name_lower|default(network.name.lower())}}_ip_address:
+    description: IP address of the server in the {{network.name}} network
+    value: {get_attr: [{{network.name}}Port, ip_address]}
+  {%- endfor %}
index 0563d08..c6a8f88 100644 (file)
@@ -64,6 +64,12 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   service_debug_unset: {equals : [{get_param: AodhDebug}, '']}
@@ -91,6 +97,7 @@ outputs:
           - {get_param: Debug }
           - {get_param: AodhDebug }
         aodh::auth::auth_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
+        aodh::notification_driver: {get_param: NotificationDriver}
         aodh::rabbit_userid: {get_param: RabbitUserName}
         aodh::rabbit_password: {get_param: RabbitPassword}
         aodh::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
index 5133124..65c26d4 100644 (file)
@@ -73,6 +73,12 @@ parameters:
       e.g. { barbican-context_is_admin: { key: context_is_admin, value: 'role:admin' } }
     default: {}
     type: json
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 resources:
 
@@ -109,6 +115,7 @@ outputs:
               - service_debug_unset
               - {get_param: Debug }
               - {get_param: BarbicanDebug }
+            barbican::api::notification_driver: {get_param: NotificationDriver}
             barbican::api::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
             barbican::api::rabbit_userid: {get_param: RabbitUserName}
             barbican::api::rabbit_password: {get_param: RabbitPassword}
index 1d86369..0cd9a6d 100644 (file)
@@ -103,6 +103,12 @@ parameters:
     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
     type: string
     hidden: true
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   service_debug_unset: {equals : [{get_param: CeilometerDebug}, '']}
@@ -139,6 +145,7 @@ outputs:
         ceilometer::dispatcher::gnocchi::filter_project: 'service'
         ceilometer::dispatcher::gnocchi::archive_policy: 'low'
         ceilometer::dispatcher::gnocchi::resources_definition_file: 'gnocchi_resources.yaml'
+        ceilometer::notification_driver: {get_param: NotificationDriver}
         ceilometer::rabbit_userid: {get_param: RabbitUserName}
         ceilometer::rabbit_password: {get_param: RabbitPassword}
         ceilometer::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
index 2855230..cbeef6c 100644 (file)
@@ -69,11 +69,11 @@ parameters:
     type: json
   CephValidationRetries:
     type: number
-    default: 5
+    default: 40
     description: Number of retry attempts for Ceph validation
   CephValidationDelay:
     type: number
-    default: 10
+    default: 30
     description: Interval (in seconds) in between validation checks
   MonitoringSubscriptionCephMon:
     default: 'overcloud-ceph-mon'
index 036209f..47715a7 100644 (file)
@@ -60,6 +60,12 @@ parameters:
       e.g. { cinder-context_is_admin: { key: context_is_admin, value: 'role:admin' } }
     default: {}
     type: json
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   cinder_workers_zero: {equals : [{get_param: CinderWorkers}, 0]}
@@ -105,6 +111,7 @@ outputs:
             cinder::keystone::authtoken::user_domain_name: 'Default'
             cinder::keystone::authtoken::project_domain_name: 'Default'
             cinder::policy::policies: {get_param: CinderApiPolicies}
+            cinder::ceilometer::notification_driver: {get_param: NotificationDriver}
             cinder::api::enable_proxy_headers_parsing: true
 
             cinder::api::nova_catalog_info: 'compute:nova:internalURL'
index 5bca94d..f30f113 100644 (file)
@@ -65,6 +65,12 @@ parameters:
       e.g. { congress-context_is_admin: { key: context_is_admin, value: 'role:admin' } }
     default: {}
     type: json
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   service_debug_unset: {equals : [{get_param: CongressDebug}, '']}
@@ -92,6 +98,7 @@ outputs:
           - {get_param: Debug }
           - {get_param: CongressDebug }
         congress::rpc_backend: rabbit
+        congress::notification_driver: {get_param: NotificationDriver}
         congress::rabbit_userid: {get_param: RabbitUserName}
         congress::rabbit_password: {get_param: RabbitPassword}
         congress::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
diff --git a/puppet/services/disabled/ceilometer-api-disabled.yaml b/puppet/services/disabled/ceilometer-api-disabled.yaml
new file mode 100644 (file)
index 0000000..6dce61e
--- /dev/null
@@ -0,0 +1,41 @@
+heat_template_version: pike
+
+description: >
+  OpenStack Ceilometer API service, disabled since pike
+
+parameters:
+  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
+
+outputs:
+  role_data:
+    description: Role data for the disabled Ceilometer API role.
+    value:
+      service_name: ceilometer_api_disabled
+      upgrade_tasks:
+        - name: Purge Ceilometer apache config files
+          tags: step1
+          file: path=/etc/httpd/conf.d/10-ceilometer_wsgi.conf state=absent
+        - name: Clean up ceilometer port from ports.conf
+          tags: step1
+          lineinfile: dest=/etc/httpd/conf/ports.conf state=absent regexp="8777$"
index a3d5a79..53cde96 100644 (file)
@@ -128,6 +128,12 @@ parameters:
       e.g. { glance-context_is_admin: { key: context_is_admin, value: 'role:admin' } }
     default: {}
     type: json
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   use_tls_proxy: {equals : [{get_param: EnableInternalTLS}, true]}
@@ -237,7 +243,7 @@ outputs:
             glance::notify::rabbitmq::rabbit_port: {get_param: RabbitClientPort}
             glance::notify::rabbitmq::rabbit_password: {get_param: RabbitPassword}
             glance::notify::rabbitmq::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
-            glance::notify::rabbitmq::notification_driver: messagingv2
+            glance::notify::rabbitmq::notification_driver: {get_param: NotificationDriver}
             tripleo::profile::base::glance::api::glance_nfs_enabled: {get_param: GlanceNfsEnabled}
             tripleo::glance::nfs_mount::share: {get_param: GlanceNfsShare}
             tripleo::glance::nfs_mount::options: {get_param: GlanceNfsOptions}
index d89fe46..d305edb 100644 (file)
@@ -115,6 +115,12 @@ parameters:
     default: 1048576
     description: Maximum raw byte size of the Heat API JSON request body.
     type: number
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   service_debug_unset: {equals : [{get_param: HeatDebug}, '']}
@@ -125,6 +131,7 @@ outputs:
     value:
       service_name: heat_base
       config_settings:
+        heat::notification_driver: {get_param: NotificationDriver}
         heat::rabbit_userid: {get_param: RabbitUserName}
         heat::rabbit_password: {get_param: RabbitPassword}
         heat::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
index 60d194b..9535682 100644 (file)
@@ -203,6 +203,12 @@ parameters:
     type: json
     default: {}
     hidden: true
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 parameter_groups:
 - label: deprecated
@@ -214,6 +220,7 @@ parameter_groups:
   parameters:
   - KeystoneFernetKey0
   - KeystoneFernetKey1
+  - KeystoneNotificationDriver
 
 resources:
 
@@ -281,7 +288,7 @@ outputs:
             keystone::rabbit_password: {get_param: RabbitPassword}
             keystone::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
             keystone::rabbit_port: {get_param: RabbitClientPort}
-            keystone::notification_driver: {get_param: KeystoneNotificationDriver}
+            keystone::notification_driver: {get_param: NotificationDriver}
             keystone::notification_format: {get_param: KeystoneNotificationFormat}
             keystone::roles::admin::email: {get_param: AdminEmail}
             keystone::roles::admin::password: {get_param: AdminPassword}
index d0ee212..54f416b 100644 (file)
@@ -56,6 +56,12 @@ parameters:
     description: The password for the manila service account.
     type: string
     hidden: true
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   service_debug_unset: {equals : [{get_param: ManilaDebug}, '']}
@@ -66,6 +72,7 @@ outputs:
     value:
       service_name: manila_base
       config_settings:
+        manila::notification_driver: {get_param: NotificationDriver}
         manila::rabbit_userid: {get_param: RabbitUserName}
         manila::rabbit_password: {get_param: RabbitPassword}
         manila::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
index 8b3655d..a0d203c 100644 (file)
@@ -61,6 +61,12 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   service_debug_unset: {equals : [{get_param: MistralDebug}, '']}
@@ -81,6 +87,7 @@ outputs:
             query:
               read_default_file: /etc/my.cnf.d/tripleo.cnf
               read_default_group: tripleo
+        mistral::notification_driver: {get_param: NotificationDriver}
         mistral::rabbit_userid: {get_param: RabbitUserName}
         mistral::rabbit_password: {get_param: RabbitPassword}
         mistral::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
index 3c7518b..da7ad19 100644 (file)
@@ -91,6 +91,12 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   dhcp_agents_zero: {equals : [{get_param: NeutronDhcpAgentsPerNetwork}, 0]}
@@ -107,6 +113,7 @@ outputs:
             neutron::rabbit_user: {get_param: RabbitUserName}
             neutron::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
             neutron::rabbit_port: {get_param: RabbitClientPort}
+            neutron::notification_driver: {get_param: NotificationDriver}
             neutron::core_plugin: {get_param: NeutronCorePlugin}
             neutron::service_plugins: {get_param: NeutronServicePlugins}
             neutron::debug:
diff --git a/puppet/services/neutron-lbaas.yaml b/puppet/services/neutron-lbaas.yaml
new file mode 100644 (file)
index 0000000..5529db9
--- /dev/null
@@ -0,0 +1,70 @@
+heat_template_version: pike
+
+description: >
+  Neutron LBaaS service configured with Puppet
+
+parameters:
+  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
+  NeutronLbaasInterfaceDriver:
+    default: 'neutron.agent.linux.interface.OVSInterfaceDriver'
+    type: string
+  NeutronLbaasDeviceDriver:
+    default: 'neutron.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver'
+    type: string
+  NeutronServiceProviders:
+    default: 'LOADBALANCERV2:Haproxy:neutron_lbaas.drivers.haproxy.plugin_driver.HaproxyOnHostPluginDriver:default'
+    description: Global list of service providers used by neutron. This
+                 list should be passed in to ensure all service
+                 providers desired by the user are included. The
+                 provided default value only set the provider for the LBaaSv2
+                 subsystem.This is currently incompatible with enabling
+                 octavia-api as one service or the other will break because the defaults are different.
+    type: comma_delimited_list
+
+resources:
+
+  NeutronBase:
+    type: ./neutron-base.yaml
+    properties:
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+      EndpointMap: {get_param: EndpointMap}
+      RoleName: {get_param: RoleName}
+      RoleParameters: {get_param: RoleParameters}
+
+outputs:
+  role_data:
+    description: Role data for the Neutron LBaaS role.
+    value:
+      service_name: neutron_lbaas
+      config_settings:
+        map_merge:
+          - get_attr: [NeutronBase, role_data, config_settings]
+          - neutron::agents::lbaas::interface_driver: {get_param: NeutronLbaasInterfaceDriver}
+            neutron::agents::lbaas::device_driver: {get_param: NeutronLbaasDeviceDriver}
+      step_config: |
+        include ::tripleo::profile::base::neutron::lbaas
+      service_config_settings:
+        neutron_api:
+          neutron::server::service_providers: {get_param: NeutronServiceProviders}
index ea58493..809d3ff 100644 (file)
@@ -30,6 +30,12 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
   NovaPassword:
     description: The password for the nova service and db account, used by nova-api.
     type: string
@@ -215,7 +221,7 @@ outputs:
           nova::cinder_catalog_info: 'volumev2:cinderv2:internalURL'
           nova::host: '%{::fqdn}'
           nova::notify_on_state_change: 'vm_and_task_state'
-          nova::notification_driver: messagingv2
+          nova::notification_driver: {get_param: NotificationDriver}
           nova::network::neutron::neutron_auth_type: 'v3password'
           nova::db::database_db_max_retries: -1
           nova::db::database_max_retries: -1
index 68a71e4..33b07de 100644 (file)
@@ -32,6 +32,13 @@ parameters:
   CephClientUserName:
     default: openstack
     type: string
+  CephClientKey:
+    description: The Ceph client key. Can be created with ceph-authtool --gen-print-key. Currently only used for external Ceph deployments to create the openstack user keyring.
+    type: string
+    hidden: true
+  CephClusterFSID:
+    type: string
+    description: The Ceph cluster FSID. Must be a UUID.
   CinderEnableNfsBackend:
     default: false
     description: Whether to enable or not the NFS backend for Cinder
@@ -159,12 +166,8 @@ outputs:
             nova::compute::rbd::libvirt_rbd_user: {get_param: CephClientUserName}
             tripleo::profile::base::nova::compute::cinder_nfs_backend: {get_param: CinderEnableNfsBackend}
             rbd_persistent_storage: {get_param: CinderEnableRbdBackend}
-            nova::compute::rbd::rbd_keyring:
-              list_join:
-              - '.'
-              - - 'client'
-                - {get_param: CephClientUserName}
-            nova::compute::rbd::libvirt_rbd_secret_uuid: "%{hiera('ceph::profile::params::fsid')}"
+            nova::compute::rbd::libvirt_rbd_secret_key: {get_param: CephClientKey}
+            nova::compute::rbd::libvirt_rbd_secret_uuid: {get_param: CephClusterFSID}
             nova::compute::instance_usage_audit: true
             nova::compute::instance_usage_audit_period: 'hour'
             nova::compute::rbd::ephemeral_storage: {get_param: NovaEnableRbdBackend}
index 0809b3e..1246813 100644 (file)
@@ -58,6 +58,12 @@ parameters:
     default: 5672
     description: Set rabbit subscriber port, change this if using SSL
     type: number
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   service_debug_unset: {equals : [{get_param: OctaviaDebug}, '']}
@@ -74,6 +80,7 @@ outputs:
           - {get_param: Debug }
           - {get_param: OctaviaDebug }
          octavia::purge_config: {get_param: EnableConfigPurge}
+         octavia::notification_driver: {get_param: NotificationDriver}
          octavia::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
          octavia::rabbit_userid: {get_param: RabbitUserName}
          octavia::rabbit_password: {get_param: RabbitPassword}
index 0659a94..433556f 100644 (file)
@@ -28,14 +28,14 @@ parameters:
     type: json
   RabbitUserName:
     default: guest
-    description: The username for Qdr
+    description: The username for RabbitMQ
     type: string
   RabbitPassword:
-    description: The password for Qdr
+    description: The password for RabbitMQ
     type: string
     hidden: true
   RabbitClientPort:
-    description: Listening port for Qdr
+    description: Set rabbit subscriber port, change this if using SSL
     default: 5672
     type: number
   MonitoringSubscriptionQdr:
index c294e74..d511061 100644 (file)
@@ -60,6 +60,12 @@ parameters:
     default: ["ambari","cdh","mapr","vanilla","spark","storm"]
     description: Sahara enabled plugin list
     type: comma_delimited_list
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   service_debug_unset: {equals : [{get_param: SaharaDebug}, '']}
@@ -80,6 +86,7 @@ outputs:
             query:
               read_default_file: /etc/my.cnf.d/tripleo.cnf
               read_default_group: tripleo
+        sahara::notify::notification_driver: {get_param: NotificationDriver}
         sahara::rabbit_password: {get_param: RabbitPassword}
         sahara::rabbit_user: {get_param: RabbitUserName}
         sahara::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
index 5ced8c3..44c638b 100644 (file)
@@ -65,6 +65,12 @@ parameters:
       e.g. { tacker-context_is_admin: { key: context_is_admin, value: 'role:admin' } }
     default: {}
     type: json
+  NotificationDriver:
+    type: string
+    default: 'messagingv2'
+    description: Driver or drivers to handle sending notifications.
+    constraints:
+      - allowed_values: [ 'messagingv2', 'noop' ]
 
 conditions:
   service_debug_unset: {equals : [{get_param: TackerDebug}, '']}
@@ -93,6 +99,7 @@ outputs:
           - {get_param: Debug }
           - {get_param: TackerDebug }
         tacker::rpc_backend: rabbit
+        tacker::notification_driver: {get_param: NotificationDriver}
         tacker::rabbit_userid: {get_param: RabbitUserName}
         tacker::rabbit_password: {get_param: RabbitPassword}
         tacker::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
diff --git a/releasenotes/notes/deployed-server-environment-output-d838c782f76823b7.yaml b/releasenotes/notes/deployed-server-environment-output-d838c782f76823b7.yaml
new file mode 100644 (file)
index 0000000..14a5a27
--- /dev/null
@@ -0,0 +1,6 @@
+---
+features:
+  - Add a new output, DeployedServerEnvironment, that can be used as
+    the contents of an environment file. This environment file can then be used
+    as input into a services only stack when using split-stack. The parameter
+    simplifies the manual steps needed to deploy split-stack.
diff --git a/releasenotes/notes/enable-neutron-lbaas-integration-b72126f2c7e71cee.yaml b/releasenotes/notes/enable-neutron-lbaas-integration-b72126f2c7e71cee.yaml
new file mode 100644 (file)
index 0000000..490dc24
--- /dev/null
@@ -0,0 +1,4 @@
+---
+features:
+  - Allows the configuration of the Neutron LBaaS
+    agent.
\ No newline at end of file
diff --git a/releasenotes/notes/notification-driver-noop-e322ca6704a5bc50.yaml b/releasenotes/notes/notification-driver-noop-e322ca6704a5bc50.yaml
new file mode 100644 (file)
index 0000000..b709097
--- /dev/null
@@ -0,0 +1,10 @@
+---
+features:
+  - |
+    Allow to configure the Message Queue notification driver.
+    By default, we'll configure 'messagingv2' but we can now
+    override NotificationDriver parameter and set 'noop' when
+    we don't want notifications, which is the case when
+    we disable Telemetry services.
+deprecations:
+  - KeystoneNotificationDriver is deprecated in favor of NotificationDriver.
diff --git a/releasenotes/notes/roles-data-validation-7845702b5ed85366.yaml b/releasenotes/notes/roles-data-validation-7845702b5ed85366.yaml
new file mode 100644 (file)
index 0000000..766b658
--- /dev/null
@@ -0,0 +1,8 @@
+---
+features:
+  - |
+    The roles_data.yaml and roles_data_undercloud.yaml can be generated with
+    tox using ``tox -e genrolesdata``.
+  - |
+    pep8 now checks that the roles_data.yaml and roles_data_undercloud.yaml
+    matches data generated from the roles/ files.
index 72b89b1..7b41a9e 100644 (file)
@@ -27,7 +27,7 @@
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
 # ones.
 extensions = [
-    'oslosphinx',
+    'openstackdocstheme',
     'reno.sphinxext',
 ]
 
@@ -101,7 +101,7 @@ pygments_style = 'sphinx'
 
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
-html_theme = 'default'
+html_theme = 'openstackdocs'
 
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
@@ -262,3 +262,8 @@ texinfo_documents = [
 
 # -- Options for Internationalization output ------------------------------
 locale_dirs = ['locale/']
+
+# openstackdocstheme options
+repository_name = 'openstack/tripleo-heat-templates'
+bug_project = 'tripleo'
+bug_tag = 'documentation'
index 4a9b725..d4e343e 100644 (file)
@@ -4,3 +4,4 @@
 pbr!=2.1.0,>=2.0.0 # Apache-2.0
 Jinja2!=2.9.0,!=2.9.1,!=2.9.2,!=2.9.3,!=2.9.4,>=2.8 # BSD License (3 clause)
 six>=1.9.0 # MIT
+tripleo-common>=7.1.0 # Apache-2.0
index e156396..e3af321 100644 (file)
@@ -44,9 +44,9 @@
     - OS::TripleO::Services::CinderHPELeftHandISCSI
     - OS::TripleO::Services::CinderScheduler
     - OS::TripleO::Services::CinderVolume
+    - OS::TripleO::Services::Clustercheck
     - OS::TripleO::Services::Collectd
     - OS::TripleO::Services::Congress
-    - OS::TripleO::Services::Clustercheck
     - OS::TripleO::Services::Docker
     - OS::TripleO::Services::Ec2Api
     - OS::TripleO::Services::Etcd
@@ -85,6 +85,7 @@
     - OS::TripleO::Services::NeutronL2gwAgent
     - OS::TripleO::Services::NeutronL2gwApi
     - OS::TripleO::Services::NeutronL3Agent
+    - OS::TripleO::Services::NeutronLbaasv2Agent
     - OS::TripleO::Services::NeutronLinuxbridgeAgent
     - OS::TripleO::Services::NeutronMetadataAgent
     - OS::TripleO::Services::NeutronML2FujitsuCfab
index a28eaa6..635c430 100644 (file)
     - OS::TripleO::Services::Kernel
     - OS::TripleO::Services::MySQLClient
     - OS::TripleO::Services::NeutronApi
-    - OS::TripleO::Services::NeutronBgpvpnApi
+    - OS::TripleO::Services::NeutronBgpVpnApi
     - OS::TripleO::Services::NeutronCorePlugin
     - OS::TripleO::Services::NeutronDhcpAgent
     - OS::TripleO::Services::NeutronL2gwAgent
     - OS::TripleO::Services::NeutronL2gwApi
     - OS::TripleO::Services::NeutronL3Agent
+    - OS::TripleO::Services::NeutronLbaasv2Agent
     - OS::TripleO::Services::NeutronMetadataAgent
     - OS::TripleO::Services::NeutronML2FujitsuCfab
     - OS::TripleO::Services::NeutronML2FujitsuFossw
index bcdedc7..f56749a 100644 (file)
@@ -18,6 +18,7 @@
     - OS::TripleO::Services::HeatEngine
     - OS::TripleO::Services::IronicApi
     - OS::TripleO::Services::IronicConductor
+    - OS::TripleO::Services::IronicInspector
     - OS::TripleO::Services::IronicPxe
     - OS::TripleO::Services::Iscsid
     - OS::TripleO::Services::Keystone
@@ -48,6 +49,7 @@
     - OS::TripleO::Services::UndercloudAodhListener
     - OS::TripleO::Services::UndercloudAodhNotifier
     - OS::TripleO::Services::UndercloudCeilometerAgentCentral
+    - OS::TripleO::Services::UndercloudCeilometerAgentIpmi
     - OS::TripleO::Services::UndercloudCeilometerAgentNotification
     - OS::TripleO::Services::UndercloudGnocchiApi
     - OS::TripleO::Services::UndercloudGnocchiMetricd
index d84b637..fe24a42 100644 (file)
@@ -1,5 +1,5 @@
 ###############################################################################
-# File generated by tripleoclient
+# File generated by TripleO
 ###############################################################################
 ###############################################################################
 # Role: Controller                                                            #
@@ -88,6 +88,7 @@
     - OS::TripleO::Services::NeutronL2gwAgent
     - OS::TripleO::Services::NeutronL2gwApi
     - OS::TripleO::Services::NeutronL3Agent
+    - OS::TripleO::Services::NeutronLbaasv2Agent
     - OS::TripleO::Services::NeutronLinuxbridgeAgent
     - OS::TripleO::Services::NeutronMetadataAgent
     - OS::TripleO::Services::NeutronML2FujitsuCfab
     - OS::TripleO::Services::Timezone
     - OS::TripleO::Services::TripleoFirewall
     - OS::TripleO::Services::TripleoPackages
+
index 783df91..2aa5a29 100644 (file)
@@ -1,5 +1,5 @@
 ###############################################################################
-# File generated by tripleoclient
+# File generated by TripleO
 ###############################################################################
 ###############################################################################
 # Role: Undercloud                                                            #
@@ -59,3 +59,4 @@
     - OS::TripleO::Services::UndercloudGnocchiStatsd
     - OS::TripleO::Services::UndercloudPankoApi
     - OS::TripleO::Services::Zaqar
+
index 8113635..9291450 100644 (file)
@@ -1,11 +1,11 @@
 # The order of packages is significant, because pip processes them in the order
 # of appearance. Changing the order has an impact on the overall integration
 # process, which may cause wedges in the gate later.
+openstackdocstheme>=1.11.0  # Apache-2.0
 PyYAML>=3.10.0 # MIT
 Jinja2!=2.9.0,!=2.9.1,!=2.9.2,!=2.9.3,!=2.9.4,>=2.8 # BSD License (3 clause)
 six>=1.9.0 # MIT
-sphinx!=1.6.1,>=1.5.1 # BSD
-oslosphinx>=4.7.0 # Apache-2.0
+sphinx>=1.6.2 # BSD
 reno!=2.3.1,>=1.8.0 # Apache-2.0
 coverage!=4.4,>=4.0 # Apache-2.0
 fixtures>=3.0.0 # Apache-2.0/BSD
index 69ed96a..badc142 100755 (executable)
@@ -138,19 +138,33 @@ def process_templates(template_path, role_data_path, output_dir,
                         print("jinja2 rendering roles %s" % ","
                               .join(role_names))
                         for role in role_names:
-                            j2_data = {'role': role}
-                            # (dprince) For the undercloud installer we don't
-                            # want to have heat check nova/glance API's
-                            if r_map[role].get('disable_constraints', False):
-                                j2_data['disable_constraints'] = True
+                            j2_data = {'role': r_map[role]}
                             out_f = "-".join(
                                 [role.lower(),
                                  os.path.basename(f).replace('.role.j2.yaml',
                                                              '.yaml')])
                             out_f_path = os.path.join(out_dir, out_f)
                             if not (out_f_path in excl_templates):
-                                _j2_render_to_file(template_data, j2_data,
-                                                   out_f_path, overwrite)
+                                if '{{role.name}}' in template_data:
+                                    j2_data = {'role': r_map[role],
+                                               'networks': network_data}
+                                    _j2_render_to_file(template_data, j2_data,
+                                                       out_f_path, overwrite)
+                                else:
+                                    # Backwards compatibility with templates
+                                    # that specify {{role}} vs {{role.name}}
+                                    j2_data = {'role': role,
+                                               'networks': network_data}
+                                    # (dprince) For the undercloud installer we
+                                    # don'twant to have heat check nova/glance
+                                    # API's
+                                    if r_map[role].get('disable_constraints',
+                                                       False):
+                                        j2_data['disable_constraints'] = True
+                                    _j2_render_to_file(
+                                        template_data,j2_data,
+                                        out_f_path, overwrite)
+
                             else:
                                 print('skipping rendering of %s' % out_f_path)
                 elif f.endswith('.j2.yaml'):
diff --git a/tools/roles-data-generate-samples.sh b/tools/roles-data-generate-samples.sh
new file mode 100755 (executable)
index 0000000..cb370dc
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/bash
+#
+# Copyright 2017 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+set -e
+
+SCRIPT_DIR=$(cd `dirname $0` && pwd -P)
+OUTPUT_DIR=${OUTPUT_DIR:-$(cd "${SCRIPT_DIR}/../" && pwd -P)}
+
+echo "Generating ${OUTPUT_DIR}/roles_data.yaml"
+$SCRIPT_DIR/roles-data-generate.py Controller Compute BlockStorage ObjectStorage CephStorage > $OUTPUT_DIR/roles_data.yaml
+
+echo "Generating ${OUTPUT_DIR}/roles_data_undercloud.yaml"
+$SCRIPT_DIR/roles-data-generate.py Undercloud > $OUTPUT_DIR/roles_data_undercloud.yaml
diff --git a/tools/roles-data-generate.py b/tools/roles-data-generate.py
new file mode 100755 (executable)
index 0000000..0b76874
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+#
+# Copyright 2017 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+import argparse
+import collections
+import os
+import sys
+
+from tripleo_common.utils import roles as rolesutils
+
+__tht_root_dir = os.path.dirname(os.path.dirname(__file__))
+__tht_roles_dir = os.path.join(__tht_root_dir, 'roles')
+
+
+def parse_opts(argv):
+    parser = argparse.ArgumentParser(
+        description='Generate roles_data.yaml for requested roles. NOTE: '
+                    'This is a stripped down version of what is provided by '
+                    'the tripleoclient. The tripleoclient should be used for '
+                    'additional functionality.')
+    parser.add_argument('--roles-path', metavar='<roles directory>',
+                        help="Filesystem path containing the roles yaml files",
+                        default=__tht_roles_dir)
+    parser.add_argument('roles', nargs="+", metavar='<role>',
+                        help='List of roles to use to generate the '
+                             'roles_data.yaml file')
+    opts = parser.parse_args(argv[1:])
+
+    return opts
+
+opts = parse_opts(sys.argv)
+
+roles = collections.OrderedDict.fromkeys(opts.roles)
+print(rolesutils.generate_roles_data_from_directory(opts.roles_path,
+                                                    roles.keys()))
diff --git a/tools/roles-data-validation.sh b/tools/roles-data-validation.sh
new file mode 100755 (executable)
index 0000000..7c5786e
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/bash
+#
+# Copyright 2017 Red Hat, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+set -e
+
+SCRIPT_DIR=$(cd `dirname $0` && pwd -P)
+THT_DIR=${OUTPUT_DIR:-$(cd "${SCRIPT_DIR}/../" && pwd -P)}
+TMPDIR=$(mktemp -d)
+
+function do_cleanup {
+  rm -rf $TMPDIR
+}
+trap do_cleanup EXIT
+
+function check_diff {
+  local thtfile=$1
+  local genfile=$2
+  echo -n "Performing diff on $thtfile $genfile... "
+  diff $thtfile $genfile > $TMPDIR/diff_results
+  if [ $? = 1 ]; then
+      echo "ERROR: Generated roles file not match the current ${thtfile}"
+      echo "Please make sure to update the appropriate roles/* files."
+      echo "Here is the diff ${thtfile} ${genfile}"
+      cat $TMPDIR/diff_results
+      exit 1
+  fi
+  echo "OK!"
+}
+
+OUTPUT_DIR=$TMPDIR
+source $SCRIPT_DIR/roles-data-generate-samples.sh
+
+set +e
+check_diff $THT_DIR/roles_data.yaml $TMPDIR/roles_data.yaml
+check_diff $THT_DIR/roles_data_undercloud.yaml $TMPDIR/roles_data_undercloud.yaml
index 674449f..e9581a2 100755 (executable)
@@ -38,7 +38,7 @@ OPTIONAL_DOCKER_SECTIONS = ['docker_puppet_tasks', 'upgrade_tasks',
                             'metadata_settings', 'kolla_config']
 REQUIRED_DOCKER_PUPPET_CONFIG_SECTIONS = ['config_volume', 'step_config',
                                           'config_image']
-OPTIONAL_DOCKER_PUPPET_CONFIG_SECTIONS = [ 'puppet_tags' ]
+OPTIONAL_DOCKER_PUPPET_CONFIG_SECTIONS = [ 'puppet_tags', 'volumes' ]
 # Mapping of parameter names to a list of the fields we should _not_ enforce
 # consistency across files on.  This should only contain parameters whose
 # definition we cannot change for backwards compatibility reasons.  New
@@ -337,6 +337,8 @@ param_map = {}
 for base_path in path_args:
     if os.path.isdir(base_path):
         for subdir, dirs, files in os.walk(base_path):
+            if '.tox' in dirs:
+                dirs.remove('.tox')
             for f in files:
                 if f.endswith('.yaml') and not f.endswith('.j2.yaml'):
                     file_path = os.path.join(subdir, f)
diff --git a/tox.ini b/tox.ini
index c87bf7b..da179e9 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -14,10 +14,13 @@ commands = python setup.py testr --slowest --testr-args='{posargs}'
 commands = {posargs}
 
 [testenv:pep8]
+whielist_externals =
+    bash
 commands =
     python ./tools/process-templates.py
     python ./network/endpoints/build_endpoint_map.py --check
     python ./tools/yaml-validate.py .
+    bash -c ./tools/roles-data-validation.sh
 
 [testenv:templates]
 commands = python ./tools/process-templates.py
@@ -32,3 +35,9 @@ commands = python setup.py test --coverage --coverage-package-name=tripleo_heat_
 commands =
            python ./tools/process-templates.py
            python ./tripleo_heat_templates/environment_generator.py sample-env-generator/
+
+[testenv:genroledata]
+whielist_externals =
+    bash
+commands =
+    bash -c tools/roles-data-generate-samples.sh
index ed7fefb..296dcd3 100644 (file)
@@ -10,12 +10,13 @@ function ping_retry() {
     PING_CMD=ping6
   fi
   until [ $COUNT -ge $TIMES ]; do
-    if $PING_CMD -w 300 -c 1 $IP_ADDR &> /dev/null; then
+    if $PING_CMD -w 10 -c 1 $IP_ADDR &> /dev/null; then
       echo "Ping to $IP_ADDR succeeded."
       return 0
     fi
     echo "Ping to $IP_ADDR failed. Retrying..."
     COUNT=$(($COUNT + 1))
+    sleep 60
   done
   return 1
 }