Merge "Add retry to RHEL registration"
authorJenkins <jenkins@review.openstack.org>
Wed, 11 Jan 2017 21:06:23 +0000 (21:06 +0000)
committerGerrit Code Review <review@openstack.org>
Wed, 11 Jan 2017 21:06:23 +0000 (21:06 +0000)
390 files changed:
.gitignore
README.rst
all-nodes-validation.yaml
bootstrap-config.yaml
ci/common/net-config-multinode.yaml
ci/environments/scenario001-multinode.yaml
ci/environments/scenario002-multinode.yaml
ci/environments/scenario003-multinode.yaml
ci/environments/scenario004-multinode.yaml [new file with mode: 0644]
ci/pingtests/scenario001-multinode.yaml
ci/pingtests/scenario002-multinode.yaml
ci/pingtests/scenario003-multinode.yaml
ci/pingtests/scenario004-multinode.yaml [new file with mode: 0644]
ci/scripts/freeipa_setup.sh [new file with mode: 0644]
default_passwords.yaml
deployed-server/README.rst
deployed-server/ctlplane-port.yaml [deleted file]
deployed-server/deployed-neutron-port.yaml [new file with mode: 0644]
deployed-server/deployed-server-config.yaml [deleted file]
deployed-server/deployed-server-roles-data.yaml [new file with mode: 0644]
deployed-server/deployed-server.yaml
deployed-server/scripts/get-occ-config.sh
docker/firstboot/install_docker_agents.yaml
docker/firstboot/start_docker_agents.sh [changed mode: 0644->0755]
docker/post.j2.yaml
docker/services/neutron-ovs-agent.yaml
docker/services/nova-compute.yaml
docker/services/nova-libvirt.yaml
docker/services/services.yaml
environments/deployed-server-environment.yaml
environments/deployed-server-noop-ctlplane.yaml
environments/docker.yaml
environments/enable-internal-tls.yaml
environments/external-loadbalancer-vip-v6.yaml
environments/external-loadbalancer-vip.yaml
environments/host-config-pre-network.j2.yaml [new file with mode: 0644]
environments/major-upgrade-all-in-one.yaml [new file with mode: 0644]
environments/major-upgrade-composable-steps.yaml [new file with mode: 0644]
environments/network-environment.yaml
environments/network-isolation-no-tunneling.yaml
environments/network-isolation.yaml
environments/neutron-ml2-ovn.yaml
environments/neutron-opendaylight-l3.yaml
environments/neutron-opendaylight.yaml
environments/services/ceph-mds.yaml [new file with mode: 0644]
environments/services/zaqar.yaml [new file with mode: 0644]
environments/tls-endpoints-public-dns.yaml
environments/tls-endpoints-public-ip.yaml
environments/tls-everywhere-endpoints-dns.yaml
environments/undercloud.yaml [new file with mode: 0644]
environments/updates/update-from-keystone-admin-internal-api.yaml
extraconfig/all_nodes/mac_hostname.j2.yaml
extraconfig/all_nodes/random_string.j2.yaml
extraconfig/all_nodes/swap-partition.j2.yaml
extraconfig/all_nodes/swap.j2.yaml
extraconfig/post_deploy/default.yaml
extraconfig/post_deploy/example.yaml
extraconfig/post_deploy/example_run_on_update.yaml
extraconfig/post_deploy/undercloud_post.sh [new file with mode: 0755]
extraconfig/post_deploy/undercloud_post.yaml [new file with mode: 0644]
extraconfig/pre_deploy/rhel-registration/rhel-registration.yaml
extraconfig/pre_network/ansible_host_config.ansible [new file with mode: 0644]
extraconfig/pre_network/config_then_reboot.yaml [new file with mode: 0644]
extraconfig/pre_network/host_config_and_reboot.role.j2.yaml [new file with mode: 0644]
extraconfig/tasks/major_upgrade_block_storage.sh
extraconfig/tasks/major_upgrade_ceilometer_wsgi_mitaka_newton.yaml
extraconfig/tasks/major_upgrade_ceph_storage.sh
extraconfig/tasks/major_upgrade_compute.sh
extraconfig/tasks/major_upgrade_controller_pacemaker_2.sh
extraconfig/tasks/major_upgrade_object_storage.sh
extraconfig/tasks/major_upgrade_pacemaker.yaml
extraconfig/tasks/major_upgrade_pacemaker_init.j2.yaml
extraconfig/tasks/mitaka_to_newton_aodh_data_migration.yaml
extraconfig/tasks/pacemaker_common_functions.sh
extraconfig/tasks/post_puppet_pacemaker.yaml
extraconfig/tasks/post_puppet_pacemaker_restart.yaml
extraconfig/tasks/pre_puppet_pacemaker.yaml
extraconfig/tasks/yum_update.sh
extraconfig/tasks/yum_update.yaml
extraconfig/tasks/yum_update_noop.yaml
firstboot/os-net-config-mappings.yaml
firstboot/userdata_default.yaml
firstboot/userdata_dev_rsync.yaml
firstboot/userdata_example.yaml
firstboot/userdata_heat_admin.yaml
firstboot/userdata_root_password.yaml [new file with mode: 0644]
hosts-config.yaml
net-config-bond.yaml
net-config-bridge.yaml
net-config-linux-bridge.yaml
net-config-noop.yaml
net-config-static-bridge-with-external-dhcp.yaml
net-config-static-bridge.yaml
net-config-static.yaml
net-config-undercloud.yaml [new file with mode: 0644]
network/config/bond-with-vlans/ceph-storage.yaml
network/config/bond-with-vlans/cinder-storage.yaml
network/config/bond-with-vlans/compute-dpdk.yaml
network/config/bond-with-vlans/compute.yaml
network/config/bond-with-vlans/controller-no-external.yaml
network/config/bond-with-vlans/controller-v6.yaml
network/config/bond-with-vlans/controller.yaml
network/config/bond-with-vlans/swift-storage.yaml
network/config/multiple-nics/ceph-storage.yaml
network/config/multiple-nics/cinder-storage.yaml
network/config/multiple-nics/compute-dvr.yaml [new file with mode: 0644]
network/config/multiple-nics/compute.yaml
network/config/multiple-nics/controller-v6.yaml
network/config/multiple-nics/controller.yaml
network/config/multiple-nics/swift-storage.yaml
network/config/single-nic-linux-bridge-vlans/ceph-storage.yaml
network/config/single-nic-linux-bridge-vlans/cinder-storage.yaml
network/config/single-nic-linux-bridge-vlans/compute.yaml
network/config/single-nic-linux-bridge-vlans/controller-v6.yaml
network/config/single-nic-linux-bridge-vlans/controller.yaml
network/config/single-nic-linux-bridge-vlans/swift-storage.yaml
network/config/single-nic-vlans/ceph-storage.yaml
network/config/single-nic-vlans/cinder-storage.yaml
network/config/single-nic-vlans/compute.yaml
network/config/single-nic-vlans/controller-no-external.yaml
network/config/single-nic-vlans/controller-v6.yaml
network/config/single-nic-vlans/controller.yaml
network/config/single-nic-vlans/swift-storage.yaml
network/endpoints/build_endpoint_map.py
network/endpoints/endpoint_data.yaml
network/endpoints/endpoint_map.yaml
network/external.yaml
network/external_v6.yaml
network/internal_api.yaml
network/internal_api_v6.yaml
network/management.yaml
network/management_v6.yaml
network/networks.yaml
network/ports/ctlplane_vip.yaml
network/ports/external.yaml
network/ports/external_from_pool.yaml
network/ports/external_from_pool_v6.yaml
network/ports/external_v6.yaml
network/ports/from_service.yaml
network/ports/from_service_v6.yaml
network/ports/internal_api.yaml
network/ports/internal_api_from_pool.yaml
network/ports/internal_api_from_pool_v6.yaml
network/ports/internal_api_v6.yaml
network/ports/management.yaml
network/ports/management_from_pool.yaml
network/ports/management_from_pool_v6.yaml
network/ports/management_v6.yaml
network/ports/net_ip_list_map.yaml
network/ports/net_ip_map.yaml
network/ports/net_vip_map_external.yaml
network/ports/net_vip_map_external_v6.yaml
network/ports/noop.yaml
network/ports/storage.yaml
network/ports/storage_from_pool.yaml
network/ports/storage_from_pool_v6.yaml
network/ports/storage_mgmt.yaml
network/ports/storage_mgmt_from_pool.yaml
network/ports/storage_mgmt_from_pool_v6.yaml
network/ports/storage_mgmt_v6.yaml
network/ports/storage_v6.yaml
network/ports/tenant.yaml
network/ports/tenant_from_pool.yaml
network/ports/tenant_from_pool_v6.yaml
network/ports/tenant_v6.yaml
network/ports/vip.yaml
network/ports/vip_v6.yaml
network/scripts/run-os-net-config.sh
network/service_net_map.j2.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/all-nodes-config.yaml
puppet/blockstorage-role.yaml
puppet/cephstorage-role.yaml
puppet/compute-role.yaml
puppet/config.role.j2.yaml
puppet/controller-config-pacemaker.yaml
puppet/controller-role.yaml
puppet/deploy-artifacts.sh
puppet/deploy-artifacts.yaml
puppet/extraconfig/all_nodes/neutron-midonet-all-nodes.yaml
puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml
puppet/extraconfig/pre_deploy/compute/neutron-ml2-bigswitch.yaml
puppet/extraconfig/pre_deploy/compute/neutron-opencontrail.yaml
puppet/extraconfig/pre_deploy/compute/nova-nuage.yaml
puppet/extraconfig/pre_deploy/controller/cinder-dellsc.yaml
puppet/extraconfig/pre_deploy/controller/cinder-eqlx.yaml
puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml
puppet/extraconfig/pre_deploy/controller/multiple.yaml
puppet/extraconfig/pre_deploy/controller/neutron-ml2-bigswitch.yaml
puppet/extraconfig/pre_deploy/controller/neutron-ml2-cisco-n1kv.yaml
puppet/extraconfig/pre_deploy/default.yaml
puppet/extraconfig/pre_deploy/per_node.yaml
puppet/extraconfig/tls/ca-inject.yaml
puppet/extraconfig/tls/freeipa-enroll.yaml [new file with mode: 0644]
puppet/extraconfig/tls/tls-cert-inject.yaml
puppet/major_upgrade_steps.j2.yaml [new file with mode: 0644]
puppet/objectstorage-role.yaml
puppet/post.j2.yaml
puppet/role.role.j2.yaml
puppet/services/README.rst
puppet/services/aodh-api.yaml
puppet/services/aodh-base.yaml
puppet/services/aodh-evaluator.yaml
puppet/services/aodh-listener.yaml
puppet/services/aodh-notifier.yaml
puppet/services/apache-internal-tls-certmonger.yaml
puppet/services/apache.yaml
puppet/services/barbican-api.yaml
puppet/services/ca-certs.yaml
puppet/services/ceilometer-agent-central.yaml
puppet/services/ceilometer-agent-compute.yaml
puppet/services/ceilometer-agent-notification.yaml
puppet/services/ceilometer-api.yaml
puppet/services/ceilometer-base.yaml
puppet/services/ceilometer-collector.yaml
puppet/services/ceilometer-expirer.yaml
puppet/services/ceph-base.yaml
puppet/services/ceph-client.yaml
puppet/services/ceph-external.yaml
puppet/services/ceph-mds.yaml [moved from puppet/services/pacemaker/gnocchi-api.yaml with 56% similarity]
puppet/services/ceph-mon.yaml
puppet/services/ceph-osd.yaml
puppet/services/ceph-rgw.yaml
puppet/services/cinder-api.yaml
puppet/services/cinder-backup.yaml
puppet/services/cinder-base.yaml
puppet/services/cinder-scheduler.yaml
puppet/services/cinder-volume.yaml
puppet/services/database/mongodb-base.yaml
puppet/services/database/mongodb.yaml
puppet/services/database/mysql-internal-tls-certmonger.yaml
puppet/services/database/mysql.yaml
puppet/services/database/redis-base.yaml
puppet/services/database/redis.yaml
puppet/services/glance-api.yaml
puppet/services/glance-base.yaml
puppet/services/glance-registry.yaml
puppet/services/gnocchi-api.yaml
puppet/services/gnocchi-base.yaml
puppet/services/gnocchi-metricd.yaml
puppet/services/gnocchi-statsd.yaml
puppet/services/haproxy-internal-tls-certmonger.yaml
puppet/services/haproxy-public-tls-certmonger.yaml
puppet/services/haproxy.yaml
puppet/services/heat-api-cfn.yaml
puppet/services/heat-api-cloudwatch.yaml
puppet/services/heat-api.yaml
puppet/services/heat-base.yaml
puppet/services/heat-engine.yaml
puppet/services/horizon.yaml
puppet/services/ironic-api.yaml
puppet/services/ironic-base.yaml
puppet/services/ironic-conductor.yaml
puppet/services/keepalived.yaml
puppet/services/kernel.yaml
puppet/services/keystone.yaml
puppet/services/logging/fluentd-base.yaml
puppet/services/logging/fluentd-client.yaml
puppet/services/logging/fluentd-config.yaml
puppet/services/manila-api.yaml
puppet/services/manila-backend-cephfs.yaml
puppet/services/manila-backend-generic.yaml
puppet/services/manila-backend-netapp.yaml
puppet/services/manila-base.yaml
puppet/services/manila-scheduler.yaml
puppet/services/manila-share.yaml
puppet/services/memcached.yaml
puppet/services/mistral-api.yaml
puppet/services/mistral-base.yaml
puppet/services/mistral-engine.yaml
puppet/services/mistral-executor.yaml
puppet/services/monitoring/sensu-base.yaml
puppet/services/monitoring/sensu-client.yaml
puppet/services/network/contrail-analytics.yaml
puppet/services/network/contrail-base.yaml
puppet/services/network/contrail-config.yaml
puppet/services/network/contrail-control.yaml
puppet/services/network/contrail-database.yaml
puppet/services/network/contrail-webui.yaml
puppet/services/neutron-api.yaml
puppet/services/neutron-base.yaml
puppet/services/neutron-compute-plugin-midonet.yaml
puppet/services/neutron-compute-plugin-nuage.yaml
puppet/services/neutron-compute-plugin-opencontrail.yaml
puppet/services/neutron-compute-plugin-ovn.yaml
puppet/services/neutron-compute-plugin-plumgrid.yaml
puppet/services/neutron-dhcp.yaml
puppet/services/neutron-l3-compute-dvr.yaml
puppet/services/neutron-l3.yaml
puppet/services/neutron-metadata.yaml
puppet/services/neutron-midonet.yaml
puppet/services/neutron-ovs-agent.yaml
puppet/services/neutron-ovs-dpdk-agent.yaml
puppet/services/neutron-plugin-ml2-ovn.yaml
puppet/services/neutron-plugin-ml2.yaml
puppet/services/neutron-plugin-nuage.yaml
puppet/services/neutron-plugin-opencontrail.yaml
puppet/services/neutron-plugin-plumgrid.yaml
puppet/services/neutron-sriov-agent.yaml
puppet/services/nova-api.yaml
puppet/services/nova-base.yaml
puppet/services/nova-compute.yaml
puppet/services/nova-conductor.yaml
puppet/services/nova-consoleauth.yaml
puppet/services/nova-ironic.yaml
puppet/services/nova-libvirt.yaml
puppet/services/nova-metadata.yaml
puppet/services/nova-scheduler.yaml
puppet/services/nova-vnc-proxy.yaml
puppet/services/opendaylight-api.yaml
puppet/services/opendaylight-ovs.yaml
puppet/services/ovn-dbs.yaml [new file with mode: 0644]
puppet/services/pacemaker.yaml
puppet/services/pacemaker/ceilometer-agent-central.yaml [deleted file]
puppet/services/pacemaker/ceilometer-agent-notification.yaml [deleted file]
puppet/services/pacemaker/ceilometer-api.yaml [deleted file]
puppet/services/pacemaker/ceilometer-collector.yaml [deleted file]
puppet/services/pacemaker/cinder-api.yaml [deleted file]
puppet/services/pacemaker/cinder-backup.yaml
puppet/services/pacemaker/cinder-scheduler.yaml [deleted file]
puppet/services/pacemaker/cinder-volume.yaml
puppet/services/pacemaker/core.yaml [deleted file]
puppet/services/pacemaker/database/mongodb.yaml [deleted file]
puppet/services/pacemaker/database/mysql.yaml
puppet/services/pacemaker/database/redis.yaml
puppet/services/pacemaker/glance-api.yaml [deleted file]
puppet/services/pacemaker/glance-registry.yaml [deleted file]
puppet/services/pacemaker/gnocchi-metricd.yaml [deleted file]
puppet/services/pacemaker/gnocchi-statsd.yaml [deleted file]
puppet/services/pacemaker/haproxy.yaml
puppet/services/pacemaker/heat-api-cfn.yaml [deleted file]
puppet/services/pacemaker/heat-api-cloudwatch.yaml [deleted file]
puppet/services/pacemaker/heat-api.yaml [deleted file]
puppet/services/pacemaker/heat-engine.yaml [deleted file]
puppet/services/pacemaker/horizon.yaml [deleted file]
puppet/services/pacemaker/keystone.yaml [deleted file]
puppet/services/pacemaker/manila-share.yaml
puppet/services/pacemaker/memcached.yaml [deleted file]
puppet/services/pacemaker/neutron-dhcp.yaml [deleted file]
puppet/services/pacemaker/neutron-l3.yaml [deleted file]
puppet/services/pacemaker/neutron-metadata.yaml [deleted file]
puppet/services/pacemaker/neutron-midonet.yaml [deleted file]
puppet/services/pacemaker/neutron-ovs-agent.yaml [deleted file]
puppet/services/pacemaker/neutron-plugin-ml2.yaml [deleted file]
puppet/services/pacemaker/neutron-plugin-nuage.yaml [deleted file]
puppet/services/pacemaker/neutron-plugin-opencontrail.yaml [deleted file]
puppet/services/pacemaker/neutron-plugin-plumgrid.yaml [deleted file]
puppet/services/pacemaker/neutron-server.yaml [deleted file]
puppet/services/pacemaker/nova-api.yaml [deleted file]
puppet/services/pacemaker/nova-conductor.yaml [deleted file]
puppet/services/pacemaker/nova-consoleauth.yaml [deleted file]
puppet/services/pacemaker/nova-scheduler.yaml [deleted file]
puppet/services/pacemaker/nova-vnc-proxy.yaml [deleted file]
puppet/services/pacemaker/rabbitmq.yaml
puppet/services/pacemaker/sahara-api.yaml [deleted file]
puppet/services/pacemaker/sahara-engine.yaml [deleted file]
puppet/services/panko-api.yaml
puppet/services/panko-base.yaml
puppet/services/rabbitmq.yaml
puppet/services/sahara-api.yaml
puppet/services/sahara-base.yaml
puppet/services/sahara-engine.yaml
puppet/services/services.yaml
puppet/services/snmp.yaml
puppet/services/swift-base.yaml
puppet/services/swift-proxy.yaml
puppet/services/swift-ringbuilder.yaml
puppet/services/swift-storage.yaml
puppet/services/time/ntp.yaml
puppet/services/time/timezone.yaml
puppet/services/tripleo-firewall.yaml
puppet/services/tripleo-packages.yaml
puppet/services/zaqar.yaml [new file with mode: 0644]
puppet/upgrade_config.yaml [new file with mode: 0644]
requirements.txt
roles_data.yaml
roles_data_undercloud.yaml [new file with mode: 0644]
scripts/hosts-config.sh [new file with mode: 0755]
setup.py
test-requirements.txt
tools/process-templates.py [new file with mode: 0755]
tools/yaml-validate.py
tox.ini

index 3d7aded..0925145 100644 (file)
@@ -44,3 +44,18 @@ doc/_build
 # Built by pbr (python setup.py sdist):
 AUTHORS
 ChangeLog
+
+extraconfig/all_nodes/mac_hostname.yaml
+extraconfig/all_nodes/random_string.yaml
+extraconfig/all_nodes/swap-partition.yaml
+extraconfig/all_nodes/swap.yaml
+extraconfig/tasks/major_upgrade_pacemaker_init.yaml
+network/service_net_map.yaml
+overcloud-resource-registry-puppet.yaml
+overcloud.yaml
+puppet/blockstorage-config.yaml
+puppet/cephstorage-config.yaml
+puppet/compute-config.yaml
+puppet/controller-config.yaml
+puppet/objectstorage-config.yaml
+puppet/post.yaml
index 36f9fba..0884267 100644 (file)
@@ -1,3 +1,12 @@
+========================
+Team and repository tags
+========================
+
+.. image:: http://governance.openstack.org/badges/tripleo-heat-templates.svg
+    :target: http://governance.openstack.org/reference/tags/index.html
+
+.. Change things from this point on
+
 ======================
 tripleo-heat-templates
 ======================
@@ -44,3 +53,68 @@ A description of the directory layout in TripleO Heat Templates.
 
  * validation-scripts: validation scripts useful to all deployment
                        configurations
+
+
+Service testing matrix
+----------------------
+
+The configuration for the CI scenarios will be defined in `tripleo-heat-templates/ci/`
+and should be executed according to the following table:
+
++----------------+-------------+-------------+-------------+-------------+-----------------+
+|        -       | scenario001 | scenario002 | scenario003 | scenario004 | multinode-nonha |
++================+=============+=============+=============+=============+=================+
+| keystone       |      X      |      X      |      X      |      X      |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| glance         |    file     |    swift    |    file     |    file     |      swift      |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| cinder         |     rbd     |    iscsi    |             |             |      iscsi      |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| heat           |      X      |      X      |      X      |      X      |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| mysql          |      X      |      X      |      X      |      X      |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| neutron        |     ovs     |     ovs     |     ovs     |     ovs     |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| rabbitmq       |      X      |      X      |      X      |      X      |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| mongodb        |      X      |      X      |             |             |                 |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| redis          |      X      |             |             |             |                 |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| haproxy        |      X      |      X      |      X      |      X      |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| keepalived     |      X      |      X      |      X      |      X      |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| memcached      |      X      |      X      |      X      |      X      |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| pacemaker      |      X      |      X      |      X      |      X      |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| nova           |     qemu    |     qemu    |     qemu    |     qemu    |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| ntp            |      X      |      X      |      X      |      X      |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| snmp           |      X      |      X      |      X      |      X      |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| timezone       |      X      |      X      |      X      |      X      |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| sahara         |             |             |      X      |             |                 |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| mistral        |             |             |      X      |             |                 |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| swift          |             |      X      |             |             |        X        |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| aodh           |      X      |             |             |             |                 |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| ceilometer     |      X      |             |             |             |                 |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| gnocchi        |      X      |             |             |             |                 |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| panko          |      X      |             |             |             |                 |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| barbican       |             |      X      |             |             |                 |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| zaqar          |             |      X      |             |             |                 |
++----------------+-------------+-------------+-------------+-------------+-----------------+
+| cephrgw        |             |      X      |             |      X      |                 |
++----------------+-------------+-------------+-------------+-------------+-----------------+
index a738337..65d01d0 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Software Config to drive validations that occur on all nodes.
index c87670e..a3fdee9 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 description: 'Bootstrap Config'
 
 parameters:
index 49a0688..bf947d3 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Software Config to drive os-net-config for a simple bridge configured
index 1a5242a..0e9c1c7 100644 (file)
@@ -1,6 +1,10 @@
 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::CephMon: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-mon.yaml
+  OS::TripleO::Services::CephOSD: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-osd.yaml
+  OS::TripleO::Services::CephClient: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-client.yaml
+  OS::TripleO::Services::PankoApi: /usr/share/openstack-tripleo-heat-templates/puppet/services/panko-api.yaml
 
 parameter_defaults:
   ControllerServices:
@@ -47,10 +51,33 @@ parameter_defaults:
     - OS::TripleO::Services::GnocchiApi
     - OS::TripleO::Services::GnocchiMetricd
     - OS::TripleO::Services::GnocchiStatsd
+    - OS::TripleO::Services::PankoApi
+    - OS::TripleO::Services::CephMon
+    - OS::TripleO::Services::CephOSD
+    - OS::TripleO::Services::CephClient
+    - OS::TripleO::Services::CinderApi
+    - OS::TripleO::Services::CinderBackup
+    - OS::TripleO::Services::CinderScheduler
+    - OS::TripleO::Services::CinderVolume
   ControllerExtraConfig:
     nova::compute::libvirt::services::libvirt_virt_type: qemu
     nova::compute::libvirt::libvirt_virt_type: qemu
   Debug: true
-  # we don't deploy Swift so we switch to file backend.
-  GlanceBackend: 'file'
-  GnocchiBackend: 'file'
+  #NOTE(gfidente): not great but we need this to deploy on ext4
+  #http://docs.ceph.com/docs/jewel/rados/configuration/filesystem-recommendations/
+  ExtraConfig:
+    ceph::profile::params::osd_max_object_name_len: 256
+    ceph::profile::params::osd_max_object_namespace_len: 64
+  #NOTE: These ID's and keys should be regenerated for
+  # a production deployment. What is here is suitable for
+  # developer and CI testing only.
+  CephClusterFSID: '4b5c8c0a-ff60-454b-a1b4-9747aa737d19'
+  CephMonKey: 'AQC+Ox1VmEr3BxAALZejqeHj50Nj6wJDvs96OQ=='
+  CephAdminKey: 'AQDLOh1VgEp6FRAAFzT7Zw+Y9V6JJExQAsRnRQ=='
+  CephClientKey: 'AQC+vYNXgDAgAhAAc8UoYt+OTz5uhV7ItLdwUw=='
+  NovaEnableRbdBackend: true
+  CinderEnableRbdBackend: true
+  CinderBackupBackend: ceph
+  GlanceBackend: rbd
+  GnocchiBackend: rbd
+  CinderEnableIscsiBackend: false
index b8bc576..7875ef4 100644 (file)
@@ -1,7 +1,8 @@
 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::BarbicanApi: /usr/share/openstack-tripleo-heat-templates/puppet/services/barbican-api.yaml
+  OS::TripleO::Services::BarbicanApi: ../../puppet/services/barbican-api.yaml
+  OS::TripleO::Services::Zaqar: ../../puppet/services/zaqar.yaml
 
 parameter_defaults:
   ControllerServices:
@@ -42,7 +43,10 @@ parameter_defaults:
     - OS::TripleO::Services::SwiftStorage
     - OS::TripleO::Services::SwiftRingBuilder
     - OS::TripleO::Services::BarbicanApi
+    - OS::TripleO::Services::MongoDb
+    - OS::TripleO::Services::Zaqar
   ControllerExtraConfig:
     nova::compute::libvirt::services::libvirt_virt_type: qemu
     nova::compute::libvirt::libvirt_virt_type: qemu
   Debug: true
+  SwiftCeilometerPipelineEnabled: false
index e540bc5..26f94d0 100644 (file)
@@ -1,11 +1,11 @@
 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::SaharaApi: /usr/share/openstack-tripleo-heat-templates/puppet/services/sahara-api.yaml
-  OS::TripleO::Services::SaharaEngine: /usr/share/openstack-tripleo-heat-templates/puppet/services/sahara-engine.yaml
-  OS::TripleO::Services::MistralApi: /usr/share/openstack-tripleo-heat-templates/puppet/services/mistral-api.yaml
-  OS::TripleO::Services::MistralEngine: /usr/share/openstack-tripleo-heat-templates/puppet/services/mistral-engine.yaml
-  OS::TripleO::Services::MistralExecutor: /usr/share/openstack-tripleo-heat-templates/puppet/services/mistral-executor.yaml
+  OS::TripleO::Services::SaharaApi: ../../puppet/services/sahara-api.yaml
+  OS::TripleO::Services::SaharaEngine: ../../puppet/services/sahara-engine.yaml
+  OS::TripleO::Services::MistralApi: ../../puppet/services/mistral-api.yaml
+  OS::TripleO::Services::MistralEngine: ../../puppet/services/mistral-engine.yaml
+  OS::TripleO::Services::MistralExecutor: ../../puppet/services/mistral-executor.yaml
 
 parameter_defaults:
   ControllerServices:
@@ -49,3 +49,5 @@ parameter_defaults:
   Debug: true
   # we don't deploy Swift so we switch to file backend.
   GlanceBackend: 'file'
+  KeystoneTokenProvider: 'fernet'
+  SwiftCeilometerPipelineEnabled: false
diff --git a/ci/environments/scenario004-multinode.yaml b/ci/environments/scenario004-multinode.yaml
new file mode 100644 (file)
index 0000000..0d94cea
--- /dev/null
@@ -0,0 +1,63 @@
+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::CephMon: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-mon.yaml
+  OS::TripleO::Services::CephOSD: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-osd.yaml
+  OS::TripleO::Services::CephClient: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-client.yaml
+  OS::TripleO::Services::CephRgw: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-rgw.yaml
+  OS::TripleO::Services::SwiftProxy: OS::Heat::None
+  OS::TripleO::Services::SwiftStorage: OS::Heat::None
+  OS::TripleO::Services::SwiftRingBuilder: OS::Heat::None
+
+parameter_defaults:
+  ControllerServices:
+    - OS::TripleO::Services::Kernel
+    - OS::TripleO::Services::Keystone
+    - OS::TripleO::Services::GlanceApi
+    - OS::TripleO::Services::GlanceRegistry
+    - OS::TripleO::Services::HeatApi
+    - OS::TripleO::Services::HeatApiCfn
+    - OS::TripleO::Services::HeatApiCloudwatch
+    - OS::TripleO::Services::HeatEngine
+    - OS::TripleO::Services::MySQL
+    - 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::NovaMetadata
+    - OS::TripleO::Services::NovaScheduler
+    - OS::TripleO::Services::Ntp
+    - OS::TripleO::Services::Snmp
+    - OS::TripleO::Services::Timezone
+    - OS::TripleO::Services::NovaCompute
+    - OS::TripleO::Services::NovaLibvirt
+    - OS::TripleO::Services::CephMon
+    - OS::TripleO::Services::CephOSD
+    - OS::TripleO::Services::CephClient
+    - OS::TripleO::Services::CephRgw
+  ControllerExtraConfig:
+    nova::compute::libvirt::services::libvirt_virt_type: qemu
+    nova::compute::libvirt::libvirt_virt_type: qemu
+  Debug: true
+  #NOTE(gfidente): not great but we need this to deploy on ext4
+  #http://docs.ceph.com/docs/jewel/rados/configuration/filesystem-recommendations/
+  ExtraConfig:
+    ceph::profile::params::osd_max_object_name_len: 256
+    ceph::profile::params::osd_max_object_namespace_len: 64
+  #NOTE: These ID's and keys should be regenerated for
+  # a production deployment. What is here is suitable for
+  # developer and CI testing only.
+  CephClusterFSID: '4b5c8c0a-ff60-454b-a1b4-9747aa737d19'
+  CephMonKey: 'AQC+Ox1VmEr3BxAALZejqeHj50Nj6wJDvs96OQ=='
+  CephAdminKey: 'AQDLOh1VgEp6FRAAFzT7Zw+Y9V6JJExQAsRnRQ=='
+  CephClientKey: 'AQC+vYNXgDAgAhAAc8UoYt+OTz5uhV7ItLdwUw=='
+  SwiftCeilometerPipelineEnabled: false
index 9dcbd39..2651c0d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2013-05-23
+heat_template_version: ocata
 
 description: >
   HOT template to created resources deployed by scenario001.
@@ -72,12 +72,22 @@ resources:
       router_id: { get_resource: router }
       subnet_id: { get_resource: private_subnet }
 
+  volume1:
+    type: OS::Cinder::Volume
+    properties:
+      name: Volume1
+      image: { get_param: image }
+      size: 1
+
   server1:
     type: OS::Nova::Server
+    depends_on: volume1
     properties:
       name: Server1
+      block_device_mapping:
+        - device_name: vda
+          volume_id: { get_resource: volume1 }
       flavor: { get_resource: test_flavor }
-      image: { get_param: image }
       key_name: { get_resource: key_pair }
       networks:
         - port: { get_resource: server1_port }
@@ -118,19 +128,21 @@ resources:
       ram: 512
       vcpus: 1
 
-  gnocchi_res_alarm:
-    type: OS::Aodh::GnocchiResourcesAlarm
-    properties:
-      description: Do stuff with gnocchi
-      metric: cpu_util
-      aggregation_method: mean
-      granularity: 60
-      evaluation_periods: 1
-      threshold: 50
-      alarm_actions: []
-      resource_type: instance
-      resource_id: { get_resource: server1 }
-      comparison_operator: gt
+# Disabling this resource now
+# https://bugs.launchpad.net/tripleo/+bug/1646506
+#  gnocchi_res_alarm:
+#    type: OS::Aodh::GnocchiResourcesAlarm
+#    properties:
+#      description: Do stuff with gnocchi
+#      metric: cpu_util
+#      aggregation_method: mean
+#      granularity: 60
+#      evaluation_periods: 1
+#      threshold: 50
+#      alarm_actions: []
+#      resource_type: instance
+#      resource_id: { get_resource: server1 }
+#      comparison_operator: gt
 
   asg:
     type: OS::Heat::AutoScalingGroup
index d7a30fd..7af1ba0 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2013-05-23
+heat_template_version: ocata
 
 description: >
   HOT template to created resources deployed by scenario002.
@@ -144,6 +144,11 @@ resources:
       ram: 512
       vcpus: 1
 
+  zaqar_queue:
+    type: OS::Zaqar::Queue
+    properties:
+      name: pingtest-queue
+
 outputs:
   server1_private_ip:
     description: IP address of server1 in private network
index 445c47a..c3ceada 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2013-05-23
+heat_template_version: ocata
 
 description: >
   HOT template to created resources deployed by scenario003.
diff --git a/ci/pingtests/scenario004-multinode.yaml b/ci/pingtests/scenario004-multinode.yaml
new file mode 100644 (file)
index 0000000..a188fd1
--- /dev/null
@@ -0,0 +1,127 @@
+heat_template_version: ocata
+
+description: >
+  HOT template to created resources deployed by scenario004.
+parameters:
+  key_name:
+    type: string
+    description: Name of keypair to assign to servers
+    default: 'pingtest_key'
+  image:
+    type: string
+    description: Name of image to use for servers
+    default: 'pingtest_image'
+  public_net_name:
+    type: string
+    default: 'nova'
+    description: >
+      ID or name of public network for which floating IP addresses will be allocated
+  private_net_name:
+    type: string
+    description: Name of private network to be created
+    default: 'default-net'
+  private_net_cidr:
+    type: string
+    description: Private network address (CIDR notation)
+    default: '192.168.2.0/24'
+  private_net_gateway:
+    type: string
+    description: Private network gateway address
+    default: '192.168.2.1'
+  private_net_pool_start:
+    type: string
+    description: Start of private network IP address allocation pool
+    default: '192.168.2.100'
+  private_net_pool_end:
+    type: string
+    default: '192.168.2.200'
+    description: End of private network IP address allocation pool
+
+resources:
+
+  key_pair:
+    type: OS::Nova::KeyPair
+    properties:
+      save_private_key: true
+      name: {get_param: key_name }
+
+  private_net:
+    type: OS::Neutron::Net
+    properties:
+      name: { get_param: private_net_name }
+
+  private_subnet:
+    type: OS::Neutron::Subnet
+    properties:
+      network_id: { get_resource: private_net }
+      cidr: { get_param: private_net_cidr }
+      gateway_ip: { get_param: private_net_gateway }
+      allocation_pools:
+        - start: { get_param: private_net_pool_start }
+          end: { get_param: private_net_pool_end }
+
+  router:
+    type: OS::Neutron::Router
+    properties:
+      external_gateway_info:
+        network: { get_param: public_net_name }
+
+  router_interface:
+    type: OS::Neutron::RouterInterface
+    properties:
+      router_id: { get_resource: router }
+      subnet_id: { get_resource: private_subnet }
+
+  server1:
+    type: OS::Nova::Server
+    properties:
+      name: Server1
+      flavor: { get_resource: test_flavor }
+      image: { get_param: image }
+      key_name: { get_resource: key_pair }
+      networks:
+        - port: { get_resource: server1_port }
+
+  server1_port:
+    type: OS::Neutron::Port
+    properties:
+      network_id: { get_resource: private_net }
+      fixed_ips:
+        - subnet_id: { get_resource: private_subnet }
+      security_groups: [{ get_resource: server_security_group }]
+
+  server1_floating_ip:
+    type: OS::Neutron::FloatingIP
+    # TODO: investigate why we need this depends_on and if we could
+    # replace it by router_id with get_resource: router_interface
+    depends_on: router_interface
+    properties:
+      floating_network: { get_param: public_net_name }
+      port_id: { get_resource: server1_port }
+
+  server_security_group:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: Add security group rules for server
+      name: pingtest-security-group
+      rules:
+        - remote_ip_prefix: 0.0.0.0/0
+          protocol: tcp
+          port_range_min: 22
+          port_range_max: 22
+        - remote_ip_prefix: 0.0.0.0/0
+          protocol: icmp
+
+  test_flavor:
+    type: OS::Nova::Flavor
+    properties:
+      ram: 512
+      vcpus: 1
+
+outputs:
+  server1_private_ip:
+    description: IP address of server1 in private network
+    value: { get_attr: [ server1, first_address ] }
+  server1_public_ip:
+    description: Floating IP address of server1 in public network
+    value: { get_attr: [ server1_floating_ip, floating_ip_address ] }
diff --git a/ci/scripts/freeipa_setup.sh b/ci/scripts/freeipa_setup.sh
new file mode 100644 (file)
index 0000000..9f5f2dc
--- /dev/null
@@ -0,0 +1,96 @@
+#!/bin/bash
+#
+# Used environment variables:
+#
+#   - Hostname
+#   - FreeIPAIP
+#   - DirectoryManagerPassword
+#   - AdminPassword
+#   - UndercloudFQDN
+#   - HostsSecret
+#
+set -eux
+
+if [ -f "~/freeipa-setup.env" ]; then
+    source ~/freeipa-setup.env
+elif [ -f "/tmp/freeipa-setup.env" ]; then
+    source /tmp/freeipa-setup.env
+fi
+
+# Set DNS servers
+echo "nameserver 8.8.8.8" >> /etc/resolv.conf
+echo "nameserver 8.8.4.4" >> /etc/resolv.conf
+
+yum -q -y remove openstack-dashboard
+
+# Install the needed packages
+yum -q install -y ipa-server ipa-server-dns epel-release rng-tools mod_nss
+yum -q install -y haveged
+
+# Prepare hostname
+hostnamectl set-hostname --static $Hostname
+
+echo $FreeIPAIP `hostname` | tee -a /etc/hosts
+
+# Set iptables rules
+cat << EOF > freeipa-iptables-rules.txt
+# Firewall configuration written by system-config-firewall
+# Manual customization of this file is not recommended.
+*filter
+:INPUT ACCEPT [0:0]
+:FORWARD ACCEPT [0:0]
+:OUTPUT ACCEPT [0:0]
+-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
+-A INPUT -p icmp -j ACCEPT
+-A INPUT -i lo -j ACCEPT
+-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
+#TCP ports for FreeIPA
+-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
+-A INPUT -m state --state NEW -m tcp -p tcp --dport 443  -j ACCEPT
+-A INPUT -m state --state NEW -m tcp -p tcp --dport 389 -j ACCEPT
+-A INPUT -m state --state NEW -m tcp -p tcp --dport 636 -j ACCEPT
+-A INPUT -m state --state NEW -m tcp -p tcp --dport 88  -j ACCEPT
+-A INPUT -m state --state NEW -m tcp -p tcp --dport 464  -j ACCEPT
+-A INPUT -m state --state NEW -m tcp -p tcp --dport 53  -j ACCEPT
+#UDP ports for FreeIPA
+-A INPUT -m state --state NEW -m udp -p udp --dport 88 -j ACCEPT
+-A INPUT -m state --state NEW -m udp -p udp --dport 464 -j ACCEPT
+-A INPUT -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT
+-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
+-A INPUT -j REJECT --reject-with icmp-host-prohibited
+-A FORWARD -j REJECT --reject-with icmp-host-prohibited
+COMMIT
+EOF
+
+iptables-restore < freeipa-iptables-rules.txt
+
+# Entropy generation; otherwise, ipa-server-install will lag.
+chkconfig haveged on
+systemctl start haveged
+
+# Remove conflicting httpd configuration
+rm -f /etc/httpd/conf.d/ssl.conf
+
+# Set up FreeIPA
+ipa-server-install -U -r `hostname -d|tr "[a-z]" "[A-Z]"` \
+                   -p $DirectoryManagerPassword -a $AdminPassword \
+                   --hostname `hostname -f`
+
+# Authenticate
+echo $AdminPassword | kinit admin
+
+# Verify we have TGT
+klist
+
+if [ "$?" = '1' ]; then
+    exit 1
+fi
+
+# Create undercloud host
+ipa host-add $UndercloudFQDN --password=$HostsSecret --force
+
+# Create overcloud nodes and services
+git clone https://github.com/JAORMX/freeipa-tripleo-incubator.git
+cd freeipa-tripleo-incubator
+python create_ipa_tripleo_host_setup.py -w $HostsSecret -d $(hostname -d) \
+    --controller-count 1 --compute-count 1
index 7a47f44..c85881e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: Passwords we manage at the top level
 
index ce74e77..f269b6a 100644 (file)
@@ -119,10 +119,15 @@ from the deployment command, the script should be ready to run:
     [NovaCompute]: CREATE_IN_PROGRESS state changed
 
 The user running the script must be able to ssh as root to each server.  Define
-the hostnames of the deployed servers you intend to use for each role type::
-
-    export controller_hosts="controller0 controller1 controller2"
-    export compute_hosts="compute0"
+the the names of your custom roles (if applicable) and hostnames of the deployed
+servers you intend to use for each role type. For each role name, a
+corresponding <role-name>_hosts variable should also be defined, e.g.::
+
+    export ROLES="Controller NewtorkNode StorageNode Compute"
+    export Controller_hosts="10.0.0.1 10.0.0.2 10.0.0.3"
+    export NetworkNode_hosts="10.0.0.4 10.0.0.5 10.0.0.6"
+    export StorageNode_hosts="10.0.0.7 10.0.08"
+    export Compute_hosts="10.0.0.9 10.0.0.10 10.0.0.11"
 
 Then run the script on the undercloud with a stackrc file sourced, and
 the script will copy the needed os-collect-config.conf configuration to each
diff --git a/deployed-server/ctlplane-port.yaml b/deployed-server/ctlplane-port.yaml
deleted file mode 100644 (file)
index eb10fba..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-heat_template_version: 2014-10-16
-
-parameters:
-  Hostname:
-    type: string
-
-resources:
-
-  ControlPlanePort:
-    type: OS::Neutron::Port
-    properties:
-      network: ctlplane
-      name:
-        list_join:
-          - '-'
-          - - {get_param: Hostname}
-            - ctlplane
-            - port
-      replacement_policy: AUTO
-
-outputs:
-  ip_address:
-    value: {get_attr: [ControlPlanePort, fixed_ips, 0, ip_address]}
diff --git a/deployed-server/deployed-neutron-port.yaml b/deployed-server/deployed-neutron-port.yaml
new file mode 100644 (file)
index 0000000..5ce6377
--- /dev/null
@@ -0,0 +1,67 @@
+heat_template_version: ocata
+
+description: "
+  A fake OS::Neutron::Port stack which outputs fixed_ips and subnets based on
+  the input from the DeployedServerPortMap (set via parameter_defaults). This
+  lookup requires the use of port naming conventions. In order for this to work
+  with deployed-server the keys should be <hostname>-<network>.
+  Example:
+    parameter_defaults:
+      DeployedServerPortMap:
+        gatsby_ctlplane:
+          fixed_ips:
+            - ip_address: 127.0.0.1
+          subnets:
+            - cidr: 24"
+
+parameters:
+  name:
+    default: ''
+    type: string
+  network:
+    default: ''
+    type: string
+  fixed_ips:
+    default: ''
+    type: comma_delimited_list
+  replacement_policy:
+    default: ''
+    type: string
+  DeployedServerPortMap:
+    default: {}
+    type: json
+
+
+outputs:
+  fixed_ips:
+    value:
+      {get_param: [DeployedServerPortMap, {get_param: name}, fixed_ips]}
+  subnets:
+    value:
+      {get_param: [DeployedServerPortMap, {get_param: name}, subnets]}
+  name:
+    value: {get_param: name}
+  status:
+    value: DOWN
+  allowed_address_pairs:
+    value: {}
+  device_id:
+    value: ''
+  device_owner:
+    value: {get_param: network}
+  dns_assignment:
+    value: ''
+  port_security_enabled:
+    value: False
+  admin_state_up:
+    value: False
+  security_groups:
+    value: {}
+  network_id:
+    value: ''
+  tenant_id:
+    value: ''
+  qos_policy_id:
+    value: ''
+  mac_address:
+    value: ''
diff --git a/deployed-server/deployed-server-config.yaml b/deployed-server/deployed-server-config.yaml
deleted file mode 100644 (file)
index 8c59dc7..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-heat_template_version: 2014-10-16
-parameters:
-  user_data_format:
-    type: string
-    default: SOFTWARE_CONFIG
-
-resources:
-  # We just need something which returns a unique ID, but we can't
-  # use RandomString because RefId returns the value, not the physical
-  # resource ID, SoftwareConfig should work as it returns a UUID
-  deployed-server-config:
-    type: OS::Heat::SoftwareConfig
-
-outputs:
-  # FIXME(shardy) this is needed because TemplateResource returns an
-  # ARN not a UUID, which overflows the Deployment server_id column..
-  user_data_format:
-    value: SOFTWARE_CONFIG
-  OS::stack_id:
-    value: {get_resource: deployed-server-config}
-
-
diff --git a/deployed-server/deployed-server-roles-data.yaml b/deployed-server/deployed-server-roles-data.yaml
new file mode 100644 (file)
index 0000000..40a1518
--- /dev/null
@@ -0,0 +1,173 @@
+# Specifies which roles (groups of nodes) will be deployed
+# Note this is used as an input to the various *.j2.yaml
+# jinja2 templates, so that they are converted into *.yaml
+# during the plan creation (via a mistral action/workflow).
+#
+# The format is a list, with the following format:
+#
+# * name: (string) mandatory, name of the role, must be unique
+#
+# CountDefault: (number) optional, default number of nodes, defaults to 0
+# sets the default for the {{role.name}}Count parameter in overcloud.yaml
+#
+# HostnameFormatDefault: (string) optional default format string for hostname
+# defaults to '%stackname%-{{role.name.lower()}}-%index%'
+# sets the default for {{role.name}}HostnameFormat parameter in overcloud.yaml
+#
+# disable_constraints: (boolean) optional, whether to disable Nova and Glance
+# constraints for each role specified in the templates.
+#
+# ServicesDefault: (list) optional default list of services to be deployed
+# on the role, defaults to an empty list. Sets the default for the
+# {{role.name}}Services parameter in overcloud.yaml
+
+- name: Controller
+  CountDefault: 1
+  disable_constraints: True
+  ServicesDefault:
+    - OS::TripleO::Services::CACerts
+    - OS::TripleO::Services::CephMon
+    - OS::TripleO::Services::CephExternal
+    - OS::TripleO::Services::CephRgw
+    - OS::TripleO::Services::CinderApi
+    - OS::TripleO::Services::CinderBackup
+    - OS::TripleO::Services::CinderScheduler
+    - OS::TripleO::Services::CinderVolume
+    - OS::TripleO::Services::Core
+    - OS::TripleO::Services::Kernel
+    - OS::TripleO::Services::Keystone
+    - OS::TripleO::Services::GlanceApi
+    - OS::TripleO::Services::GlanceRegistry
+    - OS::TripleO::Services::HeatApi
+    - OS::TripleO::Services::HeatApiCfn
+    - OS::TripleO::Services::HeatApiCloudwatch
+    - OS::TripleO::Services::HeatEngine
+    - OS::TripleO::Services::MySQL
+    - OS::TripleO::Services::NeutronDhcpAgent
+    - OS::TripleO::Services::NeutronL3Agent
+    - OS::TripleO::Services::NeutronMetadataAgent
+    - OS::TripleO::Services::NeutronApi
+    - 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::Redis
+    - OS::TripleO::Services::NovaConductor
+    - OS::TripleO::Services::MongoDb
+    - OS::TripleO::Services::NovaApi
+    - OS::TripleO::Services::NovaMetadata
+    - OS::TripleO::Services::NovaScheduler
+    - OS::TripleO::Services::NovaConsoleauth
+    - OS::TripleO::Services::NovaVncProxy
+    - OS::TripleO::Services::Ntp
+    - OS::TripleO::Services::SwiftProxy
+    - OS::TripleO::Services::SwiftStorage
+    - OS::TripleO::Services::SwiftRingBuilder
+    - OS::TripleO::Services::Snmp
+    - OS::TripleO::Services::Timezone
+    - OS::TripleO::Services::CeilometerApi
+    - OS::TripleO::Services::CeilometerCollector
+    - OS::TripleO::Services::CeilometerExpirer
+    - OS::TripleO::Services::CeilometerAgentCentral
+    - OS::TripleO::Services::CeilometerAgentNotification
+    - OS::TripleO::Services::Horizon
+    - OS::TripleO::Services::GnocchiApi
+    - OS::TripleO::Services::GnocchiMetricd
+    - OS::TripleO::Services::GnocchiStatsd
+    - OS::TripleO::Services::ManilaApi
+    - OS::TripleO::Services::ManilaScheduler
+    - OS::TripleO::Services::ManilaBackendGeneric
+    - OS::TripleO::Services::ManilaBackendNetapp
+    - OS::TripleO::Services::ManilaBackendCephFs
+    - OS::TripleO::Services::ManilaShare
+    - OS::TripleO::Services::AodhApi
+    - OS::TripleO::Services::AodhEvaluator
+    - OS::TripleO::Services::AodhNotifier
+    - OS::TripleO::Services::AodhListener
+    - OS::TripleO::Services::SaharaApi
+    - OS::TripleO::Services::SaharaEngine
+    - OS::TripleO::Services::IronicApi
+    - OS::TripleO::Services::IronicConductor
+    - OS::TripleO::Services::NovaIronic
+    - OS::TripleO::Services::TripleoPackages
+    - OS::TripleO::Services::TripleoFirewall
+    - OS::TripleO::Services::OpenDaylightApi
+    - OS::TripleO::Services::OpenDaylightOvs
+    - OS::TripleO::Services::SensuClient
+    - OS::TripleO::Services::FluentdClient
+    - OS::TripleO::Services::BarbicanApi
+    - OS::TripleO::Services::PankoApi
+    - OS::TripleO::Services::Zaqar
+    - OS::TripleO::Services::OVNDBs
+
+- name: Compute
+  CountDefault: 1
+  HostnameFormatDefault: '%stackname%-novacompute-%index%'
+  disable_constraints: True
+  ServicesDefault:
+    - OS::TripleO::Services::CACerts
+    - OS::TripleO::Services::CephClient
+    - OS::TripleO::Services::CephExternal
+    - OS::TripleO::Services::Timezone
+    - OS::TripleO::Services::Ntp
+    - OS::TripleO::Services::Snmp
+    - OS::TripleO::Services::NovaCompute
+    - OS::TripleO::Services::NovaLibvirt
+    - OS::TripleO::Services::Kernel
+    - OS::TripleO::Services::ComputeNeutronCorePlugin
+    - OS::TripleO::Services::ComputeNeutronOvsAgent
+    - OS::TripleO::Services::ComputeCeilometerAgent
+    - OS::TripleO::Services::ComputeNeutronL3Agent
+    - OS::TripleO::Services::ComputeNeutronMetadataAgent
+    - OS::TripleO::Services::TripleoPackages
+    - OS::TripleO::Services::TripleoFirewall
+    - OS::TripleO::Services::NeutronSriovAgent
+    - OS::TripleO::Services::OpenDaylightOvs
+    - OS::TripleO::Services::SensuClient
+    - OS::TripleO::Services::FluentdClient
+
+- name: BlockStorage
+  disable_constraints: True
+  ServicesDefault:
+    - OS::TripleO::Services::CACerts
+    - OS::TripleO::Services::BlockStorageCinderVolume
+    - OS::TripleO::Services::Kernel
+    - OS::TripleO::Services::Ntp
+    - OS::TripleO::Services::Timezone
+    - OS::TripleO::Services::Snmp
+    - OS::TripleO::Services::TripleoPackages
+    - OS::TripleO::Services::TripleoFirewall
+    - OS::TripleO::Services::SensuClient
+    - OS::TripleO::Services::FluentdClient
+
+- name: ObjectStorage
+  disable_constraints: True
+  ServicesDefault:
+    - OS::TripleO::Services::CACerts
+    - OS::TripleO::Services::Kernel
+    - OS::TripleO::Services::Ntp
+    - OS::TripleO::Services::SwiftStorage
+    - OS::TripleO::Services::SwiftRingBuilder
+    - OS::TripleO::Services::Snmp
+    - OS::TripleO::Services::Timezone
+    - OS::TripleO::Services::TripleoPackages
+    - OS::TripleO::Services::TripleoFirewall
+    - OS::TripleO::Services::SensuClient
+    - OS::TripleO::Services::FluentdClient
+
+- name: CephStorage
+  disable_constraints: True
+  ServicesDefault:
+    - OS::TripleO::Services::CACerts
+    - OS::TripleO::Services::CephOSD
+    - OS::TripleO::Services::Kernel
+    - OS::TripleO::Services::Ntp
+    - OS::TripleO::Services::Snmp
+    - OS::TripleO::Services::Timezone
+    - OS::TripleO::Services::TripleoPackages
+    - OS::TripleO::Services::TripleoFirewall
+    - OS::TripleO::Services::SensuClient
+    - OS::TripleO::Services::FluentdClient
index da5698e..2929c5e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 parameters:
   image:
     type: string
@@ -21,7 +21,7 @@ parameters:
     default: ''
   name:
     type: string
-    default: ''
+    default: 'deployed-server'
   image_update_policy:
     type: string
     default: ''
@@ -40,20 +40,18 @@ parameters:
     default: {}
 
 resources:
-  # We just need something which returns a unique ID, but we can't
-  # use RandomString because RefId returns the value, not the physical
-  # resource ID, SoftwareConfig should work as it returns a UUID
   deployed-server:
-    type: OS::TripleO::DeployedServerConfig
+    type: OS::Heat::DeployedServer
     properties:
-      user_data_format: SOFTWARE_CONFIG
+      name: {get_param: name}
+      software_config_transport: {get_param: software_config_transport}
 
   InstanceIdConfig:
     type: OS::Heat::StructuredConfig
     properties:
-      group: os-apply-config
+      group: apply-config
       config:
-        instance-id: {get_attr: [deployed-server, "OS::stack_id"]}
+        instance-id: {get_resource: deployed-server}
 
   InstanceIdDeployment:
     type: OS::Heat::StructuredDeployment
@@ -69,21 +67,10 @@ resources:
           #!/bin/bash
           set -eux
           mkdir -p $heat_outputs_path
-          host=$(hostnamectl --static)
-          echo -n "$host "  > $heat_outputs_path.hosts_entry
-          host_ip=$(python -c "import socket; print socket.gethostbyname(\"$host\")")
-          echo -n "$host_ip " >> $heat_outputs_path.hosts_entry
-          echo >> $heat_outputs_path.hosts_entry
-          cat $heat_outputs_path.hosts_entry
-          echo -n $host_ip > $heat_outputs_path.ip_address
-          cat $heat_outputs_path.ip_address
+          host=$(hostname -s)
           echo -n $host > $heat_outputs_path.hostname
           cat $heat_outputs_path.hostname
       outputs:
-        - name: hosts_entry
-          description: hosts_entry
-        - name: ip_address
-          description: ip_address
         - name: hostname
           description: hostname
 
@@ -93,23 +80,23 @@ resources:
       config: {get_resource: HostsEntryConfig}
       server: {get_resource: deployed-server}
 
-  ControlPlanePort:
+  ControlPlanePortImpl:
     type: OS::TripleO::DeployedServer::ControlPlanePort
     properties:
-      Hostname: {get_attr: [HostsEntryDeployment, hostname]}
+      network: ctlplane
+      name:
+        list_join:
+          - '-'
+          - - {get_attr: [HostsEntryDeployment, hostname]}
+            - ctlplane
+      replacement_policy: AUTO
 
 outputs:
-  # FIXME(shardy) this is needed because TemplateResource returns an
-  # ARN not a UUID, which overflows the Deployment server_id column..
   OS::stack_id:
-    value: {get_attr: [deployed-server, "OS::stack_id"]}
+    value: {get_resource: deployed-server}
   networks:
     value:
       ctlplane:
-        - {get_attr: [ControlPlanePort, ip_address]}
+        - {get_attr: [ControlPlanePortImpl, fixed_ips, 0, ip_address]}
   name:
-   value: {get_attr: [HostsEntryDeployment, hostname]}
-  hosts_entry:
-   value: {get_attr: [HostsEntryDeployment, hosts_entry]}
-  ip_address:
-    value: {get_attr: [HostsEntryDeployment, ip_address]}
+    value: {get_attr: [HostsEntryDeployment, hostname]}
index d6219e8..404244b 100755 (executable)
@@ -11,14 +11,22 @@ OBJECTSTORAGE_HOSTS=${OBJECTSTORAGE_HOSTS:-""}
 CEPHSTORAGE_HOSTS=${CEPHSTORAGE_HOSTS:-""}
 SUBNODES_SSH_KEY=${SUBNODES_SSH_KEY:-"~/.ssh/id_rsa"}
 SSH_OPTIONS="-tt -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Verbose -o PasswordAuthentication=no -o ConnectionAttempts=32"
+OVERCLOUD_ROLES=${OVERCLOUD_ROLES:-"Controller Compute BlockStorage ObjectStorage CephStorage"}
+
+# Set the _hosts vars for the default roles based on the old var names that
+# were all caps for backwards compatibility.
+Controller_hosts=${Controller_hosts:-"$CONTROLLER_HOSTS"}
+Compute_hosts=${Compute_hosts:-"$COMPUTE_HOSTS"}
+BlockStorage_hosts=${BlockStorage_hosts:-"$BLOCKSTORAGE_HOSTS"}
+ObjectStorage_hosts=${ObjectStorage_hosts:-"$OBJECTSTORAGE_HOSTS"}
+CephStorage_hosts=${CephStorage_hosts:-"$CEPHSTORAGE_HOSTS"}
+
+# Set the _hosts_a vars for each role defined
+for role in $OVERCLOUD_ROLES; do
+    eval hosts=\${${role}_hosts}
+    read -a ${role}_hosts_a <<< $hosts
+done
 
-read -a Controller_hosts_a <<< $CONTROLLER_HOSTS
-read -a Compute_hosts_a <<< $COMPUTE_HOSTS
-read -a BlockStorage_hosts_a <<< $BLOCKSTORAGE_HOSTS
-read -a ObjectStorage_hosts_a <<< $OBJECTSTORAGE_HOSTS
-read -a CephStorage_hosts_a <<< $CEPHSTORAGE_HOSTS
-
-roles=${OVERCLOUD_ROLES:-"Controller Compute BlockStorage ObjectStorage CephStorage"}
 admin_user_id=$(openstack user show admin -c id -f value)
 admin_project_id=$(openstack project show admin -c id -f value)
 
@@ -44,7 +52,7 @@ function check_stack {
 }
 
 
-for role in $roles; do
+for role in $OVERCLOUD_ROLES; do
     while ! check_stack overcloud; do
         sleep $SLEEP_TIME
     done
@@ -71,24 +79,19 @@ for role in $roles; do
             server_stack=$(openstack stack resource show $stack $server_resource_name -c physical_resource_id -f value)
         done
 
-        deployed_server_stack=$(openstack stack resource show $server_stack deployed-server -c physical_resource_id -f value)
+        deployed_server_metadata_url=$(openstack stack resource metadata $server_stack deployed-server | jq -r '.["os-collect-config"].request.metadata_url')
 
         echo "======================"
         echo "$role$i os-collect-config.conf configuration:"
 
         config="
 [DEFAULT]
-collectors=heat
+collectors=request
 command=os-refresh-config
 polling_interval=30
 
-[heat]
-user_id=$admin_user_id
-password=$OS_PASSWORD
-auth_url=$OS_AUTH_URL
-project_id=$admin_project_id
-stack_id=$deployed_server_stack
-resource_name=deployed-server-config"
+[request]
+metadata_url=$deployed_server_metadata_url"
 
         echo "$config"
         echo "======================"
index f6d61e2..41a8740 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 parameters:
   DockerAgentImage:
old mode 100644 (file)
new mode 100755 (executable)
index acb44ce..1c5cc18
@@ -1,72 +1,56 @@
 #!/bin/bash
 set -eux
 
-/sbin/setenforce 0
-/sbin/modprobe ebtables
-
-# CentOS sets ptmx to 000. Withoutit being 666, we can't use Cinder volumes
-chmod 666 /dev/pts/ptmx
-
-# We need hostname -f to return in a centos container for the puppet hook
-HOSTNAME=$(hostname)
-echo "127.0.0.1 $HOSTNAME.localdomain $HOSTNAME" >> /etc/hosts
-
-# update docker for local insecure registry(optional)
-# Note: This is different for different docker versions
-# For older docker versions < 1.4.x use commented line
-#echo "OPTIONS='--insecure-registry $docker_registry'" >> /etc/sysconfig/docker
-#echo "ADD_REGISTRY='--registry-mirror $docker_registry'" >> /etc/sysconfig/docker
+# TODO remove this when built image includes docker
+if [ ! -f "/usr/bin/docker" ]; then
+    yum -y install docker
+fi
 
 # Local docker registry 1.8
 # NOTE(mandre) $docker_namespace_is_registry is not a bash variable but is
 # a place holder for text replacement done via heat
-if [ "$docker_namespace_is_registry" = True ]; then
+if [ "$docker_namespace_is_registry" = "True" ]; then
     /usr/bin/systemctl stop docker.service
     # if namespace is used with local registry, trim all namespacing
     trim_var=$docker_registry
     registry_host="${trim_var%%/*}"
     /bin/sed -i -r "s/^[# ]*INSECURE_REGISTRY *=.+$/INSECURE_REGISTRY='--insecure-registry $registry_host'/" /etc/sysconfig/docker
-    /usr/bin/systemctl start --no-block docker.service
 fi
 
-/usr/bin/docker pull $agent_image &
-DOCKER_PULL_PID=$!
-
 mkdir -p /var/lib/etc-data/json-config #FIXME: this should be a docker data container
 
 # NOTE(flaper87): Heat Agent required mounts
-AGENT_COMMAND_MOUNTS="-v /var/lib/etc-data:/var/lib/etc-data \
-                      -v /run:/run \
-                      -v /etc:/host/etc \
-                      -v /usr/bin/atomic:/usr/bin/atomic \
-                      -v /var/lib/dhclient:/var/lib/dhclient \
-                      -v /var/lib/cloud:/var/lib/cloud \
-                      -v /var/lib/heat-cfntools:/var/lib/heat-cfntools \
-                      -v /etc/sysconfig/docker:/etc/sysconfig/docker \
-                      -v /usr/lib64/libseccomp.so.2:/usr/lib64/libseccomp.so.2"
-
-
-# NOTE(flaper87): Some of these commands may not be present depending on the
-# atomic version.
-for docker_cmd in docker docker-current docker-latest; do
-    if [ -f "/usr/bin/$docker_cmd" ]; then
-        AGENT_COMMAND_MOUNTS+=" -v /usr/bin/$docker_cmd:/usr/bin/$docker_cmd"
-    fi
-done
+AGENT_COMMAND_MOUNTS="\
+-v /var/lib/etc-data:/var/lib/etc-data \
+-v /run:/run \
+-v /etc/hosts:/etc/hosts \
+-v /etc:/host/etc \
+-v /var/lib/dhclient:/var/lib/dhclient \
+-v /var/lib/cloud:/var/lib/cloud \
+-v /var/lib/heat-cfntools:/var/lib/heat-cfntools \
+-v /var/lib/os-collect-config:/var/lib/os-collect-config \
+-v /var/lib/os-apply-config-deployments:/var/lib/os-apply-config-deployments \
+-v /var/lib/heat-config:/var/lib/heat-config \
+-v /etc/sysconfig/docker:/etc/sysconfig/docker \
+-v /etc/sysconfig/network-scripts:/etc/sysconfig/network-scripts \
+-v /usr/lib64/libseccomp.so.2:/usr/lib64/libseccomp.so.2 \
+-v /usr/bin/docker:/usr/bin/docker \
+-v /usr/bin/docker-current:/usr/bin/docker-current \
+-v /var/lib/os-collect-config:/var/lib/os-collect-config"
 
 # heat-docker-agents service
 cat <<EOF > /etc/systemd/system/heat-docker-agents.service
-
 [Unit]
 Description=Heat Docker Agent Container
 After=docker.service
 Requires=docker.service
+Before=os-collect-config.service
+Conflicts=os-collect-config.service
 
 [Service]
 User=root
-Restart=on-failure
-ExecStartPre=-/usr/bin/docker kill heat-agents
-ExecStartPre=-/usr/bin/docker rm heat-agents
+Restart=always
+ExecStartPre=-/usr/bin/docker rm -f heat-agents
 ExecStart=/usr/bin/docker run --name heat-agents --privileged --net=host \
     $AGENT_COMMAND_MOUNTS \
     --entrypoint=/usr/bin/os-collect-config $agent_image
@@ -74,35 +58,12 @@ ExecStop=/usr/bin/docker stop heat-agents
 
 [Install]
 WantedBy=multi-user.target
-
 EOF
 
 # enable and start heat-docker-agents
-chmod 0640 /etc/systemd/system/heat-docker-agents.service
 /usr/bin/systemctl enable heat-docker-agents.service
 /usr/bin/systemctl start --no-block heat-docker-agents.service
 
-# Disable NetworkManager and let the ifup/down scripts work properly.
-/usr/bin/systemctl disable NetworkManager
-/usr/bin/systemctl stop NetworkManager
-
-# Atomic's root partition & logical volume defaults to 3G.  In order to launch
-# larger VMs, we need to enlarge the root logical volume and scale down the
-# docker_pool logical volume. We are allocating 80% of the disk space for
-# vm data and the remaining 20% for docker images.
-ATOMIC_ROOT='/dev/mapper/atomicos-root'
-ROOT_DEVICE=`pvs -o vg_name,pv_name --no-headings | grep atomicos | awk '{ print $2}'`
-
-growpart $( echo "${ROOT_DEVICE}" | sed -r 's/([^0-9]*)([0-9]+)/\1 \2/' )
-pvresize "${ROOT_DEVICE}"
-lvresize -l +80%FREE "${ATOMIC_ROOT}"
-xfs_growfs "${ATOMIC_ROOT}"
-
-cat <<EOF > /etc/sysconfig/docker-storage-setup
-GROWPART=true
-AUTO_EXTEND_POOL=yes
-POOL_AUTOEXTEND_PERCENT=30
-POOL_AUTOEXTEND_THRESHOLD=70
-EOF
-
-wait $DOCKER_PULL_PID
+# Disable libvirtd
+/usr/bin/systemctl disable libvirtd.service
+/usr/bin/systemctl stop libvirtd.service
index de17cff..41d3389 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Post-deploy configuration steps via puppet for all roles,
@@ -25,16 +25,6 @@ parameters:
     default: 'tripleoupstream'
     type: string
 
-  DockerOpenvswitchDBImage:
-    description: image
-    default: 'centos-binary-openvswitch-db-server'
-    type: string
-
-  DockerOvsVswitchdImage:
-    description: image
-    default: 'centos-binary-openvswitch-vswitchd'
-    type: string
-
   LibvirtConfig:
     type: string
     default: "/etc/libvirt/libvirtd.conf"
@@ -206,73 +196,6 @@ resources:
         nova_config: {get_param: NovaConfig}
         neutron_openvswitch_agent_config: {get_param: NeutronOpenvswitchAgentConfig}
 
-  NovaComputeContainersDeploymentOVS:
-    type: OS::Heat::StructuredDeploymentGroup
-    depends_on: CopyJsonDeployment
-    properties:
-      name: NovaComputeContainersDeploymentOVS
-      config: {get_resource: NovaComputeContainersConfigOVS}
-      servers: {get_param: [servers, {{role.name}}]}
-
-  NovaComputeContainersConfigOVS:
-    type: OS::Heat::StructuredConfig
-    properties:
-      group: docker-cmd
-      config:
-        openvswitchdb:
-          image:
-            list_join:
-              - '/'
-              - [ {get_param: DockerNamespace}, {get_param: DockerOpenvswitchDBImage} ]
-          net: host
-          restart: always
-          volumes:
-            - /var/lib/etc-data/json-config/ovsdb-server.json:/var/lib/kolla/config_files/config.json
-            - /etc/localtime:/etc/localtime:ro
-            - /run:/run
-            - logs:/var/log/kolla/
-            - openvswitch_db:/var/lib/openvswitch/
-          environment:
-            - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
-
-        ovsvswitchd:
-          image:
-            list_join:
-              - '/'
-              - [ {get_param: DockerNamespace}, {get_param: DockerOvsVswitchdImage} ]
-          net: host
-          privileged: true
-          restart: always
-          volumes:
-            - /var/lib/etc-data/json-config/ovs-vswitchd.json:/var/lib/kolla/config_files/config.json
-            - /etc/localtime:/etc/localtime:ro
-            - /lib/modules:/lib/modules:ro
-            - /run:/run
-            - logs:/var/log/kolla/
-          environment:
-            - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS
-
-  NovaComputeContainersDeploymentNetconfig:
-    type: OS::Heat::SoftwareDeploymentGroup
-    depends_on: NovaComputeContainersDeploymentOVS
-    properties:
-      name: NovaComputeContainersDeploymentNetconfig
-      config: {get_resource: NovaComputeContainersConfigNetconfig}
-      servers: {get_param: [servers, {{role.name}}]}
-
-  # We run os-net-config here because we depend on the ovs containers to be up
-  # and running before we configure the network.  This allows explicit timing
-  # of the network configuration.
-  NovaComputeContainersConfigNetconfig:
-    type: OS::Heat::SoftwareConfig
-    properties:
-      group: script
-      outputs:
-      - name: result
-      config: |
-        #!/bin/bash
-        /usr/local/bin/run-os-net-config
-
   {{role.name}}ContainersConfig_Step1:
     type: OS::Heat::StructuredConfig
     depends_on: CopyJsonDeployment
@@ -291,7 +214,7 @@ resources:
 
   {{role.name}}ContainersDeployment_Step1:
     type: OS::Heat::StructuredDeploymentGroup
-    depends_on: [{{role.name}}PreConfig, {{role.name}}ArtifactsDeploy, NovaComputeContainersDeploymentNetconfig]
+    depends_on: [{{role.name}}PreConfig, {{role.name}}ArtifactsDeploy]
     properties:
       name: {{role.name}}ContainersDeployment_Step1
       servers: {get_param: [servers, {{role.name}}]}
index 8d092a3..56bd073 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron openvswitch service
index 5c56aee..c695c94 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   OpenStack containerized Nova Compute service
index 3651155..2dfeed5 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   OpenStack Libvirt Service
index 37e7b65..3d51eb1 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Utility stack to convert an array of services into a set of combined
index c63d399..7a6639f 100644 (file)
@@ -1,4 +1,3 @@
 resource_registry:
   OS::TripleO::Server: ../deployed-server/deployed-server.yaml
-  OS::TripleO::DeployedServerConfig: ../deployed-server/deployed-server-config.yaml
-  OS::TripleO::DeployedServer::ControlPlanePort: ../deployed-server/ctlplane-port.yaml
+  OS::TripleO::DeployedServer::ControlPlanePort: OS::Neutron::Port
index cfda314..54f5e41 100644 (file)
@@ -1,4 +1,3 @@
 resource_registry:
   OS::TripleO::Server: ../deployed-server/deployed-server.yaml
-  OS::TripleO::DeployedServerConfig: ../deployed-server/deployed-server-config.yaml
-  OS::TripleO::DeployedServer::ControlPlanePort: OS::Heat::None
+  OS::TripleO::DeployedServer::ControlPlanePort: ../deployed-server/deployed-neutron-port.yaml
index 0755c61..4f5b36b 100644 (file)
@@ -1,6 +1,6 @@
 resource_registry:
   # Docker container with heat agents for containerized compute node.
-  OS::TripleO::NodeUserData: ../docker/firstboot/install_docker_agents.yaml
+  OS::TripleO::Compute::NodeUserData: ../docker/firstboot/install_docker_agents.yaml
   OS::TripleO::Services::NovaLibvirt: ../docker/services/nova-libvirt.yaml
   OS::TripleO::Services::ComputeNeutronOvsAgent: ../docker/services/neutron-ovs-agent.yaml
   OS::TripleO::Services::NovaCompute: ../docker/services/nova-compute.yaml
@@ -13,7 +13,6 @@ resource_registry:
   OS::TripleO::Services: ../docker/services/services.yaml
 
 parameter_defaults:
-  NovaImage: atomic-image
   # Defaults to 'tripleoupstream'.  Specify a local docker registry
   # Example: 192.0.2.1:8787/tripleoupstream
   DockerNamespace: tripleoupstream
@@ -24,8 +23,6 @@ parameter_defaults:
   DockerNovaComputeImage: centos-binary-nova-compute:newton
   DockerLibvirtImage: centos-binary-nova-libvirt:newton
   DockerOpenvswitchImage: centos-binary-neutron-openvswitch-agent:newton
-  DockerOvsVswitchdImage: centos-binary-openvswitch-vswitchd:newton
-  DockerOpenvswitchDBImage: centos-binary-openvswitch-db-server:newton
 
   ComputeServices:
     - OS::TripleO::Services::NovaCompute
index c01b488..6e912fa 100644 (file)
@@ -3,5 +3,6 @@
 parameter_defaults:
   EnableInternalTLS: true
 resource_registry:
+  OS::TripleO::Services::HAProxyInternalTLS: ../puppet/services/haproxy-internal-tls-certmonger.yaml
   OS::TripleO::Services::ApacheTLS: ../puppet/services/apache-internal-tls-certmonger.yaml
   OS::TripleO::Services::MySQLTLS: ../puppet/services/database/mysql-internal-tls-certmonger.yaml
index 5a2ef50..fbd1fb9 100644 (file)
@@ -1,29 +1,24 @@
 resource_registry:
-  OS::TripleO::Network::Ports::NetVipMap: ../network/ports/net_vip_map_external_v6.yaml
-  OS::TripleO::Network::Ports::ExternalVipPort: ../network/ports/noop.yaml
-  OS::TripleO::Network::Ports::InternalApiVipPort: ../network/ports/noop.yaml
-  OS::TripleO::Network::Ports::StorageVipPort: ../network/ports/noop.yaml
-  OS::TripleO::Network::Ports::StorageMgmtVipPort: ../network/ports/noop.yaml
-  OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/from_service_v6.yaml
   OS::TripleO::Controller::Ports::ExternalPort: ../network/ports/external_from_pool_v6.yaml
   OS::TripleO::Controller::Ports::InternalApiPort: ../network/ports/internal_api_from_pool_v6.yaml
   OS::TripleO::Controller::Ports::StoragePort: ../network/ports/storage_from_pool_v6.yaml
   OS::TripleO::Controller::Ports::StorageMgmtPort: ../network/ports/storage_mgmt_from_pool_v6.yaml
   # OVS doesn't support IPv6 endpoints for tunneling yet, so this remains IPv4 for now.
   OS::TripleO::Controller::Ports::TenantPort: ../network/ports/tenant_from_pool.yaml
+  # Management network is optional and disabled by default
+  #OS::TripleO::Controller::Ports::ManagementPort: ../network/ports/management_from_pool_v6.yaml
 
 parameter_defaults:
   # When using an external loadbalancer set the following in parameter_defaults
   # to control your VIPs (currently one per network)
   # NOTE: we will eventually move to one VIP per service
   #
-  ControlPlaneIP: 192.0.2.251
-  ExternalNetworkVip: 2001:db8:fd00:1000:0000:0000:0000:0005
-  InternalApiNetworkVip: fd00:fd00:fd00:2000:0000:0000:0000:0005
-  StorageNetworkVip: fd00:fd00:fd00:3000:0000:0000:0000:0005
-  StorageMgmtNetworkVip: fd00:fd00:fd00:4000:0000:0000:0000:0005
-  ServiceVips:
-    redis: fd00:fd00:fd00:2000:0000:0000:0000:0006
+  ControlFixedIPs: [{'ip_address':'192.0.2.251'}]
+  PublicVirtualFixedIPs: [{'ip_address':'2001:db8:fd00:1000:0000:0000:0000:0005'}]
+  InternalApiVirtualFixedIPs: [{'ip_address':'fd00:fd00:fd00:2000:0000:0000:0000:0005'}]
+  StorageVirtualFixedIPs: [{'ip_address':'fd00:fd00:fd00:3000:0000:0000:0000:0005'}]
+  StorageMgmtVirtualFixedIPs: [{'ip_address':'fd00:fd00:fd00:4000:0000:0000:0000:0005'}]
+  RedisVirtualFixedIPs: [{'ip_address':'fd00:fd00:fd00:2000:0000:0000:0000:0006'}]
   ControllerIPs:
     external:
       - 2001:db8:fd00:1000:0000:0000:0000:0007
index 8656ba1..1759c04 100644 (file)
@@ -1,10 +1,4 @@
 resource_registry:
-  OS::TripleO::Network::Ports::NetVipMap: ../network/ports/net_vip_map_external.yaml
-  OS::TripleO::Network::Ports::ExternalVipPort: ../network/ports/noop.yaml
-  OS::TripleO::Network::Ports::InternalApiVipPort: ../network/ports/noop.yaml
-  OS::TripleO::Network::Ports::StorageVipPort: ../network/ports/noop.yaml
-  OS::TripleO::Network::Ports::StorageMgmtVipPort: ../network/ports/noop.yaml
-  OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/from_service.yaml
   OS::TripleO::Controller::Ports::ExternalPort: ../network/ports/external_from_pool.yaml
   OS::TripleO::Controller::Ports::InternalApiPort: ../network/ports/internal_api_from_pool.yaml
   OS::TripleO::Controller::Ports::StoragePort: ../network/ports/storage_from_pool.yaml
@@ -18,13 +12,12 @@ parameter_defaults:
   # to control your VIPs (currently one per network)
   # NOTE: we will eventually move to one VIP per service
   #
-  ControlPlaneIP: 192.0.2.251
-  ExternalNetworkVip: 10.0.0.251
-  InternalApiNetworkVip: 172.16.2.251
-  StorageNetworkVip: 172.16.1.251
-  StorageMgmtNetworkVip: 172.16.3.251
-  ServiceVips:
-    redis: 172.16.2.252
+  ControlFixedIPs: [{'ip_address':'192.0.2.251'}]
+  PublicVirtualFixedIPs: [{'ip_address':'10.0.0.251'}]
+  InternalApiVirtualFixedIPs: [{'ip_address':'172.16.2.251'}]
+  StorageVirtualFixedIPs: [{'ip_address':'172.16.1.251'}]
+  StorageMgmtVirtualFixedIPs: [{'ip_address':'172.16.3.251'}]
+  RedisVirtualFixedIPs: [{'ip_address':'172.16.2.252'}]
   ControllerIPs:
     external:
     - 10.0.0.253
diff --git a/environments/host-config-pre-network.j2.yaml b/environments/host-config-pre-network.j2.yaml
new file mode 100644 (file)
index 0000000..fe1302b
--- /dev/null
@@ -0,0 +1,16 @@
+resource_registry:
+# Create the registry only for roles with the word "Compute" in it. Like ComputeOvsDpdk, ComputeSriov, etc.,
+{% for role in roles %}
+{% if "Compute" in role.name %}
+  OS::TripleO::{{role.name}}::PreNetworkConfig: ../extraconfig/pre_network/{{role.name.lower()}}-host_config_and_reboot.yaml
+{% endif %}
+{% endfor %}
+
+parameter_defaults:
+  # Sample parameters for Compute and ComputeOvsDpdk roles
+  #ComputeKernelArgs: ""
+  #ComputeTunedProfileName: ""
+  #ComputeHostCpuList: ""
+  #ComputeOvsDpdkKernelArgs: ""
+  #ComputeOvsDpdkTunedProfileName: ""
+  #ComputeOvsDpdkHostCpuList: ""
diff --git a/environments/major-upgrade-all-in-one.yaml b/environments/major-upgrade-all-in-one.yaml
new file mode 100644 (file)
index 0000000..69d72ed
--- /dev/null
@@ -0,0 +1,8 @@
+# We run the upgrade steps without disabling the OS::TripleO::PostDeploySteps
+# this means you can do a major upgrade in one pass, which may be useful
+# e.g for all-in-one deployments where we can upgrade the compute services
+# at the same time as the controlplane
+# Note that it will be necessary to pass a mapping of OS::Heat::None again for
+# any subsequent updates, or the upgrade steps will run again.
+resource_registry:
+  OS::TripleO::UpgradeSteps: ../puppet/major_upgrade_steps.yaml
diff --git a/environments/major-upgrade-composable-steps.yaml b/environments/major-upgrade-composable-steps.yaml
new file mode 100644 (file)
index 0000000..7e10014
--- /dev/null
@@ -0,0 +1,3 @@
+resource_registry:
+  OS::TripleO::UpgradeSteps: ../puppet/major_upgrade_steps.yaml
+  OS::TripleO::PostDeploySteps: OS::Heat::None
index d0fc9ec..b02fc19 100644 (file)
@@ -50,7 +50,12 @@ parameter_defaults:
   DnsServers: ["8.8.8.8","8.8.4.4"]
   # Set to empty string to enable multiple external networks or VLANs
   NeutronExternalNetworkBridge: "''"
+  # List of Neutron network types for tenant networks (will be used in order)
+  NeutronNetworkType: 'vxlan,vlan'
   # The tunnel type for the tenant network (vxlan or gre). Set to '' to disable tunneling.
   NeutronTunnelTypes: 'vxlan'
+  # Neutron VLAN ranges per network, for example 'datacentre:1:499,tenant:500:1000':
+  NeutronNetworkVLANRanges: 'datacentre:1:1000'
   # Customize bonding options, e.g. "mode=4 lacp_rate=1 updelay=1000 miimon=100"
+  # for Linux bonds w/LACP, or "bond_mode=active-backup" for OVS active/backup.
   BondInterfaceOvsOptions: "bond_mode=active-backup"
index 5d2a915..ff1d788 100644 (file)
@@ -8,30 +8,54 @@ resource_registry:
   OS::TripleO::Network::InternalApi: ../network/internal_api.yaml
   OS::TripleO::Network::StorageMgmt: ../network/storage_mgmt.yaml
   OS::TripleO::Network::Storage: ../network/storage.yaml
+  OS::TripleO::Network::Tenant: ../network/noop.yaml
+  # Management network is optional and disabled by default.
+  # To enable it, include environments/network-management.yaml
+  #OS::TripleO::Network::Management: ../network/management.yaml
+
+  # Port assignments for the VIPs
+  OS::TripleO::Network::Ports::ExternalVipPort: ../network/ports/external.yaml
+  OS::TripleO::Network::Ports::InternalApiVipPort: ../network/ports/internal_api.yaml
+  OS::TripleO::Network::Ports::StorageVipPort: ../network/ports/storage.yaml
+  OS::TripleO::Network::Ports::StorageMgmtVipPort: ../network/ports/storage_mgmt.yaml
+  OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/vip.yaml
 
   # Port assignments for the controller role
   OS::TripleO::Controller::Ports::ExternalPort: ../network/ports/external.yaml
   OS::TripleO::Controller::Ports::InternalApiPort: ../network/ports/internal_api.yaml
   OS::TripleO::Controller::Ports::StoragePort: ../network/ports/storage.yaml
   OS::TripleO::Controller::Ports::StorageMgmtPort: ../network/ports/storage_mgmt.yaml
+  OS::TripleO::Controller::Ports::TenantPort: ../network/ports/noop.yaml
+  #OS::TripleO::Controller::Ports::ManagementPort: ../network/ports/management.yaml
 
   # Port assignments for the compute role
+  OS::TripleO::Compute::Ports::ExternalPort: ../network/ports/noop.yaml
   OS::TripleO::Compute::Ports::InternalApiPort: ../network/ports/internal_api.yaml
   OS::TripleO::Compute::Ports::StoragePort: ../network/ports/storage.yaml
+  OS::TripleO::Compute::Ports::StorageMgmtPort: ../network/ports/noop.yaml
+  OS::TripleO::Compute::Ports::TenantPort: ../network/ports/noop.yaml
+  #OS::TripleO::Compute::Ports::ManagementPort: ../network/ports/management.yaml
 
   # Port assignments for the ceph storage role
+  OS::TripleO::CephStorage::Ports::ExternalPort: ../network/ports/noop.yaml
+  OS::TripleO::CephStorage::Ports::InternalApiPort: ../network/ports/noop.yaml
   OS::TripleO::CephStorage::Ports::StoragePort: ../network/ports/storage.yaml
   OS::TripleO::CephStorage::Ports::StorageMgmtPort: ../network/ports/storage_mgmt.yaml
+  OS::TripleO::CephStorage::Ports::TenantPort: ../network/ports/noop.yaml
+  #OS::TripleO::CephStorage::Ports::ManagementPort: ../network/ports/management.yaml
 
   # Port assignments for the swift storage role
+  OS::TripleO::SwiftStorage::Ports::ExternalPort: ../network/ports/noop.yaml
   OS::TripleO::SwiftStorage::Ports::InternalApiPort: ../network/ports/internal_api.yaml
   OS::TripleO::SwiftStorage::Ports::StoragePort: ../network/ports/storage.yaml
   OS::TripleO::SwiftStorage::Ports::StorageMgmtPort: ../network/ports/storage_mgmt.yaml
+  OS::TripleO::SwiftStorage::Ports::TenantPort: ../network/ports/noop.yaml
+  #OS::TripleO::SwiftStorage::Ports::ManagementPort: ../network/ports/management.yaml
 
   # Port assignments for the block storage role
+  OS::TripleO::BlockStorage::Ports::ExternalPort: ../network/ports/noop.yaml
   OS::TripleO::BlockStorage::Ports::InternalApiPort: ../network/ports/internal_api.yaml
   OS::TripleO::BlockStorage::Ports::StoragePort: ../network/ports/storage.yaml
   OS::TripleO::BlockStorage::Ports::StorageMgmtPort: ../network/ports/storage_mgmt.yaml
-
-  # Port assignments for service virtual IPs for the controller role
-  OS::TripleO::Controller::Ports::RedisVipPort: ../network/ports/vip.yaml
+  OS::TripleO::BlockStorage::Ports::TenantPort: ../network/ports/noop.yaml
+  #OS::TripleO::BlockStorage::Ports::ManagementPort: ../network/ports/management.yaml
index 737d7d3..a6b4b8a 100644 (file)
@@ -18,8 +18,6 @@ resource_registry:
   OS::TripleO::Network::Ports::StorageMgmtVipPort: ../network/ports/storage_mgmt.yaml
   OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/vip.yaml
 
-  # Port assignments for service virtual IPs for the controller role
-  OS::TripleO::Controller::Ports::RedisVipPort: ../network/ports/vip.yaml
   # Port assignments for the controller role
   OS::TripleO::Controller::Ports::ExternalPort: ../network/ports/external.yaml
   OS::TripleO::Controller::Ports::InternalApiPort: ../network/ports/internal_api.yaml
@@ -59,4 +57,3 @@ resource_registry:
   OS::TripleO::BlockStorage::Ports::StorageMgmtPort: ../network/ports/storage_mgmt.yaml
   OS::TripleO::BlockStorage::Ports::TenantPort: ../network/ports/noop.yaml
   #OS::TripleO::BlockStorage::Ports::ManagementPort: ../network/ports/management.yaml
-
index bafb2a7..3da560c 100644 (file)
@@ -8,10 +8,10 @@ resource_registry:
 # Disabling Neutron services that overlap with OVN
   OS::TripleO::Services::NeutronDhcpAgent: OS::Heat::None
   OS::TripleO::Services::ComputeNeutronOvsAgent: OS::Heat::None
+  OS::TripleO::Services::OVNDBs: ../puppet/services/ovn-dbs.yaml
 
 parameter_defaults:
   NeutronMechanismDrivers: ovn
-  OVNDbHost: '0.0.0.0'
   OVNSouthboundServerPort: 6642
   OVNNorthboundServerPort: 6641
   OVNDbConnectionTimeout: 60
@@ -19,3 +19,4 @@ parameter_defaults:
   OVNNeutronSyncMode: log
   OVNQosDriver: ovn-qos
   OVNTunnelEncapType: geneve
+  NeutronEnableDHCPAgent: false
index 00be304..6d5c740 100644 (file)
@@ -9,6 +9,6 @@ resource_registry:
 
 parameter_defaults:
   NeutronEnableForceMetadata: true
-  NeutronMechanismDrivers: 'opendaylight'
-  NeutronServicePlugins: "networking_odl.l3.l3_odl.OpenDaylightL3RouterPlugin"
+  NeutronMechanismDrivers: 'opendaylight_v2'
+  NeutronServicePlugins: 'odl-router_v2'
   OpenDaylightEnableL3: "'yes'"
index 35c90aa..e08b2b2 100644 (file)
@@ -1,11 +1,13 @@
-# A Heat environment that can be used to deploy OpenDaylight
+# A Heat environment that can be used to deploy OpenDaylight with L3 DVR
 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: ../puppet/services/opendaylight-api.yaml
   OS::TripleO::Services::OpenDaylightOvs: ../puppet/services/opendaylight-ovs.yaml
+  OS::TripleO::Services::NeutronL3Agent: OS::Heat::None
 
 parameter_defaults:
   NeutronEnableForceMetadata: true
-  NeutronMechanismDrivers: 'opendaylight'
+  NeutronMechanismDrivers: 'opendaylight_v2'
+  NeutronServicePlugins: 'odl-router_v2'
diff --git a/environments/services/ceph-mds.yaml b/environments/services/ceph-mds.yaml
new file mode 100644 (file)
index 0000000..2b51374
--- /dev/null
@@ -0,0 +1,2 @@
+resource_registry:
+  OS::TripleO::Services::CephMds: ../../puppet/services/ceph-mds.yaml
\ No newline at end of file
diff --git a/environments/services/zaqar.yaml b/environments/services/zaqar.yaml
new file mode 100644 (file)
index 0000000..ee13792
--- /dev/null
@@ -0,0 +1,2 @@
+resource_registry:
+  OS::TripleO::Services::Zaqar: ../../puppet/services/zaqar.yaml
index 70a0d31..fb66b38 100644 (file)
@@ -62,3 +62,9 @@ parameter_defaults:
     SwiftAdmin: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'}
     SwiftInternal: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'}
     SwiftPublic: {protocol: 'https', port: '13808', host: 'CLOUDNAME'}
+    ZaqarAdmin: {protocol: 'http', port: '8888', host: 'IP_ADDRESS'}
+    ZaqarInternal: {protocol: 'http', port: '8888', host: 'IP_ADDRESS'}
+    ZaqarPublic: {protocol: 'https', port: '13888', host: 'CLOUDNAME'}
+    ZaqarWebSocketAdmin: {protocol: 'ws', port: '9000', host: 'IP_ADDRESS'}
+    ZaqarWebSocketInternal: {protocol: 'ws', port: '9000', host: 'IP_ADDRESS'}
+    ZaqarWebSocketPublic: {protocol: 'wss', port: '9000', host: 'CLOUDNAME'}
index 21f8876..6586a54 100644 (file)
@@ -62,3 +62,9 @@ parameter_defaults:
     SwiftAdmin: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'}
     SwiftInternal: {protocol: 'http', port: '8080', host: 'IP_ADDRESS'}
     SwiftPublic: {protocol: 'https', port: '13808', host: 'IP_ADDRESS'}
+    ZaqarAdmin: {protocol: 'http', port: '8888', host: 'IP_ADDRESS'}
+    ZaqarInternal: {protocol: 'http', port: '8888', host: 'IP_ADDRESS'}
+    ZaqarPublic: {protocol: 'https', port: '13888', host: 'IP_ADDRESS'}
+    ZaqarWebSocketAdmin: {protocol: 'ws', port: '9000', host: 'IP_ADDRESS'}
+    ZaqarWebSocketInternal: {protocol: 'ws', port: '9000', host: 'IP_ADDRESS'}
+    ZaqarWebSocketPublic: {protocol: 'wss', port: '9000', host: 'IP_ADDRESS'}
index 6afb3a6..ebb491f 100644 (file)
@@ -62,3 +62,9 @@ parameter_defaults:
     SwiftAdmin: {protocol: 'https', port: '8080', host: 'CLOUDNAME'}
     SwiftInternal: {protocol: 'https', port: '8080', host: 'CLOUDNAME'}
     SwiftPublic: {protocol: 'https', port: '13808', host: 'CLOUDNAME'}
+    ZaqarAdmin: {protocol: 'https', port: '8888', host: 'CLOUDNAME'}
+    ZaqarInternal: {protocol: 'https', port: '8888', host: 'CLOUDNAME'}
+    ZaqarPublic: {protocol: 'https', port: '13888', host: 'CLOUDNAME'}
+    ZaqarWebSocketAdmin: {protocol: 'wss', port: '9000', host: 'CLOUDNAME'}
+    ZaqarWebSocketInternal: {protocol: 'wss', port: '9000', host: 'CLOUDNAME'}
+    ZaqarWebSocketPublic: {protocol: 'wss', port: '9000', host: 'CLOUDNAME'}
diff --git a/environments/undercloud.yaml b/environments/undercloud.yaml
new file mode 100644 (file)
index 0000000..0fd0192
--- /dev/null
@@ -0,0 +1,18 @@
+resource_registry:
+  OS::TripleO::Network::Ports::RedisVipPort: ../network/ports/noop.yaml
+  OS::TripleO::Network::Ports::ControlPlaneVipPort: ../deployed-server/deployed-neutron-port.yaml
+  OS::TripleO::Undercloud::Net::SoftwareConfig: ../net-config-undercloud.yaml
+  OS::TripleO::NodeExtraConfigPost: ../extraconfig/post_deploy/undercloud_post.yaml
+
+parameter_defaults:
+  StackAction: CREATE
+  SoftwareConfigTransport: POLL_SERVER_HEAT
+  NeutronTunnelTypes: []
+  NeutronBridgeMappings: ctlplane:br-ctlplane
+  NeutronAgentExtensions: []
+  NeutronFlatNetworks: '*'
+  NovaSchedulerAvailableFilters: 'tripleo_common.filters.list.tripleo_filters'
+  NovaSchedulerDefaultFilters: ['RetryFilter', 'TripleOCapabilitiesFilter', 'ComputeCapabilitiesFilter', 'AvailabilityZoneFilter', 'RamFilter', 'DiskFilter', 'ComputeFilter', 'ImagePropertiesFilter', 'ServerGroupAntiAffinityFilter', 'ServerGroupAffinityFilter']
+  NeutronDhcpAgentsPerNetwork: 2
+  HeatConvergenceEngine: false
+  HeatMaxResourcesPerStack: -1
index a507530..97687c6 100644 (file)
@@ -2,32 +2,5 @@
 # Keystone Admin API service is running on the Internal API network
 
 parameter_defaults:
-  ServiceNetMapDefaults:
-    NeutronTenantNetwork: tenant
-    CeilometerApiNetwork: internal_api
-    MongodbNetwork: internal_api
-    CinderApiNetwork: internal_api
-    CinderIscsiNetwork: storage
-    GlanceApiNetwork: storage
-    GlanceRegistryNetwork: internal_api
+  ServiceNetMap:
     KeystoneAdminApiNetwork: internal_api
-    KeystonePublicApiNetwork: internal_api
-    NeutronApiNetwork: internal_api
-    HeatApiNetwork: internal_api
-    NovaApiNetwork: internal_api
-    NovaMetadataNetwork: internal_api
-    NovaVncProxyNetwork: internal_api
-    SwiftMgmtNetwork: storage_mgmt
-    SwiftProxyNetwork: storage
-    HorizonNetwork: internal_api
-    MemcachedNetwork: internal_api
-    RabbitmqNetwork: internal_api
-    RedisNetwork: internal_api
-    MysqlNetwork: internal_api
-    CephClusterNetwork: storage_mgmt
-    CephPublicNetwork: storage
-    ControllerHostnameResolveNetwork: internal_api
-    ComputeHostnameResolveNetwork: internal_api
-    BlockStorageHostnameResolveNetwork: internal_api
-    ObjectStorageHostnameResolveNetwork: internal_api
-    CephStorageHostnameResolveNetwork: storage
index 75ffc9e..fcf022a 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   Example extra config for cluster config
index 9ce2ca8..77d4b38 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   Example extra config for cluster config
index 36076b0..ffd3032 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   Extra config to add swap space to nodes.
index ce65dac..e8cd4c9 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   Extra config to add swap space to nodes.
index ddfe024..4da54ea 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 description: 'Extra Post Deployment Config'
 parameters:
   servers:
index f83dff7..8ac7eb7 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   Example extra config for post-deployment
index 234488a..738e263 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   Example extra config for post-deployment, this re-runs every update
diff --git a/extraconfig/post_deploy/undercloud_post.sh b/extraconfig/post_deploy/undercloud_post.sh
new file mode 100755 (executable)
index 0000000..8bcae1d
--- /dev/null
@@ -0,0 +1,126 @@
+#!/bin/bash
+set -eux
+
+ln -sf /etc/puppet/hiera.yaml /etc/hiera.yaml
+
+
+# WRITE OUT STACKRC
+if [ ! -e /root/stackrc ]; then
+    touch /root/stackrc
+    chmod 0600 /root/stackrc
+
+cat >> /root/stackrc <<-EOF_CAT
+export OS_PASSWORD=$admin_password
+export OS_AUTH_URL=$auth_url
+export OS_USERNAME=admin
+export OS_TENANT_NAME=admin
+export COMPUTE_API_VERSION=1.1
+export NOVA_VERSION=1.1
+export OS_BAREMETAL_API_VERSION=1.15
+export OS_NO_CACHE=True
+export OS_CLOUDNAME=undercloud
+EOF_CAT
+
+    if [ -n "$ssl_certificate" ]; then
+cat >> /root/stackrc <<-EOF_CAT
+export PYTHONWARNINGS="ignore:Certificate has no, ignore:A true SSLContext object is not available"
+EOF_CAT
+    fi
+fi
+
+source /root/stackrc
+
+if [ ! -f /root/.ssh/authorized_keys ]; then
+    sudo mkdir -p /root/.ssh
+    sudo chmod 7000 /root/.ssh/
+    sudo touch /root/.ssh/authorized_keys
+    sudo chmod 600 /root/.ssh/authorized_keys
+fi
+
+if [ ! -f /root/.ssh/id_rsa ]; then
+    ssh-keygen -b 1024 -N '' -f /root/.ssh/id_rsa
+fi
+
+if ! grep "$(cat /root/.ssh/id_rsa.pub)" /root/.ssh/authorized_keys; then
+    cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
+fi
+
+PHYSICAL_NETWORK=ctlplane
+
+ctlplane_id=$(openstack network list -f csv -c ID -c Name --quote none | tail -n +2 | grep ctlplane | cut -d, -f1)
+subnet_ids=$(openstack subnet list -f csv -c ID --quote none | tail -n +2)
+subnet_id=
+
+for subnet_id in $subnet_ids; do
+    network_id=$(openstack subnet show -f value -c network_id $subnet_id)
+    if [ "$network_id" = "$ctlplane_id" ]; then
+        break
+    fi
+done
+
+net_create=1
+if [ -n "$subnet_id" ]; then
+    cidr=$(openstack subnet show $subnet_id -f value -c cidr)
+    if [ "$cidr" = "$undercloud_network_cidr" ]; then
+        net_create=0
+    else
+        echo "New cidr $undercloud_network_cidr does not equal old cidr $cidr"
+        echo "Will attempt to delete and recreate subnet $subnet_id"
+    fi
+fi
+
+if [ "$net_create" -eq "1" ]; then
+    # Delete the subnet and network to make sure it doesn't already exist
+    if openstack subnet list | grep start; then
+        openstack subnet delete $(openstack subnet list | grep start | awk '{print $4}')
+    fi
+    if openstack network show ctlplane; then
+        openstack network delete ctlplane
+    fi
+
+
+    NETWORK_ID=$(openstack network create --provider-network-type=flat --provider-physical-network=ctlplane ctlplane | grep " id " | awk '{print $4}')
+
+    NAMESERVER_ARG=""
+    if [ -n "${undercloud_nameserver:-}" ]; then
+        NAMESERVER_ARG="--dns-nameserver $undercloud_nameserver"
+    fi
+
+    openstack subnet create --network=$NETWORK_ID \
+        --gateway=$undercloud_network_gateway \
+        --subnet-range=$undercloud_network_cidr \
+        --allocation-pool start=$undercloud_dhcp_start,end=$undercloud_dhcp_end \
+        --host-route destination=169.254.169.254/32,gateway=$local_ip \
+        $NAMESERVER_ARG ctlplane
+fi
+
+# Disable nova quotas
+openstack quota set --cores -1 --instances -1 --ram -1 $(openstack project show admin | awk '$2=="id" {print $4}')
+
+# MISTRAL WORKFLOW CONFIGURATION
+if [ "$(hiera mistral_api_enabled)" = "true" ]; then
+    # load workflows
+    for workbook in $(openstack workbook list | grep tripleo | cut -f 2 -d ' '); do
+        openstack workbook delete $workbook
+    done
+    for workflow in $(openstack workflow list | grep tripleo | cut -f 2 -d ' '); do
+        openstack workflow delete $workflow
+    done
+    for workbook in $(ls /usr/share/openstack-tripleo-common/workbooks/*); do
+        openstack workbook create $workbook
+    done
+
+  # Store the SNMP password in a mistral environment
+  if ! openstack workflow env show tripleo.undercloud-config &>/dev/null; then
+      TMP_MISTRAL_ENV=$(mktemp)
+      echo "{\"name\": \"tripleo.undercloud-config\", \"variables\": {\"undercloud_ceilometer_snmpd_password\": \"$snmp_readonly_user_password\"}}" > $TMP_MISTRAL_ENV
+      openstack workflow env create $TMP_MISTRAL_ENV
+   fi
+
+fi
+
+# IP forwarding is needed to allow the overcloud nodes access to the outside
+# internet in cases where they are on an isolated network.
+sysctl -w net.ipv4.ip_forward=1
+# Make it persistent
+echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip-forward.conf
diff --git a/extraconfig/post_deploy/undercloud_post.yaml b/extraconfig/post_deploy/undercloud_post.yaml
new file mode 100644 (file)
index 0000000..38a9181
--- /dev/null
@@ -0,0 +1,93 @@
+heat_template_version: ocata
+
+description: >
+  Post-deployment for the TripleO undercloud
+
+parameters:
+  servers:
+    type: json
+  DeployedServerPortMap:
+    default: {}
+    type: json
+  UndercloudDhcpRangeStart:
+    type: string
+    default: '192.168.24.5'
+  UndercloudDhcpRangeEnd:
+    type: string
+    default: '192.168.24.24'
+  UndercloudNetworkCidr:
+    type: string
+    default: '192.168.24.0/24'
+  UndercloudNetworkGateway:
+    type: string
+    default: '192.168.24.1'
+  UndercloudNameserver:
+    type: string
+    default: ''
+  AdminPassword: #supplied by tripleo-undercloud-passwords.yaml
+    type: string
+    description: The password for the keystone admin account, used for monitoring, querying neutron etc.
+    hidden: True
+  SSLCertificate:
+    description: >
+      The content of the SSL certificate (without Key) in PEM format.
+    type: string
+    default: ""
+    hidden: True
+  SnmpdReadonlyUserPassword:
+    description: The user password for SNMPd with readonly rights running on all Overcloud nodes
+    type: string
+    hidden: true
+
+conditions:
+
+  ssl_disabled: {equals : [{get_param: SSLCertificate}, ""]}
+
+resources:
+
+  UndercloudPostConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      inputs:
+        - name: deploy_identifier
+        - name: local_ip
+        - name: undercloud_dhcp_start
+        - name: undercloud_dhcp_end
+        - name: undercloud_network_cidr
+        - name: undercloud_network_gateway
+        - name: undercloud_nameserver
+        - name: admin_password
+        - name: auth_url
+        - name: snmp_readonly_user_password
+      config: {get_file: ./undercloud_post.sh}
+
+  UndercloudPostDeployment:
+    type: OS::Heat::SoftwareDeployments
+    properties:
+      servers: {get_param: servers}
+      config: {get_resource: UndercloudPostConfig}
+      input_values:
+        local_ip: {get_param: [DeployedServerPortMap, 'control_virtual_ip', fixed_ips, 0, ip_address]}
+        undercloud_dhcp_start: {get_param: UndercloudDhcpRangeStart}
+        undercloud_dhcp_end: {get_param: UndercloudDhcpRangeEnd}
+        undercloud_network_cidr: {get_param: UndercloudNetworkCidr}
+        undercloud_network_gateway: {get_param: UndercloudNetworkGateway}
+        undercloud_nameserver: {get_param: UndercloudNameserver}
+        ssl_certificate: {get_param: SSLCertificate}
+        admin_password: {get_param: AdminPassword}
+        snmp_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
+        # if SSL is enabled we use the public virtual ip as the stackrc endpoint
+        auth_url:
+          if:
+          - ssl_disabled
+          - list_join:
+            - ''
+            - - 'http://'
+              - {get_param: [DeployedServerPortMap, 'control_virtual_ip', fixed_ips, 0, ip_address]}
+              - ':5000/v2.0'
+          - list_join:
+            - ''
+            - - 'https://'
+              - {get_param: [DeployedServerPortMap, 'public_virtual_ip', fixed_ips, 0, ip_address]}
+              - ':13000/v2.0'
index 7c65bd8..fdf2e95 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   RHEL Registration and unregistration software deployments.
diff --git a/extraconfig/pre_network/ansible_host_config.ansible b/extraconfig/pre_network/ansible_host_config.ansible
new file mode 100644 (file)
index 0000000..c126c1a
--- /dev/null
@@ -0,0 +1,58 @@
+---
+- name: Configuration to be applied before rebooting the node
+  connection: local
+  hosts: localhost
+
+  tasks:
+    # Kernel Args Configuration
+    - block:
+        - name: Ensure the kernel args ( {{ _KERNEL_ARGS_ }} ) is present as TRIPLEO_HEAT_TEMPLATE_KERNEL_ARGS
+          lineinfile:
+            dest: /etc/default/grub
+            regexp: '^TRIPLEO_HEAT_TEMPLATE_KERNEL_ARGS.*'
+            insertafter: '^GRUB_CMDLINE_LINUX.*'
+            line: 'TRIPLEO_HEAT_TEMPLATE_KERNEL_ARGS=" {{ _KERNEL_ARGS_ }} "'
+        - name: Add TRIPLEO_HEAT_TEMPLATE_KERNEL_ARGS to the GRUB_CMDLINE_LINUX parameter
+          lineinfile:
+            dest: /etc/default/grub
+            line: 'GRUB_CMDLINE_LINUX="${GRUB_CMDLINE_LINUX:+$GRUB_CMDLINE_LINUX }${TRIPLEO_HEAT_TEMPLATE_KERNEL_ARGS}"'
+            insertafter: '^TRIPLEO_HEAT_TEMPLATE_KERNEL_ARGS.*'
+        - name: Generate grub config file
+          command: grub2-mkconfig -o /boot/grub2/grub.cfg
+      become: true
+      when: _KERNEL_ARGS_|default("") != ""
+
+    # Tune-d Configuration
+    - block:
+        - name: Tune-d Configuration
+          lineinfile:
+            dest: /etc/tuned/cpu-partitioning-variables.conf
+            regexp: '^isolated_cores=.*'
+            line: 'isolated_cores={{ _HOST_CPUS_LIST_ }}'
+          when: _HOST_CPUS_LIST_|default("") != ""
+
+        - name: Tune-d provile activation
+          shell: tuned-adm profile {{ _TUNED_PROFILE_NAME_ }}
+      become: true
+      when: _TUNED_PROFILE_NAME_|default("") != ""
+
+    # Provisioning Network workaround
+    # The script will be executed before os-net-config, in which case, only Provisioning network will have IP
+    # BOOTPROTO of all interface config files (except provisioning), will be set to "none" to avoid reboot failing to acquire IP on other networks
+    - block:
+      - find:
+          paths: /etc/sysconfig/network-scripts/
+          patterns: ifcfg-*
+        register: ifcfg_files
+
+      - replace:
+          dest: "{{ item.path }}"
+          regexp: '^BOOTPROTO=.*'
+          replace: 'BOOTPROTO=none'
+        when:
+          - item.path | regex_replace('(^.*ifcfg-)(.*)', '\\2') != "lo"
+          # This condition will list all the interfaces except the one with valid IP (which is Provisioning network at this stage)
+          # Simpler Version - hostvars[inventory_hostname]['ansible_' + iface_name ]['ipv4']['address'] is undefined
+          - hostvars[inventory_hostname]['ansible_' + item.path | regex_replace('(^.*ifcfg-)(.*)', '\\2') ]['ipv4']['address'] is undefined
+        with_items:
+          - "{{ ifcfg_files.files }}"
diff --git a/extraconfig/pre_network/config_then_reboot.yaml b/extraconfig/pre_network/config_then_reboot.yaml
new file mode 100644 (file)
index 0000000..ec4d276
--- /dev/null
@@ -0,0 +1,48 @@
+heat_template_version: 2014-10-16
+
+description: >
+  Do some configuration, then reboot - sometimes needed for early-boot
+  changes such as modifying kernel configuration
+
+parameters:
+  server:
+    type: string
+
+resources:
+
+  SomeConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config: |
+        #!/bin/bash
+        echo "did some config before reboot" > /root/pre-reboot-config
+
+  SomeDeployment:
+    type: OS::Heat::SoftwareDeployment
+    properties:
+      name: SomeDeployment
+      server:  {get_param: server}
+      config: {get_resource: SomeConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+
+  RebootConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config: |
+        #!/bin/bash
+        # Stop os-collect-config to avoid any race collecting another
+        # deployment before reboot happens
+        systemctl stop os-collect-config.service
+        /sbin/reboot
+
+  RebootDeployment:
+    type: OS::Heat::SoftwareDeployment
+    depends_on: SomeDeployment
+    properties:
+      name: RebootDeployment
+      server:  {get_param: server}
+      config: {get_resource: RebootConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+      signal_transport: NO_SIGNAL
diff --git a/extraconfig/pre_network/host_config_and_reboot.role.j2.yaml b/extraconfig/pre_network/host_config_and_reboot.role.j2.yaml
new file mode 100644 (file)
index 0000000..bba16a6
--- /dev/null
@@ -0,0 +1,100 @@
+heat_template_version: 2016-10-14
+
+description: >
+  Do some configuration, then reboot - sometimes needed for early-boot
+  changes such as modifying kernel configuration
+
+parameters:
+  server:
+    type: string
+  {{role}}KernelArgs:
+    type: string
+    default: ""
+  {{role}}TunedProfileName:
+    type: string
+    default: ""
+  {{role}}HostCpusList:
+    type: string
+    default: ""
+
+conditions:
+  param_exists:
+    or:
+      - not:
+          equals:
+          - get_param: {{role}}KernelArgs
+          - ""
+      - not:
+          equals:
+          - get_param: {{role}}TunedProfileName
+          - ""
+
+resources:
+
+  HostParametersConfig:
+    type: OS::Heat::SoftwareConfig
+    condition: param_exists
+    properties:
+      group: ansible
+      inputs:
+        - name: _KERNEL_ARGS_
+        - name: _TUNED_PROFILE_NAME_
+        - name: _HOST_CPUS_LIST_
+      outputs:
+        - name: result
+      config:
+        get_file: ansible_host_config.ansible
+
+  HostParametersDeployment:
+    type: OS::Heat::SoftwareDeployment
+    condition: param_exists
+    properties:
+      name: HostParametersDeployment
+      server:  {get_param: server}
+      config: {get_resource: HostParametersConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+      input_values:
+        _KERNEL_ARGS_: {get_param: {{role}}KernelArgs}
+        _TUNED_PROFILE_NAME_: {get_param: {{role}}TunedProfileName}
+        _HOST_CPUS_LIST_: {get_param: {{role}}HostCpusList}
+
+  RebootConfig:
+    type: OS::Heat::SoftwareConfig
+    condition: param_exists
+    properties:
+      group: script
+      config: |
+        #!/bin/bash
+        # Stop os-collect-config to avoid any race collecting another
+        # deployment before reboot happens
+        systemctl stop os-collect-config.service
+        /sbin/reboot
+
+  RebootDeployment:
+    type: OS::Heat::SoftwareDeployment
+    condition: param_exists
+    depends_on: HostParametersDeployment
+    properties:
+      name: RebootDeployment
+      server:  {get_param: server}
+      config: {get_resource: RebootConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+      signal_transport: NO_SIGNAL
+
+outputs:
+  result:
+    value:
+      get_attr: [HostParametersDeployment, result]
+    condition: param_exists
+  stdout:
+    value:
+      get_attr: [HostParametersDeployment, deploy_stdout]
+    condition: param_exists
+  stderr:
+    value:
+      get_attr: [HostParametersDeployment, deploy_stderr]
+    condition: param_exists
+  status_code:
+    value:
+      get_attr: [HostParametersDeployment, deploy_status_code]
+    condition: param_exists
index 3986182..64c4457 100644 (file)
@@ -5,18 +5,7 @@
 set -eu
 
 # Special-case OVS for https://bugs.launchpad.net/tripleo/+bug/1635205
-if [[ -n $(rpm -q --scripts openvswitch | awk '/postuninstall/,/*/' | grep "systemctl.*try-restart") ]]; then
-    echo "Manual upgrade of openvswitch - restart in postun detected"
-    mkdir OVS_UPGRADE || true
-    pushd OVS_UPGRADE
-    echo "Attempting to downloading latest openvswitch with yumdownloader"
-    yumdownloader --resolve openvswitch
-    echo "Updating openvswitch with nopostun option"
-    rpm -U --replacepkgs --nopostun ./*.rpm
-    popd
-else
-    echo "Skipping manual upgrade of openvswitch - no restart in postun detected"
-fi
+special_case_ovs_upgrade_if_needed
 
 yum -y install python-zaqarclient  # needed for os-collect-config
 yum -y -q update
index c87e682..cf5d7a8 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   Software-config for ceilometer configuration under httpd during upgrades
index d84cad4..a745e72 100644 (file)
@@ -8,7 +8,9 @@ set -o pipefail
 
 UPGRADE_SCRIPT=/root/tripleo_upgrade_node.sh
 
-cat > $UPGRADE_SCRIPT << 'ENDOFCAT'
+declare -f special_case_ovs_upgrade_if_needed > $UPGRADE_SCRIPT
+# use >> here so we don't lose the declaration we added above
+cat >> $UPGRADE_SCRIPT << 'ENDOFCAT'
 #!/bin/bash
 ### DO NOT MODIFY THIS FILE
 ### This file is automatically delivered to the ceph-storage nodes as part of the
@@ -49,19 +51,7 @@ timeout 60 bash -c "while kill -0 ${OSD_PIDS} 2> /dev/null; do
   sleep 2;
 done"
 
-# Special-case OVS for https://bugs.launchpad.net/tripleo/+bug/1635205
-if [[ -n $(rpm -q --scripts openvswitch | awk '/postuninstall/,/*/' | grep "systemctl.*try-restart") ]]; then
-    echo "Manual upgrade of openvswitch - restart in postun detected"
-    mkdir OVS_UPGRADE || true
-    pushd OVS_UPGRADE
-    echo "Attempting to downloading latest openvswitch with yumdownloader"
-    yumdownloader --resolve openvswitch
-    echo "Updating openvswitch with nopostun option"
-    rpm -U --replacepkgs --nopostun ./*.rpm
-    popd
-else
-    echo "Skipping manual upgrade of openvswitch - no restart in postun detected"
-fi
+special_case_ovs_upgrade_if_needed
 
 # Update (Ceph to Jewel)
 yum -y install python-zaqarclient  # needed for os-collect-config
@@ -86,7 +76,7 @@ elif [[ "$UPDATED_VERSION" =~ ^10\.2.* ]]; then
     # If on ext4, we need to enforce lower values for name and namespace len
     # or ceph-osd will refuse to start, see: http://tracker.ceph.com/issues/16187
     for OSD_ID in $OSD_IDS; do
-      OSD_FS=$(findmnt -n -o FSTYPE -T /var/lib/ceph/osd/ceph-${OSD_ID})
+      OSD_FS=$(df -l --output=fstype /var/lib/ceph/osd/ceph-${OSD_ID} | tail -n +2)
       if [ ${OSD_FS} = ext4 ]; then
         crudini --set /etc/ceph/ceph.conf global osd_max_object_name_len 256
         crudini --set /etc/ceph/ceph.conf global osd_max_object_namespace_len 64
index b0d4280..7a3e107 100644 (file)
@@ -18,19 +18,8 @@ set -eu
 
 crudini  --set /etc/nova/nova.conf upgrade_levels compute $upgrade_level_nova_compute
 
-# Special-case OVS for https://bugs.launchpad.net/tripleo/+bug/1635205
-if [[ -n \$(rpm -q --scripts openvswitch | awk '/postuninstall/,/*/' | grep "systemctl.*try-restart") ]]; then
-    echo "Manual upgrade of openvswitch - restart in postun detected"
-    mkdir OVS_UPGRADE || true
-    pushd OVS_UPGRADE
-    echo "Attempting to downloading latest openvswitch with yumdownloader"
-    yumdownloader --resolve openvswitch
-    echo "Updating openvswitch with nopostun option"
-    rpm -U --replacepkgs --nopostun ./*.rpm
-    popd
-else
-    echo "Skipping manual upgrade of openvswitch - no restart in postun detected"
-fi
+$(declare -f special_case_ovs_upgrade_if_needed)
+special_case_ovs_upgrade_if_needed
 
 yum -y install python-zaqarclient  # needed for os-collect-config
 yum -y update
index 7cc6735..6bfe123 100755 (executable)
@@ -100,18 +100,7 @@ if [ $DO_MYSQL_UPGRADE -eq 1 ]; then
 fi
 
 # Special-case OVS for https://bugs.launchpad.net/tripleo/+bug/1635205
-if [[ -n $(rpm -q --scripts openvswitch | awk '/postuninstall/,/*/' | grep "systemctl.*try-restart") ]]; then
-    echo "Manual upgrade of openvswitch - restart in postun detected"
-    mkdir OVS_UPGRADE || true
-    pushd OVS_UPGRADE
-    echo "Attempting to downloading latest openvswitch with yumdownloader"
-    yumdownloader --resolve openvswitch
-    echo "Updating openvswitch with nopostun option"
-    rpm -U --replacepkgs --nopostun ./*.rpm
-    popd
-else
-    echo "Skipping manual upgrade of openvswitch - no restart in postun detected"
-fi
+special_case_ovs_upgrade_if_needed
 
 yum -y install python-zaqarclient  # needed for os-collect-config
 yum -y -q update
index 2667bb1..d9d1b4d 100644 (file)
@@ -23,19 +23,8 @@ function systemctl_swift {
     done
 }
 
-# Special-case OVS for https://bugs.launchpad.net/tripleo/+bug/1635205
-if [[ -n \$(rpm -q --scripts openvswitch | awk '/postuninstall/,/*/' | grep "systemctl.*try-restart") ]]; then
-    echo "Manual upgrade of openvswitch - restart in postun detected"
-    mkdir OVS_UPGRADE || true
-    pushd OVS_UPGRADE
-    echo "Attempting to downloading latest openvswitch with yumdownloader"
-    yumdownloader --resolve openvswitch
-    echo "Updating openvswitch with nopostun option"
-    rpm -U --replacepkgs --nopostun ./*.rpm
-    popd
-else
-    echo "Skipping manual upgrade of openvswitch - no restart in postun detected"
-fi
+$(declare -f special_case_ovs_upgrade_if_needed)
+special_case_ovs_upgrade_if_needed
 
 systemctl_swift stop
 
index b0418a5..b63aafb 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 description: 'Upgrade for Pacemaker deployments'
 
 parameters:
@@ -97,7 +97,11 @@ resources:
     depends_on: ControllerPacemakerUpgradeDeployment_Step1
     properties:
       group: script
-      config: {get_file: major_upgrade_block_storage.sh}
+      config:
+        list_join:
+        - ''
+        - - get_file: pacemaker_common_functions.sh
+          - get_file: major_upgrade_block_storage.sh
 
   BlockStorageUpgradeDeployment:
     type: OS::Heat::SoftwareDeploymentGroup
index f6aa306..c308720 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 description: 'Upgrade for Pacemaker deployments'
 
 parameters:
@@ -54,19 +54,28 @@ resources:
                 upgrade_level_nova_compute='UPGRADE_LEVEL_NOVA_COMPUTE'
               params:
                 UPGRADE_LEVEL_NOVA_COMPUTE: {get_param: UpgradeLevelNovaCompute}
+          - get_file: pacemaker_common_functions.sh
           - get_file: major_upgrade_compute.sh
 
   ObjectStorageDeliverUpgradeScriptConfig:
     type: OS::Heat::SoftwareConfig
     properties:
       group: script
-      config: {get_file: major_upgrade_object_storage.sh}
+      config:
+        list_join:
+        - ''
+        - - get_file: pacemaker_common_functions.sh
+          - get_file: major_upgrade_object_storage.sh
 
   CephStorageDeliverUpgradeScriptConfig:
     type: OS::Heat::SoftwareConfig
     properties:
       group: script
-      config: {get_file: major_upgrade_ceph_storage.sh}
+      config:
+        list_join:
+        - ''
+        - - get_file: pacemaker_common_functions.sh
+          - get_file: major_upgrade_ceph_storage.sh
 
 {% for role in roles %}
   UpgradeInit{{role.name}}Deployment:
index b9a87d3..45933fb 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   Software-config for performing aodh data migration
index 2c7dfc3..aae4a2d 100755 (executable)
@@ -297,3 +297,27 @@ function systemctl_swift {
         manage_systemd_service $action $service
     done
 }
+
+# Special-case OVS for https://bugs.launchpad.net/tripleo/+bug/1635205
+function special_case_ovs_upgrade_if_needed {
+    if [[ -n $(rpm -q --scripts openvswitch | awk '/postuninstall/,/*/' | grep "systemctl.*try-restart") ]]; then
+        echo "Manual upgrade of openvswitch - restart in postun detected"
+        rm -rf OVS_UPGRADE
+        mkdir OVS_UPGRADE && pushd OVS_UPGRADE
+        echo "Attempting to downloading latest openvswitch with yumdownloader"
+        yumdownloader --resolve openvswitch
+        for pkg in $(ls -1 *.rpm);  do
+            if rpm -U --test $pkg 2>&1 | grep "already installed" ; then
+                echo "Looks like newer version of $pkg is already installed, skipping"
+            else
+                echo "Updating $pkg with nopostun option"
+                rpm -U --replacepkgs --nopostun $pkg
+            fi
+        done
+        popd
+    else
+        echo "Skipping manual upgrade of openvswitch - no restart in postun detected"
+    fi
+
+}
+
index b62502f..a63868c 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 description: 'Post-Puppet Config for Pacemaker deployments'
 
 parameters:
index 52760c8..475a668 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 description: 'Post-Puppet restart config for Pacemaker deployments'
 
 parameters:
index 8254658..aa7514f 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 description: 'Pre-Puppet Config for Pacemaker deployments'
 
 parameters:
index 8a88ee6..74af7b0 100755 (executable)
@@ -63,18 +63,7 @@ if [[ "$pacemaker_status" == "active" && \
 fi
 
 # Special-case OVS for https://bugs.launchpad.net/tripleo/+bug/1635205
-if [[ -n $(rpm -q --scripts openvswitch | awk '/postuninstall/,/*/' | grep "systemctl.*try-restart") ]]; then
-    echo "Manual upgrade of openvswitch - restart in postun detected"
-    mkdir OVS_UPGRADE || true
-    pushd OVS_UPGRADE
-    echo "Attempting to downloading latest openvswitch with yumdownloader"
-    yumdownloader --resolve openvswitch
-    echo "Updating openvswitch with nopostun option"
-    rpm -U --replacepkgs --nopostun ./*.rpm
-    popd
-else
-    echo "Skipping manual upgrade of openvswitch - no restart in postun detected"
-fi
+special_case_ovs_upgrade_if_needed
 
 if [[ "$pacemaker_status" == "active" ]] ; then
     echo "Pacemaker running, stopping cluster node and doing full package update"
index d313ca9..8cff838 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   Software-config for performing package updates using yum
@@ -9,7 +9,12 @@ resources:
     type: OS::Heat::SoftwareConfig
     properties:
       group: script
-      config: {get_file: yum_update.sh}
+      config:
+        list_join:
+        - ''
+        - - get_file: pacemaker_common_functions.sh
+          - get_file: yum_update.sh
+
       inputs:
       - name: update_identifier
         description: yum will only run for previously unused values of update_identifier
index b759d9c..9400c1d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 description: 'No-op yum update task'
 
 resources:
index 833c3bc..d7e0c52 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Configure os-net-config mappings for specific nodes
@@ -38,7 +38,7 @@ resources:
         str_replace:
           template: |
             #!/bin/sh
-            eth_addr=$(/sbin/ifconfig eth0 | grep ether | awk '{print $2}')
+            eth_addr=$(cat /sys/class/net/*/address | tr '\n' ',')
             mkdir -p /etc/os-net-config
 
             # Create an os-net-config mapping file, note this defaults to
@@ -51,7 +51,7 @@ resources:
             input = sys.stdin.readline() or '{}'
             data = json.loads(input)
             for node in data:
-              if '${eth_addr}' in data[node].values():
+              if any(x in '$eth_addr'.split(',') for x in data[node].values()):
                 interface_mapping = {'interface_mapping': data[node]}
                 with open('/etc/os-net-config/mapping.yaml', 'w') as f:
                   yaml.safe_dump(interface_mapping, f, default_flow_style=False)
index 140d2bf..bc379f4 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   This is a default no-op template which provides empty user-data
index 7dc7bd4..d412b93 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 description: >
   This is first boot configuration for development purposes. It allows
index a0d8c7a..a352093 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 
 # NOTE: You don't need to pass the parameter explicitly from the
 # parent template, it can be specified via the parameter_defaults
index 63d5bbf..ed8302d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 parameters:
   # Can be overridden via parameter_defaults in the environment
diff --git a/firstboot/userdata_root_password.yaml b/firstboot/userdata_root_password.yaml
new file mode 100644 (file)
index 0000000..63dd5a9
--- /dev/null
@@ -0,0 +1,38 @@
+heat_template_version: ocata
+
+description: >
+  Uses cloud-init to enable root logins and set the root password.
+  Note this is less secure than the default configuration and may not be
+  appropriate for production environments, it's intended for illustration
+  and development/debugging only.
+
+parameters:
+  NodeRootPassword:
+    description: Root password for the nodes
+    hidden: true
+    type: string
+
+resources:
+  userdata:
+    type: OS::Heat::MultipartMime
+    properties:
+      parts:
+      - config: {get_resource: root_config}
+
+  root_config:
+    type: OS::Heat::CloudConfig
+    properties:
+      cloud_config:
+        ssh_pwauth: true
+        disable_root: false
+        chpasswd:
+          list:
+            str_replace:
+              template: "root:PASSWORD"
+              params:
+                PASSWORD: {get_param: NodeRootPassword}
+          expire: False
+
+outputs:
+  OS::stack_id:
+    value: {get_resource: userdata}
index b5a22b7..5a21171 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 description: 'All Hosts Config'
 
 parameters:
@@ -8,11 +8,18 @@ parameters:
 resources:
 
   hostsConfigImpl:
-    type: OS::Heat::StructuredConfig
+    type: OS::Heat::SoftwareConfig
     properties:
-      group: os-apply-config
-      config:
-        hosts: {get_param: hosts}
+      group: script
+      inputs:
+        - name: hosts
+          default:
+            list_join:
+              - ' '
+              - str_split:
+                - '\n'
+                - {get_param: hosts}
+      config: {get_file: scripts/hosts-config.sh}
 
 outputs:
   config_id:
@@ -25,3 +32,6 @@ outputs:
       hostname-based access to the deployed nodes (useful for testing without
       setting up a DNS).
     value: {get_attr: [hostsConfigImpl, config, hosts]}
+  OS::stack_id:
+    description: The ID of the hostsConfigImpl resource.
+    value: {get_resource: hostsConfigImpl}
index db6ff2c..3ae09c9 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config with 2 bonded nics on a bridge.
 parameters:
index e7b9669..10d5388 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config for a simple bridge.
 parameters:
index d8274f3..0466481 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config for a simple bridge.
 parameters:
index 94c492c..be05cc1 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Software Config to no-op for os-net-config. Using this will allow you
@@ -38,8 +38,8 @@ resources:
   OsNetConfigImpl:
     type: OS::Heat::StructuredConfig
     properties:
-      group: os-apply-config
-      config:
+      group: apply-config
+      config: {}
 
 outputs:
   OS::stack_id:
index a1d8672..12374a2 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config for a simple bridge configured with a static IP address for the ctlplane network.
 parameters:
index 1e1498b..50e541b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config for a simple bridge configured with a static IP address for the ctlplane network.
 parameters:
index c67b4e9..a52e22b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config for a simple bridge.
 parameters:
diff --git a/net-config-undercloud.yaml b/net-config-undercloud.yaml
new file mode 100644 (file)
index 0000000..9be51c0
--- /dev/null
@@ -0,0 +1,77 @@
+heat_template_version: ocata
+description: >
+  Software Config to drive os-net-config for a simple bridge configured with a static IP address for the ctlplane network.
+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:
+    default: ''
+    description: IP address/subnet on 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
+resources:
+  OsNetConfigImpl:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      inputs:
+        - name: disable_configure_safe_defaults
+          default: true
+      config:
+        str_replace:
+          template:
+            get_file: network/scripts/run-os-net-config.sh
+          params:
+            $network_config:
+              network_config:
+              - type: ovs_bridge
+                name: br-ctlplane
+                use_dhcp: false
+                dns_servers:
+                  get_param: DnsServers
+                addresses:
+                - ip_netmask:
+                    list_join:
+                    - /
+                    - - get_param: ControlPlaneIp
+                      - get_param: ControlPlaneSubnetCidr
+                members:
+                - type: interface
+                  name: eth1
+                  # force the MAC address of the bridge to this interface
+                  primary: true
+outputs:
+  OS::stack_id:
+    description: The OsNetConfigImpl resource.
+    value:
+      get_resource: OsNetConfigImpl
+
index 2f92f4b..703fea0 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config with 2 bonded nics on a bridge with VLANs attached for the ceph storage role.
 parameters:
index 0e53e20..df15cd6 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config with 2 bonded nics on a bridge with VLANs attached for the cinder storage role.
 parameters:
index a9b314a..4677241 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config with 2 bonded nics on a bridge with VLANs attached for the compute role.
 parameters:
index 4cac448..f9c926d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config with 2 bonded nics on a bridge with VLANs attached for the compute role.
 parameters:
index 4609097..ce1e865 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config with 2 bonded nics on a bridge with VLANs attached for the controller role.
 parameters:
index d07a26f..bb4ac27 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config with 2 bonded nics on a bridge with VLANs attached for the controller role with IPv6
   on the External network. The IPv6 default route is on the External network, and the IPv4 default route is on the Control
index e2973a7..9151538 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config with 2 bonded nics on a bridge with VLANs attached for the controller role.
 parameters:
index 5bdba80..6d4e368 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config with 2 bonded nics on a bridge with VLANs attached for the swift storage role.
 parameters:
index e9c3421..6a78806 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure multiple interfaces for the ceph storage role.
 parameters:
index f58f116..d238444 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure multiple interfaces for the cinder storage role.
 parameters:
diff --git a/network/config/multiple-nics/compute-dvr.yaml b/network/config/multiple-nics/compute-dvr.yaml
new file mode 100644 (file)
index 0000000..abfd323
--- /dev/null
@@ -0,0 +1,162 @@
+heat_template_version: ocata
+description: >
+  Software Config to drive os-net-config to configure multiple interfaces for the
+  compute role with external bridge for DVR.
+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: # Not used by default in this template
+    default: 10.0.0.1
+    description: The default route of 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
+                - default: true
+                  next_hop:
+                    get_param: ControlPlaneDefaultRoute
+              - type: interface
+                name: nic2
+                use_dhcp: false
+                addresses:
+                - ip_netmask:
+                    get_param: StorageIpSubnet
+              - 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
+              # External bridge for DVR (no IP address required)
+              - type: ovs_bridge
+                name: bridge_name
+                dns_servers:
+                  get_param: DnsServers
+                use_dhcp: false
+                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 Control Plane.
+            #-
+            #  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 9b0c8c0..101a08d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure multiple interfaces for the compute role.
 parameters:
index a0ed9f7..4fae435 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure multiple interfaces for the controller role with IPv6 on the External
   network. The IPv6 default route is on the External network, and the IPv4 default route is on the Control Plane.
index e38c545..ba9f8fd 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure multiple interfaces for the controller role.
 parameters:
index 1ad503a..4019012 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure multiple interfaces for the swift storage role.
 parameters:
index 0a6faa7..448df69 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the ceph storage role.
 parameters:
index 5abaea6..465555d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the cinder storage role.
 parameters:
index aa63dd3..a21bc8f 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the compute role.
 parameters:
index 28cf6ce..bb8bb9c 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the controller role with IPv6 on the External network. The
   IPv6 default route is on the External network, and the IPv4 default route is on the Control Plane.
index 566f1fe..a9689ce 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the controller role.
 parameters:
index fe948ad..c8e4db2 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the swift storage role.
 parameters:
index 6e0a97d..0b5eb0c 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the ceph storage role.
 parameters:
index f58665f..882d6eb 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the cinder storage role.
 parameters:
index 4026428..42cfd78 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the compute role.
 parameters:
index b9aec1e..9e0680e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the controller role. No external IP is configured.
 parameters:
index 4f065d1..1f9a67d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the controller role with IPv6 on the External network. The
   IPv6 default route is on the External network, and the IPv4 default route is on the Control Plane.
index 4a615d9..4ac1831 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the controller role.
 parameters:
index 88f69b4..605b8ee 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: '2016-10-14'
+heat_template_version: ocata
 description: >
   Software Config to drive os-net-config to configure VLANs for the swift storage role.
 parameters:
index 964f58f..7e8088b 100755 (executable)
@@ -191,7 +191,7 @@ def template_endpoint_items(config):
 
 def generate_endpoint_map_template(config):
     return collections.OrderedDict([
-        ('heat_template_version', '2015-04-30'),
+        ('heat_template_version', 'ocata'),
         ('description', 'A map of OpenStack endpoints. Since the endpoints '
          'are URLs, we need to have brackets around IPv6 IP addresses. The '
          'inputs to these parameters come from net_ip_uri_map, which will '
index aeda0a9..9975df2 100644 (file)
@@ -276,3 +276,22 @@ Ironic:
         uri_suffixes:
             '': /v1
     port: 6385
+
+Zaqar:
+    Internal:
+        net_param: ZaqarApi
+    Public:
+        net_param: Public
+    Admin:
+        net_param: ZaqarApi
+    port: 8888
+
+ZaqarWebSocket:
+    Internal:
+        net_param: ZaqarApi
+    Public:
+        net_param: Public
+    Admin:
+        net_param: ZaqarApi
+    port: 9000
+    protocol: ws
index 5e582d4..af89d0b 100644 (file)
@@ -2,7 +2,7 @@
 ### This file is automatically generated from endpoint_data.yaml
 ### by the script build_endpoint_map.py
 
-heat_template_version: '2015-04-30'
+heat_template_version: ocata
 description: A map of OpenStack endpoints. Since the endpoints are URLs,
   we need to have brackets around IPv6 IP addresses. The inputs to these
   parameters come from net_ip_uri_map, which will include these brackets
@@ -79,6 +79,12 @@ parameters:
       SwiftAdmin: {protocol: http, port: '8080', host: IP_ADDRESS}
       SwiftInternal: {protocol: http, port: '8080', host: IP_ADDRESS}
       SwiftPublic: {protocol: http, port: '8080', host: IP_ADDRESS}
+      ZaqarAdmin: {protocol: http, port: '8888', host: IP_ADDRESS}
+      ZaqarInternal: {protocol: http, port: '8888', host: IP_ADDRESS}
+      ZaqarPublic: {protocol: http, port: '8888', host: IP_ADDRESS}
+      ZaqarWebSocketAdmin: {protocol: ws, port: '9000', host: IP_ADDRESS}
+      ZaqarWebSocketInternal: {protocol: ws, port: '9000', host: IP_ADDRESS}
+      ZaqarWebSocketPublic: {protocol: ws, port: '9000', host: IP_ADDRESS}
     description: Mapping of service endpoint -> protocol. Typically set
       via parameter_defaults in the resource registry.
   CloudEndpoints:
@@ -6291,3 +6297,489 @@ outputs:
                         template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, SwiftPublic, port]
+      ZaqarAdmin:
+        host:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarAdmin, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, ZaqarApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarAdmin, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+        port:
+          get_param: [EndpointMap, ZaqarAdmin, port]
+        protocol:
+          get_param: [EndpointMap, ZaqarAdmin, protocol]
+        uri:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarAdmin, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarAdmin, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, ZaqarApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ZaqarApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarAdmin, port]
+        uri_no_suffix:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarAdmin, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarAdmin, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, ZaqarApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ZaqarApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarAdmin, port]
+      ZaqarInternal:
+        host:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarInternal, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, ZaqarApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarInternal, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+        port:
+          get_param: [EndpointMap, ZaqarInternal, port]
+        protocol:
+          get_param: [EndpointMap, ZaqarInternal, protocol]
+        uri:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarInternal, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarInternal, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, ZaqarApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ZaqarApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarInternal, port]
+        uri_no_suffix:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarInternal, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarInternal, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, ZaqarApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ZaqarApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarInternal, port]
+      ZaqarPublic:
+        host:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarPublic, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, PublicNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarPublic, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, PublicNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
+        port:
+          get_param: [EndpointMap, ZaqarPublic, port]
+        protocol:
+          get_param: [EndpointMap, ZaqarPublic, protocol]
+        uri:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarPublic, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarPublic, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, PublicNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarPublic, port]
+        uri_no_suffix:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarPublic, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarPublic, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, PublicNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarPublic, port]
+      ZaqarWebSocketAdmin:
+        host:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarWebSocketAdmin, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, ZaqarApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarWebSocketAdmin, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+        port:
+          get_param: [EndpointMap, ZaqarWebSocketAdmin, port]
+        protocol:
+          get_param: [EndpointMap, ZaqarWebSocketAdmin, protocol]
+        uri:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarWebSocketAdmin, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarWebSocketAdmin, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, ZaqarApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ZaqarApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarWebSocketAdmin, port]
+        uri_no_suffix:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarWebSocketAdmin, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarWebSocketAdmin, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, ZaqarApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ZaqarApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarWebSocketAdmin, port]
+      ZaqarWebSocketInternal:
+        host:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarWebSocketInternal, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, ZaqarApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarWebSocketInternal, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, ZaqarApiNetwork]
+        port:
+          get_param: [EndpointMap, ZaqarWebSocketInternal, port]
+        protocol:
+          get_param: [EndpointMap, ZaqarWebSocketInternal, protocol]
+        uri:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarWebSocketInternal, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarWebSocketInternal, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, ZaqarApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ZaqarApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarWebSocketInternal, port]
+        uri_no_suffix:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarWebSocketInternal, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarWebSocketInternal, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, ZaqarApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, ZaqarApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarWebSocketInternal, port]
+      ZaqarWebSocketPublic:
+        host:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarWebSocketPublic, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, PublicNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, ZaqarWebSocketPublic, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, PublicNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
+        port:
+          get_param: [EndpointMap, ZaqarWebSocketPublic, port]
+        protocol:
+          get_param: [EndpointMap, ZaqarWebSocketPublic, protocol]
+        uri:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarWebSocketPublic, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarWebSocketPublic, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, PublicNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarWebSocketPublic, port]
+        uri_no_suffix:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, ZaqarWebSocketPublic, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, ZaqarWebSocketPublic, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, PublicNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, ZaqarWebSocketPublic, port]
index 4dfbc77..21260d3 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   External network. Public traffic, Neutron l3router for floating IPs/SNAT, etc.
index e0736ab..51000bb 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   External network. Public traffic, Neutron l3router for floating IPs/SNAT, etc.
index 090e38f..793535c 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Internal API network. Used for most APIs, Database, RPC.
index 19d64b0..5395065 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Internal API network. Used for most APIs, Database, RPC.
index 6798e11..77fcd4e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Management network. System administration, SSH, DNS, NTP, etc. This network
index a5e7066..e1391ad 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Management network. System administration, SSH, DNS, NTP, etc. This network
index d3ae482..26033ee 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: Create networks to split out Overcloud traffic
 
index 5ac7d34..0f21e3e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port for a VIP on the undercloud ctlplane network.
index c4f815f..c33643e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the external network. The IP address will be chosen
index 867176e..893b26d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs
index e541049..c67789a 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs. This version is for IPv6
index bfe2686..905974f 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the external network. The IP address will be chosen
index 782b6b0..69a887e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Returns an IP from a service mapped list of IPs
index 80060b5..c9673dd 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Returns an IP from a service mapped list of IPv6 IPs
index 1d521a8..1f96e3f 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the internal_api network.
index d7b67e2..3f16f30 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs
index afb144b..b36ef23 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs. This version is for IPv6
index 14738b3..e236156 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the internal_api network.
index 967b66e..b626bc2 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the management network. The IP address will be chosen
index 451677b..05fedb9 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs
index 4c1cc21..64758bf 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs. This version is for IPv6
index a94ebc7..9e6a35b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the management network. The IP address will be chosen
index d7863e0..5782bbe 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 parameters:
   ControlPlaneIpList:
@@ -138,3 +138,20 @@ outputs:
                   SERVICE_short_node_names: {get_param: ServiceHostnameList}
                 for_each:
                     SERVICE: {get_attr: [EnabledServicesValue, value]}
+  short_service_bootstrap_hostnames:
+    description: >
+      Map of enabled services to a list of hostnames where they're running regardless of the network
+      Used for bootstrap purposes
+    value:
+      yaql:
+        # If ServiceHostnameList is empty the role is deployed with zero nodes
+        # therefore we don't want to add any *_node_names to the map
+        expression: dict($.data.map.items().where(len($[1]) > 0))
+        data:
+          map:
+            map_merge:
+              repeat:
+                template:
+                  SERVICE_short_bootstrap_node_name: {get_param: ServiceHostnameList}
+                for_each:
+                    SERVICE: {get_attr: [EnabledServicesValue, value]}
index fcf2eee..c8cf733 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 parameters:
   ControlPlaneIp:
index 71e6e81..58f96e6 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 parameters:
   # Set these via parameter defaults to configure external VIPs
index 8d05434..12db8d2 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 parameters:
   # Set these via parameter defaults to configure external VIPs
index 96c461e..e2004cb 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Returns the control plane port (provisioning network) as the ip_address.
index 1ed5cca..8040041 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the storage network.
index 0a3d394..dfab49a 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs
index 18faf1b..a6cde5f 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs. This version is for IPv6
index 548d226..b96fbd0 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the storage_mgmt API network.
index c3f0f4e..6ec3dba 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs
index e1145a3..2f3ea19 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs This version is for IPv6
index 9db6696..01e4c31 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the storage_mgmt API network.
index adf3595..1dd7619 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the storage network.
index d8f78c4..f6929b8 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the tenant network.
index d5fd708..c72b227 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs
index d4f0d29..bc056fa 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Returns an IP from a network mapped list of IPs
index 21ba1ef..8410182 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port on the tenant network.
index 3832290..d996d03 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port for a VIP on the isolated network NetworkName.
index 498e5d6..7a45756 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: >
   Creates a port for a VIP on the isolated network NetworkName.
index fc1e6d5..a7dbedc 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/bash
-# Note this script expects the following environment variables to be set
-# normally these are provided by the calling SoftwareConfig resource, but
-# they may also be set manually for testing
+# The following environment variables may be set to substitute in a
+# custom bridge or interface name.  Normally these are provided by the calling
+# SoftwareConfig resource, but they may also be set manually for testing.
 # $bridge_name : The bridge device name to apply
 # $interface_name : The interface name to apply
 #
@@ -108,16 +108,24 @@ EOF_CAT
 }
 
 if [ -n '$network_config' ]; then
-    trap configure_safe_defaults EXIT
+    if [ -z "${disable_configure_safe_defaults:-''}" ]; then
+        trap configure_safe_defaults EXIT
+    fi
 
     mkdir -p /etc/os-net-config
     # Note these variables come from the calling heat SoftwareConfig
     echo '$network_config' > /etc/os-net-config/config.json
-    sed -i "s/bridge_name/$bridge_name/" /etc/os-net-config/config.json
-    sed -i "s/interface_name/$interface_name/" /etc/os-net-config/config.json
+
+    if [ "$(type -t network_config_hook)" = "function" ]; then
+        network_config_hook
+    fi
+
+    sed -i "s/bridge_name/${bridge_name:-''}/" /etc/os-net-config/config.json
+    sed -i "s/interface_name/${interface_name:-''}/" /etc/os-net-config/config.json
 
     os-net-config -c /etc/os-net-config/config.json -v --detailed-exit-codes
     RETVAL=$?
+
     if [[ $RETVAL == 2 ]]; then
         ping_metadata_ip
 
index 0cb6571..b220145 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Mapping of service_name_network -> network name
@@ -58,7 +58,9 @@ parameters:
       CephRgwNetwork: storage
       PublicNetwork: external
       OpendaylightApiNetwork: internal_api
+      OvnDbsNetwork: internal_api
       MistralApiNetwork: internal_api
+      ZaqarApiNetwork: internal_api
       # We special-case the default ResolveNetwork for the CephStorage role
       # for backwards compatibility, all other roles default to internal_api
       CephStorageHostnameResolveNetwork: storage
index 35dae17..0a704ea 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Storage network.
index 03cfd13..c711716 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Storage management network. Storage replication, etc.
index 39c456d..2b06519 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Storage management network. Storage replication, etc.
index 5c8af9e..777e616 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Storage network.
index 1045b81..33055fe 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Tenant network.
index bf758a5..0bf5d2f 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Tenant IPv6 network.
index 30b9f2b..c173810 100644 (file)
@@ -11,6 +11,7 @@ resource_registry:
   OS::TripleO::Tasks::PackageUpdate: extraconfig/tasks/yum_update.yaml
 
 {% for role in roles %}
+  OS::TripleO::{{role.name}}::PreNetworkConfig: OS::Heat::None
   OS::TripleO::{{role.name}}PostDeploySteps: puppet/post.yaml
   OS::TripleO::{{role.name}}: puppet/{{role.name.lower()}}-role.yaml
   OS::TripleO::{{role.name}}Config: puppet/{{role.name.lower()}}-config.yaml
@@ -41,6 +42,8 @@ resource_registry:
   # in the jinja loop
   OS::TripleO::Controller::Net::SoftwareConfig: net-config-bridge.yaml
 
+  OS::TripleO::ServiceServerMetadataHook: OS::Heat::None
+
   OS::TripleO::Server: OS::Nova::Server
 
   # This creates the "heat-admin" user for all OS images by default
@@ -49,10 +52,14 @@ resource_registry:
 
   # Hooks for operator extra config
   # NodeUserData == Cloud-init additional user-data, e.g cloud-config
+  # role::NodeUserData == Role specific cloud-init additional user-data
   # ControllerExtraConfigPre == Controller configuration pre service deployment
   # NodeExtraConfig == All nodes configuration pre service deployment
   # NodeExtraConfigPost == All nodes configuration post service deployment
   OS::TripleO::NodeUserData: firstboot/userdata_default.yaml
+{% for role in roles %}
+  OS::TripleO::{{role.name}}::NodeUserData: firstboot/userdata_default.yaml
+{% endfor %}
   OS::TripleO::NodeTLSCAData: OS::Heat::None
   OS::TripleO::NodeTLSData: OS::Heat::None
   OS::TripleO::NodeExtraConfig: puppet/extraconfig/pre_deploy/default.yaml
@@ -90,6 +97,7 @@ resource_registry:
   OS::TripleO::Network::Ports::StorageVipPort: network/ports/noop.yaml
   OS::TripleO::Network::Ports::StorageMgmtVipPort: network/ports/noop.yaml
   OS::TripleO::Network::Ports::RedisVipPort: network/ports/ctlplane_vip.yaml
+  OS::TripleO::Network::Ports::ControlPlaneVipPort: OS::Neutron::Port
 
   # Service to network Mappings
   OS::TripleO::ServiceNetMap: network/service_net_map.yaml
@@ -100,11 +108,16 @@ resource_registry:
   # validation resources
   OS::TripleO::AllNodes::Validation: all-nodes-validation.yaml
 
+  # Upgrade resources
+  OS::TripleO::UpgradeConfig: puppet/upgrade_config.yaml
+  OS::TripleO::UpgradeSteps: OS::Heat::None
+
   # services
   OS::TripleO::Services: puppet/services/services.yaml
   OS::TripleO::Services::Apache: puppet/services/apache.yaml
   OS::TripleO::Services::ApacheTLS: OS::Heat::None
   OS::TripleO::Services::CACerts: puppet/services/ca-certs.yaml
+  OS::TripleO::Services::CephMds: OS::Heat::None
   OS::TripleO::Services::CephMon: OS::Heat::None
   OS::TripleO::Services::CephRgw: OS::Heat::None
   OS::TripleO::Services::CephOSD: OS::Heat::None
@@ -115,7 +128,6 @@ resource_registry:
   OS::TripleO::Services::CinderScheduler: puppet/services/cinder-scheduler.yaml
   OS::TripleO::Services::CinderVolume: puppet/services/cinder-volume.yaml
   OS::TripleO::Services::BlockStorageCinderVolume: puppet/services/cinder-volume.yaml
-  OS::TripleO::Services::Core: OS::Heat::None
   OS::TripleO::Services::Keystone: puppet/services/keystone.yaml
   OS::TripleO::Services::GlanceApi: puppet/services/glance-api.yaml
   OS::TripleO::Services::GlanceRegistry: puppet/services/glance-registry.yaml
@@ -142,6 +154,8 @@ resource_registry:
   OS::TripleO::Services::NeutronCorePluginPlumgrid: puppet/services/neutron-plugin-plumgrid.yaml
   OS::TripleO::Services::NeutronCorePluginNuage: puppet/services/neutron-plugin-nuage.yaml
   OS::TripleO::Services::NeutronCorePluginOpencontrail: puppet/services/neutron-plugin-opencontrail.yaml
+  OS::TripleO::Services::OVNDBs: OS::Heat::None
+
   OS::TripleO::Services::NeutronCorePluginMidonet: puppet/services/neutron-midonet.yaml
   OS::TripleO::Services::NeutronOvsAgent: puppet/services/neutron-ovs-agent.yaml
   OS::TripleO::Services::ComputeNeutronOvsAgent: puppet/services/neutron-ovs-agent.yaml
@@ -215,6 +229,7 @@ resource_registry:
   OS::TripleO::Services::ContrailControl: puppet/services/network/contrail-control.yaml
   OS::TripleO::Services::ContrailDatabase: puppet/services/network/contrail-database.yaml
   OS::TripleO::Services::ContrailWebui: puppet/services/network/contrail-webui.yaml
+  OS::TripleO::Services::Zaqar: OS::Heat::None
 
 parameter_defaults:
   EnablePackageInstall: false
index ba1c6b3..4a3e4cd 100644 (file)
@@ -1,4 +1,5 @@
-heat_template_version: 2016-10-14
+{% set primary_role_name = roles[0].name -%}
+heat_template_version: ocata
 
 description: >
   Deploy an OpenStack environment, consisting of several node types (roles),
@@ -187,7 +188,7 @@ resources:
       type: string
       value:
         list_join:
-        - '\n'
+        - "\n"
         - - str_replace:
               template: IP  HOST
               params:
@@ -363,6 +364,7 @@ resources:
                     services: {get_attr: [{{role.name}}ServiceChain, role_data, service_names]}
           ServiceNames: {get_attr: [{{role.name}}ServiceChain, role_data, service_names]}
           MonitoringSubscriptions: {get_attr: [{{role.name}}ServiceChain, role_data, monitoring_subscriptions]}
+          ServiceMetadataSettings: {get_attr: [{{role.name}}ServiceChain, role_data, service_metadata_settings]}
 {% endfor %}
 
   hostsConfig:
@@ -370,7 +372,7 @@ resources:
     properties:
       hosts:
         list_join:
-        - '\n'
+        - "\n"
         - - if:
             - add_vips_to_etc_hosts
             - {get_attr: [VipHosts, value]}
@@ -378,7 +380,7 @@ resources:
         -
 {% for role in roles %}
           - list_join:
-            - '\n'
+            - "\n"
             - {get_attr: [{{role.name}}, hosts_entry]}
 {% endfor %}
 
@@ -414,8 +416,8 @@ resources:
 {% for role in roles %}
               - {get_attr: [{{role.name}}ServiceChain, role_data, logging_sources]}
 {% endfor %}
-      controller_ips: {get_attr: [Controller, ip_address]}
-      controller_names: {get_attr: [Controller, hostname]}
+      controller_ips: {get_attr: [{{primary_role_name}}, ip_address]}
+      controller_names: {get_attr: [{{primary_role_name}}, hostname]}
       service_ips:
         # Note (shardy) this somewhat complex yaql may be replaced
         # with a map_deep_merge function in ocata.  It merges the
@@ -443,9 +445,17 @@ resources:
             l:
 {% for role in roles %}
               - {get_attr: [{{role.name}}IpListMap, short_service_hostnames]}
+{% endfor %}
+      short_service_bootstrap_node:
+        yaql:
+          expression: dict($.data.l.where($ != null).selectMany($.items()).groupBy($[0], $[1], [$[0], $[1].flatten().first()]))
+          data:
+            l:
+{% for role in roles %}
+              - {get_attr: [{{role.name}}IpListMap, short_service_bootstrap_hostnames]}
 {% endfor %}
       # FIXME(shardy): These require further work to move into service_ips
-      memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MemcachedNetwork]}]}
+      memcache_node_ips: {get_attr: [{{primary_role_name}}IpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MemcachedNetwork]}]}
       NetVipMap: {get_attr: [VipMap, net_ip_map]}
       RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]}
@@ -477,7 +487,7 @@ resources:
     type: OS::TripleO::Network
 
   ControlVirtualIP:
-    type: OS::Neutron::Port
+    type: OS::TripleO::Network::Ports::ControlPlaneVipPort
     depends_on: Networks
     properties:
       name: control_virtual_ip
@@ -551,12 +561,12 @@ resources:
       PingTestIps:
         list_join:
         - ' '
-        - - {get_attr: [Controller, resource.0.external_ip_address]}
-          - {get_attr: [Controller, resource.0.internal_api_ip_address]}
-          - {get_attr: [Controller, resource.0.storage_ip_address]}
-          - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
-          - {get_attr: [Controller, resource.0.tenant_ip_address]}
-          - {get_attr: [Controller, resource.0.management_ip_address]}
+        - - {get_attr: [{{primary_role_name}}, resource.0.external_ip_address]}
+          - {get_attr: [{{primary_role_name}}, resource.0.internal_api_ip_address]}
+          - {get_attr: [{{primary_role_name}}, resource.0.storage_ip_address]}
+          - {get_attr: [{{primary_role_name}}, resource.0.storage_mgmt_ip_address]}
+          - {get_attr: [{{primary_role_name}}, resource.0.tenant_ip_address]}
+          - {get_attr: [{{primary_role_name}}, resource.0.management_ip_address]}
 
   UpdateWorkflow:
     type: OS::TripleO::Tasks::UpdateWorkflow
@@ -587,9 +597,9 @@ resources:
       servers: {get_attr: [{{role.name}}, attributes, nova_server_resource]}
 {% endfor %}
 
-  # Post deployment steps for all roles
-  AllNodesDeploySteps:
-    type: OS::TripleO::PostDeploySteps
+  # Upgrade steps for all roles
+  AllNodesUpgradeSteps:
+    type: OS::TripleO::UpgradeSteps
     depends_on:
 {% for role in roles %}
       - {{role.name}}AllNodesDeployment
@@ -604,6 +614,20 @@ resources:
         {{role.name}}: {get_attr: [{{role.name}}ServiceChain, role_data]}
 {% endfor %}
 
+  # Post deployment steps for all roles
+  AllNodesDeploySteps:
+    type: OS::TripleO::PostDeploySteps
+    depends_on: AllNodesUpgradeSteps
+    properties:
+      servers:
+{% for role in roles %}
+        {{role.name}}: {get_attr: [{{role.name}}, attributes, nova_server_resource]}
+{% endfor %}
+      role_data:
+{% for role in roles %}
+        {{role.name}}: {get_attr: [{{role.name}}ServiceChain, role_data]}
+{% endfor %}
+
 outputs:
   ManagedEndpoints:
     description: Asserts that the keystone endpoints have been provisioned.
@@ -635,4 +659,10 @@ outputs:
     value:
 {% for role in roles %}
       {{role.name}}: {get_attr: [{{role.name}}ServiceChain, role_data, service_names]}
+{% endfor %}
+  RoleData:
+    description: The configuration data associated with each role
+    value:
+{% for role in roles %}
+      {{role.name}}: {get_attr: [{{role.name}}ServiceChain, role_data]}
 {% endfor %}
index cc5e4ea..ee43c3a 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 description: 'All Nodes Config for Puppet'
 
 parameters:
@@ -28,6 +28,8 @@ parameters:
     type: json
   short_service_node_names:
     type: json
+  short_service_bootstrap_node:
+    type: json
   controller_names:
     type: comma_delimited_list
   memcache_node_ips:
@@ -71,140 +73,133 @@ resources:
   allNodesConfigImpl:
     type: OS::Heat::StructuredConfig
     properties:
-      group: os-apply-config
+      group: hiera
       config:
-        hiera:
-          datafiles:
-            bootstrap_node:
-              mapped_data:
-                bootstrap_nodeid: {get_input: bootstrap_nodeid}
-                bootstrap_nodeid_ip: {get_input: bootstrap_nodeid_ip}
-            all_nodes:
-              mapped_data:
-                map_merge:
-                  - tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: logging_sources}
-                  - tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: logging_groups}
-                  - enabled_services: {get_param: enabled_services}
-                  # This writes out a mapping of service_name_enabled: 'true'
-                  # For any services not enabled, hiera foo_enabled will
-                  # return nil, as it's undefined
-                  - map_merge:
-                      repeat:
-                        template:
-                          # Note this must be string 'true' due to
-                          # https://bugs.launchpad.net/heat/+bug/1617203
-                          SERVICE_enabled: 'true'
-                        for_each:
-                          SERVICE:
-                            str_split: [',', {get_param: enabled_services}]
-                  # Dynamically generate per-service network data
-                  # This works as follows (outer->inner functions)
-                  # yaql - filters services where no mapping exists in ServiceNetMap
-                  #   map_replace: substitute e.g heat_api_network with network name from ServiceNetMap
-                  #     map_merge/repeat: generate a per-service mapping
-                  - yaql:
-                      # This filters any entries where the value hasn't been substituted for
-                      # a list, e.g it's still $service_network.  This happens when there is
-                      # no network defined for the service in the ServiceNetMap, which is OK
-                      # as not all services have to be bound to a network, so we filter them
-                      expression: dict($.data.map.items().where(isString($[1]) and not $[1].endsWith("_network")))
-                      data:
-                        map:
-                          map_replace:
+        datafiles:
+          bootstrap_node:
+            bootstrap_nodeid: {get_input: bootstrap_nodeid}
+            bootstrap_nodeid_ip: {get_input: bootstrap_nodeid_ip}
+          all_nodes:
+           map_merge:
+              - tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: logging_sources}
+              - tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: logging_groups}
+              - enabled_services: {get_param: enabled_services}
+              # This writes out a mapping of service_name_enabled: 'true'
+              # For any services not enabled, hiera foo_enabled will
+              # return nil, as it's undefined
+              - map_merge:
+                  repeat:
+                    template:
+                      # Note this must be string 'true' due to
+                      # https://bugs.launchpad.net/heat/+bug/1617203
+                      SERVICE_enabled: 'true'
+                    for_each:
+                      SERVICE:
+                        str_split: [',', {get_param: enabled_services}]
+              # Dynamically generate per-service network data
+              # This works as follows (outer->inner functions)
+              # yaql - filters services where no mapping exists in ServiceNetMap
+              #   map_replace: substitute e.g heat_api_network with network name from ServiceNetMap
+              #     map_merge/repeat: generate a per-service mapping
+              - yaql:
+                  # This filters any entries where the value hasn't been substituted for
+                  # a list, e.g it's still $service_network.  This happens when there is
+                  # no network defined for the service in the ServiceNetMap, which is OK
+                  # as not all services have to be bound to a network, so we filter them
+                  expression: dict($.data.map.items().where(isString($[1]) and not $[1].endsWith("_network")))
+                  data:
+                    map:
+                      map_replace:
+                        - map_merge:
+                            repeat:
+                              template:
+                                SERVICE_network: SERVICE_network
+                              for_each:
+                                SERVICE:
+                                  str_split: [',', {get_param: enabled_services}]
+                        - values: {get_param: ServiceNetMap}
+              # Keystone doesn't provide separate entries for the public
+              # and admin endpoints, so we need to add them here manually
+              # like we do in the vip-config below
+              - keystone_admin_api_network: {get_param: [ServiceNetMap, keystone_admin_api_network]}
+                keystone_public_api_network: {get_param: [ServiceNetMap, keystone_public_api_network]}
+              # provides a mapping of service_name_ips to a list of IPs
+              - {get_param: service_ips}
+              - {get_param: service_node_names}
+              - {get_param: short_service_node_names}
+              - {get_param: short_service_bootstrap_node}
+              - controller_node_ips:
+                  list_join:
+                  - ','
+                  - {get_param: controller_ips}
+                controller_node_names:
+                  list_join:
+                  - ','
+                  - {get_param: controller_names}
+                memcached_node_ips_v6:
+                  repeat:
+                    template: "inet6:[NAME]"
+                    for_each:
+                      NAME: {get_param: memcache_node_ips}
+                deploy_identifier: {get_param: DeployIdentifier}
+                update_identifier: {get_param: UpdateIdentifier}
+                stack_action: {get_param: StackAction}
+          vip_data:
+            map_merge:
+              # Dynamically generate per-service VIP data based on enabled_services
+              # This works as follows (outer->inner functions)
+              # yaql - filters services where no mapping exists in ServiceNetMap
+              #   map_replace: substitute e.g internal_api with the IP from NetVipMap
+              #     map_replace: substitute e.g heat_api_network with network name from ServiceNetMap
+              #       map_merge/repeat: generate a per-service mapping
+              - yaql:
+                  # This filters any entries where the value hasn't been substituted for
+                  # a list, e.g it's still $service_network.  This happens when there is
+                  # no network defined for the service in the ServiceNetMap, which is OK
+                  # as not all services have to be bound to a network, so we filter them
+                  expression: dict($.data.map.items().where(isString($[1]) and not $[1].endsWith("_network")))
+                  data:
+                    map:
+                      map_replace:
+                        - map_replace:
                             - map_merge:
                                 repeat:
                                   template:
-                                    SERVICE_network: SERVICE_network
+                                    SERVICE_vip: SERVICE_network
                                   for_each:
                                     SERVICE:
                                       str_split: [',', {get_param: enabled_services}]
                             - values: {get_param: ServiceNetMap}
-                  # Keystone doesn't provide separate entries for the public
-                  # and admin endpoints, so we need to add them here manually
-                  # like we do in the vip-config below
-                  - keystone_admin_api_network: {get_param: [ServiceNetMap, keystone_admin_api_network]}
-                    keystone_public_api_network: {get_param: [ServiceNetMap, keystone_public_api_network]}
-                  # provides a mapping of service_name_ips to a list of IPs
-                  - {get_param: service_ips}
-                  - {get_param: service_node_names}
-                  - {get_param: short_service_node_names}
-                  - controller_node_ips:
-                      list_join:
-                      - ','
-                      - {get_param: controller_ips}
-                    controller_node_names:
-                      list_join:
-                      - ','
-                      - {get_param: controller_names}
-                    memcached_node_ips_v6:
-                      str_replace:
-                        template: "['inet6:[SERVERS_LIST]']"
-                        params:
-                          SERVERS_LIST:
-                            list_join:
-                            - "]','inet6:["
-                            - {get_param: memcache_node_ips}
-
-                    deploy_identifier: {get_param: DeployIdentifier}
-                    update_identifier: {get_param: UpdateIdentifier}
-                    stack_action: {get_param: StackAction}
-            vip_data:
-              mapped_data:
-                map_merge:
-                  # Dynamically generate per-service VIP data based on enabled_services
-                  # This works as follows (outer->inner functions)
-                  # yaql - filters services where no mapping exists in ServiceNetMap
-                  #   map_replace: substitute e.g internal_api with the IP from NetVipMap
-                  #     map_replace: substitute e.g heat_api_network with network name from ServiceNetMap
-                  #       map_merge/repeat: generate a per-service mapping
-                  - yaql:
-                      # This filters any entries where the value hasn't been substituted for
-                      # a list, e.g it's still $service_network.  This happens when there is
-                      # no network defined for the service in the ServiceNetMap, which is OK
-                      # as not all services have to be bound to a network, so we filter them
-                      expression: dict($.data.map.items().where(isString($[1]) and not $[1].endsWith("_network")))
-                      data:
-                        map:
-                          map_replace:
-                            - map_replace:
-                                - map_merge:
-                                    repeat:
-                                      template:
-                                        SERVICE_vip: SERVICE_network
-                                      for_each:
-                                        SERVICE:
-                                          str_split: [',', {get_param: enabled_services}]
-                                - values: {get_param: ServiceNetMap}
-                            - values: {get_param: NetVipMap}
-                  - keystone_admin_api_vip:
-                      get_param: [NetVipMap, {get_param: [ServiceNetMap, keystone_admin_api_network]}]
-                    keystone_public_api_vip:
-                      get_param: [NetVipMap, {get_param: [ServiceNetMap, keystone_public_api_network]}]
-                    public_virtual_ip: {get_param: [NetVipMap, external]}
-                    controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
-                    internal_api_virtual_ip: {get_param: [NetVipMap, internal_api]}
-                    storage_virtual_ip: {get_param: [NetVipMap, storage]}
-                    storage_mgmt_virtual_ip: {get_param: [NetVipMap, storage_mgmt]}
-                    redis_vip: {get_param: RedisVirtualIP}
-                    # public_virtual_ip and controller_virtual_ip are needed in
-                    # both HAproxy & keepalived.
-                    tripleo::haproxy::public_virtual_ip: {get_param: [NetVipMap, external]}
-                    tripleo::haproxy::controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
-                    tripleo::keepalived::public_virtual_ip: {get_param: [NetVipMap, external]}
-                    tripleo::keepalived::controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
-                    tripleo::keepalived::internal_api_virtual_ip: {get_param: [NetVipMap, internal_api]}
-                    tripleo::keepalived::storage_virtual_ip: {get_param: [NetVipMap, storage]}
-                    tripleo::keepalived::storage_mgmt_virtual_ip: {get_param: [NetVipMap, storage_mgmt]}
-                    tripleo::keepalived::redis_virtual_ip: {get_param: RedisVirtualIP}
-                    tripleo::redis_notification::haproxy_monitor_ip: {get_param: [NetVipMap, ctlplane]}
-                    cloud_name_external: {get_param: cloud_name_external}
-                    cloud_name_internal_api: {get_param: cloud_name_internal_api}
-                    cloud_name_storage: {get_param: cloud_name_storage}
-                    cloud_name_storage_mgmt: {get_param: cloud_name_storage_mgmt}
-                    cloud_name_ctlplane: {get_param: cloud_name_ctlplane}
-                    # TLS parameters
-                    certmonger_ca: {get_param: CertmongerCA}
-                    enable_internal_tls: {get_param: EnableInternalTLS}
+                        - values: {get_param: NetVipMap}
+              - keystone_admin_api_vip:
+                  get_param: [NetVipMap, {get_param: [ServiceNetMap, keystone_admin_api_network]}]
+                keystone_public_api_vip:
+                  get_param: [NetVipMap, {get_param: [ServiceNetMap, keystone_public_api_network]}]
+                public_virtual_ip: {get_param: [NetVipMap, external]}
+                controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
+                internal_api_virtual_ip: {get_param: [NetVipMap, internal_api]}
+                storage_virtual_ip: {get_param: [NetVipMap, storage]}
+                storage_mgmt_virtual_ip: {get_param: [NetVipMap, storage_mgmt]}
+                redis_vip: {get_param: RedisVirtualIP}
+                # public_virtual_ip and controller_virtual_ip are needed in
+                # both HAproxy & keepalived.
+                tripleo::haproxy::public_virtual_ip: {get_param: [NetVipMap, external]}
+                tripleo::haproxy::controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
+                tripleo::keepalived::public_virtual_ip: {get_param: [NetVipMap, external]}
+                tripleo::keepalived::controller_virtual_ip: {get_param: [NetVipMap, ctlplane]}
+                tripleo::keepalived::internal_api_virtual_ip: {get_param: [NetVipMap, internal_api]}
+                tripleo::keepalived::storage_virtual_ip: {get_param: [NetVipMap, storage]}
+                tripleo::keepalived::storage_mgmt_virtual_ip: {get_param: [NetVipMap, storage_mgmt]}
+                tripleo::keepalived::redis_virtual_ip: {get_param: RedisVirtualIP}
+                tripleo::redis_notification::haproxy_monitor_ip: {get_param: [NetVipMap, ctlplane]}
+                cloud_name_external: {get_param: cloud_name_external}
+                cloud_name_internal_api: {get_param: cloud_name_internal_api}
+                cloud_name_storage: {get_param: cloud_name_storage}
+                cloud_name_storage_mgmt: {get_param: cloud_name_storage_mgmt}
+                cloud_name_ctlplane: {get_param: cloud_name_ctlplane}
+                # TLS parameters
+                certmonger_ca: {get_param: CertmongerCA}
+                enable_internal_tls: {get_param: EnableInternalTLS}
 
 outputs:
   config_id:
index 34f10a2..e92de45 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 description: 'OpenStack cinder storage configured by Puppet'
 parameters:
   BlockStorageImage:
@@ -71,11 +71,20 @@ parameters:
     description: >
       The DNS domain used for the hosts. This should match the dhcp_domain
       configured in the Undercloud neutron. Defaults to localdomain.
+  BlockStorageServerMetadata:
+    default: {}
+    description: >
+      Extra properties or metadata passed to Nova for the created nodes in
+      the overcloud. It's accessible via the Nova metadata API. This option is
+      role-specific and is merged with the values given to the ServerMetadata
+      parameter.
+    type: json
   ServerMetadata:
     default: {}
     description: >
       Extra properties or metadata passed to Nova for the created nodes in
-      the overcloud. It's accessible via the Nova metadata API.
+      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
   BlockStorageSchedulerHints:
     type: json
@@ -93,10 +102,19 @@ parameters:
   MonitoringSubscriptions:
     type: comma_delimited_list
     default: []
+  ServiceMetadataSettings:
+    type: json
+    default: {}
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
     default: os-refresh-config --timeout 14400
+  UpgradeInitCommand:
+    type: string
+    description: |
+      Command or script snippet to run on all overcloud nodes to
+      initialize the upgrade process. E.g. a repository switch.
+    default: ''
 
 resources:
   BlockStorage:
@@ -118,7 +136,11 @@ resources:
             template: {get_param: Hostname}
             params: {get_param: HostnameMap}
       software_config_transport: {get_param: SoftwareConfigTransport}
-      metadata: {get_param: ServerMetadata}
+      metadata:
+        map_merge:
+          - {get_param: ServerMetadata}
+          - {get_param: BlockStorageServerMetadata}
+          - {get_param: ServiceMetadataSettings}
       scheduler_hints: {get_param: BlockStorageSchedulerHints}
 
   # Combine the NodeAdminUserData and NodeUserData mime archives
@@ -130,6 +152,8 @@ resources:
         type: multipart
       - config: {get_resource: NodeUserData}
         type: multipart
+      - config: {get_resource: RoleUserData}
+        type: multipart
 
   # Creates the "heat-admin" user if configured via the environment
   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
@@ -141,6 +165,11 @@ resources:
   NodeUserData:
     type: OS::TripleO::NodeUserData
 
+  # For optional operator role-specific userdata
+  # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+  RoleUserData:
+    type: OS::TripleO::BlockStorage::NodeUserData
+
   ExternalPort:
     type: OS::TripleO::BlockStorage::Ports::ExternalPort
     properties:
@@ -217,17 +246,134 @@ resources:
       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
 
+  NetHostMap:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+        external:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - external
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - external
+        internal_api:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - internalapi
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - internalapi
+        storage:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - storage
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - storage
+        storage_mgmt:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - storagemgmt
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - storagemgmt
+        tenant:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - tenant
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - tenant
+        management:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - management
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - management
+        ctlplane:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - ctlplane
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [BlockStorage, name]}
+              - ctlplane
+
+  PreNetworkConfig:
+    type: OS::TripleO::BlockStorage::PreNetworkConfig
+    properties:
+      server: {get_resource: BlockStorage}
+
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
+    depends_on: PreNetworkConfig
     properties:
       name: NetworkDeployment
       config: {get_resource: NetworkConfig}
       server: {get_resource: BlockStorage}
       actions: {get_param: NetworkDeploymentActions}
 
+  BlockStorageUpgradeInitConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        list_join:
+        - ''
+        - - "#!/bin/bash\n\n"
+          - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
+          - get_param: UpgradeInitCommand
+
+  # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
+  # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
+  BlockStorageUpgradeInitDeployment:
+    type: OS::Heat::SoftwareDeployment
+    depends_on: NetworkDeployment
+    properties:
+      name: BlockStorageUpgradeInitDeployment
+      server: {get_resource: BlockStorage}
+      config: {get_resource: BlockStorageUpgradeInitConfig}
+
   BlockStorageDeployment:
     type: OS::Heat::StructuredDeployment
-    depends_on: NetworkDeployment
+    depends_on: BlockStorageUpgradeInitDeployment
     properties:
       name: BlockStorageDeployment
       server: {get_resource: BlockStorage}
@@ -239,39 +385,39 @@ resources:
   BlockStorageConfig:
     type: OS::Heat::StructuredConfig
     properties:
-      group: os-apply-config
+      group: hiera
       config:
-        hiera:
-          hierarchy:
-            - '"%{::uuid}"'
-            - heat_config_%{::deploy_config_name}
-            - volume_extraconfig
-            - extraconfig
-            - service_names
-            - service_configs
-            - volume
-            - bootstrap_node # provided by allNodesConfig
-            - all_nodes # provided by allNodesConfig
-            - vip_data # provided by allNodesConfig
-            - '"%{::osfamily}"'
-          merge_behavior: deeper
-          datafiles:
-            service_names:
-              mapped_data:
-                service_names: {get_param: ServiceNames}
-                sensu::subscriptions: {get_param: MonitoringSubscriptions}
-            service_configs:
-              mapped_data:
-                map_replace:
-                  - {get_param: ServiceConfigSettings}
-                  - values: {get_attr: [NetIpMap, net_ip_map]}
-            volume_extraconfig:
-              mapped_data: {get_param: BlockStorageExtraConfig}
-            extraconfig:
-              mapped_data: {get_param: ExtraConfig}
-            volume:
-              mapped_data:
-                tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
+        hierarchy:
+          - '"%{::uuid}"'
+          - heat_config_%{::deploy_config_name}
+          - volume_extraconfig
+          extraconfig
+          - service_names
+          - service_configs
+          - volume
+          - bootstrap_node # provided by allNodesConfig
+          - all_nodes # provided by allNodesConfig
+          - vip_data # provided by allNodesConfig
+          - '"%{::osfamily}"'
+        merge_behavior: deeper
+        datafiles:
+          service_names:
+            service_names: {get_param: ServiceNames}
+            sensu::subscriptions: {get_param: MonitoringSubscriptions}
+          service_configs:
+            map_replace:
+              - {get_param: ServiceConfigSettings}
+              - values: {get_attr: [NetIpMap, net_ip_map]}
+          volume_extraconfig: {get_param: BlockStorageExtraConfig}
+          extraconfig: {get_param: ExtraConfig}
+          volume:
+            tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
+            fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
+            fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
+            fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
+            fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
+            fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
+            fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
 
   # Resource for site-specific injection of root certificate
   NodeTLSCAData:
@@ -311,48 +457,13 @@ outputs:
   hostname_map:
     description: Mapping of network names to hostnames
     value:
-      external:
-        list_join:
-        - '.'
-        - - {get_attr: [BlockStorage, name]}
-          - external
-          - {get_param: CloudDomain}
-      internal_api:
-        list_join:
-        - '.'
-        - - {get_attr: [BlockStorage, name]}
-          - internalapi
-          - {get_param: CloudDomain}
-      storage:
-        list_join:
-        - '.'
-        - - {get_attr: [BlockStorage, name]}
-          - storage
-          - {get_param: CloudDomain}
-      storage_mgmt:
-        list_join:
-        - '.'
-        - - {get_attr: [BlockStorage, name]}
-          - storagemgmt
-          - {get_param: CloudDomain}
-      tenant:
-        list_join:
-        - '.'
-        - - {get_attr: [BlockStorage, name]}
-          - tenant
-          - {get_param: CloudDomain}
-      management:
-        list_join:
-        - '.'
-        - - {get_attr: [BlockStorage, name]}
-          - management
-          - {get_param: CloudDomain}
-      ctlplane:
-        list_join:
-        - '.'
-        - - {get_attr: [BlockStorage, name]}
-          - ctlplane
-          - {get_param: CloudDomain}
+      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]}
+      ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
   hosts_entry:
     value:
       str_replace:
@@ -370,47 +481,19 @@ outputs:
           DOMAIN: {get_param: CloudDomain}
           PRIMARYHOST: {get_attr: [BlockStorage, name]}
           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
-          EXTERNALHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [BlockStorage, name]}
-              - external
+          EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
-          INTERNAL_APIHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [BlockStorage, name]}
-              - internalapi
+          INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
           STORAGEIP: {get_attr: [StoragePort, ip_address]}
-          STORAGEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [BlockStorage, name]}
-              - storage
+          STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
-          STORAGE_MGMTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [BlockStorage, name]}
-              - storagemgmt
+          STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
           TENANTIP: {get_attr: [TenantPort, ip_address]}
-          TENANTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [BlockStorage, name]}
-              - tenant
+          TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
-          MANAGEMENTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [BlockStorage, name]}
-              - management
+          MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
           CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
-          CTLPLANEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [BlockStorage, name]}
-              - ctlplane
+          CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
   nova_server_resource:
     description: Heat resource handle for the block storage server
     value:
index 0854330..892f91e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 description: 'OpenStack ceph storage node configured by Puppet'
 parameters:
   OvercloudCephStorageFlavor:
@@ -77,11 +77,20 @@ parameters:
     description: >
       The DNS domain used for the hosts. This should match the dhcp_domain
       configured in the Undercloud neutron. Defaults to localdomain.
+  CephStorageServerMetadata:
+    default: {}
+    description: >
+      Extra properties or metadata passed to Nova for the created nodes in
+      the overcloud. It's accessible via the Nova metadata API. This option is
+      role-specific and is merged with the values given to the ServerMetadata
+      parameter.
+    type: json
   ServerMetadata:
     default: {}
     description: >
       Extra properties or metadata passed to Nova for the created nodes in
-      the overcloud. It's accessible via the Nova metadata API.
+      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
   CephStorageSchedulerHints:
     type: json
@@ -99,10 +108,19 @@ parameters:
   MonitoringSubscriptions:
     type: comma_delimited_list
     default: []
+  ServiceMetadataSettings:
+    type: json
+    default: {}
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
     default: os-refresh-config --timeout 14400
+  UpgradeInitCommand:
+    type: string
+    description: |
+      Command or script snippet to run on all overcloud nodes to
+      initialize the upgrade process. E.g. a repository switch.
+    default: ''
 
 resources:
   CephStorage:
@@ -124,7 +142,11 @@ resources:
             template: {get_param: Hostname}
             params: {get_param: HostnameMap}
       software_config_transport: {get_param: SoftwareConfigTransport}
-      metadata: {get_param: ServerMetadata}
+      metadata:
+        map_merge:
+          - {get_param: ServerMetadata}
+          - {get_param: CephStorageServerMetadata}
+          - {get_param: ServiceMetadataSettings}
       scheduler_hints: {get_param: CephStorageSchedulerHints}
 
   # Combine the NodeAdminUserData and NodeUserData mime archives
@@ -136,6 +158,8 @@ resources:
         type: multipart
       - config: {get_resource: NodeUserData}
         type: multipart
+      - config: {get_resource: RoleUserData}
+        type: multipart
 
   # Creates the "heat-admin" user if configured via the environment
   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
@@ -147,6 +171,11 @@ resources:
   NodeUserData:
     type: OS::TripleO::NodeUserData
 
+  # For optional operator role-specific userdata
+  # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+  RoleUserData:
+    type: OS::TripleO::CephStorage::NodeUserData
+
   ExternalPort:
     type: OS::TripleO::CephStorage::Ports::ExternalPort
     properties:
@@ -223,17 +252,134 @@ resources:
       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
 
+  NetHostMap:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+        external:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - external
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - external
+        internal_api:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - internalapi
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - internalapi
+        storage:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - storage
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - storage
+        storage_mgmt:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - storagemgmt
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - storagemgmt
+        tenant:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - tenant
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - tenant
+        management:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - management
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - management
+        ctlplane:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - ctlplane
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [CephStorage, name]}
+              - ctlplane
+
+  PreNetworkConfig:
+    type: OS::TripleO::CephStorage::PreNetworkConfig
+    properties:
+      server: {get_resource: CephStorage}
+
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
+    depends_on: PreNetworkConfig
     properties:
       name: NetworkDeployment
       config: {get_resource: NetworkConfig}
       server: {get_resource: CephStorage}
       actions: {get_param: NetworkDeploymentActions}
 
+  CephStorageUpgradeInitConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        list_join:
+        - ''
+        - - "#!/bin/bash\n\n"
+          - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
+          - get_param: UpgradeInitCommand
+
+  # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
+  # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
+  CephStorageUpgradeInitDeployment:
+    type: OS::Heat::SoftwareDeployment
+    depends_on: NetworkDeployment
+    properties:
+      name: CephStorageUpgradeInitDeployment
+      server: {get_resource: CephStorage}
+      config: {get_resource: CephStorageUpgradeInitConfig}
+
   CephStorageDeployment:
     type: OS::Heat::StructuredDeployment
-    depends_on: NetworkDeployment
+    depends_on: CephStorageUpgradeInitDeployment
     properties:
       name: CephStorageDeployment
       config: {get_resource: CephStorageConfig}
@@ -244,39 +390,39 @@ resources:
   CephStorageConfig:
     type: OS::Heat::StructuredConfig
     properties:
-      group: os-apply-config
+      group: hiera
       config:
-        hiera:
-          hierarchy:
-            - '"%{::uuid}"'
-            - heat_config_%{::deploy_config_name}
-            - ceph_extraconfig
-            - extraconfig
-            - service_names
-            - service_configs
-            - ceph
-            - bootstrap_node # provided by allNodesConfig
-            - all_nodes # provided by allNodesConfig
-            - vip_data # provided by allNodesConfig
-            - '"%{::osfamily}"'
-          merge_behavior: deeper
-          datafiles:
-            service_names:
-              mapped_data:
-                service_names: {get_param: ServiceNames}
-                sensu::subscriptions: {get_param: MonitoringSubscriptions}
-            service_configs:
-              mapped_data:
-                map_replace:
-                  - {get_param: ServiceConfigSettings}
-                  - values: {get_attr: [NetIpMap, net_ip_map]}
-            ceph_extraconfig:
-              mapped_data: {get_param: CephStorageExtraConfig}
-            extraconfig:
-              mapped_data: {get_param: ExtraConfig}
-            ceph:
-              mapped_data:
-                tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
+        hierarchy:
+          - '"%{::uuid}"'
+          - heat_config_%{::deploy_config_name}
+          - ceph_extraconfig
+          extraconfig
+          - service_names
+          - service_configs
+          - ceph
+          - bootstrap_node # provided by allNodesConfig
+          - all_nodes # provided by allNodesConfig
+          - vip_data # provided by allNodesConfig
+          - '"%{::osfamily}"'
+        merge_behavior: deeper
+        datafiles:
+          service_names:
+            service_names: {get_param: ServiceNames}
+            sensu::subscriptions: {get_param: MonitoringSubscriptions}
+          service_configs:
+            map_replace:
+              - {get_param: ServiceConfigSettings}
+              - values: {get_attr: [NetIpMap, net_ip_map]}
+          ceph_extraconfig: {get_param: CephStorageExtraConfig}
+          extraconfig: {get_param: ExtraConfig}
+          ceph:
+            tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
+            fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
+            fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
+            fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
+            fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
+            fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
+            fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
 
   # Resource for site-specific injection of root certificate
   NodeTLSCAData:
@@ -322,48 +468,13 @@ outputs:
   hostname_map:
     description: Mapping of network names to hostnames
     value:
-      external:
-        list_join:
-        - '.'
-        - - {get_attr: [CephStorage, name]}
-          - external
-          - {get_param: CloudDomain}
-      internal_api:
-        list_join:
-        - '.'
-        - - {get_attr: [CephStorage, name]}
-          - internalapi
-          - {get_param: CloudDomain}
-      storage:
-        list_join:
-        - '.'
-        - - {get_attr: [CephStorage, name]}
-          - storage
-          - {get_param: CloudDomain}
-      storage_mgmt:
-        list_join:
-        - '.'
-        - - {get_attr: [CephStorage, name]}
-          - storagemgmt
-          - {get_param: CloudDomain}
-      tenant:
-        list_join:
-        - '.'
-        - - {get_attr: [CephStorage, name]}
-          - tenant
-          - {get_param: CloudDomain}
-      management:
-        list_join:
-        - '.'
-        - - {get_attr: [CephStorage, name]}
-          - management
-          - {get_param: CloudDomain}
-      ctlplane:
-        list_join:
-        - '.'
-        - - {get_attr: [CephStorage, name]}
-          - ctlplane
-          - {get_param: CloudDomain}
+      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]}
+      ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
   hosts_entry:
     value:
       str_replace:
@@ -381,47 +492,19 @@ outputs:
           DOMAIN: {get_param: CloudDomain}
           PRIMARYHOST: {get_attr: [CephStorage, name]}
           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
-          EXTERNALHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [CephStorage, name]}
-              - external
+          EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
-          INTERNAL_APIHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [CephStorage, name]}
-              - internalapi
+          INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
           STORAGEIP: {get_attr: [StoragePort, ip_address]}
-          STORAGEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [CephStorage, name]}
-              - storage
+          STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
-          STORAGE_MGMTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [CephStorage, name]}
-              - storagemgmt
+          STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
           TENANTIP: {get_attr: [TenantPort, ip_address]}
-          TENANTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [CephStorage, name]}
-              - tenant
+          TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
-          MANAGEMENTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [CephStorage, name]}
-              - management
+          MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
           CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
-          CTLPLANEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [CephStorage, name]}
-              - ctlplane
+          CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
   nova_server_resource:
     description: Heat resource handle for the ceph storage server
     value:
index 070f19c..62adcd3 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack hypervisor node configured via Puppet.
@@ -92,11 +92,20 @@ parameters:
     description: >
       The DNS domain used for the hosts. This should match the dhcp_domain
       configured in the Undercloud neutron. Defaults to localdomain.
+  NovaComputeServerMetadata:
+    default: {}
+    description: >
+      Extra properties or metadata passed to Nova for the created nodes in
+      the overcloud. It's accessible via the Nova metadata API. This option is
+      role-specific and is merged with the values given to the ServerMetadata
+      parameter.
+    type: json
   ServerMetadata:
     default: {}
     description: >
       Extra properties or metadata passed to Nova for the created nodes in
-      the overcloud. It's accessible via the Nova metadata API.
+      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
   NovaComputeSchedulerHints:
     type: json
@@ -111,10 +120,19 @@ parameters:
   MonitoringSubscriptions:
     type: comma_delimited_list
     default: []
+  ServiceMetadataSettings:
+    type: json
+    default: {}
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
     default: os-refresh-config --timeout 14400
+  UpgradeInitCommand:
+    type: string
+    description: |
+      Command or script snippet to run on all overcloud nodes to
+      initialize the upgrade process. E.g. a repository switch.
+    default: ''
 
 resources:
 
@@ -138,7 +156,11 @@ resources:
             template: {get_param: Hostname}
             params: {get_param: HostnameMap}
       software_config_transport: {get_param: SoftwareConfigTransport}
-      metadata: {get_param: ServerMetadata}
+      metadata:
+        map_merge:
+          - {get_param: ServerMetadata}
+          - {get_param: NovaComputeServerMetadata}
+          - {get_param: ServiceMetadataSettings}
       scheduler_hints: {get_param: NovaComputeSchedulerHints}
 
   # Combine the NodeAdminUserData and NodeUserData mime archives
@@ -150,6 +172,8 @@ resources:
         type: multipart
       - config: {get_resource: NodeUserData}
         type: multipart
+      - config: {get_resource: RoleUserData}
+        type: multipart
 
   # Creates the "heat-admin" user if configured via the environment
   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
@@ -161,6 +185,11 @@ resources:
   NodeUserData:
     type: OS::TripleO::NodeUserData
 
+  # For optional operator role-specific userdata
+  # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+  RoleUserData:
+    type: OS::TripleO::Compute::NodeUserData
+
   ExternalPort:
     type: OS::TripleO::Compute::Ports::ExternalPort
     properties:
@@ -226,6 +255,101 @@ resources:
       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
 
+  NetHostMap:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+        external:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - external
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - external
+        internal_api:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - internalapi
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - internalapi
+        storage:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - storage
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - storage
+        storage_mgmt:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - storagemgmt
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - storagemgmt
+        tenant:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - tenant
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - tenant
+        management:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - management
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - management
+        ctlplane:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - ctlplane
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [NovaCompute, name]}
+              - ctlplane
+
+  PreNetworkConfig:
+    type: OS::TripleO::Compute::PreNetworkConfig
+    properties:
+      server: {get_resource: NovaCompute}
+
   NetworkConfig:
     type: OS::TripleO::Compute::Net::SoftwareConfig
     properties:
@@ -239,6 +363,7 @@ resources:
 
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
+    depends_on: PreNetworkConfig
     properties:
       name: NetworkDeployment
       config: {get_resource: NetworkConfig}
@@ -248,52 +373,73 @@ resources:
         bridge_name: {get_param: NeutronPhysicalBridge}
         interface_name: {get_param: NeutronPublicInterface}
 
+  NovaComputeUpgradeInitConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        list_join:
+        - ''
+        - - "#!/bin/bash\n\n"
+          - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
+          - get_param: UpgradeInitCommand
+
+  # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
+  # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
+  NovaComputeUpgradeInitDeployment:
+    type: OS::Heat::SoftwareDeployment
+    depends_on: NetworkDeployment
+    properties:
+      name: NovaComputeUpgradeInitDeployment
+      server: {get_resource: NovaCompute}
+      config: {get_resource: NovaComputeUpgradeInitConfig}
+
   NovaComputeConfig:
     type: OS::Heat::StructuredConfig
     properties:
-      group: os-apply-config
+      group: hiera
       config:
-        hiera:
-          hierarchy:
-            - '"%{::uuid}"'
-            - heat_config_%{::deploy_config_name}
-            - compute_extraconfig
-            - extraconfig
-            - service_names
-            - service_configs
-            - compute
-            - bootstrap_node # provided by allNodesConfig
-            - all_nodes # provided by allNodesConfig
-            - vip_data # provided by allNodesConfig
-            - '"%{::osfamily}"'
-            - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
-            - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
-            - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
-            - midonet_data # Optionally provided by AllNodesExtraConfig
-            - neutron_opencontrail_data  # Optionally provided by ComputeExtraConfigPre
-            - cisco_aci_data # Optionally provided by ComputeExtraConfigPre
-          merge_behavior: deeper
-          datafiles:
-            service_names:
-              mapped_data:
-                service_names: {get_param: ServiceNames}
-                sensu::subscriptions: {get_param: MonitoringSubscriptions}
-            service_configs:
-              mapped_data:
-                map_replace:
-                  - {get_param: ServiceConfigSettings}
-                  - values: {get_attr: [NetIpMap, net_ip_map]}
-            compute_extraconfig:
-              mapped_data: {get_param: NovaComputeExtraConfig}
-            extraconfig:
-              mapped_data: {get_param: ExtraConfig}
-            compute:
-              mapped_data:
-                tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
+        hierarchy:
+          - '"%{::uuid}"'
+          - heat_config_%{::deploy_config_name}
+          - compute_extraconfig
+          extraconfig
+          - service_names
+          - service_configs
+          - compute
+          - bootstrap_node # provided by allNodesConfig
+          - all_nodes # provided by allNodesConfig
+          - vip_data # provided by allNodesConfig
+          - '"%{::osfamily}"'
+          - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
+          - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
+          - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
+          - midonet_data # Optionally provided by AllNodesExtraConfig
+          - neutron_opencontrail_data  # Optionally provided by ComputeExtraConfigPre
+          - cisco_aci_data # Optionally provided by ComputeExtraConfigPre
+        merge_behavior: deeper
+        datafiles:
+          service_names:
+            service_names: {get_param: ServiceNames}
+            sensu::subscriptions: {get_param: MonitoringSubscriptions}
+          service_configs:
+            map_replace:
+              - {get_param: ServiceConfigSettings}
+              - values: {get_attr: [NetIpMap, net_ip_map]}
+          compute_extraconfig: {get_param: NovaComputeExtraConfig}
+          extraconfig: {get_param: ExtraConfig}
+          compute:
+            tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
+            fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
+            fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
+            fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
+            fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
+            fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
+            fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
 
   NovaComputeDeployment:
     type: OS::TripleO::SoftwareDeployment
-    depends_on: NetworkDeployment
+    depends_on: NovaComputeUpgradeInitDeployment
     properties:
       name: NovaComputeDeployment
       config: {get_resource: NovaComputeConfig}
@@ -364,48 +510,13 @@ outputs:
   hostname_map:
     description: Mapping of network names to hostnames
     value:
-      external:
-        list_join:
-        - '.'
-        - - {get_attr: [NovaCompute, name]}
-          - external
-          - {get_param: CloudDomain}
-      internal_api:
-        list_join:
-        - '.'
-        - - {get_attr: [NovaCompute, name]}
-          - internalapi
-          - {get_param: CloudDomain}
-      storage:
-        list_join:
-        - '.'
-        - - {get_attr: [NovaCompute, name]}
-          - storage
-          - {get_param: CloudDomain}
-      storage_mgmt:
-        list_join:
-        - '.'
-        - - {get_attr: [NovaCompute, name]}
-          - storagemgmt
-          - {get_param: CloudDomain}
-      tenant:
-        list_join:
-        - '.'
-        - - {get_attr: [NovaCompute, name]}
-          - tenant
-          - {get_param: CloudDomain}
-      management:
-        list_join:
-        - '.'
-        - - {get_attr: [NovaCompute, name]}
-          - management
-          - {get_param: CloudDomain}
-      ctlplane:
-        list_join:
-        - '.'
-        - - {get_attr: [NovaCompute, name]}
-          - ctlplane
-          - {get_param: CloudDomain}
+      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]}
+      ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
   hosts_entry:
     description: >
       Server's IP address and hostname in the /etc/hosts format
@@ -425,47 +536,19 @@ outputs:
           DOMAIN: {get_param: CloudDomain}
           PRIMARYHOST: {get_attr: [NovaCompute, name]}
           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
-          EXTERNALHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [NovaCompute, name]}
-              - external
+          EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
-          INTERNAL_APIHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [NovaCompute, name]}
-              - internalapi
+          INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
           STORAGEIP: {get_attr: [StoragePort, ip_address]}
-          STORAGEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [NovaCompute, name]}
-              - storage
+          STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
-          STORAGE_MGMTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [NovaCompute, name]}
-              - storagemgmt
+          STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
           TENANTIP: {get_attr: [TenantPort, ip_address]}
-          TENANTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [NovaCompute, name]}
-              - tenant
+          TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
-          MANAGEMENTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [NovaCompute, name]}
-              - management
+          MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
           CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
-          CTLPLANEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [NovaCompute, name]}
-              - ctlplane
+          CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
   nova_server_resource:
     description: Heat resource handle for the Nova compute server
     value:
index 552c59b..7337d06 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   A software config which runs puppet on the {{role}} role
index 24f31dc..1b71983 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   A software config which runs manifests/overcloud_controller_pacemaker.pp
index 3fc691a..9e35af5 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack controller node configured by Puppet.
@@ -106,11 +106,20 @@ parameters:
     description: >
       The DNS domain used for the hosts. This should match the dhcp_domain
       configured in the Undercloud neutron. Defaults to localdomain.
+  ControllerServerMetadata:
+    default: {}
+    description: >
+      Extra properties or metadata passed to Nova for the created nodes in
+      the overcloud. It's accessible via the Nova metadata API. This option is
+      role-specific and is merged with the values given to the ServerMetadata
+      parameter.
+    type: json
   ServerMetadata:
     default: {}
     description: >
       Extra properties or metadata passed to Nova for the created nodes in
-      the overcloud. It's accessible via the Nova metadata API.
+      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
   ControllerSchedulerHints:
     type: json
@@ -125,10 +134,19 @@ parameters:
   MonitoringSubscriptions:
     type: comma_delimited_list
     default: []
+  ServiceMetadataSettings:
+    type: json
+    default: {}
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
     default: os-refresh-config --timeout 14400
+  UpgradeInitCommand:
+    type: string
+    description: |
+      Command or script snippet to run on all overcloud nodes to
+      initialize the upgrade process. E.g. a repository switch.
+    default: ''
 
 parameter_groups:
 - label: deprecated
@@ -157,7 +175,11 @@ resources:
             template: {get_param: Hostname}
             params: {get_param: HostnameMap}
       software_config_transport: {get_param: SoftwareConfigTransport}
-      metadata: {get_param: ServerMetadata}
+      metadata:
+        map_merge:
+          - {get_param: ServerMetadata}
+          - {get_param: ControllerServerMetadata}
+          - {get_param: ServiceMetadataSettings}
       scheduler_hints: {get_param: ControllerSchedulerHints}
 
   # Combine the NodeAdminUserData and NodeUserData mime archives
@@ -169,6 +191,8 @@ resources:
         type: multipart
       - config: {get_resource: NodeUserData}
         type: multipart
+      - config: {get_resource: RoleUserData}
+        type: multipart
 
   # Creates the "heat-admin" user if configured via the environment
   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
@@ -180,6 +204,11 @@ resources:
   NodeUserData:
     type: OS::TripleO::NodeUserData
 
+  # For optional operator role-specific userdata
+  # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+  RoleUserData:
+    type: OS::TripleO::Controller::NodeUserData
+
   ExternalPort:
     type: OS::TripleO::Controller::Ports::ExternalPort
     properties:
@@ -245,6 +274,101 @@ resources:
       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
 
+  NetHostMap:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+        external:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - external
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - external
+        internal_api:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - internalapi
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - internalapi
+        storage:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - storage
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - storage
+        storage_mgmt:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - storagemgmt
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - storagemgmt
+        tenant:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - tenant
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - tenant
+        management:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - management
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - management
+        ctlplane:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - ctlplane
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [Controller, name]}
+              - ctlplane
+
+  PreNetworkConfig:
+    type: OS::TripleO::Controller::PreNetworkConfig
+    properties:
+      server: {get_resource: Controller}
+
   NetworkConfig:
     type: OS::TripleO::Controller::Net::SoftwareConfig
     properties:
@@ -258,6 +382,7 @@ resources:
 
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
+    depends_on: PreNetworkConfig
     properties:
       name: NetworkDeployment
       config: {get_resource: NetworkConfig}
@@ -282,10 +407,30 @@ resources:
       server: {get_resource: Controller}
       NodeIndex: {get_param: NodeIndex}
 
+  ControllerUpgradeInitConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        list_join:
+        - ''
+        - - "#!/bin/bash\n\n"
+          - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
+          - get_param: UpgradeInitCommand
+
+  # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
+  # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
+  ControllerUpgradeInitDeployment:
+    type: OS::Heat::SoftwareDeployment
+    depends_on: NetworkDeployment
+    properties:
+      name: ControllerUpgradeInitDeployment
+      server: {get_resource: Controller}
+      config: {get_resource: ControllerUpgradeInitConfig}
 
   ControllerDeployment:
     type: OS::TripleO::SoftwareDeployment
-    depends_on: NetworkDeployment
+    depends_on: ControllerUpgradeInitDeployment
     properties:
       name: ControllerDeployment
       config: {get_resource: ControllerConfig}
@@ -299,57 +444,57 @@ resources:
   ControllerConfig:
     type: OS::Heat::StructuredConfig
     properties:
-      group: os-apply-config
+      group: hiera
       config:
-        hiera:
-          hierarchy:
-            - '"%{::uuid}"'
-            - heat_config_%{::deploy_config_name}
-            - controller_extraconfig
-            - extraconfig
-            - service_configs
-            - service_names
-            - controller
-            - bootstrap_node # provided by BootstrapNodeConfig
-            - all_nodes # provided by allNodesConfig
-            - vip_data # provided by allNodesConfig
-            - '"%{::osfamily}"'
-            - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
-            - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
-            - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
-            - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
-            - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
-            - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
-            - midonet_data #Optionally provided by AllNodesExtraConfig
-            - cisco_aci_data # Optionally provided by ControllerExtraConfigPre
-          merge_behavior: deeper
-          datafiles:
-            service_names:
-              mapped_data:
-                service_names: {get_param: ServiceNames}
-                sensu::subscriptions: {get_param: MonitoringSubscriptions}
-            service_configs:
-              mapped_data:
-                map_replace:
-                  - {get_param: ServiceConfigSettings}
-                  - values: {get_attr: [NetIpMap, net_ip_map]}
-            controller_extraconfig:
-              mapped_data:
-                map_merge:
-                  - {get_param: controllerExtraConfig}
-                  - {get_param: ControllerExtraConfig}
-            extraconfig:
-              mapped_data: {get_param: ExtraConfig}
-            controller:
-              mapped_data: # data supplied directly to this deployment configuration, etc
-                bootstack_nodeid: {get_input: bootstack_nodeid}
-
-                # Pacemaker
-                enable_load_balancer: {get_input: enable_load_balancer}
-
-                # Misc
-                tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
-                tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
+        hierarchy:
+          - '"%{::uuid}"'
+          - heat_config_%{::deploy_config_name}
+          - controller_extraconfig
+          extraconfig
+          - service_configs
+          - service_names
+          - controller
+          - bootstrap_node # provided by BootstrapNodeConfig
+          - all_nodes # provided by allNodesConfig
+          - vip_data # provided by allNodesConfig
+          - '"%{::osfamily}"'
+          - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
+          - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
+          - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
+          - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
+          - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
+          - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
+          - midonet_data #Optionally provided by AllNodesExtraConfig
+          - cisco_aci_data # Optionally provided by ControllerExtraConfigPre
+        merge_behavior: deeper
+        datafiles:
+          service_names:
+            service_names: {get_param: ServiceNames}
+            sensu::subscriptions: {get_param: MonitoringSubscriptions}
+          service_configs:
+            map_replace:
+              - {get_param: ServiceConfigSettings}
+              - values: {get_attr: [NetIpMap, net_ip_map]}
+          controller_extraconfig:
+            map_merge:
+              - {get_param: controllerExtraConfig}
+              - {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
+            tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
+            tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
+            fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
+            fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
+            fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
+            fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
+            fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
+            fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
 
   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
   ControllerExtraConfigPre:
@@ -407,48 +552,13 @@ outputs:
   hostname_map:
     description: Mapping of network names to hostnames
     value:
-      external:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - external
-          - {get_param: CloudDomain}
-      internal_api:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - internalapi
-          - {get_param: CloudDomain}
-      storage:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - storage
-          - {get_param: CloudDomain}
-      storage_mgmt:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - storagemgmt
-          - {get_param: CloudDomain}
-      tenant:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - tenant
-          - {get_param: CloudDomain}
-      management:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - management
-          - {get_param: CloudDomain}
-      ctlplane:
-        list_join:
-        - '.'
-        - - {get_attr: [Controller, name]}
-          - ctlplane
-          - {get_param: CloudDomain}
+      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]}
+      ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
   hosts_entry:
     description: >
       Server's IP address and hostname in the /etc/hosts format
@@ -468,47 +578,19 @@ outputs:
           DOMAIN: {get_param: CloudDomain}
           PRIMARYHOST: {get_attr: [Controller, name]}
           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
-          EXTERNALHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - external
+          EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
-          INTERNAL_APIHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - internalapi
+          INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
           STORAGEIP: {get_attr: [StoragePort, ip_address]}
-          STORAGEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - storage
+          STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
-          STORAGE_MGMTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - storagemgmt
+          STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
           TENANTIP: {get_attr: [TenantPort, ip_address]}
-          TENANTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - tenant
+          TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
-          MANAGEMENTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - management
+          MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
           CTLPLANEIP: {get_attr: [Controller, networks, ctlplane, 0]}
-          CTLPLANEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [Controller, name]}
-              - ctlplane
+          CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
   nova_server_resource:
     description: Heat resource handle for the Nova compute server
     value:
index 8bcbbf4..4e1ad89 100644 (file)
@@ -8,7 +8,7 @@ trap cleanup EXIT
 
 if [ -n "$artifact_urls" ]; then
   for URL in $(echo $artifact_urls | sed -e "s| |\n|g" | sort -u); do
-    curl --globoff -o $TMP_DATA/file_data "$artifact_urls"
+    curl --globoff -o $TMP_DATA/file_data "$URL"
     if file -b $TMP_DATA/file_data | grep RPM &>/dev/null; then
       yum install -y $TMP_DATA/file_data
     elif file -b $TMP_DATA/file_data | grep 'gzip compressed data' &>/dev/null; then
index 17f8416..5e89405 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   Software Config to install deployment artifacts (tarball's and/or
index 6a2ea4d..3daf3fd 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: Configure hieradata for all MidoNet nodes
 
index 7bda0cd..cb8d498 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: Configure hieradata for Network Cisco configuration
 
index 49c7719..7fe2a84 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: Configure hieradata for Big Switch agents on compute node
 
index f5b1f0e..66252f1 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: Compute node hieradata for Neutron OpenContrail configuration
 
index 5561c74..47c782c 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: Configure hieradata for Nuage configuration on the Compute
 
index 9423208..7d63988 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: Configure hieradata for Cinder Dell Storage Center configuration
 
index c7af6f2..3050904 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-10-15
+heat_template_version: ocata
 
 description: Configure hieradata for Cinder Eqlx configuration
 
index 48446e5..763ae39 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: Configure hieradata for Cinder Netapp configuration
 
index f949a39..d3d546d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 description: 'Extra Pre-Deployment Config, multiple'
 parameters:
   server:
index 467f57c..0f4806d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: Configure hieradata for Neutron Big Switch configuration
 
index cec885c..6eae812 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: Configure hieradata for Cisco N1KV configuration
 
index dcbc681..5da07f8 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2014-10-16
+heat_template_version: ocata
 description: 'Noop Extra Pre-Deployment Config'
 parameters:
   server:
index e236e33..65113f6 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: Configure hieradata overrides for specific nodes
 
index f955034..04b5ccf 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   This is a template which will inject the trusted anchor.
diff --git a/puppet/extraconfig/tls/freeipa-enroll.yaml b/puppet/extraconfig/tls/freeipa-enroll.yaml
new file mode 100644 (file)
index 0000000..7ce1506
--- /dev/null
@@ -0,0 +1,83 @@
+heat_template_version: ocata
+
+description: Enroll nodes to FreeIPA
+
+parameters:
+  server:
+    description: ID of the controller node to apply this config to
+    type: string
+
+  CloudDomain:
+    description: >
+      The configured cloud domain; this will also be used as the kerberos realm
+    type: string
+
+  FreeIPAOTP:
+    default: ''
+    description: 'OTP that will be used for FreeIPA enrollment'
+    type: string
+    hidden: true
+  FreeIPAServer:
+    default: ''
+    description: 'FreeIPA server DNS name'
+    type: string
+  FreeIPAIPAddress:
+    default: ''
+    description: 'FreeIPA server IP Address'
+    type: string
+
+resources:
+  FreeIPAEnrollmentConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      inputs:
+        - name: otp
+        - name: ipa_server
+        - name: ipa_domain
+        - name: ipa_ip
+      config: |
+        #!/bin/sh
+        # If no IPA server was given as a parameter, it will be assumed from
+        # DNS.
+        if [ -n "${ipa_server}" ]; then
+            sed -i "/${ipa_server}/d" /etc/hosts
+            # Optionally add the FreeIPA server IP to /etc/hosts
+            if [ -n "${ipa_ip}" ]; then
+                echo "${ipa_ip}    ${ipa_server}" >> /etc/hosts
+            fi
+        fi
+        # Set the node's domain if needed
+        if [ ! $(hostname -f | grep "${ipa_domain}$") ]; then
+            hostnamectl set-hostname "$(hostname).${ipa_domain}"
+        fi
+        yum install -y ipa-client
+        # Enroll. If there is already keytab, we have already done this. If
+        # this node hasn't enrolled and the OTP is missing, fail.
+        if [ ! -f /etc/krb5.keytab ]; then
+            if [ -z "${otp}" ]; then
+                echo "OTP is missing"
+                exit 1
+            fi
+            ipa-client-install --server ${ipa_server} -w ${otp} \
+                --domain=${ipa_domain} -U
+        fi
+        # Get a TGT
+        kinit -k -t /etc/krb5.keytab
+
+  FreeIPAControllerEnrollmentDeployment:
+    type: OS::Heat::SoftwareDeployment
+    properties:
+      name: FreeIPAEnrollmentDeployment
+      config: {get_resource: FreeIPAEnrollmentConfig}
+      server: {get_param: server}
+      input_values:
+        otp: {get_param: FreeIPAOTP}
+        ipa_server: {get_param: FreeIPAServer}
+        ipa_domain: {get_param: CloudDomain}
+        ipa_ip: {get_param: FreeIPAIPAddress}
+
+outputs:
+  deploy_stdout:
+    description: Output of the FreeIPA enrollment deployment
+    value: {get_attr: [FreeIPAControllerEnrollmentDeployment, deploy_stdout]}
index 49d8457..2a61afc 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2015-04-30
+heat_template_version: ocata
 
 description: >
   This is a template which will build the TLS Certificates necessary
diff --git a/puppet/major_upgrade_steps.j2.yaml b/puppet/major_upgrade_steps.j2.yaml
new file mode 100644 (file)
index 0000000..b70f5c7
--- /dev/null
@@ -0,0 +1,68 @@
+heat_template_version: ocata
+description: 'Upgrade steps for all roles'
+
+parameters:
+  servers:
+    type: json
+
+  role_data:
+    type: json
+    description: Mapping of Role name e.g Controller to the per-role data
+
+  UpdateIdentifier:
+    type: string
+    description: >
+      Setting to a previously unused value during stack-update will trigger
+      the Upgrade resources to re-run on all roles.
+
+resources:
+
+# Upgrade Steps for all roles
+# FIXME(shardy): would be nice to make the number of steps configurable
+{% for step in range(1, 8) %}
+  {% for role in roles %}
+  # Step {{step}} resources
+  {{role.name}}UpgradeConfig_Step{{step}}:
+    type: OS::TripleO::UpgradeConfig
+  # The UpgradeConfig resources could actually be created without
+  # serialization, but the event output is easier to follow if we
+  # do, and there should be minimal performance hit (creating the
+  # config is cheap compared to the time to apply the deployment).
+  {% if step > 1 %}
+    depends_on:
+      {% for dep in roles %}
+      - {{dep.name}}Upgrade_Step{{step -1}}
+      {% endfor %}
+  {% endif %}
+    properties:
+      UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_tasks]}
+      step: {{step}}
+
+  {{role.name}}Upgrade_Step{{step}}:
+    type: OS::Heat::StructuredDeploymentGroup
+  {% if step > 1 %}
+    depends_on:
+      {% for dep in roles %}
+      - {{dep.name}}Upgrade_Step{{step -1}}
+      {% endfor %}
+  {% endif %}
+    properties:
+      name: {{role.name}}Upgrade_Step{{step}}
+      servers: {get_param: [servers, {{role.name}}]}
+      config: {get_resource: {{role.name}}UpgradeConfig_Step{{step}}}
+      input_values:
+        role: {{role.name}}
+        update_identifier: {get_param: UpdateIdentifier}
+  {% endfor %}
+{% endfor %}
+
+outputs:
+  # Output the config for each role, just use Step1 as the config should be
+  # the same for all steps (only the tag provided differs)
+  upgrade_configs:
+    description: The per-role upgrade configuration used
+    value:
+{% for role in roles %}
+      {{role.name.lower()}}: {get_attr: [{{role.name}}UpgradeConfig_Step1, upgrade_config]}
+{% endfor %}
+
index be638c5..1633134 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 description: 'OpenStack swift storage node configured by Puppet'
 parameters:
   OvercloudSwiftStorageFlavor:
@@ -71,11 +71,20 @@ parameters:
     description: >
       The DNS domain used for the hosts. This should match the dhcp_domain
       configured in the Undercloud neutron. Defaults to localdomain.
+  SwiftStorageServerMetadata:
+    default: {}
+    description: >
+      Extra properties or metadata passed to Nova for the created nodes in
+      the overcloud. It's accessible via the Nova metadata API. This option is
+      role-specific and is merged with the values given to the ServerMetadata
+      parameter.
+    type: json
   ServerMetadata:
     default: {}
     description: >
       Extra properties or metadata passed to Nova for the created nodes in
-      the overcloud. It's accessible via the Nova metadata API.
+      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
   ObjectStorageSchedulerHints:
     type: json
@@ -93,10 +102,19 @@ parameters:
   MonitoringSubscriptions:
     type: comma_delimited_list
     default: []
+  ServiceMetadataSettings:
+    type: json
+    default: {}
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
     default: os-refresh-config --timeout 14400
+  UpgradeInitCommand:
+    type: string
+    description: |
+      Command or script snippet to run on all overcloud nodes to
+      initialize the upgrade process. E.g. a repository switch.
+    default: ''
 
 resources:
 
@@ -118,7 +136,11 @@ resources:
             template: {get_param: Hostname}
             params: {get_param: HostnameMap}
       software_config_transport: {get_param: SoftwareConfigTransport}
-      metadata: {get_param: ServerMetadata}
+      metadata:
+        map_merge:
+          - {get_param: ServerMetadata}
+          - {get_param: SwiftStorageServerMetadata}
+          - {get_param: ServiceMetadataSettings}
       scheduler_hints: {get_param: ObjectStorageSchedulerHints}
 
   # Combine the NodeAdminUserData and NodeUserData mime archives
@@ -130,6 +152,8 @@ resources:
         type: multipart
       - config: {get_resource: NodeUserData}
         type: multipart
+      - config: {get_resource: RoleUserData}
+        type: multipart
 
   # Creates the "heat-admin" user if configured via the environment
   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
@@ -141,6 +165,11 @@ resources:
   NodeUserData:
     type: OS::TripleO::NodeUserData
 
+  # For optional operator role-specific userdata
+  # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+  RoleUserData:
+    type: OS::TripleO::ObjectStorage::NodeUserData
+
   ExternalPort:
     type: OS::TripleO::SwiftStorage::Ports::ExternalPort
     properties:
@@ -217,55 +246,171 @@ resources:
       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
 
+  NetHostMap:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+        external:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - external
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - external
+        internal_api:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - internalapi
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - internalapi
+        storage:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - storage
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - storage
+        storage_mgmt:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - storagemgmt
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - storagemgmt
+        tenant:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - tenant
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - tenant
+        management:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - management
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - management
+        ctlplane:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - ctlplane
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [SwiftStorage, name]}
+              - ctlplane
+
+  PreNetworkConfig:
+    type: OS::TripleO::ObjectStorage::PreNetworkConfig
+    properties:
+      server: {get_resource: SwiftStorage}
+
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
+    depends_on: PreNetworkConfig
     properties:
       name: NetworkDeployment
       config: {get_resource: NetworkConfig}
       server: {get_resource: SwiftStorage}
       actions: {get_param: NetworkDeploymentActions}
 
+  SwiftStorageUpgradeInitConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        list_join:
+        - ''
+        - - "#!/bin/bash\n\n"
+          - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
+          - get_param: UpgradeInitCommand
+
+  # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
+  # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
+  SwiftStorageUpgradeInitDeployment:
+    type: OS::Heat::SoftwareDeployment
+    depends_on: NetworkDeployment
+    properties:
+      name: SwiftStorageUpgradeInitDeployment
+      server: {get_resource: SwiftStorage}
+      config: {get_resource: SwiftStorageUpgradeInitConfig}
+
   SwiftStorageHieraConfig:
     type: OS::Heat::StructuredConfig
     properties:
-      group: os-apply-config
+      group: hiera
       config:
-        hiera:
-          hierarchy:
-            - '"%{::uuid}"'
-            - heat_config_%{::deploy_config_name}
-            - object_extraconfig
-            - extraconfig
-            - service_names
-            - service_configs
-            - object
-            - bootstrap_node # provided by allNodesConfig
-            - all_nodes # provided by allNodesConfig
-            - vip_data # provided by allNodesConfig
-            - '"%{::osfamily}"'
-          merge_behavior: deeper
-          datafiles:
-            service_names:
-              mapped_data:
-                service_names: {get_param: ServiceNames}
-                sensu::subscriptions: {get_param: MonitoringSubscriptions}
-            service_configs:
-              mapped_data:
-                map_replace:
-                  - {get_param: ServiceConfigSettings}
-                  - values: {get_attr: [NetIpMap, net_ip_map]}
-            object_extraconfig:
-              mapped_data: {get_param: ObjectStorageExtraConfig}
-            extraconfig:
-              mapped_data: {get_param: ExtraConfig}
-            object:
-              mapped_data: # data supplied directly to this deployment configuration, etc
-                tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
-
+        hierarchy:
+          - '"%{::uuid}"'
+          - heat_config_%{::deploy_config_name}
+          - object_extraconfig
+          - extraconfig
+          - service_names
+          - service_configs
+          - object
+          - bootstrap_node # provided by allNodesConfig
+          - all_nodes # provided by allNodesConfig
+          - vip_data # provided by allNodesConfig
+          - '"%{::osfamily}"'
+        merge_behavior: deeper
+        datafiles:
+          service_names:
+            service_names: {get_param: ServiceNames}
+            sensu::subscriptions: {get_param: MonitoringSubscriptions}
+          service_configs:
+            map_replace:
+              - {get_param: ServiceConfigSettings}
+              - values: {get_attr: [NetIpMap, net_ip_map]}
+          object_extraconfig: {get_param: ObjectStorageExtraConfig}
+          extraconfig: {get_param: ExtraConfig}
+          object:
+            tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
+            fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
+            fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
+            fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
+            fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
+            fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
+            fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
 
   SwiftStorageHieraDeploy:
     type: OS::Heat::StructuredDeployment
-    depends_on: NetworkDeployment
+    depends_on: SwiftStorageUpgradeInitDeployment
     properties:
       name: SwiftStorageHieraDeploy
       server: {get_resource: SwiftStorage}
@@ -310,48 +455,13 @@ outputs:
   hostname_map:
     description: Mapping of network names to hostnames
     value:
-      external:
-        list_join:
-        - '.'
-        - - {get_attr: [SwiftStorage, name]}
-          - external
-          - {get_param: CloudDomain}
-      internal_api:
-        list_join:
-        - '.'
-        - - {get_attr: [SwiftStorage, name]}
-          - internalapi
-          - {get_param: CloudDomain}
-      storage:
-        list_join:
-        - '.'
-        - - {get_attr: [SwiftStorage, name]}
-          - storage
-          - {get_param: CloudDomain}
-      storage_mgmt:
-        list_join:
-        - '.'
-        - - {get_attr: [SwiftStorage, name]}
-          - storagemgmt
-          - {get_param: CloudDomain}
-      tenant:
-        list_join:
-        - '.'
-        - - {get_attr: [SwiftStorage, name]}
-          - tenant
-          - {get_param: CloudDomain}
-      management:
-        list_join:
-        - '.'
-        - - {get_attr: [SwiftStorage, name]}
-          - management
-          - {get_param: CloudDomain}
-      ctlplane:
-        list_join:
-        - '.'
-        - - {get_attr: [SwiftStorage, name]}
-          - ctlplane
-          - {get_param: CloudDomain}
+      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]}
+      ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
   hosts_entry:
     value:
       str_replace:
@@ -369,47 +479,19 @@ outputs:
           DOMAIN: {get_param: CloudDomain}
           PRIMARYHOST: {get_attr: [SwiftStorage, name]}
           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
-          EXTERNALHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [SwiftStorage, name]}
-              - external
+          EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
-          INTERNAL_APIHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [SwiftStorage, name]}
-              - internalapi
+          INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
           STORAGEIP: {get_attr: [StoragePort, ip_address]}
-          STORAGEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [SwiftStorage, name]}
-              - storage
+          STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
-          STORAGE_MGMTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [SwiftStorage, name]}
-              - storagemgmt
+          STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
           TENANTIP: {get_attr: [TenantPort, ip_address]}
-          TENANTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [SwiftStorage, name]}
-              - tenant
+          TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
-          MANAGEMENTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [SwiftStorage, name]}
-              - management
+          MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
           CTLPLANEIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
-          CTLPLANEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [SwiftStorage, name]}
-              - ctlplane
+          CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
   nova_server_resource:
     description: Heat resource handle for the swift storage server
     value:
index 582eb28..2a02ea1 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Post-deploy configuration steps via puppet for all roles,
index ad5e479..2f070da 100644 (file)
@@ -1,17 +1,21 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 description: 'OpenStack {{role}} node configured by Puppet'
 parameters:
   Overcloud{{role}}Flavor:
     description: Flavor for the {{role}} node.
     default: baremetal
     type: string
+{% if disable_constraints is not defined %}
     constraints:
       - custom_constraint: nova.flavor
+{% endif %}
   {{role}}Image:
     type: string
     default: overcloud-full
+{% if disable_constraints is not defined %}
     constraints:
       - custom_constraint: glance.image
+{% endif %}
   ImageUpdatePolicy:
     default: 'REBUILD_PRESERVE_EPHEMERAL'
     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
@@ -20,8 +24,14 @@ 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 %}
     constraints:
       - custom_constraint: nova.keypair
+{% endif %}
+  NeutronPublicInterface:
+    default: nic1
+    description: What interface to bridge onto br-ex for network nodes.
+    type: string
   ServiceNetMap:
     default: {}
     description: Mapping of service_name -> network name. Typically set
@@ -77,11 +87,20 @@ parameters:
     description: >
       The DNS domain used for the hosts. This should match the dhcp_domain
       configured in the Undercloud neutron. Defaults to localdomain.
+  {{role}}ServerMetadata:
+    default: {}
+    description: >
+      Extra properties or metadata passed to Nova for the created nodes in
+      the overcloud. It's accessible via the Nova metadata API. This option is
+      role-specific and is merged with the values given to the ServerMetadata
+      parameter.
+    type: json
   ServerMetadata:
     default: {}
     description: >
       Extra properties or metadata passed to Nova for the created nodes in
-      the overcloud. It's accessible via the Nova metadata API.
+      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:
     type: json
@@ -99,6 +118,9 @@ parameters:
   MonitoringSubscriptions:
     type: comma_delimited_list
     default: []
+  ServiceMetadataSettings:
+    type: json
+    default: {}
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
@@ -109,6 +131,13 @@ parameters:
   LoggingGroups:
     type: comma_delimited_list
     default: []
+  UpgradeInitCommand:
+    type: string
+    description: |
+      Command or script snippet to run on all overcloud nodes to
+      initialize the upgrade process. E.g. a repository switch.
+    default: ''
+
 
 resources:
   {{role}}:
@@ -130,7 +159,11 @@ resources:
             template: {get_param: Hostname}
             params: {get_param: HostnameMap}
       software_config_transport: {get_param: SoftwareConfigTransport}
-      metadata: {get_param: ServerMetadata}
+      metadata:
+        map_merge:
+          - {get_param: ServerMetadata}
+          - {get_param: {{role}}ServerMetadata}
+          - {get_param: ServiceMetadataSettings}
       scheduler_hints: {get_param: {{role}}SchedulerHints}
 
   # Combine the NodeAdminUserData and NodeUserData mime archives
@@ -142,6 +175,8 @@ resources:
         type: multipart
       - config: {get_resource: NodeUserData}
         type: multipart
+      - config: {get_resource: RoleUserData}
+        type: multipart
 
   # Creates the "heat-admin" user if configured via the environment
   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
@@ -153,6 +188,11 @@ resources:
   NodeUserData:
     type: OS::TripleO::NodeUserData
 
+  # For optional operator role-specific userdata
+  # Should return a OS::Heat::MultipartMime reference via OS::stack_id
+  RoleUserData:
+    type: OS::TripleO::{{role}}::NodeUserData
+
   ExternalPort:
     type: OS::TripleO::{{role}}::Ports::ExternalPort
     properties:
@@ -229,17 +269,137 @@ resources:
       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
 
+  NetHostMap:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+        external:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - external
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - external
+        internal_api:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - internalapi
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - internalapi
+        storage:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - storage
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - storage
+        storage_mgmt:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - storagemgmt
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - storagemgmt
+        tenant:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - tenant
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - tenant
+        management:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - management
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - management
+        ctlplane:
+          fqdn:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - ctlplane
+              - {get_param: CloudDomain}
+          short:
+            list_join:
+            - '.'
+            - - {get_attr: [{{role}}, name]}
+              - ctlplane
+
+  PreNetworkConfig:
+    type: OS::TripleO::{{role}}::PreNetworkConfig
+    properties:
+      server: {get_resource: {{role}}}
+
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
+    depends_on: PreNetworkConfig
     properties:
       name: NetworkDeployment
       config: {get_resource: NetworkConfig}
       server: {get_resource: {{role}}}
       actions: {get_param: NetworkDeploymentActions}
+      input_values:
+        bridge_name: br-ex
+        interface_name: {get_param: NeutronPublicInterface}
+
+  {{role}}UpgradeInitConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        list_join:
+        - ''
+        - - "#!/bin/bash\n\n"
+          - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
+          - get_param: UpgradeInitCommand
+
+  # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
+  # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
+  {{role}}UpgradeInitDeployment:
+    type: OS::Heat::SoftwareDeployment
+    depends_on: NetworkDeployment
+    properties:
+      name: {{role}}UpgradeInitDeployment
+      server: {get_resource: {{role}}}
+      config: {get_resource: {{role}}UpgradeInitConfig}
 
   {{role}}Deployment:
     type: OS::Heat::StructuredDeployment
-    depends_on: NetworkDeployment
+    depends_on: {{role}}UpgradeInitDeployment
     properties:
       name: {{role}}Deployment
       config: {get_resource: {{role}}Config}
@@ -250,41 +410,41 @@ resources:
   {{role}}Config:
     type: OS::Heat::StructuredConfig
     properties:
-      group: os-apply-config
+      group: hiera
       config:
-        hiera:
-          hierarchy:
-            - '"%{::uuid}"'
-            - heat_config_%{::deploy_config_name}
-            - {{role.lower()}}_extraconfig
-            - extraconfig
-            - service_names
-            - service_configs
-            - {{role.lower()}}
-            - bootstrap_node # provided by allNodesConfig
-            - all_nodes # provided by allNodesConfig
-            - vip_data # provided by allNodesConfig
-            - '"%{::osfamily}"'
-          merge_behavior: deeper
-          datafiles:
-            service_names:
-              mapped_data:
-                service_names: {get_param: ServiceNames}
-                sensu::subscriptions: {get_param: MonitoringSubscriptions}
-            service_configs:
-              mapped_data:
-                map_replace:
-                  - {get_param: ServiceConfigSettings}
-                  - values: {get_attr: [NetIpMap, net_ip_map]}
-            {{role.lower()}}_extraconfig:
-              mapped_data: {get_param: {{role}}ExtraConfig}
-            extraconfig:
-              mapped_data: {get_param: ExtraConfig}
-            {{role.lower()}}:
-              mapped_data:
-                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}
+        hierarchy:
+          - '"%{::uuid}"'
+          - heat_config_%{::deploy_config_name}
+          - {{role.lower()}}_extraconfig
+          extraconfig
+          - service_names
+          - service_configs
+          - {{role.lower()}}
+          - bootstrap_node # provided by allNodesConfig
+          - all_nodes # provided by allNodesConfig
+          - vip_data # provided by allNodesConfig
+          - '"%{::osfamily}"'
+        merge_behavior: deeper
+        datafiles:
+          service_names:
+            service_names: {get_param: ServiceNames}
+            sensu::subscriptions: {get_param: MonitoringSubscriptions}
+          service_configs:
+            map_replace:
+              - {get_param: ServiceConfigSettings}
+              - values: {get_attr: [NetIpMap, net_ip_map]}
+          {{role.lower()}}_extraconfig: {get_param: {{role}}ExtraConfig}
+          extraconfig: {get_param: ExtraConfig}
+          {{role.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}
+            fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
+            fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
+            fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
+            fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
+            fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
+            fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
 
   # Resource for site-specific injection of root certificate
   NodeTLSCAData:
@@ -330,48 +490,13 @@ outputs:
   hostname_map:
     description: Mapping of network names to hostnames
     value:
-      external:
-        list_join:
-        - '.'
-        - - {get_attr: [{{role}}, name]}
-          - external
-          - {get_param: CloudDomain}
-      internal_api:
-        list_join:
-        - '.'
-        - - {get_attr: [{{role}}, name]}
-          - internalapi
-          - {get_param: CloudDomain}
-      storage:
-        list_join:
-        - '.'
-        - - {get_attr: [{{role}}, name]}
-          - storage
-          - {get_param: CloudDomain}
-      storage_mgmt:
-        list_join:
-        - '.'
-        - - {get_attr: [{{role}}, name]}
-          - storagemgmt
-          - {get_param: CloudDomain}
-      tenant:
-        list_join:
-        - '.'
-        - - {get_attr: [{{role}}, name]}
-          - tenant
-          - {get_param: CloudDomain}
-      management:
-        list_join:
-        - '.'
-        - - {get_attr: [{{role}}, name]}
-          - management
-          - {get_param: CloudDomain}
-      ctlplane:
-        list_join:
-        - '.'
-        - - {get_attr: [{{role}}, name]}
-          - ctlplane
-          - {get_param: CloudDomain}
+      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]}
+      ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
   hosts_entry:
     value:
       str_replace:
@@ -389,47 +514,19 @@ outputs:
           DOMAIN: {get_param: CloudDomain}
           PRIMARYHOST: {get_attr: [{{role}}, name]}
           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
-          EXTERNALHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [{{role}}, name]}
-              - external
+          EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
-          INTERNAL_APIHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [{{role}}, name]}
-              - internalapi
+          INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
           STORAGEIP: {get_attr: [StoragePort, ip_address]}
-          STORAGEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [{{role}}, name]}
-              - storage
+          STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
-          STORAGE_MGMTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [{{role}}, name]}
-              - storagemgmt
+          STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
           TENANTIP: {get_attr: [TenantPort, ip_address]}
-          TENANTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [{{role}}, name]}
-              - tenant
+          TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
-          MANAGEMENTHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [{{role}}, name]}
-              - management
+          MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
           CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
-          CTLPLANEHOST:
-            list_join:
-            - '.'
-            - - {get_attr: [{{role}}, name]}
-              - ctlplane
+          CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
   nova_server_resource:
     description: Heat resource handle for {{role}} server
     value:
index 8fe51fa..6e4e9c1 100644 (file)
@@ -22,8 +22,8 @@ Config Settings
 Each service may define a config_settings output variable which returns
 Hiera settings to be configured.
 
-Steps
------
+Deployment Steps
+----------------
 
 Each service may define an output variable which returns a puppet manifest
 snippet that will run at each of the following steps. Earlier manifests
@@ -49,8 +49,42 @@ are re-asserted when applying latter ones.
 
    5) Service activation (Pacemaker)
 
-   6) Fencing (Pacemaker)
+Upgrade Steps
+-------------
+
+Each service template may optionally define a `upgrade_tasks` key, which is a
+list of ansible tasks to be performed during the upgrade process.
+
+Similar to the step_config, we allow a series of steps for the per-service
+upgrade sequence, defined as ansible tasks with a tag e.g "step1" for the first
+step, "step2" for the second, etc.
+
+   Steps/tages correlate to the following:
+
+   1) Quiesce the control-plane, e.g disable LoadBalancer, stop pacemaker cluster
+
+   2) Stop all control-plane services, ready for upgrade
+
+   3) Perform a package update, (either specific packages or the whole system)
+
+   4) Start services needed for migration tasks (e.g DB)
+
+   5) Perform any migration tasks, e.g DB sync commands
+
+   6) Start control-plane services
+
+   7) Any additional online migration tasks (e.g data migrations)
+
+Nova Server Metadata Settings
+-----------------------------
+
+One can use the hook of type `OS::TripleO::ServiceServerMetadataHook` to pass
+entries to the nova instances' metadata. It is, however, disabled by default.
+In order to overwrite it one needs to define it in the resource registry. An
+implementation of this hook needs to conform to the following:
 
-Note: Not all roles currently support all steps:
+* It needs to define an input called `RoleData` of json type. This gets as
+  input the contents of the `role_data` for each role's ServiceChain.
 
-  * ObjectStorage role only supports steps 2, 3 and 4
+* This needs to define an output called `metadata` which will be given to the
+  Nova Server resource as the instance's metadata.
index daed166..4e735b4 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Aodh API service configured with Puppet
@@ -55,9 +55,10 @@ outputs:
             aodh::wsgi::apache::servername:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, AodhApiNetwork]}
+            aodh::wsgi::apache::wsgi_process_display_name: 'aodh_wsgi'
             aodh::api::service_name: 'httpd'
             aodh::api::enable_proxy_headers_parsing: true
             tripleo.aodh_api.firewall_rules:
@@ -68,7 +69,7 @@ outputs:
             aodh::api::host:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, AodhApiNetwork]}
             # NOTE: bind IP is found in Heat replacing the network name with the
index 0e2410f..8648a97 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Aodh service configured with Puppet
@@ -69,6 +69,8 @@ outputs:
               - '@'
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/aodh'
+              - '?bind_address='
+              - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
         aodh::debug: {get_param: Debug}
         aodh::auth::auth_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
         aodh::rabbit_userid: {get_param: RabbitUserName}
index 405c500..61f8c23 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Aodh Evaluator service configured with Puppet
index fc4e8b3..715165b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Aodh Listener service configured with Puppet
index 2e51c63..da85581 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Aodh Notifier service configured with Puppet
index 87e53f1..07ec1b3 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Apache service TLS configurations.
@@ -35,8 +35,8 @@ outputs:
                 httpd-NETWORK:
                   service_certificate: '/etc/pki/tls/certs/httpd-NETWORK.crt'
                   service_key: '/etc/pki/tls/private/httpd-NETWORK.key'
-                  hostname: "%{::fqdn_NETWORK}"
-                  principal: "HTTP/%{::fqdn_NETWORK}"
+                  hostname: "%{hiera('fqdn_NETWORK')}"
+                  principal: "HTTP/%{hiera('fqdn_NETWORK')}"
               for_each:
                 NETWORK:
                   # NOTE(jaosorior) Get unique network names to create
index 382e0ff..2e95dcb 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Apache service configured with Puppet. Note this is typically included
index b266674..000a744 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Barbican API service configured with Puppet
@@ -24,7 +24,7 @@ parameters:
     hidden: true
   BarbicanWorkers:
     description: Set the number of workers for barbican::wsgi::apache
-    default: '"%{::processorcount}"'
+    default: '%{::processorcount}'
     type: string
   Debug:
     default: ''
@@ -93,7 +93,7 @@ outputs:
             barbican::wsgi::apache::servername:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, BarbicanApiNetwork]}
             barbican::db::database_connection:
@@ -105,6 +105,8 @@ outputs:
                   - '@'
                   - {get_param: [EndpointMap, MysqlInternal, host]}
                   - '/barbican'
+                  - '?bind_address='
+                  - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
             tripleo.barbican_api.firewall_rules:
               '117 barbican':
                 dport:
index 1a53415..735e6dd 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   HAproxy service configured with Puppet
index c4abc30..b9d8966 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Ceilometer Central Agent service configured with Puppet
index 5457539..b1d36c9 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Ceilometer Compute Agent service configured with Puppet
index ea403aa..9c9a3bd 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Ceilometer Notification Agent service configured with Puppet
index 97b255a..63e02d4 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Ceilometer API service configured with Puppet
@@ -75,7 +75,7 @@ outputs:
             ceilometer::api::host:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, CeilometerApiNetwork]}
             ceilometer::wsgi::apache::bind_host: {get_param: [ServiceNetMap, CeilometerApiNetwork]}
@@ -83,7 +83,7 @@ outputs:
             ceilometer::wsgi::apache::servername:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, CeilometerApiNetwork]}
       service_config_settings:
index ded1bc0..0528368 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Ceilometer service configured with Puppet
@@ -31,9 +31,9 @@ parameters:
     type: string
     hidden: true
   CeilometerMeterDispatcher:
-    default: 'gnocchi'
-    description: Dispatcher to process meter data
-    type: string
+    default: ['gnocchi']
+    description: Comma-seperated list of Dispatcher to process meter data
+    type: comma_delimited_list
     constraints:
     - allowed_values: ['gnocchi', 'database']
   CeilometerEventDispatcher:
@@ -50,6 +50,14 @@ parameters:
     default: false
     description: Whether to store events in ceilometer.
     type: boolean
+  EnableLegacyCeilometerApi:
+    default: false
+    description: Enable legacy ceilometer Api service if needed.
+    type: boolean
+  EventPipelinePublishers:
+    default: ['notifier://?topic=alarm.all']
+    description: A list of publishers to put in event_pipeline.yaml.
+    type: comma_delimited_list
   Debug:
     default: ''
     description: Set to True to enable debugging on all services.
@@ -93,6 +101,9 @@ outputs:
               - '@'
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/ceilometer'
+              - '?bind_address='
+              - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
+        enable_legacy_ceilometer_api: {get_param: EnableLegacyCeilometerApi}
         ceilometer_backend: {get_param: CeilometerBackend}
         ceilometer::metering_secret: {get_param: CeilometerMeteringSecret}
         # we include db_sync class in puppet-tripleo
@@ -104,6 +115,7 @@ outputs:
         ceilometer::agent::auth::auth_password: {get_param: CeilometerPassword}
         ceilometer::agent::auth::auth_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
         ceilometer::agent::notification::store_events: {get_param: CeilometerStoreEvents}
+        ceilometer::agent::notification::event_pipeline_publishers: {get_param: EventPipelinePublishers}
         ceilometer::agent::auth::auth_region: {get_param: KeystoneRegion}
         ceilometer::agent::auth::auth_tenant_name: 'service'
         ceilometer::agent::auth::auth_endpoint_type: 'internalURL'
index e3f1ef4..88e7d78 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Ceilometer Collector service configured with Puppet
index 3b811c4..714434b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Ceilometer Expirer service configured with Puppet
index 786e9dd..033d3f7 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Ceph base service. Shared by all Ceph services.
@@ -119,36 +119,33 @@ outputs:
               NETWORK: {get_param: [ServiceNetMap, CephMonNetwork]}
         ceph::profile::params::public_addr: {get_param: [ServiceNetMap, CephMonNetwork]}
         ceph::profile::params::client_keys:
-          str_replace:
-            template: "{
-              client.admin: {
-                secret: 'ADMIN_KEY',
-                mode: '0600',
-                cap_mon: 'allow *',
-                cap_osd: 'allow *',
+          map_replace:
+            - client.admin:
+                secret: {get_param: CephAdminKey}
+                mode: '0600'
+                cap_mon: 'allow *'
+                cap_osd: 'allow *'
                 cap_mds: 'allow *'
-              },
-              client.bootstrap-osd: {
-                secret: 'ADMIN_KEY',
-                keyring_path: '/var/lib/ceph/bootstrap-osd/ceph.keyring',
+              client.bootstrap-osd:
+                secret: {get_param: CephAdminKey}
+                keyring_path: '/var/lib/ceph/bootstrap-osd/ceph.keyring'
                 cap_mon: 'allow profile bootstrap-osd'
-              },
-              client.CLIENT_USER: {
-                secret: 'CLIENT_KEY',
-                mode: '0644',
-                cap_mon: 'allow r',
-                cap_osd: 'allow class-read object_prefix rbd_children, allow rwx pool=CINDER_POOL, allow rwx pool=CINDERBACKUP_POOL, allow rwx pool=NOVA_POOL, allow rwx pool=GLANCE_POOL, allow rwx pool=GNOCCHI_POOL'
-              }
-            }"
-            params:
-              CLIENT_USER: {get_param: CephClientUserName}
-              CLIENT_KEY: {get_param: CephClientKey}
-              ADMIN_KEY: {get_param: CephAdminKey}
-              NOVA_POOL: {get_param: NovaRbdPoolName}
-              CINDER_POOL: {get_param: CinderRbdPoolName}
-              CINDERBACKUP_POOL: {get_param: CinderBackupRbdPoolName}
-              GLANCE_POOL: {get_param: GlanceRbdPoolName}
-              GNOCCHI_POOL: {get_param: GnocchiRbdPoolName}
+              CEPH_CLIENT_KEY:
+                secret: {get_param: CephClientKey}
+                mode: '0644'
+                cap_mon: 'allow r'
+                cap_osd:
+                  str_replace:
+                    template: 'allow class-read object_prefix rbd_children, allow rwx pool=CINDER_POOL, allow rwx pool=CINDERBACKUP_POOL, allow rwx pool=NOVA_POOL, allow rwx pool=GLANCE_POOL, allow rwx pool=GNOCCHI_POOL'
+                    params:
+                      NOVA_POOL: {get_param: NovaRbdPoolName}
+                      CINDER_POOL: {get_param: CinderRbdPoolName}
+                      CINDERBACKUP_POOL: {get_param: CinderBackupRbdPoolName}
+                      GLANCE_POOL: {get_param: GlanceRbdPoolName}
+                      GNOCCHI_POOL: {get_param: GnocchiRbdPoolName}
+            - keys:
+                CEPH_CLIENT_KEY:
+                  list_join: ['.', ['client', {get_param: CephClientUserName}]]
       service_config_settings:
         glance_api:
           glance::api::show_multiple_locations: {if: [glance_multiple_locations, true, false]}
index b482dd2..f972e21 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Ceph Client service.
index b708665..b898d0b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Ceph External service.
similarity index 56%
rename from puppet/services/pacemaker/gnocchi-api.yaml
rename to puppet/services/ceph-mds.yaml
index 6a9161f..b68567f 100644 (file)
@@ -1,7 +1,7 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
-  Gnocchi service configured with Puppet
+  Ceph MDS service.
 
 parameters:
   ServiceNetMap:
@@ -18,13 +18,15 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  MonitoringSubscriptionGnocchiApi:
-    default: 'overcloud-gnocchi-api'
+  CephMdsKey:
+    description: The cephx key for the MDS service. Can be created
+                 with ceph-authtool --gen-print-key.
     type: string
+    hidden: true
 
 resources:
-  GnocchiServiceBase:
-    type: ../gnocchi-api.yaml
+  CephBase:
+    type: ./ceph-base.yaml
     properties:
       ServiceNetMap: {get_param: ServiceNetMap}
       DefaultPasswords: {get_param: DefaultPasswords}
@@ -32,14 +34,16 @@ resources:
 
 outputs:
   role_data:
-    description: Role data for the Gnocchi role.
+    description: Role data for the Ceph MDS service.
     value:
-      service_name: gnocchi_api
-      monitoring_subscription: {get_param: MonitoringSubscriptionGnocchiApi}
+      service_name: ceph_mds
       config_settings:
         map_merge:
-          - get_attr: [GnocchiServiceBase, role_data, config_settings]
-          - gnocchi::metricd::manage_service: false
-            gnocchi::metricd::enabled: false
+          - get_attr: [CephBase, role_data, config_settings]
+          - ceph::profile::params::mds_key: {get_param: CephMdsKey}
+            tripleo.ceph_mds.firewall_rules:
+              '112 ceph_mds':
+                dport:
+                  - '6800-7300'
       step_config: |
-        include ::tripleo::profile::pacemaker::gnocchi::api
+        include ::tripleo::profile::base::ceph::mds
index 3471f16..f32bdd2 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Ceph Monitor service.
index f637872..df0ee6c 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Ceph OSD service.
index 89c1a5e..6448387 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Ceph RadosGW service.
@@ -68,6 +68,7 @@ outputs:
           ceph::rgw::keystone::auth::public_url: {get_param: [EndpointMap, CephRgwPublic, uri]}
           ceph::rgw::keystone::auth::internal_url: {get_param: [EndpointMap, CephRgwInternal, uri]}
           ceph::rgw::keystone::auth::admin_url: {get_param: [EndpointMap, CephRgwAdmin, uri]}
+          ceph::rgw::keystone::auth::user: 'swift'
           ceph::rgw::keystone::auth::password: {get_param: SwiftPassword}
           ceph::rgw::keystone::auth::region: {get_param: KeystoneRegion}
           ceph::rgw::keystone::auth::tenant: 'service'
index 803d8b8..376ea2c 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack Cinder API service configured with Puppet
@@ -42,7 +42,7 @@ parameters:
   CinderWorkers:
     type: string
     description: Set the number of workers for cinder::wsgi::apache
-    default: '"%{::os_workers}"'
+    default: '%{::os_workers}'
   EnableInternalTLS:
     type: boolean
     default: false
@@ -101,7 +101,7 @@ outputs:
             cinder::api::bind_host:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, CinderApiNetwork]}
             cinder::wsgi::apache::ssl: {get_param: EnableInternalTLS}
@@ -115,7 +115,7 @@ outputs:
             cinder::wsgi::apache::servername:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, CinderApiNetwork]}
           -
index 8079545..14be07a 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Cinder Backup service configured with Puppet
index 59c9b84..be4b4af 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Cinder base service. Shared by all Cinder services.
@@ -60,6 +60,8 @@ outputs:
               - '@'
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/cinder'
+              - '?bind_address='
+              - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
         cinder::debug: {get_param: Debug}
         cinder::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
         cinder::rabbit_userid: {get_param: RabbitUserName}
index 94c263e..3dd3f64 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Cinder Scheduler service configured with Puppet
index 82e16f3..66706bc 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Cinder Volume service configured with Puppet
index 3f4f106..c27fcb7 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Configuration details for MongoDB service using composable roles
index 01daeaf..8290cae 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   MongoDb service deployment using puppet
index 3ba51fb..56d037e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   MySQL configurations for using TLS via certmonger.
index 651bf4b..5eefe6b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   MySQL service deployment using puppet
@@ -87,8 +87,18 @@ outputs:
             tripleo::profile::base::database::mysql::bind_address:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, MysqlNetwork]}
+            tripleo::profile::base::database::mysql::client_bind_address:
+              {get_param: [ServiceNetMap, MysqlNetwork]}
       step_config: |
         include ::tripleo::profile::base::database::mysql
+      upgrade_tasks:
+        - name: Stop service
+          tags: step2
+          service: name=mariadb state=stopped
+        - name: Start service
+          tags: step4
+          service: name=mariadb state=started
+
index 4ed3c00..2b7dd43 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Redis service configured with Puppet
@@ -39,6 +39,6 @@ outputs:
         # internal_api_subnet - > IP/CIDR
         redis::bind: {get_param: [ServiceNetMap, RedisNetwork]}
         redis::port: 6379
-        redis::sentinel::master_name: '"%{hiera(\"bootstrap_nodeid\")}"'
-        redis::sentinel::redis_host: '"%{hiera(\"bootstrap_nodeid_ip\")}"'
+        redis::sentinel::master_name: "%{hiera('bootstrap_nodeid')}"
+        redis::sentinel::redis_host: "%{hiera('bootstrap_nodeid_ip')}"
         redis::sentinel::notification_script: '/usr/local/bin/redis-notifications.sh'
index 1c333b9..5ea25ca 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Redis service configured with Puppet
index 33abdbf..36df724 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Glance API service configured with Puppet
@@ -75,6 +75,8 @@ outputs:
                   - '@'
                   - {get_param: [EndpointMap, MysqlInternal, host]}
                   - '/glance'
+                  - '?bind_address='
+                  - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
             glance::api::bind_port: {get_param: [EndpointMap, GlanceInternal, port]}
             glance::api::authtoken::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
             glance::api::authtoken::auth_url: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
index cc979af..d715ac0 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack Glance Common settings with Puppet
index c45582d..1f7e6e3 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Glance Registry service configured with Puppet
@@ -76,6 +76,8 @@ outputs:
                   - '@'
                   - {get_param: [EndpointMap, MysqlInternal, host]}
                   - '/glance'
+                  - '?bind_address='
+                  - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
             glance::registry::authtoken::password: {get_param: GlancePassword}
             glance::registry::authtoken::project_name: 'service'
             glance::registry::pipeline: 'keystone'
index ac15de4..3929e00 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Gnocchi service configured with Puppet
@@ -91,7 +91,7 @@ outputs:
             gnocchi::wsgi::apache::servername:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, GnocchiApiNetwork]}
             tripleo::profile::base::gnocchi::api::gnocchi_backend: {get_param: GnocchiBackend}
@@ -102,10 +102,11 @@ outputs:
             # internal_api_uri -> [IP]
             # internal_api_subnet - > IP/CIDR
             gnocchi::wsgi::apache::bind_host: {get_param: [ServiceNetMap, GnocchiApiNetwork]}
+            gnocchi::wsgi::apache::wsgi_process_display_name: 'gnocchi_wsgi'
             gnocchi::api::host:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, GnocchiApiNetwork]}
 
index 556baae..d92b176 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Gnocchi service configured with Puppet
@@ -67,6 +67,8 @@ outputs:
               - '@'
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/gnocchi'
+              - '?bind_address='
+              - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
         gnocchi::db::sync::extra_opts: '--skip-storage --create-legacy-resource-types'
         gnocchi::storage::swift::swift_user: 'service:gnocchi'
         gnocchi::storage::swift::swift_auth_version: 2
index 1400bc9..e5f9a8e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Gnocchi service configured with Puppet
index 983d6c9..df438b3 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Gnocchi service configured with Puppet
index c6d5354..7745759 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   HAProxy deployment with TLS enabled, powered by certmonger
index 1551d16..227697b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   HAProxy deployment with TLS enabled, powered by certmonger
index c8edade..9049c90 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   HAproxy service configured with Puppet
@@ -77,3 +77,10 @@ outputs:
                 - get_attr: [HAProxyInternalTLS, role_data, certificates_specs]
       step_config: |
         include ::tripleo::profile::base::haproxy
+      upgrade_tasks:
+        - name: Stop haproxy service
+          tags: step1
+          service: name=haproxy state=stopped
+        - name: Start haproxy service
+          tags: step4 # Needed at step 4 for mysql
+          service: name=haproxy state=started
index 12d4a6a..10a7780 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Heat CloudFormation API service configured with Puppet
index 6dfeaaf..1178d62 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Heat CloudWatch API service configured with Puppet
index b0cd16d..a32521c 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Heat API service configured with Puppet
index a2a65d7..a933a94 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Heat base service. Shared for all Heat services.
@@ -57,6 +57,7 @@ outputs:
         heat::rabbit_port: {get_param: RabbitClientPort}
         heat::debug: {get_param: Debug}
         heat::enable_proxy_headers_parsing: true
+        heat::rpc_response_timeout: 600
         # We need this because the default heat policy.json no longer works on TripleO
         # https://git.openstack.org/cgit/openstack/heat/commit/?id=ac86702172ddf01f5bdc3f3cd99d2e32ad9b7024
         heat::policy::policies:
@@ -77,6 +78,8 @@ outputs:
         heat::cron::purge_deleted::destination: '/dev/null'
         heat::db::database_db_max_retries: -1
         heat::db::database_max_retries: -1
+        heat::yaql_memory_quota: 100000
+        heat::yaql_limit_iterators: 1000
       service_config_settings:
         keystone:
           tripleo::profile::base::keystone::heat_admin_domain: 'heat_stack'
index 3f0e410..8faccd2 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Openstack Heat Engine service configured with Puppet
@@ -48,6 +48,15 @@ parameters:
     default:
       tag: openstack.heat.engine
       path: /var/log/heat/heat-engine.log
+  HeatConvergenceEngine:
+    type: boolean
+    default: true
+    description: Enables the heat engine with the convergence architecture.
+  HeatMaxResourcesPerStack:
+    type: number
+    default: 1000
+    description: Maximum resources allowed per top-level stack. -1 stands for unlimited.
+
 
 resources:
   HeatBase:
@@ -72,6 +81,26 @@ outputs:
           - heat::engine::num_engine_workers: {get_param: HeatWorkers}
             heat::engine::configure_delegated_roles: false
             heat::engine::trusts_delegated_roles: []
+            heat::engine::max_nested_stack_depth: 6
+            heat::engine::max_resources_per_stack: {get_param: HeatMaxResourcesPerStack}
+            heat::engine::heat_metadata_server_url:
+              list_join:
+                - ''
+                - - {get_param: [EndpointMap, HeatCfnPublic, protocol]}
+                  - '://'
+                  - {get_param: [EndpointMap, HeatCfnPublic, host]}
+                  - ':'
+                  - {get_param: [EndpointMap, HeatCfnPublic, port]}
+            heat::engine::heat_waitcondition_server_url:
+              list_join:
+                - ''
+                - - {get_param: [EndpointMap, HeatCfnPublic, protocol]}
+                  - '://'
+                  - {get_param: [EndpointMap, HeatCfnPublic, host]}
+                  - ':'
+                  - {get_param: [EndpointMap, HeatCfnPublic, port]}
+                  - '/v1/waitcondition'
+            heat::engine::convergence_engine: {get_param: HeatConvergenceEngine}
             tripleo::profile::base::heat::manage_db_purge: {get_param: HeatEnableDBPurge}
             heat::database_connection:
               list_join:
@@ -82,6 +111,8 @@ outputs:
                   - '@'
                   - {get_param: [EndpointMap, MysqlInternal, host]}
                   - '/heat'
+                  - '?bind_address='
+                  - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
             heat::keystone_ec2_uri: {get_param: [EndpointMap, KeystoneEC2, uri]}
             heat::keystone::domain::domain_password: {get_param: HeatStackDomainAdminPassword}
             heat::engine::auth_encryption_key:
index 8eaf404..cf35d20 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Horizon service configured with Puppet
@@ -58,8 +58,10 @@ outputs:
               dport:
                 - 80
                 - 443
+          horizon::enable_secure_proxy_ssl_header: true
           horizon::disable_password_reveal: true
           horizon::enforce_password_check: true
+          horizon::disallow_iframe_embed: true
           horizon::cache_backend: django.core.cache.backends.memcached.MemcachedCache
           horizon::django_session_engine: 'django.contrib.sessions.backends.cache'
           horizon::vhost_extra_params:
index c8a2e83..aebb37b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Ironic API configured with Puppet
index 0ff393c..ad7ef6e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Ironic services configured with Puppet
@@ -60,6 +60,8 @@ outputs:
               - '@'
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/ironic'
+              - '?bind_address='
+              - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
         ironic::debug: {get_param: Debug}
         ironic::rabbit_userid: {get_param: RabbitUserName}
         ironic::rabbit_password: {get_param: RabbitPassword}
index 4ac9fc3..194afec 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Ironic conductor configured with Puppet
@@ -68,7 +68,7 @@ outputs:
               list_join:
                 - ''
                 - - 'http://'
-                  - '%{hiera("ironic_conductor_http_host")}:'
+                  - "%{hiera('ironic_conductor_http_host')}:"
                   - {get_param: IronicIPXEPort}
             ironic::drivers::pxe::ipxe_enabled: {get_param: IronicIPXEEnabled}
             ironic::glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
index fb0d32b..38f9f3b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Keepalived service configured with Puppet
@@ -36,6 +36,11 @@ parameters:
     default: 'overcloud-keepalived'
     type: string
 
+conditions:
+
+  control_iface_empty: {equals : [{get_param: ControlVirtualInterface}, '']}
+  public_iface_empty: {equals : [{get_param: PublicVirtualInterface}, '']}
+
 outputs:
   role_data:
     description: Role data for the Keepalived role.
@@ -43,10 +48,27 @@ outputs:
       service_name: keepalived
       monitoring_subscription: {get_param: MonitoringSubscriptionKeepalived}
       config_settings:
-        tripleo::keepalived::control_virtual_interface: {get_param: ControlVirtualInterface}
-        tripleo::keepalived::public_virtual_interface: {get_param: PublicVirtualInterface}
-        tripleo.keepalived.firewall_rules:
-          '106 keepalived vrrp':
-            proto: vrrp
+        map_merge:
+        - tripleo.keepalived.firewall_rules:
+            '106 keepalived vrrp':
+              proto: vrrp
+        - 
+          if:
+          - control_iface_empty
+          - {}
+          - tripleo::keepalived::control_virtual_interface: {get_param: ControlVirtualInterface}
+        - 
+          if:
+          - public_iface_empty
+          - {}
+          - tripleo::keepalived::public_virtual_interface: {get_param: PublicVirtualInterface}
       step_config: |
         include ::tripleo::profile::base::keepalived
+      upgrade_tasks:
+        - name: Stop keepalived service
+          tags: step1
+          service: name=keepalived state=stopped
+        - name: Start keepalived service
+          tags: step4 # Needed at step 4 for mysql
+          service: name=keepalived state=started
+
index 6989871..2915795 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Load kernel modules with kmod and configure kernel options with sysctl.
index fe023a6..f69e20b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack Keystone service configured with Puppet
@@ -89,7 +89,7 @@ parameters:
   KeystoneWorkers:
     type: string
     description: Set the number of workers for keystone::wsgi::apache
-    default: '"%{::os_workers}"'
+    default: '%{::os_workers}'
   MonitoringSubscriptionKeystone:
     default: 'overcloud-keystone'
     type: string
@@ -148,6 +148,8 @@ outputs:
                   - '@'
                   - {get_param: [EndpointMap, MysqlInternal, host]}
                   - '/keystone'
+                  - '?bind_address='
+                  - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
             keystone::admin_token: {get_param: AdminToken}
             keystone::admin_password: {get_param: AdminPassword}
             keystone::roles::admin::password: {get_param: AdminPassword}
@@ -195,13 +197,13 @@ outputs:
             keystone::wsgi::apache::servername:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}
             keystone::wsgi::apache::servername_admin:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}
             keystone::wsgi::apache::workers: {get_param: KeystoneWorkers}
@@ -219,13 +221,13 @@ outputs:
             keystone::admin_bind_host:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}
             keystone::public_bind_host:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}
             # NOTE: bind IP is found in Heat replacing the network name with the
@@ -248,3 +250,14 @@ outputs:
           keystone::db::mysql::allowed_hosts:
             - '%'
             - "%{hiera('mysql_bind_host')}"
+      # Ansible tasks to handle upgrade
+      upgrade_tasks:
+        - name: Stop keystone service (running under httpd)
+          tags: step2
+          service: name=httpd state=stopped
+        - name: Sync keystone DB
+          tags: step5
+          command: keystone-manage db_sync
+        - name: Start keystone service (running under httpd)
+          tags: step6
+          service: name=httpd state=started
index c8f6755..65ad80e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: Fluentd base service
 
index 3ae7110..769ab68 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: Fluentd client configured with Puppet
 
index 58b423f..68f98af 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: Fluentd logging configuration
 
index b4b3d48..b7c6482 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Manila-api service configured with Puppet
index 0fc39e2..91369a9 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Manila Cephfs backend
index c527666..23831a6 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Manila generic backend.
index e6d2f25..1f6fcf4 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Manila netapp backend.
index 844bd3a..2a9745a 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Manila base service. Shared by manila-api/scheduler/share services
@@ -67,6 +67,8 @@ outputs:
             - '@'
             - {get_param: [EndpointMap, MysqlInternal, host]}
             - '/manila'
+            - '?bind_address='
+            - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
       service_config_settings:
         mysql:
           manila::db::mysql::password: {get_param: ManilaPassword}
index d96b677..c8114f2 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Manila-scheduler service configured with Puppet
index 49c69fc..e38fe67 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Manila-share service configured with Puppet
index 9e3f637..ffa969e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Memcached service configured with Puppet
index 44d3035..daa1dc7 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Mistral API service configured with Puppet
index a11624c..e678b14 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Mistral base service. Shared for all Mistral services.
@@ -65,6 +65,8 @@ outputs:
               - '@'
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/mistral'
+              - '?bind_address='
+              - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
         mistral::rabbit_userid: {get_param: RabbitUserName}
         mistral::rabbit_password: {get_param: RabbitPassword}
         mistral::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
index 10af670..4a92b86 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Mistral Engine service configured with Puppet
index 7afaf0d..6e273b9 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Openstack Mistral API service configured with Puppet
index ea23b8b..a8303a5 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: Sensu base service
 
index a26c745..76ba59c 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: Sensu client configured with Puppet
 
index 1c2331f..ad14d31 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Contrail Analytics service deployment using puppet, this YAML file
index 03dbea5..b49b2ad 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Base parameters for all Contrail Services.
index 0987fc7..0377448 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Contrail Config service deployment using puppet, this YAML file
index 9356e9e..7c28d28 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Contrail Control service deployment using puppet, this YAML file
index e571261..c56b90a 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Contrail Database service deployment using puppet, this YAML file
index 72b9e1c..72cc6fa 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Contrail WebUI service deployment using puppet, this YAML file
index 5fd9d7a..fa10cd9 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron Server configured with Puppet
@@ -112,6 +112,8 @@ outputs:
                   - '@'
                   - {get_param: [EndpointMap, MysqlInternal, host]}
                   - '/ovs_neutron'
+                  - '?bind_address='
+                  - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
             neutron::keystone::authtoken::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
             neutron::keystone::authtoken::auth_url: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
             neutron::server::api_workers: {get_param: NeutronWorkers}
index 0b2cef0..43657bd 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron base service. Shared for all Neutron agents.
@@ -84,16 +84,12 @@ outputs:
         neutron::rabbit_port: {get_param: RabbitClientPort}
         neutron::dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
         neutron::core_plugin: {get_param: NeutronCorePlugin}
-        neutron::service_plugins:
-          str_replace:
-            template: PLUGINS
-            params:
-              PLUGINS: {get_param: NeutronServicePlugins}
+        neutron::service_plugins: {get_param: NeutronServicePlugins}
         neutron::debug: {get_param: Debug}
         neutron::purge_config: {get_param: EnableConfigPurge}
         neutron::allow_overlapping_ips: true
         neutron::rabbit_heartbeat_timeout_threshold: 60
-        neutron::host: '"%{::fqdn}"'    #NOTE: extra quoting is needed
+        neutron::host: '%{::fqdn}'
         neutron::db::database_db_max_retries: -1
         neutron::db::database_max_retries: -1
         neutron::global_physnet_mtu: {get_param: NeutronGlobalPhysnetMtu}
index 26b6fa6..5b6fcca 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron Compute Midonet plugin
index c4f8ad1..04431e2 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron Compute Nuage plugin
index 9f2fd13..bbe4a05 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron Compute OpenContrail plugin
index 95e05dd..ce28b5c 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron Compute OVN agent
index 31a0a08..09aa619 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron Compute Plumgrid plugin
index 2cd08f9..ad46c90 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron DHCP agent configured with Puppet
index b6c2911..06927fe 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron L3 agent for DVR enabled compute nodes
index a215755..f8c839d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron L3 agent configured with Puppet
@@ -68,8 +68,7 @@ outputs:
       config_settings:
         map_merge:
         - get_attr: [NeutronBase, role_data, config_settings]
-        - neutron::agents::l3::router_delete_namespaces: True
-          neutron::agents::l3::agent_mode: {get_param: NeutronL3AgentMode}
+        - neutron::agents::l3::agent_mode: {get_param: NeutronL3AgentMode}
           tripleo.neutron_l3.firewall_rules:
             '106 neutron_l3 vrrp':
               proto: vrrp
index 8be4c6d..73b767d 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron Metadata agent configured with Puppet
@@ -72,6 +72,6 @@ outputs:
             neutron::agents::metadata::auth_password: {get_param: NeutronPassword}
             neutron::agents::metadata::auth_url: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
             neutron::agents::metadata::auth_tenant: 'service'
-            neutron::agents::metadata::metadata_ip: '"%{hiera(\"nova_metadata_vip\")}"'
+            neutron::agents::metadata::metadata_ip: "%{hiera('nova_metadata_vip')}"
       step_config: |
         include tripleo::profile::base::neutron::metadata
index 0de256c..9198f35 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron Midonet plugin and services
index cca0dee..5fa0486 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron OVS agent configured with Puppet
@@ -94,21 +94,9 @@ outputs:
           - neutron::agents::ml2::ovs::l2_population: {get_param: NeutronEnableL2Pop}
             neutron::agents::ml2::ovs::enable_distributed_routing: {get_param: NeutronEnableDVR}
             neutron::agents::ml2::ovs::arp_responder: {get_param: NeutronEnableARPResponder}
-            neutron::agents::ml2::ovs::bridge_mappings:
-              str_replace:
-                template: MAPPINGS
-                params:
-                  MAPPINGS: {get_param: NeutronBridgeMappings}
-            neutron::agents::ml2::ovs::tunnel_types:
-              str_replace:
-                template: TYPES
-                params:
-                  TYPES: {get_param: NeutronTunnelTypes}
-            neutron::agents::ml2::ovs::extensions:
-              str_replace:
-                template: AGENT_EXTENSIONS
-                params:
-                  AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
+            neutron::agents::ml2::ovs::bridge_mappings: {get_param: NeutronBridgeMappings}
+            neutron::agents::ml2::ovs::tunnel_types: {get_param: NeutronTunnelTypes}
+            neutron::agents::ml2::ovs::extensions: {get_param: NeutronAgentExtensions}
             # NOTE: bind IP is found in Heat replacing the network name with the
             # local node IP for the given network; replacement examples
             # (eg. for internal_api):
index fdfa1c0..5c77e35 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron OVS DPDK configured with Puppet for Compute Role
index e98ed49..59346ed 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron ML2/OVN plugin configured with Puppet
@@ -18,13 +18,6 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-  OVNDbHost:
-    description: IP address on which the OVN DB servers are listening
-    type: string
-  OVNNorthboundServerPort:
-    description: Port of the OVN Northbound DB server
-    type: number
-    default: 6641
   OVNDbConnectionTimeout:
     description: Timeout in seconds for the OVSDB connection transaction
     type: number
@@ -68,9 +61,7 @@ outputs:
       config_settings:
         map_merge:
           - get_attr: [NeutronMl2Base, role_data, config_settings]
-          - ovn::northbound::port: {get_param: OVNNorthboundServerPort}
-            tripleo::profile::base::neutron::plugins::ml2::ovn::ovn_db_host: {get_param: OVNDbHost}
-            neutron::plugins::ovn::ovsdb_connection_timeout: {get_param: OVNDbConnectionTimeout}
+          - neutron::plugins::ovn::ovsdb_connection_timeout: {get_param: OVNDbConnectionTimeout}
             neutron::plugins::ovn::neutron_sync_mode: {get_param: OVNNeutronSyncMode}
             neutron::plugins::ovn::ovn_l3_mode: true
             neutron::plugins::ovn::vif_type: {get_param: OVNVifType}
index 5dbae3d..407ce6b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron ML2 Plugin configured with Puppet
@@ -83,46 +83,14 @@ outputs:
       config_settings:
         map_merge:
           - get_attr: [NeutronBase, role_data, config_settings]
-          - neutron::plugins::ml2::mechanism_drivers:
-              str_replace:
-                template: MECHANISMS
-                params:
-                  MECHANISMS: {get_param: NeutronMechanismDrivers}
-            neutron::plugins::ml2::type_drivers:
-              str_replace:
-                template: DRIVERS
-                params:
-                  DRIVERS: {get_param: NeutronTypeDrivers}
-            neutron::plugins::ml2::flat_networks:
-              str_replace:
-                template: NETWORKS
-                params:
-                  NETWORKS: {get_param: NeutronFlatNetworks}
-            neutron::plugins::ml2::extension_drivers:
-              str_replace:
-                template: PLUGIN_EXTENSIONS
-                params:
-                  PLUGIN_EXTENSIONS: {get_param: NeutronPluginExtensions}
-            neutron::plugins::ml2::network_vlan_ranges:
-              str_replace:
-                template: RANGES
-                params:
-                  RANGES: {get_param: NeutronNetworkVLANRanges}
-            neutron::plugins::ml2::tunnel_id_ranges:
-              str_replace:
-                template: RANGES
-                params:
-                  RANGES: {get_param: NeutronTunnelIdRanges}
-            neutron::plugins::ml2::vni_ranges:
-              str_replace:
-                template: RANGES
-                params:
-                  RANGES: {get_param: NeutronVniRanges}
-            neutron::plugins::ml2::tenant_network_types:
-              str_replace:
-                template: TYPES
-                params:
-                  TYPES: {get_param: NeutronNetworkType}
+          - neutron::plugins::ml2::mechanism_drivers: {get_param: NeutronMechanismDrivers}
+            neutron::plugins::ml2::type_drivers: {get_param: NeutronTypeDrivers}
+            neutron::plugins::ml2::flat_networks: {get_param: NeutronFlatNetworks}
+            neutron::plugins::ml2::extension_drivers: {get_param: NeutronPluginExtensions}
+            neutron::plugins::ml2::network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
+            neutron::plugins::ml2::tunnel_id_ranges: {get_param: NeutronTunnelIdRanges}
+            neutron::plugins::ml2::vni_ranges: {get_param: NeutronVniRanges}
+            neutron::plugins::ml2::tenant_network_types: {get_param: NeutronNetworkType}
             neutron::plugins::ml2::supported_pci_vendor_devs: {get_param: NeutronSupportedPCIVendorDevs}
 
       step_config: |
index 838ec5e..e09cd70 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron Nuage plugin
index 098c9d0..976e5f1 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron Opencontrail plugin
index 30af8a3..bd07807 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron Plumgrid plugin
@@ -100,6 +100,8 @@ outputs:
               - '@'
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/ovs_neutron'
+              - '?bind_address='
+              - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
         neutron::plugins::plumgrid::controller_priv_host: {get_param: [EndpointMap, KeystoneAdmin, host]}
         neutron::plugins::plumgrid::admin_password: {get_param: AdminPassword}
         neutron::plugins::plumgrid::metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
index 44f7f24..d3c82d8 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Neutron SR-IOV nic agent configured with Puppet
@@ -25,6 +25,7 @@ parameters:
       All physical networks listed in network_vlan_ranges
       on the server should have mappings to appropriate
       interfaces on each agent.
+      Example "tenant0:ens2f0,tenant1:ens2f1"
     type: comma_delimited_list
     default: ""
   NeutronExcludeDevices:
@@ -40,8 +41,8 @@ parameters:
   NeutronSriovNumVFs:
     description: >
       Provide the list of VFs to be reserved for each SR-IOV interface.
-      Format "<interface_name1>:<numvfs1>","<interface_name2>:<numvfs2>"
-      Example "eth1:4096","eth2:128"
+      Format "<interface_name1>:<numvfs1>,<interface_name2>:<numvfs2>"
+      Example "eth1:4096,eth2:128"
     type: comma_delimited_list
     default: ""
 
index 49bd84b..d2ca841 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack Nova API service configured with Puppet
@@ -87,8 +87,8 @@ outputs:
         map_merge:
         - get_attr: [NovaBase, role_data, config_settings]
         - get_attr: [ApacheServiceBase, role_data, config_settings]
-        - nova::cron::archive_deleted_rows::hour: '"*/12"'
-          nova::cron::archive_deleted_rows::destination: '"/dev/null"'
+        - nova::cron::archive_deleted_rows::hour: '*/12'
+          nova::cron::archive_deleted_rows::destination: '/dev/null'
           tripleo.nova_api.firewall_rules:
             '113 nova_api':
               dport:
@@ -108,21 +108,21 @@ outputs:
           nova::api::api_bind_address:
             str_replace:
               template:
-                '"%{::fqdn_$NETWORK}"'
+                "%{hiera('fqdn_$NETWORK')}"
               params:
                 $NETWORK: {get_param: [ServiceNetMap, NovaApiNetwork]}
           nova::api::service_name: 'httpd'
-          nova::wsgi::apache::ssl: {get_param: EnableInternalTLS}
+          nova::wsgi::apache_api::ssl: {get_param: EnableInternalTLS}
           # NOTE: bind IP is found in Heat replacing the network name with the local node IP
           # for the given network; replacement examples (eg. for internal_api):
           # internal_api -> IP
           # internal_api_uri -> [IP]
           # internal_api_subnet - > IP/CIDR
-          nova::wsgi::apache::bind_host: {get_param: [ServiceNetMap, NovaApiNetwork]}
-          nova::wsgi::apache::servername:
+          nova::wsgi::apache_api::bind_host: {get_param: [ServiceNetMap, NovaApiNetwork]}
+          nova::wsgi::apache_api::servername:
             str_replace:
               template:
-                '"%{::fqdn_$NETWORK}"'
+                "%{hiera('fqdn_$NETWORK')}"
               params:
                 $NETWORK: {get_param: [ServiceNetMap, NovaApiNetwork]}
           nova::api::neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
@@ -133,10 +133,27 @@ outputs:
           - nova_workers_zero
           - {}
           - nova::api::osapi_compute_workers: {get_param: NovaWorkers}
-            nova::wsgi::apache::workers: {get_param: NovaWorkers}
+            nova::wsgi::apache_api::workers: {get_param: NovaWorkers}
       step_config: |
         include tripleo::profile::base::nova::api
       service_config_settings:
+        mysql:
+          map_merge:
+          - {get_attr: [NovaBase, role_data, service_config_settings, mysql]}
+          - nova::db::mysql::password: {get_param: NovaPassword}
+            nova::db::mysql::user: nova
+            nova::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
+            nova::db::mysql::dbname: nova
+            nova::db::mysql::allowed_hosts:
+              - '%'
+              - "%{hiera('mysql_bind_host')}"
+            nova::db::mysql_api::password: {get_param: NovaPassword}
+            nova::db::mysql_api::user: nova_api
+            nova::db::mysql_api::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
+            nova::db::mysql_api::dbname: nova_api
+            nova::db::mysql_api::allowed_hosts:
+              - '%'
+              - "%{hiera('mysql_bind_host')}"
         keystone:
           nova::keystone::auth::tenant: 'service'
           nova::keystone::auth::public_url: {get_param: [EndpointMap, NovaPublic, uri]}
@@ -144,18 +161,3 @@ outputs:
           nova::keystone::auth::admin_url: {get_param: [EndpointMap, NovaAdmin, uri]}
           nova::keystone::auth::password: {get_param: NovaPassword}
           nova::keystone::auth::region: {get_param: KeystoneRegion}
-        mysql:
-          nova::db::mysql::password: {get_param: NovaPassword}
-          nova::db::mysql::user: nova
-          nova::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
-          nova::db::mysql::dbname: nova
-          nova::db::mysql::allowed_hosts:
-            - '%'
-            - "%{hiera('mysql_bind_host')}"
-          nova::db::mysql_api::password: {get_param: NovaPassword}
-          nova::db::mysql_api::user: nova_api
-          nova::db::mysql_api::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
-          nova::db::mysql_api::dbname: nova_api
-          nova::db::mysql_api::allowed_hosts:
-            - '%'
-            - "%{hiera('mysql_bind_host')}"
index 74a95d2..bf8e46b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack Nova base service. Shared for all Nova services.
@@ -90,6 +90,8 @@ outputs:
                 - '@'
                 - {get_param: [EndpointMap, MysqlInternal, host]}
                 - '/nova'
+                - '?bind_address='
+                - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
           nova::api_database_connection:
             list_join:
               - ''
@@ -99,6 +101,8 @@ outputs:
                 - '@'
                 - {get_param: [EndpointMap, MysqlInternal, host]}
                 - '/nova_api'
+                - '?bind_address='
+                - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
           nova::debug: {get_param: Debug}
           nova::purge_config: {get_param: EnableConfigPurge}
           nova::network::neutron::neutron_project_name: 'service'
@@ -109,7 +113,7 @@ outputs:
           nova::network::neutron::neutron_auth_url: {get_param: [EndpointMap, KeystoneV3Admin, uri]}
           nova::rabbit_heartbeat_timeout_threshold: 60
           nova::cinder_catalog_info: 'volumev2:cinderv2:internalURL'
-          nova::host: '"%{::fqdn}"'    # NOTE: extra quoting is needed.
+          nova::host: '%{::fqdn}'
           nova::notify_on_state_change: 'vm_and_task_state'
           nova::notification_driver: messagingv2
           nova::network::neutron::neutron_auth_type: 'v3password'
@@ -123,3 +127,13 @@ outputs:
           - compute_upgrade_level_empty
           - {}
           - nova::upgrade_level_compute: {get_param: UpgradeLevelNovaCompute}
+      service_config_settings:
+        mysql:
+          # NOTE(aschultz): this should be configurable if/when we support more
+          # complex cell v2 configurations. For now, this is the default cell
+          # created for the cell v2 configuration
+          nova::db::mysql_api::setup_cell0: true
+          nova::rabbit_password: {get_param: RabbitPassword}
+          nova::rabbit_userid: {get_param: RabbitUserName}
+          nova::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
+          nova::rabbit_port: {get_param: RabbitClientPort}
index f7f2510..2312b63 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Nova Compute service configured with Puppet
@@ -52,7 +52,7 @@ parameters:
       For different formats, refer to the nova.conf documentation for
       pci_passthrough_whitelist configuration
     type: json
-    default: ''
+    default: {}
   NovaVcpuPinSet:
     description: >
       A list or range of physical CPU cores to reserve for virtual machine
@@ -97,11 +97,7 @@ outputs:
         map_merge:
           - get_attr: [NovaBase, role_data, config_settings]
           - nova::compute::libvirt::manage_libvirt_services: false
-            nova::compute::pci_passthrough:
-              str_replace:
-                template: "'JSON_PARAM'"
-                params:
-                  JSON_PARAM: {get_param: NovaPCIPassthrough}
+            nova::compute::pci_passthrough: {get_param: NovaPCIPassthrough}
             nova::compute::vcpu_pin_set: {get_param: NovaVcpuPinSet}
             nova::compute::reserved_host_memory: {get_param: NovaReservedHostMemory}
             # we manage migration in nova common puppet profile
@@ -117,7 +113,7 @@ outputs:
               - '.'
               - - 'client'
                 - {get_param: CephClientUserName}
-            nova::compute::rbd::libvirt_rbd_secret_uuid: '"%{hiera(\"ceph::profile::params::fsid\")}"'
+            nova::compute::rbd::libvirt_rbd_secret_uuid: "%{hiera('ceph::profile::params::fsid')}"
             nova::compute::instance_usage_audit: true
             nova::compute::instance_usage_audit_period: 'hour'
             nova::compute::rbd::ephemeral_storage: {get_param: NovaEnableRbdBackend}
index a10d956..b96bf6e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack Nova Conductor service configured with Puppet
index 85e6042..79969de 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Nova Consoleauth service configured with Puppet
index bf7639d..306c6b6 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Nova Compute service configured with Puppet and using Ironic
index 70774ba..a9b2b3f 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Libvirt service configured with Puppet
@@ -21,6 +21,14 @@ parameters:
   NovaComputeLibvirtType:
     type: string
     default: kvm
+  LibvirtEnabledPerfEvents:
+    type: comma_delimited_list
+    default: []
+    description: This is a performance event list which could be used as monitor.
+                 For example - ``enabled_perf_events = cmt, mbml, mbmt``
+                 The supported events list can be found in
+                 https://libvirt.org/html/libvirt-libvirt-domain.html ,
+                 which you may need to search key words ``VIR_PERF_PARAM_*``
   MonitoringSubscriptionNovaLibvirt:
     default: 'overcloud-nova-libvirt'
     type: string
@@ -50,6 +58,10 @@ outputs:
             tripleo::profile::base::nova::libvirt_enabled: true
             nova::compute::libvirt::services::libvirt_virt_type: {get_param: NovaComputeLibvirtType}
             nova::compute::libvirt::libvirt_virt_type: {get_param: NovaComputeLibvirtType}
+            nova::compute::libvirt::libvirt_enabled_perf_events: {get_param: LibvirtEnabledPerfEvents}
+            nova::compute::libvirt::qemu::configure_qemu: true
+            nova::compute::libvirt::qemu::max_files: 32768
+            nova::compute::libvirt::qemu::max_processes: 131072
             tripleo.nova_libvirt.firewall_rules:
               '200 nova_libvirt':
                 dport:
index 40931da..376f95b 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack Nova API service configured with Puppet
index d4e5fff..353a75a 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Nova Scheduler service configured with Puppet
index e6b0703..bf24494 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Nova Vncproxy service configured with Puppet
index 253d63e..0ed9d20 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenDaylight SDN Controller.
@@ -17,10 +17,6 @@ parameters:
     type: string
     description: The password for the opendaylight server.
     hidden: true
-  OpenDaylightEnableL3:
-    description: Knob to enable/disable ODL L3
-    type: string
-    default: 'no'
   OpenDaylightEnableDHCP:
     description: Knob to enable/disable ODL DHCP Server
     type: boolean
@@ -56,9 +52,14 @@ outputs:
         opendaylight::odl_rest_port: {get_param: OpenDaylightPort}
         opendaylight::username: {get_param: OpenDaylightUsername}
         opendaylight::password: {get_param: OpenDaylightPassword}
-        opendaylight::enable_l3: {get_param: OpenDaylightEnableL3}
         opendaylight::extra_features: {get_param: OpenDaylightFeatures}
         opendaylight::enable_dhcp: {get_param: OpenDaylightEnableDHCP}
         opendaylight::odl_bind_ip: {get_param: [ServiceNetMap, OpendaylightApiNetwork]}
+        tripleo.opendaylight_api.firewall_rules:
+              '137 opendaylight api':
+                dport:
+                  - {get_param: OpenDaylightPort}
+                  - 6640
+                  - 6653
       step_config: |
         include tripleo::profile::base::neutron::opendaylight
index 907ecdd..cfec3c4 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenDaylight OVS Configuration.
@@ -8,6 +8,15 @@ parameters:
     default: 8081
     description: Set opendaylight service port
     type: number
+  OpenDaylightUsername:
+    default: 'admin'
+    description: The username for the opendaylight server.
+    type: string
+  OpenDaylightPassword:
+    default: 'admin'
+    type: string
+    description: The password for the opendaylight server.
+    hidden: true
   OpenDaylightConnectionProtocol:
     description: L7 protocol used for REST access
     type: string
@@ -46,6 +55,8 @@ outputs:
       service_name: opendaylight_ovs
       config_settings:
         opendaylight::odl_rest_port: {get_param: OpenDaylightPort}
+        opendaylight::username: {get_param: OpenDaylightUsername}
+        opendaylight::password: {get_param: OpenDaylightPassword}
         opendaylight_check_url: {get_param: OpenDaylightCheckURL}
         opendaylight::nb_connection_protocol: {get_param: OpenDaylightConnectionProtocol}
         neutron::agents::ml2::ovs::local_ip: {get_param: [ServiceNetMap, NeutronTenantNetwork]}
diff --git a/puppet/services/ovn-dbs.yaml b/puppet/services/ovn-dbs.yaml
new file mode 100644 (file)
index 0000000..302628d
--- /dev/null
@@ -0,0 +1,40 @@
+heat_template_version: 2016-04-08
+
+description: >
+  OVN databases 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
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    type: json
+  OVNNorthboundServerPort:
+    description: Port of the OVN Northbound DB server
+    type: number
+    default: 6641
+  OVNSouthboundServerPort:
+    description: Port of the OVN Southbound DB server
+    type: number
+    default: 6642
+
+outputs:
+  role_data:
+    description: Role data for the OVN northd service
+    value:
+      service_name: ovn_dbs
+      config_settings:
+          ovn::northbound::port: {get_param: OVNNorthboundServerPort}
+          ovn::southbound::port: {get_param: OVNSouthboundServerPort}
+          ovn::northd::dbs_listen_ip: {get_param: [ServiceNetMap, OvnDbsNetwork]}
+      step_config: |
+        include ::tripleo::profile::base::neutron::ovn_northd
index abfb9c8..9adf1bd 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Pacemaker service configured with Puppet
diff --git a/puppet/services/pacemaker/ceilometer-agent-central.yaml b/puppet/services/pacemaker/ceilometer-agent-central.yaml
deleted file mode 100644 (file)
index 5dcb62c..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Ceilometer Central Agent service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-  MonitoringSubscriptionCeilometerCentral:
-    default: 'overcloud-ceilometer-agent-central'
-    type: string
-
-resources:
-  CeilometerServiceBase:
-    type: ../ceilometer-agent-central.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Ceilometer Central Agent pacemaker role.
-    value:
-      service_name: ceilometer_agent_central
-      monitoring_subscription: {get_param: MonitoringSubscriptionCeilometerCentral}
-      config_settings:
-        map_merge:
-          - get_attr: [CeilometerServiceBase, role_data, config_settings]
-          - ceilometer::agent::central::manage_service: false
-            ceilometer::agent::central::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::ceilometer::agent::central
diff --git a/puppet/services/pacemaker/ceilometer-agent-notification.yaml b/puppet/services/pacemaker/ceilometer-agent-notification.yaml
deleted file mode 100644 (file)
index dbe1449..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Ceilometer Notification Agent service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-  MonitoringSubscriptionCeilometerNotification:
-    default: 'overcloud-ceilometer-agent-notification'
-    type: string
-
-resources:
-  CeilometerServiceBase:
-    type: ../ceilometer-agent-notification.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Ceilometer Notification Agent pacemaker role.
-    value:
-      service_name: ceilometer_agent_notification
-      monitoring_subscription: {get_param: MonitoringSubscriptionCeilometerNotification}
-      config_settings:
-        map_merge:
-          - get_attr: [CeilometerServiceBase, role_data, config_settings]
-          - ceilometer::agent::notification::manage_service: false
-            ceilometer::agent::notification::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::ceilometer::agent::notification
diff --git a/puppet/services/pacemaker/ceilometer-api.yaml b/puppet/services/pacemaker/ceilometer-api.yaml
deleted file mode 100644 (file)
index 4b6c18f..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Ceilometer API service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-  MonitoringSubscriptionCeilometerApi:
-    default: 'overcloud-ceilometer-api'
-    type: string
-
-resources:
-  CeilometerServiceBase:
-    type: ../ceilometer-api.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Ceilometer API pacemaker role.
-    value:
-      service_name: ceilometer_api
-      monitoring_subscription: {get_param: MonitoringSubscriptionCeilometerApi}
-      config_settings:
-        map_merge:
-          - get_attr: [CeilometerServiceBase, role_data, config_settings]
-          - ceilometer::api::manage_service: false
-            ceilometer::api::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::ceilometer::api
diff --git a/puppet/services/pacemaker/ceilometer-collector.yaml b/puppet/services/pacemaker/ceilometer-collector.yaml
deleted file mode 100644 (file)
index 4c91951..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Ceilometer Collector service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-  MonitoringSubscriptionCeilometerCollector:
-    default: 'overcloud-ceilometer-collector'
-    type: string
-
-resources:
-  CeilometerServiceBase:
-    type: ../ceilometer-collector.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Ceilometer Collector pacemaker role.
-    value:
-      service_name: ceilometer_collector
-      monitoring_subscription: {get_param: MonitoringSubscriptionCeilometerCollector}
-      config_settings:
-        map_merge:
-          - get_attr: [CeilometerServiceBase, role_data, config_settings]
-          - ceilometer::collector::manage_service: false
-            ceilometer::collector::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::ceilometer::collector
diff --git a/puppet/services/pacemaker/cinder-api.yaml b/puppet/services/pacemaker/cinder-api.yaml
deleted file mode 100644 (file)
index 6823789..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Cinder API service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  CinderApiBase:
-    type: ../cinder-api.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Cinder API role.
-    value:
-      service_name: cinder_api
-      monitoring_subscription: {get_attr: [CinderApiBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [CinderApiBase, role_data, logging_source]}
-      logging_groups: {get_attr: [CinderApiBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [CinderApiBase, role_data, config_settings]
-          - cinder::api::manage_service: false
-            cinder::api::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::cinder::api
index 2ebc768..e75ac97 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Cinder Backup service with Pacemaker configured with Puppet
diff --git a/puppet/services/pacemaker/cinder-scheduler.yaml b/puppet/services/pacemaker/cinder-scheduler.yaml
deleted file mode 100644 (file)
index 15e44be..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Cinder Scheduler service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  CinderSchedulerBase:
-    type: ../cinder-scheduler.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Cinder Scheduler role.
-    value:
-      service_name: cinder_scheduler
-      monitoring_subscription: {get_attr: [CinderSchedulerBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [CinderSchedulerBase, role_data, logging_source]}
-      logging_groups: {get_attr: [CinderSchedulerBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [CinderSchedulerBase, role_data, config_settings]
-          - cinder::scheduler::manage_service: false
-            cinder::scheduler::enabled: false
-      step_config:
-        include ::tripleo::profile::pacemaker::cinder::scheduler
index d91a018..bef47a5 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Cinder Volume service with Pacemaker configured with Puppet
diff --git a/puppet/services/pacemaker/core.yaml b/puppet/services/pacemaker/core.yaml
deleted file mode 100644 (file)
index 9eca1de..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Core (fake) service with Pacemaker 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
-  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 Core role.
-    value:
-      service_name: core
-      config_settings: {}
-      step_config: |
-        include ::tripleo::profile::pacemaker::core
\ No newline at end of file
diff --git a/puppet/services/pacemaker/database/mongodb.yaml b/puppet/services/pacemaker/database/mongodb.yaml
deleted file mode 100644 (file)
index 982b606..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  MongoDb service deployment using puppet
-
-parameters:
-  #Parameters not used EndpointMap
-  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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-  MongoDbBase:
-    type: ../../database/mongodb.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Service mongodb using composable services.
-    value:
-      service_name: mongodb
-      config_settings:
-        map_merge:
-          - get_attr: [MongoDbBase, role_data, config_settings]
-          - tripleo::profile::pacemaker::database::mongodb::mongodb_replset: {get_attr: [MongoDbBase, aux_parameters, rplset_name]}
-            mongodb::server::service_manage: False
-      step_config: |
-        include ::tripleo::profile::pacemaker::database::mongodb
index 7deaf0c..af95dbd 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   MySQL with Pacemaker service deployment using puppet
@@ -40,7 +40,7 @@ outputs:
           - tripleo::profile::pacemaker::database::mysql::bind_address:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, MysqlNetwork]}
             # NOTE: bind IP is found in Heat replacing the network name with the
index 196754e..e702d28 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Redis service configured with Puppet
diff --git a/puppet/services/pacemaker/glance-api.yaml b/puppet/services/pacemaker/glance-api.yaml
deleted file mode 100644 (file)
index 20a439f..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Glance API service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-  GlanceFilePcmkDevice:
-    default: ''
-    description: >
-      An exported storage device that should be mounted by Pacemaker
-      as Glance storage. Effective when GlanceFilePcmkManage is true.
-    type: string
-  GlanceFilePcmkFstype:
-    default: 'nfs'
-    description: >
-      Filesystem type for Pacemaker mount used as Glance storage.
-      Effective when GlanceFilePcmkManage is true.
-    type: string
-  GlanceFilePcmkManage:
-    default: false
-    description: >
-      Whether to make Glance file backend a mount managed by Pacemaker.
-      Effective when GlanceBackend is 'file'.
-    type: boolean
-  GlanceFilePcmkOptions:
-    default: ''
-    description: >
-      Mount options for Pacemaker mount used as Glance storage.
-      Effective when GlanceFilePcmkManage is true.
-    type: string
-
-resources:
-
-  GlanceApiBase:
-    type: ../glance-api.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Glance role.
-    value:
-      service_name: glance_api
-      monitoring_subscription: {get_attr: [GlanceApiBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [GlanceApiBase, role_data, logging_source]}
-      logging_groups: {get_attr: [GlanceApiBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [GlanceApiBase, role_data, config_settings]
-          - glance_file_pcmk_device: {get_param: GlanceFilePcmkDevice}
-            glance_file_pcmk_fstype: {get_param: GlanceFilePcmkFstype}
-            glance_file_pcmk_manage: {get_param: GlanceFilePcmkManage}
-            glance_file_pcmk_options: {get_param: GlanceFilePcmkOptions}
-            glance_file_pcmk_directory: '/var/lib/glance/images'
-            glance::api::manage_service: false
-            glance::api::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::glance
diff --git a/puppet/services/pacemaker/glance-registry.yaml b/puppet/services/pacemaker/glance-registry.yaml
deleted file mode 100644 (file)
index 41f89fd..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Glance Registry service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  GlanceRegistryBase:
-    type: ../glance-registry.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Glance role.
-    value:
-      service_name: glance_registry
-      monitoring_subscription: {get_attr: [GlanceRegistryBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [GlanceRegistryBase, role_data, logging_source]}
-      logging_groups: {get_attr: [GlanceRegistryBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [GlanceRegistryBase, role_data, config_settings]
-          - glance::registry::manage_service: false
-            glance::registry::enabled: false
-      # No puppet manifests since glance-registry is included in
-      # ::tripleo::profile::pacemaker::glance which is maintained alongside of
-      # pacemaker/glance-api.yaml.
-      step_config:
diff --git a/puppet/services/pacemaker/gnocchi-metricd.yaml b/puppet/services/pacemaker/gnocchi-metricd.yaml
deleted file mode 100644 (file)
index 0f36b5d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  Gnocchi 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-  MonitoringSubscriptionGnocchiMetricd:
-    default: 'overcloud-gnocchi-metricd'
-    type: string
-
-resources:
-  GnocchiServiceBase:
-    type: ../gnocchi-metricd.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Gnocchi role.
-    value:
-      service_name: gnocchi_metricd
-      monitoring_subscription: {get_param: MonitoringSubscriptionGnocchiMetricd}
-      config_settings:
-        map_merge:
-          - get_attr: [GnocchiServiceBase, role_data, config_settings]
-          - gnocchi::metricd::manage_service: false
-            gnocchi::metricd::enabled: false
-            tripleo::profile::pacemaker::gnocchi::gnocchi_indexer_backend: {get_attr: [GnocchiServiceBase, aux_parameters, gnocchi_indexer_backend]}
-
-      step_config: |
-        include ::tripleo::profile::pacemaker::gnocchi::metricd
diff --git a/puppet/services/pacemaker/gnocchi-statsd.yaml b/puppet/services/pacemaker/gnocchi-statsd.yaml
deleted file mode 100644 (file)
index b9afc59..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  Gnocchi 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-  MonitoringSubscriptionGnocchiStatsd:
-    default: 'overcloud-gnocchi-statsd'
-    type: string
-
-resources:
-  GnocchiServiceBase:
-    type: ../gnocchi-statsd.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Gnocchi role.
-    value:
-      service_name: gnocchi_statsd
-      monitoring_subscription: {get_param: MonitoringSubscriptionGnocchiStatsd}
-      config_settings:
-        map_merge:
-          - get_attr: [GnocchiServiceBase, role_data, config_settings]
-          - gnocchi::statsd::manage_service: false
-            gnocchi::statsd::enabled: false
-            tripleo::profile::pacemaker::gnocchi::gnocchi_indexer_backend: {get_attr: [GnocchiServiceBase, aux_parameters, gnocchi_indexer_backend]}
-      step_config: |
-        include ::tripleo::profile::pacemaker::gnocchi::statsd
index e4115d6..50da411 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   HAproxy service with Pacemaker configured with Puppet
diff --git a/puppet/services/pacemaker/heat-api-cfn.yaml b/puppet/services/pacemaker/heat-api-cfn.yaml
deleted file mode 100644 (file)
index dd25905..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  Openstack Heat CloudFormation API 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-  HeatApiCfnBase:
-    type: ../heat-api-cfn.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Heat CloudFormation API role.
-    value:
-      service_name: heat_api_cfn
-      monitoring_subscription: {get_attr: [HeatApiCfnBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [HeatApiCfnBase, role_data, logging_source]}
-      logging_groups: {get_attr: [HeatApiCfnBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [HeatApiCfnBase, role_data, config_settings]
-          - heat::api_cfn::manage_service: false
-            heat::api_cfn::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::heat::api_cfn
diff --git a/puppet/services/pacemaker/heat-api-cloudwatch.yaml b/puppet/services/pacemaker/heat-api-cloudwatch.yaml
deleted file mode 100644 (file)
index 18d2a0d..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  Openstack Heat CloudWatch API 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-  HeatApiCloudwatchBase:
-    type: ../heat-api-cloudwatch.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Heat Cloudwatch API role.
-    value:
-      service_name: heat_api_cloudwatch
-      monitoring_subscription: {get_attr: [HeatApiCloudwatchBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [HeatApiCloudwatchBase, role_data, logging_source]}
-      logging_groups: {get_attr: [HeatApiCloudwatchBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-           - get_attr: [HeatApiCloudwatchBase, role_data, config_settings]
-           - heat::api_cloudwatch::manage_service: false
-             heat::api_cloudwatch::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::heat::api_cloudwatch
diff --git a/puppet/services/pacemaker/heat-api.yaml b/puppet/services/pacemaker/heat-api.yaml
deleted file mode 100644 (file)
index 43122cb..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  Openstack Heat API 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-  HeatApiBase:
-    type: ../heat-api.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Heat API role.
-    value:
-      service_name: heat_api
-      monitoring_subscription: {get_attr: [HeatApiBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [HeatApiBase, role_data, logging_source]}
-      logging_groups: {get_attr: [HeatApiBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [HeatApiBase, role_data, config_settings]
-          - heat::api::manage_service: false
-            heat::api::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::heat::api
diff --git a/puppet/services/pacemaker/heat-engine.yaml b/puppet/services/pacemaker/heat-engine.yaml
deleted file mode 100644 (file)
index 54bfdad..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  Openstack Heat Engine 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-  HeatEngineBase:
-    type: ../heat-engine.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-
-outputs:
-  role_data:
-    description: Role data for the Heat engine role.
-    value:
-      service_name: heat_engine
-      monitoring_subscription: {get_attr: [HeatEngineBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [HeatEngineBase, role_data, logging_source]}
-      logging_groups: {get_attr: [HeatEngineBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [HeatEngineBase, role_data, config_settings]
-          - heat::engine::manage_service: false
-            heat::engine::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::heat::engine
diff --git a/puppet/services/pacemaker/horizon.yaml b/puppet/services/pacemaker/horizon.yaml
deleted file mode 100644 (file)
index 18de23a..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  Horizon service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  HorizonBase:
-    type: ../horizon.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Horizon role.
-    value:
-      service_name: horizon
-      monitoring_subscription: {get_attr: [HorizonBase, role_data, monitoring_subscription]}
-      config_settings:
-        get_attr: [HorizonBase, role_data, config_settings]
-      step_config: |
-        include ::tripleo::profile::base::horizon
-        include ::tripleo::profile::pacemaker::apache
diff --git a/puppet/services/pacemaker/keystone.yaml b/puppet/services/pacemaker/keystone.yaml
deleted file mode 100644 (file)
index 908b9bb..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Keystone service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  KeystoneServiceBase:
-    type: ../keystone.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Keystone pacemaker role.
-    value:
-      service_name: keystone
-      monitoring_subscription: {get_attr: [KeystoneServiceBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [KeystoneServiceBase, role_data, logging_source]}
-      logging_groups: {get_attr: [KeystoneServiceBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [KeystoneServiceBase, role_data, config_settings]
-          - keystone::manage_service: false
-            keystone::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::keystone
index cabc31a..ddc13df 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   The manila-share service with Pacemaker configured with Puppet
diff --git a/puppet/services/pacemaker/memcached.yaml b/puppet/services/pacemaker/memcached.yaml
deleted file mode 100644 (file)
index 04b895b..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  Mecached service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  MemcachedServiceBase:
-    type: ../memcached.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Memcached pacemaker role.
-    value:
-      service_name: memcached
-      monitoring_subscription: {get_attr: [MemcachedServiceBase, role_data, monitoring_subscription]}
-      config_settings:
-        map_merge:
-          - get_attr: [MemcachedServiceBase, role_data, config_settings]
-          - memcached::service_manage: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::memcached
diff --git a/puppet/services/pacemaker/neutron-dhcp.yaml b/puppet/services/pacemaker/neutron-dhcp.yaml
deleted file mode 100644 (file)
index 7fca73d..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Neutron DHCP service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NeutronDhcpBase:
-    type: ../neutron-dhcp.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Neutron DHCP role.
-    value:
-      service_name: neutron_dhcp
-      monitoring_subscription: {get_attr: [NeutronDhcpBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [NeutronDhcpBase, role_data, logging_source]}
-      logging_groups: {get_attr: [NeutronDhcpBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [NeutronDhcpBase, role_data, config_settings]
-          - tripleo::profile::pacemaker::neutron::enable_dhcp: True
-            neutron::agents::dhcp::enabled: false
-            neutron::agents::dhcp::manage_service: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::neutron::dhcp
diff --git a/puppet/services/pacemaker/neutron-l3.yaml b/puppet/services/pacemaker/neutron-l3.yaml
deleted file mode 100644 (file)
index cdb87f5..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Neutron L3 service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NeutronL3Base:
-    type: ../neutron-l3.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Neutron L3 role.
-    value:
-      service_name: neutron_l3
-      monitoring_subscription: {get_attr: [NeutronL3Base, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [NeutronL3Base, role_data, logging_source]}
-      logging_groups: {get_attr: [NeutronL3Base, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [NeutronL3Base, role_data, config_settings]
-          - tripleo::profile::pacemaker::neutron::enable_l3: True
-            neutron::agents::l3::enabled: false
-            neutron::agents::l3::manage_service: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::neutron::l3
diff --git a/puppet/services/pacemaker/neutron-metadata.yaml b/puppet/services/pacemaker/neutron-metadata.yaml
deleted file mode 100644 (file)
index 49a31eb..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Neutron Metadata service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NeutronMetadataBase:
-    type: ../neutron-metadata.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Neutron Metadata role.
-    value:
-      service_name: neutron_metadata
-      monitoring_subscription: {get_attr: [NeutronMetadataBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [NeutronMetadataBase, role_data, logging_source]}
-      logging_groups: {get_attr: [NeutronMetadataBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [NeutronMetadataBase, role_data, config_settings]
-          - tripleo::profile::pacemaker::neutron::enable_metadata: True
-      step_config: |
-        include ::tripleo::profile::pacemaker::neutron::metadata
diff --git a/puppet/services/pacemaker/neutron-midonet.yaml b/puppet/services/pacemaker/neutron-midonet.yaml
deleted file mode 100644 (file)
index fdd5daf..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Neutron Midonet with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NeutronMidonetBase:
-    type: ../neutron-midonet.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Neutron Midonet plugin.
-    value:
-      service_name: neutron_midonet
-      monitoring_subscription: {get_attr: [NeutronMidonetBase, role_data, monitoring_subscription]}
-      config_settings:
-        map_merge:
-          - get_attr: [NeutronMidonetBase, role_data, config_settings]
-      step_config: |
-        include ::tripleo::profile::pacemaker::neutron::plugins::midonet
diff --git a/puppet/services/pacemaker/neutron-ovs-agent.yaml b/puppet/services/pacemaker/neutron-ovs-agent.yaml
deleted file mode 100644 (file)
index a2bd7c8..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Neutron OVS agent with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NeutronOvsBase:
-    type: ../neutron-ovs-agent.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Neutron OVS agent service.
-    value:
-      service_name: neutron_ovs_agent
-      monitoring_subscription: {get_attr: [NeutronOvsBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [NeutronOvsBase, role_data, logging_source]}
-      logging_groups: {get_attr: [NeutronOvsBase, role_data, logging_groups]}
-      config_settings:
-        get_attr: [NeutronOvsBase, role_data, config_settings]
-      step_config: |
-        include ::tripleo::profile::pacemaker::neutron::ovs
diff --git a/puppet/services/pacemaker/neutron-plugin-ml2.yaml b/puppet/services/pacemaker/neutron-plugin-ml2.yaml
deleted file mode 100644 (file)
index 234f116..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Neutron ML2 Plugin with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NeutronMl2Base:
-    type: ../neutron-plugin-ml2.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Neutron ML2 plugin.
-    value:
-      service_name: neutron_plugin_ml2
-      config_settings:
-        map_merge:
-          - get_attr: [NeutronMl2Base, role_data, config_settings]
-          - neutron::agents::ml2::ovs::enabled: false
-            neutron::agents::ml2::ovs::manage_service: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::neutron::plugins::ml2
diff --git a/puppet/services/pacemaker/neutron-plugin-nuage.yaml b/puppet/services/pacemaker/neutron-plugin-nuage.yaml
deleted file mode 100644 (file)
index 9fca2cc..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Neutron Nuage Plugin with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NeutronPluginNuageBase:
-    type: ../neutron-plugin-nuage.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Neutron Nuage plugin.
-    value:
-      service_name: neutron_plugin_nuage
-      config_settings:
-        map_merge:
-          - get_attr: [NeutronPluginNuageBase, role_data, config_settings]
-      step_config: |
-        include ::tripleo::profile::pacemaker::neutron::plugins::nuage
diff --git a/puppet/services/pacemaker/neutron-plugin-opencontrail.yaml b/puppet/services/pacemaker/neutron-plugin-opencontrail.yaml
deleted file mode 100644 (file)
index 80d6ed9..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Neutron OpenContrail Plugin with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NeutronPluginOpenContrail:
-    type: ../neutron-plugin-nuage.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Neutron OpenContrail plugin.
-    value:
-      service_name: neutron_plugin_opencontrail
-      config_settings:
-        map_merge:
-          - get_attr: [NeutronPluginOpenContrail, role_data, config_settings]
-      step_config: |
-        include ::tripleo::profile::pacemaker::neutron::plugins::opencontrail
diff --git a/puppet/services/pacemaker/neutron-plugin-plumgrid.yaml b/puppet/services/pacemaker/neutron-plugin-plumgrid.yaml
deleted file mode 100644 (file)
index 5dd4e58..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Neutron PLUMgrid Plugin with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NeutronPluginPlumgridBase:
-    type: ../neutron-plugin-ml2.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Neutron PLUMgrid plugin.
-    value:
-      service_name: neutron_plugin_plumgrid
-      config_settings:
-        map_merge:
-          - get_attr: [NeutronPluginPlumgridBase, role_data, config_settings]
-      step_config: |
-        include ::tripleo::profile::pacemaker::neutron::plugins::plumgrid
diff --git a/puppet/services/pacemaker/neutron-server.yaml b/puppet/services/pacemaker/neutron-server.yaml
deleted file mode 100644 (file)
index 33bc2d9..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Neutron Server with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-  NeutronL3HA:
-    default: true
-    description: Whether to enable HA for virtual routers
-    type: boolean
-
-resources:
-
-  NeutronServerBase:
-    type: ../neutron-server.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Neutron Server.
-    value:
-      service_name: neutron_server
-      monitoring_subscription: {get_attr: [NeutronServerBase, role_data, monitoring_subscription]}
-      config_settings:
-        map_merge:
-          - get_attr: [NeutronServerBase, role_data, config_settings]
-          - neutron::server::enabled: false
-            neutron::server::manage_service: false
-            neutron::server::l3_ha: {get_param: NeutronL3HA}
-      step_config: |
-        include ::tripleo::profile::pacemaker::neutron::server
diff --git a/puppet/services/pacemaker/nova-api.yaml b/puppet/services/pacemaker/nova-api.yaml
deleted file mode 100644 (file)
index b86e438..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Nova API service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NovaApiBase:
-    type: ../nova-api.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Nova API role.
-    value:
-      service_name: nova_api
-      monitoring_subscription: {get_attr: [NovaApiBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [NovaApiBase, role_data, logging_source]}
-      logging_groups: {get_attr: [NovaApiBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [NovaApiBase, role_data, config_settings]
-          - nova::api::manage_service: false
-            nova::api::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::nova::api
diff --git a/puppet/services/pacemaker/nova-conductor.yaml b/puppet/services/pacemaker/nova-conductor.yaml
deleted file mode 100644 (file)
index a0a766e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Nova Conductor service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NovaConductorBase:
-    type: ../nova-conductor.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Nova Conductor role.
-    value:
-      service_name: nova_conductor
-      monitoring_subscription: {get_attr: [NovaConductorBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [NovaConductorBase, role_data, logging_source]}
-      logging_groups: {get_attr: [NovaConductorBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [NovaConductorBase, role_data, config_settings]
-          - nova::conductor::manage_service: false
-            nova::conductor::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::nova::conductor
diff --git a/puppet/services/pacemaker/nova-consoleauth.yaml b/puppet/services/pacemaker/nova-consoleauth.yaml
deleted file mode 100644 (file)
index 5d51eb4..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Nova Consoleauth service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NovaConsoleauthBase:
-    type: ../nova-consoleauth.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Nova Consoleauth role.
-    value:
-      service_name: nova_consoleauth
-      monitoring_subscription: {get_attr: [NovaConsoleauthBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [NovaConsoleauthBase, role_data, logging_source]}
-      logging_groups: {get_attr: [NovaConsoleauthBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [NovaConsoleauthBase, role_data, config_settings]
-          - nova::consoleauth::manage_service: false
-            nova::consoleauth::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::nova::consoleauth
diff --git a/puppet/services/pacemaker/nova-scheduler.yaml b/puppet/services/pacemaker/nova-scheduler.yaml
deleted file mode 100644 (file)
index 8828ee1..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Nova Scheduler service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NovaSchedulerBase:
-    type: ../nova-scheduler.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Nova Scheduler role.
-    value:
-      service_name: nova_scheduler
-      monitoring_subscription: {get_attr: [NovaSchedulerBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [NovaSchedulerBase, role_data, logging_source]}
-      logging_groups: {get_attr: [NovaSchedulerBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [NovaSchedulerBase, role_data, config_settings]
-          - nova::scheduler::manage_service: false
-            nova::scheduler::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::nova::scheduler
diff --git a/puppet/services/pacemaker/nova-vnc-proxy.yaml b/puppet/services/pacemaker/nova-vnc-proxy.yaml
deleted file mode 100644 (file)
index ebe84a0..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Nova Vncproxy service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  NovaVncproxyBase:
-    type: ../nova-vnc-proxy.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Nova Vncproxy role.
-    value:
-      service_name: nova_vnc_proxy
-      monitoring_subscription: {get_attr: [NovaVncproxyBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [NovaVncproxyBase, role_data, logging_source]}
-      logging_groups: {get_attr: [NovaVncproxyBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [NovaVncproxyBase, role_data, config_settings]
-          - nova::vncproxy::manage_service: false
-            nova::vncproxy::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::nova::vncproxy
index f3fa2d2..03c2c83 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   RabbitMQ service with Pacemaker configured with Puppet
diff --git a/puppet/services/pacemaker/sahara-api.yaml b/puppet/services/pacemaker/sahara-api.yaml
deleted file mode 100644 (file)
index 3dfb7d9..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Sahara API service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  SaharaApiBase:
-    type: ../sahara-api.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Sahara API role.
-    value:
-      service_name: sahara_api
-      monitoring_subscription: {get_attr: [SaharaApiBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [SaharaApiBase, role_data, logging_source]}
-      logging_groups: {get_attr: [SaharaApiBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [SaharaApiBase, role_data, config_settings]
-          - sahara::service::api::manage_service: false
-            sahara::service::api::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::sahara::api
diff --git a/puppet/services/pacemaker/sahara-engine.yaml b/puppet/services/pacemaker/sahara-engine.yaml
deleted file mode 100644 (file)
index a06d11b..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-heat_template_version: 2016-04-08
-
-description: >
-  OpenStack Sahara Engine service with Pacemaker 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
-  EndpointMap:
-    default: {}
-    description: Mapping of service endpoint -> protocol. Typically set
-                 via parameter_defaults in the resource registry.
-    type: json
-
-resources:
-
-  SaharaEngineBase:
-    type: ../sahara-engine.yaml
-    properties:
-      ServiceNetMap: {get_param: ServiceNetMap}
-      DefaultPasswords: {get_param: DefaultPasswords}
-      EndpointMap: {get_param: EndpointMap}
-
-outputs:
-  role_data:
-    description: Role data for the Sahara Engine role.
-    value:
-      service_name: sahara_engine
-      monitoring_subscription: {get_attr: [SaharaEngineBase, role_data, monitoring_subscription]}
-      logging_source: {get_attr: [SaharaEngineBase, role_data, logging_source]}
-      logging_groups: {get_attr: [SaharaEngineBase, role_data, logging_groups]}
-      config_settings:
-        map_merge:
-          - get_attr: [SaharaEngineBase, role_data, config_settings]
-          - sahara::service::engine::manage_service: false
-            sahara::service::engine::enabled: false
-      step_config: |
-        include ::tripleo::profile::pacemaker::sahara::engine
index 63f631a..06284fb 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Panko API service configured with Puppet
@@ -55,7 +55,7 @@ outputs:
             panko::wsgi::apache::servername:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, PankoApiNetwork]}
             panko::api::service_name: 'httpd'
@@ -68,7 +68,7 @@ outputs:
             panko::api::host:
               str_replace:
                 template:
-                  '"%{::fqdn_$NETWORK}"'
+                  "%{hiera('fqdn_$NETWORK')}"
                 params:
                   $NETWORK: {get_param: [ServiceNetMap, PankoApiNetwork]}
             # NOTE: bind IP is found in Heat replacing the network name with the
index 32754a5..6e25d79 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Panko service configured with Puppet
@@ -37,7 +37,6 @@ outputs:
     value:
       service_name: panko_base
       config_settings:
-        panko_redis_password: {get_param: RedisPassword}
         panko::db::database_connection:
           list_join:
             - ''
@@ -47,6 +46,8 @@ outputs:
               - '@'
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/panko'
+              - '?bind_address='
+              - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
         panko::debug: {get_param: Debug}
         panko::auth::auth_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
         panko::keystone::authtoken::project_name: 'service'
index 44a09a4..5526a6f 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   RabbitMQ service configured with Puppet
@@ -69,10 +69,13 @@ outputs:
         rabbitmq::delete_guest_user: false
         rabbitmq::wipe_db_on_cookie_change: true
         rabbitmq::port: '5672'
+        rabbitmq::package_provider: yum
         rabbitmq::package_source: undef
         rabbitmq::repos_ensure: false
         rabbitmq::tcp_keepalive: true
         rabbitmq_environment:
+          NODE_PORT: ''
+          NODE_IP_ADDRESS: ''
           RABBITMQ_NODENAME: "rabbit@%{::hostname}"
           RABBITMQ_SERVER_ERL_ARGS: '"+K true +P 1048576 -kernel inet_default_connect_options [{nodelay,true},{raw,6,18,<<5000:64/native>>}] -kernel inet_default_listen_options [{raw,6,18,<<5000:64/native>>}]"'
         rabbitmq_kernel_variables:
@@ -95,8 +98,15 @@ outputs:
         # internal_api -> IP
         # internal_api_uri -> [IP]
         # internal_api_subnet - > IP/CIDR
-        rabbitmq::node_ip_address: {get_param: [ServiceNetMap, RabbitmqNetwork]}
+        rabbitmq::interface: {get_param: [ServiceNetMap, RabbitmqNetwork]}
         rabbitmq::nr_ha_queues: {get_param: RabbitHAQueues}
-
       step_config: |
         include ::tripleo::profile::base::rabbitmq
+      upgrade_tasks:
+        - name: Stop rabbitmq service
+          tags: step2
+          service: name=rabbitmq-server state=stopped
+        - name: Start rabbitmq service
+          tags: step6
+          service: name=rabbitmq-server state=started
+
index 54e63df..9e49438 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Sahara API service configured with Puppet
index 4072a15..b430705 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Sahara base service. Shared for all Sahara services.
@@ -64,6 +64,8 @@ outputs:
               - '@'
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/sahara'
+              - '?bind_address='
+              - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
         sahara::rabbit_password: {get_param: RabbitPassword}
         sahara::rabbit_user: {get_param: RabbitUserName}
         sahara::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
index 287c1c0..a1521c2 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Sahara Engine service configured with Puppet
index ffe2d2d..90268c7 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   Utility stack to convert an array of services into a set of combined
@@ -42,6 +42,11 @@ resources:
   LoggingConfiguration:
     type: OS::TripleO::LoggingConfiguration
 
+  ServiceServerMetadataHook:
+    type: OS::TripleO::ServiceServerMetadataHook
+    properties:
+      RoleData: {get_attr: [ServiceChain, role_data]}
+
 outputs:
   role_data:
     description: Combined Role data for this set of services.
@@ -108,3 +113,9 @@ outputs:
           expression: $.data.role_data.where($ != null).select($.get('service_config_settings')).where($ != null).reduce($1.mergeWith($2), {})
           data: {role_data: {get_attr: [ServiceChain, role_data]}}
       step_config: {list_join: ["\n", {get_attr: [ServiceChain, role_data, step_config]}]}
+      upgrade_tasks:
+        yaql:
+          # Note we use distinct() here to filter any identical tasks, e.g yum update for all services
+          expression: $.data.where($ != null).select($.get('upgrade_tasks')).where($ != null).flatten().distinct()
+          data: {get_attr: [ServiceChain, role_data]}
+      service_metadata_settings: {get_attr: [ServiceServerMetadataHook, metadata]}
index 4d01632..be9d143 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   SNMP client configured with Puppet, to facilitate Ceilometer Hardware
index 741adb4..6046d5e 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Swift Proxy service configured with Puppet
index ba184ab..6ccfe7a 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Swift Proxy service configured with Puppet
@@ -49,6 +49,18 @@ parameters:
     default: guest
     description: The username for RabbitMQ
     type: string
+  SwiftCeilometerPipelineEnabled:
+    description: Set to False to disable the swift proxy ceilometer pipeline.
+    default: True
+    type: boolean
+  RabbitClientPort:
+    default: 5672
+    description: Set rabbit subscriber port, change this if using SSL
+    type: number
+
+conditions:
+
+  ceilometer_pipeline_enabled: {equals : [{get_param: SwiftCeilometerPipelineEnabled}, True]}
 
 resources:
   SwiftBase:
@@ -78,6 +90,8 @@ outputs:
             swift::proxy::ceilometer::rabbit_password: {get_param: RabbitPassword}
             swift::proxy::staticweb::url_base: {get_param: [EndpointMap, SwiftPublic, uri_no_suffix]}
             swift::proxy::ceilometer::nonblocking_notify: true
+            tripleo::profile::base::swift::proxy::rabbit_port: {get_param: RabbitClientPort}
+            tripleo::profile::base::swift::proxy::ceilometer_enabled: {get_param: SwiftCeilometerPipelineEnabled}
             tripleo.swift_proxy.firewall_rules:
               '122 swift proxy':
                 dport:
@@ -89,26 +103,34 @@ outputs:
               - ResellerAdmin
             swift::proxy::versioned_writes::allow_versioned_writes: true
             swift::proxy::pipeline:
-              - 'catch_errors'
-              - 'healthcheck'
-              - 'proxy-logging'
-              - 'cache'
-              - 'ratelimit'
-              - 'bulk'
-              - 'tempurl'
-              - 'formpost'
-              - 'authtoken'
-              - 'keystone'
-              - 'staticweb'
-              - 'copy'
-              - 'container-quotas'
-              - 'account-quotas'
-              - 'slo'
-              - 'dlo'
-              - 'versioned_writes'
-              - 'ceilometer'
-              - 'proxy-logging'
-              - 'proxy-server'
+              yaql:
+                expression: $.data.pipeline.where($ != '')
+                data:
+                  pipeline:
+                  - 'catch_errors'
+                  - 'healthcheck'
+                  - 'proxy-logging'
+                  - 'cache'
+                  - 'ratelimit'
+                  - 'bulk'
+                  - 'tempurl'
+                  - 'formpost'
+                  - 'authtoken'
+                  - 'keystone'
+                  - 'staticweb'
+                  - 'copy'
+                  - 'container-quotas'
+                  - 'account-quotas'
+                  - 'slo'
+                  - 'dlo'
+                  - 'versioned_writes'
+                  -
+                    if:
+                    - ceilometer_pipeline_enabled
+                    - 'ceilometer'
+                    - ''
+                  - 'proxy-logging'
+                  - 'proxy-server'
             swift::proxy::account_autocreate: true
             # NOTE: bind IP is found in Heat replacing the network name with the
             # local node IP for the given network; replacement examples
index 5c70b6a..a7ba7ba 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-10-14
+heat_template_version: ocata
 
 description: >
   OpenStack Swift Ringbuilder
index cffe78f..00ae9c3 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   OpenStack Swift Storage service configured with Puppet
index eb5237f..7c3a19a 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   NTP service deployment using puppet, this YAML file
index 384b519..5d0eeae 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   Composable Timezone service
index 7eb3990..67e14d9 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   TripleO Firewall settings
index 124f5fe..da6e308 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: ocata
 
 description: >
   TripleO Package installation settings
@@ -32,3 +32,7 @@ outputs:
         tripleo::packages::enable_install: {get_param: EnablePackageInstall}
       step_config: |
         include ::tripleo::packages
+      upgrade_tasks:
+        - name: Update all packages
+          tags: step3
+          yum: name=* state=latest
diff --git a/puppet/services/zaqar.yaml b/puppet/services/zaqar.yaml
new file mode 100644 (file)
index 0000000..0224ac1
--- /dev/null
@@ -0,0 +1,66 @@
+heat_template_version: ocata
+
+description: >
+  Openstack Zaqar service. Shared for all Heat services.
+
+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
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    type: json
+  DefaultPasswords:
+    default: {}
+    type: json
+  Debug:
+    default: ''
+    description: Set to True to enable debugging on all services.
+    type: string
+  ZaqarPassword:
+    description: The password for Zaqar
+    type: string
+    hidden: true
+  KeystoneRegion:
+    type: string
+    default: 'regionOne'
+    description: Keystone region for endpoint
+
+
+outputs:
+  role_data:
+    description: Shared role data for the Heat services.
+    value:
+      service_name: zaqar
+      config_settings:
+        zaqar::keystone::authtoken::password: {get_param: ZaqarPassword}
+        zaqar::keystone::authtoken::project_name: 'service'
+        zaqar::keystone::authtoken::auth_url: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
+        zaqar::keystone::authtoken::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri]}
+        zaqar::debug: {get_param: Debug}
+        zaqar::transport::websocket::bind: {get_param: [EndpointMap, ZaqarInternal, host]}
+        zaqar::transport::wsgi::bind: {get_param: [ServiceNetMap, ZaqarApiNetwork]}
+        zaqar::message_pipeline: 'zaqar.notification.notifier'
+        zaqar::unreliable: true
+      service_config_settings:
+        keystone:
+          zaqar::keystone::auth::password: {get_param: ZaqarPassword}
+          zaqar::keystone::auth::public_url: {get_param: [EndpointMap, ZaqarPublic, uri]}
+          zaqar::keystone::auth::admin_url: {get_param: [EndpointMap, ZaqarAdmin, uri]}
+          zaqar::keystone::auth::internal_url: {get_param: [EndpointMap, ZaqarInternal, uri]}
+          zaqar::keystone::auth::region: {get_param: KeystoneRegion}
+          zaqar::keystone::auth::tenant: 'service'
+          zaqar::keystone::auth_websocket::password: {get_param: ZaqarPassword}
+          zaqar::keystone::auth_websocket::public_url: {get_param: [EndpointMap, ZaqarWebSocketPublic, uri]}
+          zaqar::keystone::auth_websocket::admin_url: {get_param: [EndpointMap, ZaqarWebSocketAdmin, uri]}
+          zaqar::keystone::auth_websocket::internal_url: {get_param: [EndpointMap, ZaqarWebSocketInternal, uri]}
+          zaqar::keystone::auth_websocket::region: {get_param: KeystoneRegion}
+          zaqar::keystone::auth_websocket::tenant: 'service'
+
+      step_config: |
+        include ::tripleo::profile::base::zaqar
diff --git a/puppet/upgrade_config.yaml b/puppet/upgrade_config.yaml
new file mode 100644 (file)
index 0000000..499160e
--- /dev/null
@@ -0,0 +1,48 @@
+heat_template_version: ocata
+description: 'Upgrade for via ansible by applying a step related tag'
+
+parameters:
+  UpgradeStepConfig:
+     type: json
+     description: Config (ansible yaml) that will be used to step through the deployment.
+     default: ''
+
+  step:
+    type: string
+    description: Step number of the upgrade
+
+resources:
+
+  AnsibleConfig:
+    type: OS::Heat::Value
+    properties:
+      value:
+        str_replace:
+          template: CONFIG
+          params:
+            CONFIG:
+              - hosts: localhost
+                connection: local
+                tasks: {get_param: UpgradeStepConfig}
+
+  AnsibleUpgradeConfigImpl:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: ansible
+      options:
+        tags:
+          str_replace:
+            template: "stepSTEP"
+            params:
+              STEP: {get_param: step}
+      inputs:
+      - name: role
+      config: {get_attr: [AnsibleConfig, value]}
+
+outputs:
+  OS::stack_id:
+    description: The software config which runs ansible with tags
+    value: {get_resource: AnsibleUpgradeConfigImpl}
+  upgrade_config:
+    description:  The configuration file used for upgrade
+    value: {get_attr: [AnsibleConfig, value]}
index 4e46b89..555b240 100644 (file)
@@ -1 +1,6 @@
-pbr>=0.5.21,<1.0
+# 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.
+pbr>=1.8 # Apache-2.0
+Jinja2>=2.8 # BSD License (3 clause)
+six>=1.9.0 # MIT
index d7ed80c..4ff88ec 100644 (file)
 # defaults to '%stackname%-{{role.name.lower()}}-%index%'
 # sets the default for {{role.name}}HostnameFormat parameter in overcloud.yaml
 #
+# disable_constraints: (boolean) optional, whether to disable Nova and Glance
+# constraints for each role specified in the templates.
+#
 # ServicesDefault: (list) optional default list of services to be deployed
 # on the role, defaults to an empty list. Sets the default for the
 # {{role.name}}Services parameter in overcloud.yaml
 
-- name: Controller
+- name: Controller # the 'primary' role goes first
   CountDefault: 1
   ServicesDefault:
     - OS::TripleO::Services::CACerts
+    - OS::TripleO::Services::CephMds
     - OS::TripleO::Services::CephMon
     - OS::TripleO::Services::CephExternal
     - OS::TripleO::Services::CephRgw
@@ -29,7 +33,6 @@
     - OS::TripleO::Services::CinderBackup
     - OS::TripleO::Services::CinderScheduler
     - OS::TripleO::Services::CinderVolume
-    - OS::TripleO::Services::Core
     - OS::TripleO::Services::Kernel
     - OS::TripleO::Services::Keystone
     - OS::TripleO::Services::GlanceApi
@@ -96,6 +99,8 @@
     - OS::TripleO::Services::FluentdClient
     - OS::TripleO::Services::BarbicanApi
     - OS::TripleO::Services::PankoApi
+    - OS::TripleO::Services::Zaqar
+    - OS::TripleO::Services::OVNDBs
 
 - name: Compute
   CountDefault: 1
diff --git a/roles_data_undercloud.yaml b/roles_data_undercloud.yaml
new file mode 100644 (file)
index 0000000..08213b6
--- /dev/null
@@ -0,0 +1,35 @@
+- name: Undercloud # the 'primary' role goes first
+  CountDefault: 1
+  disable_constraints: True
+  ServicesDefault:
+    - OS::TripleO::Services::Ntp
+    - OS::TripleO::Services::MySQL
+    - OS::TripleO::Services::MongoDb
+    - OS::TripleO::Services::Keystone
+    - OS::TripleO::Services::Apache
+    - OS::TripleO::Services::RabbitMQ
+    - OS::TripleO::Services::GlanceApi
+    - OS::TripleO::Services::GlanceRegistry
+    - OS::TripleO::Services::SwiftProxy
+    - OS::TripleO::Services::SwiftStorage
+    - OS::TripleO::Services::SwiftRingBuilder
+    - OS::TripleO::Services::Memcached
+    - OS::TripleO::Services::HeatApi
+    - OS::TripleO::Services::HeatApiCfn
+    - OS::TripleO::Services::HeatEngine
+    - OS::TripleO::Services::NovaApi
+    - OS::TripleO::Services::NovaMetadata
+    - OS::TripleO::Services::NovaScheduler
+    - OS::TripleO::Services::NovaConductor
+    - OS::TripleO::Services::MistralEngine
+    - OS::TripleO::Services::MistralApi
+    - OS::TripleO::Services::MistralExecutor
+    - OS::TripleO::Services::IronicApi
+    - OS::TripleO::Services::IronicConductor
+    - OS::TripleO::Services::NovaIronic
+    - OS::TripleO::Services::Zaqar
+    - OS::TripleO::Services::NeutronServer
+    - OS::TripleO::Services::NeutronApi
+    - OS::TripleO::Services::NeutronCorePlugin
+    - OS::TripleO::Services::NeutronOvsAgent
+    - OS::TripleO::Services::NeutronDhcpAgent
diff --git a/scripts/hosts-config.sh b/scripts/hosts-config.sh
new file mode 100755 (executable)
index 0000000..f456b31
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/bash
+set -eux
+set -o pipefail
+
+write_entries() {
+    local file="$1"
+    local entries="$2"
+
+    # Don't do anything if the file isn't there
+    if [ ! -f "$file" ]; then
+        return
+    fi
+
+    if grep -q "^# HEAT_HOSTS_START" "$file"; then
+        temp=$(mktemp)
+        awk -v v="$entries" '/^# HEAT_HOSTS_START/ {
+            print $0
+            print v
+            f=1
+            }f &&!/^# HEAT_HOSTS_END$/{next}/^# HEAT_HOSTS_END$/{f=0}!f' "$file" > "$temp"
+            echo "INFO: Updating hosts file $file, check below for changes"
+            diff "$file" "$temp" || true
+            cat "$temp" > "$file"
+    else
+        echo -ne "\n# HEAT_HOSTS_START - Do not edit manually within this section!\n" >> "$file"
+        echo "$entries" >> "$file"
+        echo -ne "# HEAT_HOSTS_END\n\n" >> "$file"
+    fi
+
+}
+
+if [ ! -z "$hosts" ]; then
+    for tmpl in /etc/cloud/templates/hosts.*.tmpl ; do
+        write_entries "$tmpl" "$hosts"
+    done
+    write_entries "/etc/hosts" "$hosts"
+else
+    echo "No hosts in Heat, nothing written."
+fi
index 70c2b3f..782bb21 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
 # Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
 import setuptools
 
+# In python < 2.7.4, a lazy loading of package `pbr` will break
+# setuptools if some other modules registered functions in `atexit`.
+# solution from: http://bugs.python.org/issue15881#msg170215
+try:
+    import multiprocessing  # noqa
+except ImportError:
+    pass
+
 setuptools.setup(
-    setup_requires=['pbr'],
+    setup_requires=['pbr>=1.8'],
     pbr=True)
index c3726e8..faf4893 100644 (file)
@@ -1 +1,6 @@
-pyyaml
+# 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.
+PyYAML>=3.10.0 # MIT
+Jinja2>=2.8 # BSD License (3 clause)
+six>=1.9.0 # MIT
diff --git a/tools/process-templates.py b/tools/process-templates.py
new file mode 100755 (executable)
index 0000000..9a06812
--- /dev/null
@@ -0,0 +1,126 @@
+#!/usr/bin/env python
+#    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 jinja2
+import os
+import six
+import sys
+import yaml
+
+
+def parse_opts(argv):
+    parser = argparse.ArgumentParser(
+        description='Configure host network interfaces using a JSON'
+        ' config file format.')
+    parser.add_argument('-p', '--base_path', metavar='BASE_PATH',
+                        help="""base path of templates to process.""",
+                        default='.')
+    parser.add_argument('-r', '--roles-data', metavar='ROLES_DATA',
+                        help="""relative path to the roles_data.yaml file.""",
+                        default='roles_data.yaml')
+    parser.add_argument('--safe',
+                        action='store_true',
+                        help="""Enable safe mode (do not overwrite files).""",
+                        default=False)
+    opts = parser.parse_args(argv[1:])
+
+    return opts
+
+
+def _j2_render_to_file(j2_template, j2_data, outfile_name=None,
+                       overwrite=True):
+    yaml_f = outfile_name or j2_template.replace('.j2.yaml', '.yaml')
+    print('rendering j2 template to file: %s' % outfile_name)
+
+    if not overwrite and os.path.exists(outfile_name):
+        print('ERROR: path already exists for file: %s' % outfile_name)
+        sys.exit(1)
+
+    try:
+        # Render the j2 template
+        template = jinja2.Environment().from_string(j2_template)
+        r_template = template.render(**j2_data)
+    except jinja2.exceptions.TemplateError as ex:
+        error_msg = ("Error rendering template %s : %s"
+                     % (yaml_f, six.text_type(ex)))
+        print(error_msg)
+        raise Exception(error_msg)
+    with open(outfile_name, 'w') as out_f:
+        out_f.write(r_template)
+
+
+def process_templates(template_path, role_data_path, overwrite):
+
+    with open(role_data_path) as role_data_file:
+        role_data = yaml.safe_load(role_data_file)
+
+    j2_excludes_path = os.path.join(template_path, 'j2_excludes.yaml')
+    with open(j2_excludes_path) as role_data_file:
+        j2_excludes = yaml.safe_load(role_data_file)
+
+    role_names = [r.get('name') for r in role_data]
+    r_map = {}
+    for r in role_data:
+        r_map[r.get('name')] = r
+    excl_templates = ['%s/%s' % (template_path, e)
+                      for e in j2_excludes.get('name')]
+
+    if os.path.isdir(template_path):
+        for subdir, dirs, files in os.walk(template_path):
+            for f in files:
+                file_path = os.path.join(subdir, f)
+                # We do two templating passes here:
+                # 1. *.role.j2.yaml - we template just the role name
+                #    and create multiple files (one per role)
+                # 2. *.j2.yaml - we template with all roles_data,
+                #    and create one file common to all roles
+                if f.endswith('.role.j2.yaml'):
+                    print("jinja2 rendering role template %s" % f)
+                    with open(file_path) as j2_template:
+                        template_data = j2_template.read()
+                        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
+                            out_f = "-".join(
+                                [role.lower(),
+                                 os.path.basename(f).replace('.role.j2.yaml',
+                                                             '.yaml')])
+                            out_f_path = os.path.join(subdir, out_f)
+                            if not (out_f_path in excl_templates):
+                                _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'):
+                    print("jinja2 rendering normal template %s" % f)
+                    with open(file_path) as j2_template:
+                        template_data = j2_template.read()
+                        j2_data = {'roles': role_data}
+                        out_f = file_path.replace('.j2.yaml', '.yaml')
+                        _j2_render_to_file(template_data, j2_data, out_f,
+                                           overwrite)
+
+    else:
+        print('Unexpected argument %s' % template_path)
+
+opts = parse_opts(sys.argv)
+
+role_data_path = os.path.join(opts.base_path, opts.roles_data)
+
+process_templates(opts.base_path, role_data_path, (not opts.safe))
index 95c7d02..fd1f47d 100755 (executable)
@@ -24,6 +24,45 @@ def exit_usage():
     sys.exit(1)
 
 
+def validate_mysql_connection(settings):
+    no_op = lambda *args: False
+    error_status = [0]
+
+    def mysql_protocol(items):
+        return items == ['EndpointMap', 'MysqlInternal', 'protocol']
+
+    def client_bind_address(item):
+        return 'bind_address' in item
+
+    def validate_mysql_uri(key, items):
+        # Only consider a connection if it targets mysql
+        if key.endswith('connection') and \
+           search(items, mysql_protocol, no_op):
+            # Assume the "bind_address" option is one of
+            # the token that made up the uri
+            if not search(items, client_bind_address, no_op):
+                error_status[0] = 1
+        return False
+
+    def search(item, check_item, check_key):
+        if check_item(item):
+            return True
+        elif isinstance(item, list):
+            for i in item:
+                if search(i, check_item, check_key):
+                    return True
+        elif isinstance(item, dict):
+            for k in item.keys():
+                if check_key(k, item[k]):
+                    return True
+                elif search(item[k], check_item, check_key):
+                    return True
+        return False
+
+    search(settings, no_op, validate_mysql_uri)
+    return error_status[0]
+
+
 def validate_service(filename, tpl):
     if 'outputs' in tpl and 'role_data' in tpl['outputs']:
         if 'value' not in tpl['outputs']['role_data']:
@@ -41,6 +80,12 @@ def validate_service(filename, tpl):
             print('ERROR: service_name should match file name for service: %s.'
                   % filename)
             return 1
+        # if service connects to mysql, the uri should use option
+        # bind_address to avoid issues with VIP failover
+        if 'config_settings' in role_data and \
+           validate_mysql_connection(role_data['config_settings']):
+            print('ERROR: mysql connection uri should use option bind_address')
+            return 1
     if 'parameters' in tpl:
         for param in required_params:
             if param not in tpl['parameters']:
diff --git a/tox.ini b/tox.ini
index 5d09e0a..c8a912b 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -11,4 +11,9 @@ deps = -r{toxinidir}/requirements.txt
 commands = {posargs}
 
 [testenv:pep8]
-commands = python ./tools/yaml-validate.py .
+commands =
+    python ./tools/process-templates.py
+    python ./tools/yaml-validate.py .
+
+[testenv:templates]
+commands = python ./tools/process-templates.py