Merge "Cleanup haproxy service from explicit services enablement"
authorJenkins <jenkins@review.openstack.org>
Tue, 6 Sep 2016 15:33:52 +0000 (15:33 +0000)
committerGerrit Code Review <review@openstack.org>
Tue, 6 Sep 2016 15:33:52 +0000 (15:33 +0000)
135 files changed:
capabilities-map.yaml
environments/monitoring-environment.yaml [new file with mode: 0644]
environments/neutron-ovs-dpdk.yaml [new file with mode: 0644]
environments/neutron-ovs-dvr.yaml
environments/neutron-sriov.yaml [new file with mode: 0755]
extraconfig/tasks/major_upgrade_ceph_mon.sh [new file with mode: 0755]
extraconfig/tasks/major_upgrade_ceph_storage.sh
extraconfig/tasks/major_upgrade_controller_pacemaker_1.sh
extraconfig/tasks/major_upgrade_pacemaker.yaml
extraconfig/tasks/pacemaker_resource_restart.sh
network/config/bond-with-vlans/compute-dpdk.yaml [new file with mode: 0644]
network/ports/net_ip_list_map.yaml
network/service_net_map.yaml
overcloud-resource-registry-puppet.yaml
overcloud-without-mergepy.yaml [deleted symlink]
overcloud.yaml
puppet/all-nodes-config.yaml
puppet/ceph-storage-post.yaml
puppet/ceph-storage.yaml
puppet/cinder-storage-post.yaml
puppet/cinder-storage.yaml
puppet/compute-post.yaml
puppet/compute.yaml
puppet/controller-post.yaml
puppet/controller.yaml
puppet/services/aodh-api.yaml
puppet/services/aodh-evaluator.yaml
puppet/services/aodh-listener.yaml
puppet/services/aodh-notifier.yaml
puppet/services/apache.yaml [new file with mode: 0644]
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-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-mon.yaml
puppet/services/ceph-osd.yaml
puppet/services/cinder-api.yaml
puppet/services/cinder-backup.yaml
puppet/services/cinder-scheduler.yaml
puppet/services/cinder-volume.yaml
puppet/services/glance-api.yaml
puppet/services/glance-registry.yaml
puppet/services/gnocchi-api.yaml
puppet/services/gnocchi-metricd.yaml
puppet/services/gnocchi-statsd.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-conductor.yaml
puppet/services/keepalived.yaml
puppet/services/keystone.yaml
puppet/services/manila-api.yaml
puppet/services/manila-scheduler.yaml
puppet/services/manila-share.yaml
puppet/services/memcached.yaml
puppet/services/monitoring/sensu-base.yaml [new file with mode: 0644]
puppet/services/monitoring/sensu-client.yaml [new file with mode: 0644]
puppet/services/neutron-api.yaml
puppet/services/neutron-base.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-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-libvirt.yaml
puppet/services/nova-scheduler.yaml
puppet/services/nova-vncproxy.yaml
puppet/services/pacemaker.yaml
puppet/services/pacemaker/ceilometer-agent-central.yaml
puppet/services/pacemaker/ceilometer-agent-notification.yaml
puppet/services/pacemaker/ceilometer-api.yaml
puppet/services/pacemaker/ceilometer-collector.yaml
puppet/services/pacemaker/cinder-api.yaml
puppet/services/pacemaker/cinder-backup.yaml
puppet/services/pacemaker/cinder-scheduler.yaml
puppet/services/pacemaker/cinder-volume.yaml
puppet/services/pacemaker/glance-api.yaml
puppet/services/pacemaker/glance-registry.yaml
puppet/services/pacemaker/gnocchi-api.yaml
puppet/services/pacemaker/gnocchi-metricd.yaml
puppet/services/pacemaker/gnocchi-statsd.yaml
puppet/services/pacemaker/haproxy.yaml
puppet/services/pacemaker/heat-api-cfn.yaml
puppet/services/pacemaker/heat-api-cloudwatch.yaml
puppet/services/pacemaker/heat-api.yaml
puppet/services/pacemaker/heat-engine.yaml
puppet/services/pacemaker/horizon.yaml
puppet/services/pacemaker/keystone.yaml
puppet/services/pacemaker/manila-share.yaml
puppet/services/pacemaker/memcached.yaml
puppet/services/pacemaker/neutron-dhcp.yaml
puppet/services/pacemaker/neutron-l3.yaml
puppet/services/pacemaker/neutron-metadata.yaml
puppet/services/pacemaker/neutron-midonet.yaml
puppet/services/pacemaker/neutron-ovs-agent.yaml
puppet/services/pacemaker/neutron-server.yaml
puppet/services/pacemaker/nova-api.yaml
puppet/services/pacemaker/nova-conductor.yaml
puppet/services/pacemaker/nova-consoleauth.yaml
puppet/services/pacemaker/nova-scheduler.yaml
puppet/services/pacemaker/nova-vncproxy.yaml
puppet/services/pacemaker/rabbitmq.yaml
puppet/services/pacemaker/sahara-api.yaml
puppet/services/pacemaker/sahara-engine.yaml
puppet/services/rabbitmq.yaml
puppet/services/sahara-api.yaml
puppet/services/sahara-engine.yaml
puppet/services/services.yaml
puppet/services/snmp.yaml
puppet/services/swift-proxy.yaml
puppet/services/swift-storage.yaml
puppet/services/tripleo-firewall.yaml
puppet/swift-devices-and-proxy-config.yaml
puppet/swift-storage-post.yaml
puppet/swift-storage.yaml
puppet/vip-config.yaml [deleted file]
tools/yaml-validate.py

index c7816b7..962dfb9 100644 (file)
@@ -224,3 +224,15 @@ topics:
             description:
             requires:
               - overcloud-resource-registry-puppet.yaml
+
+  - title: Operational Tools
+    description:
+    environment_groups:
+      - title: Monitoring agents
+        description: Enable monitoring agents
+        environments:
+          - file: environments/monitoring-environment.yaml
+            title: enable monitoring agents
+            description:
+            requires:
+              - overcloud-resource-registry-puppet.yaml
diff --git a/environments/monitoring-environment.yaml b/environments/monitoring-environment.yaml
new file mode 100644 (file)
index 0000000..a8ad208
--- /dev/null
@@ -0,0 +1,30 @@
+## A Heat environment file which can be used to set up monitoring
+## and logging agents
+
+resource_registry:
+  OS::TripleO::Services::SensuClient: ../puppet/services/monitoring/sensu-client.yaml
+
+parameter_defaults:
+  #### Sensu settings ####
+  ##MonitoringRabbitHost: 10.10.10.10
+  ##MonitoringRabbitPort: 5672
+  ##MonitoringRabbitUserName: sensu
+  ##MonitoringRabbitPassword: sensu
+  ##MonitoringRabbitUseSSL: false
+  ##MonitoringRabbitVhost: "/sensu"
+  ##SensuClientCustomConfig:
+  ##  - api:
+  ##    - warning: 10
+  ##      critical: 20
+  ##    openstack:
+  ##    - username: admin
+  ##      password: changeme
+  ##      project_name: admin
+  ##      auth_url: http://controller:5000/v2.0
+  ##      region_name: RegionOne
+
+  #### EFK settings ####
+  ## TBD
+
+  #### Grafana/Graphite settings ####
+  ## TBD
diff --git a/environments/neutron-ovs-dpdk.yaml b/environments/neutron-ovs-dpdk.yaml
new file mode 100644 (file)
index 0000000..004b8ac
--- /dev/null
@@ -0,0 +1,18 @@
+## A Heat environment that can be used to deploy DPDK with OVS
+resource_registry:
+  OS::TripleO::Services::ComputeNeutronOvsAgent: ../puppet/services/neutron-ovs-dpdk-agent.yaml
+
+parameter_defaults:
+  ## NeutronDpdkCoreList and NeutronDpdkMemoryChannels are REQUIRED settings.
+  ## Attempting to deploy DPDK without appropriate values will cause deployment to fail or lead to unstable deployments.
+  #NeutronDpdkCoreList: ""
+  #NeutronDpdkMemoryChannels: ""
+
+  NeutronDatapathType: "netdev"
+  NeutronVhostuserSocketDir: "/var/run/openvswitch"
+
+  #NeutronDpdkSocketMemory: ""
+  #NeutronDpdkDriverType: "vfio-pci"
+  #NovaReservedHostMemory: 4096
+  #NovaVcpuPinSet: ""
+
index 223c253..f60edb0 100644 (file)
@@ -22,3 +22,11 @@ parameter_defaults:
   # We also need to set the proper agent mode for the L3 agent.  This will only
   # affect the agent on the controller node.
   NeutronL3AgentMode: 'dvr_snat'
+
+  # L3 HA isn't supported for DVR enabled routers. If upgrading from a system
+  # where L3 HA is enabled and has neutron routers configured, it is
+  # recommended setting this value to true until such time all routers can be
+  # migrated to DVR routers. Once migration of the routers is complete,
+  # NeutronL3HA can be returned to false. All new systems should be deployed
+  # with NeutronL3HA set to false.
+  NeutronL3HA: false
diff --git a/environments/neutron-sriov.yaml b/environments/neutron-sriov.yaml
new file mode 100755 (executable)
index 0000000..9b7e51f
--- /dev/null
@@ -0,0 +1,22 @@
+## A Heat environment that can be used to deploy SR-IOV
+resource_registry:
+  OS::TripleO::Services::NeutronSriovAgent: ../puppet/services/neutron-sriov-agent.yaml
+
+parameter_defaults:
+  NeutronMechanismDrivers: ['openvswitch','sriovnicswitch']
+
+  # Add PciPassthroughFilter to the scheduler default filters
+  #NovaSchedulerDefaultFilters: ['RetryFilter','AvailabilityZoneFilter','RamFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter']
+  #NovaSchedulerAvailableFilters: ["nova.scheduler.filters.all_filters","nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter"]
+
+  # Provide the vendorid:productid of the VFs
+  #NeutronSupportedPCIVendorDevs: ['8086:154c','8086:10ca','8086:1520']
+
+  #NeutronPhysicalDevMappings: "datacentre:ens20f2"
+
+  # Number of VFs that needs to be configured for a physical interface
+  #NeutronSriovNumVFs: "ens20f2:5"
+
+  #NovaPCIPassthrough:
+  #  - devname: "ens20f2"
+  #    physical_network: "datacentre"
diff --git a/extraconfig/tasks/major_upgrade_ceph_mon.sh b/extraconfig/tasks/major_upgrade_ceph_mon.sh
new file mode 100755 (executable)
index 0000000..38befbb
--- /dev/null
@@ -0,0 +1,63 @@
+#!/bin/bash
+set -eu
+set -o pipefail
+
+echo INFO: starting $(basename "$0")
+
+# Exit if not running
+if ! pidof ceph-mon; then
+    echo INFO: ceph-mon is not running, skipping
+    exit 0
+fi
+
+# Exit if not Hammer
+INSTALLED_VERSION=$(ceph --version | awk '{print $3}')
+if ! [[ "$INSTALLED_VERSION" =~ ^0\.94.* ]]; then
+    echo INFO: version of Ceph installed is not 0.94, skipping
+    exit 0
+fi
+
+MON_PID=$(pidof ceph-mon)
+MON_ID=$(hostname -s)
+
+# Stop daemon using Hammer sysvinit script
+service ceph stop mon.${MON_ID}
+
+# Ensure it's stopped
+timeout 60 bash -c "while kill -0 ${MON_PID} 2> /dev/null; do
+  sleep 2;
+done"
+
+# Update to Jewel
+yum -y -q update ceph-mon
+
+# Restart/Exit if not on Jewel, only in that case we need the changes
+UPDATED_VERSION=$(ceph --version | awk '{print $3}')
+if [[ "$UPDATED_VERSION" =~ ^0\.94.* ]]; then
+    echo WARNING: Ceph was not upgraded, restarting daemons
+    service ceph start mon.${MON_ID}
+elif [[ "$UPDATED_VERSION" =~ ^10\.2.* ]]; then
+    echo INFO: Ceph was upgraded to Jewel
+
+    # RPM could own some of these but we can't take risks on the pre-existing files
+    for d in /var/lib/ceph/mon /var/log/ceph /var/run/ceph /etc/ceph; do
+        chown -R ceph:ceph $d
+    done
+
+    # Replay udev events with newer rules
+    udevadm trigger
+
+    # Enable systemd unit
+    systemctl enable ceph-mon.target
+    systemctl enable ceph-mon@${MON_ID}
+    systemctl start ceph-mon@${MON_ID}
+
+    # Wait for daemon to be back in the quorum
+    timeout 300 bash -c "until (ceph quorum_status | jq .quorum_names | grep -sq ${MON_ID}); do
+      echo Waiting for mon.${MON_ID} to re-join quorum;
+      sleep 10;
+    done"
+else
+    echo ERROR: Ceph was upgraded to an unknown release, daemon is stopped, need manual intervention
+    exit 1
+fi
index de42b16..03a1c1c 100644 (file)
@@ -4,32 +4,89 @@
 # major upgrade workflow.
 #
 set -eu
+set -o pipefail
 
 UPGRADE_SCRIPT=/root/tripleo_upgrade_node.sh
 
-cat > $UPGRADE_SCRIPT << ENDOFCAT
+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
 ### tripleo upgrades workflow
+set -eu
+
+echo INFO: starting $(basename "$0")
 
+# Exit if not running
+if ! pidof ceph-osd; then
+    echo INFO: ceph-osd is not running, skipping
+    exit 0
+fi
 
-function systemctl_ceph {
-    action=\$1
-    systemctl \$action ceph
-}
+# Exit if not Hammer
+INSTALLED_VERSION=$(ceph --version | awk '{print $3}')
+if ! [[ "$INSTALLED_VERSION" =~ ^0\.94.* ]]; then
+    echo INFO: version of Ceph installed is not 0.94, skipping
+    exit 0
+fi
 
-# "so that mirrors aren't rebalanced as if the OSD died" - gfidente
+OSD_PIDS=$(pidof ceph-osd)
+OSD_IDS=$(ls /var/lib/ceph/osd | awk 'BEGIN { FS = "-" } ; { print $2 }')
+
+# "so that mirrors aren't rebalanced as if the OSD died" - gfidente / leseb
 ceph osd set noout
+ceph osd set norebalance
+ceph osd set nodeep-scrub
+ceph osd set noscrub
+
+# Stop daemon using Hammer sysvinit script
+for OSD_ID in $OSD_IDS; do
+    service ceph stop osd.${OSD_ID}
+done
+
+# Nice guy will return non-0 only when all failed
+timeout 60 bash -c "while kill -0 ${OSD_PIDS} 2> /dev/null; do
+  sleep 2;
+done"
 
-systemctl_ceph stop
+# Update (Ceph to Jewel)
 yum -y install python-zaqarclient  # needed for os-collect-config
 yum -y update
-systemctl_ceph start
 
-ceph osd unset noout
+# Restart/Exit if not on Jewel, only in that case we need the changes
+UPDATED_VERSION=$(ceph --version | awk '{print $3}')
+if [[ "$UPDATED_VERSION" =~ ^0\.94.* ]]; then
+    echo WARNING: Ceph was not upgraded, restarting daemon
+    for OSD_ID in $OSD_IDS; do
+        service ceph start osd.${OSD_ID}
+    done
+elif [[ "$UPDATED_VERSION" =~ ^10\.2.* ]]; then
+    # RPM could own some of these but we can't take risks on the pre-existing files
+    for d in /var/lib/ceph/osd /var/log/ceph /var/run/ceph /etc/ceph; do
+        chown -R ceph:ceph $d
+    done
+
+    # Replay udev events with newer rules
+    udevadm trigger && udevadm settle
+
+    # Enable systemd unit
+    systemctl enable ceph-osd.target
+    for OSD_ID in $OSD_IDS; do
+        systemctl enable ceph-osd@${OSD_ID}
+        systemctl start ceph-osd@${OSD_ID}
+    done
 
+    echo INFO: Ceph was upgraded to Jewel
+else
+    echo ERROR: Ceph was upgraded to an unknown release, daemon is stopped, need manual intervention
+    exit 1
+fi
+
+ceph osd unset noout
+ceph osd unset norebalance
+ceph osd unset nodeep-scrub
+ceph osd unset noscrub
 ENDOFCAT
 
 # ensure the permissions are OK
 chmod 0755 $UPGRADE_SCRIPT
-
index bc115ef..0b70263 100755 (executable)
@@ -155,17 +155,19 @@ wsrep_on = ON
 wsrep_cluster_address = gcomm://localhost
 EOF
 
-if [ "$(hiera -c /etc/puppet/hiera.yaml bootstrap_nodeid)" = "$(facter hostname)" ]; then
-    if [ $DO_MYSQL_UPGRADE -eq 1 ]; then
-        # Scripts run via heat have no HOME variable set and this confuses
-        # mysqladmin
-        export HOME=/root
-        mkdir /var/lib/mysql || /bin/true
-        chown mysql:mysql /var/lib/mysql
-        chmod 0755 /var/lib/mysql
-        restorecon -R /var/lib/mysql/
-        mysql_install_db --datadir=/var/lib/mysql --user=mysql
-        chown -R mysql:mysql /var/lib/mysql/
+if [ $DO_MYSQL_UPGRADE -eq 1 ]; then
+    # Scripts run via heat have no HOME variable set and this confuses
+    # mysqladmin
+    export HOME=/root
+
+    mkdir /var/lib/mysql || /bin/true
+    chown mysql:mysql /var/lib/mysql
+    chmod 0755 /var/lib/mysql
+    restorecon -R /var/lib/mysql/
+    mysql_install_db --datadir=/var/lib/mysql --user=mysql
+    chown -R mysql:mysql /var/lib/mysql/
+
+    if [ "$(hiera -c /etc/puppet/hiera.yaml bootstrap_nodeid)" = "$(facter hostname)" ]; then
         mysqld_safe --wsrep-new-cluster &
         # We have a populated /root/.my.cnf with root/password here so
         # we need to temporarily rename it because the newly created
@@ -182,6 +184,9 @@ fi
 
 # If we reached here without error we can safely blow away the origin
 # mysql dir from every controller
+
+# TODO: What if the upgrade fails on the bootstrap node, but not on
+# this controller.  Data may be lost.
 if [ $DO_MYSQL_UPGRADE -eq 1 ]; then
     rm -r $MYSQL_TEMP_UPGRADE_BACKUP_DIR
 fi
index c70a954..c2e1488 100644 (file)
@@ -32,6 +32,23 @@ resources:
   # map_merge with input_values instead of feeding params into scripts
   # via str_replace on bash snippets
 
+  CephMonUpgradeConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config: {get_file: major_upgrade_ceph_mon.sh}
+
+  CephMonUpgradeDeployment:
+    type: OS::Heat::SoftwareDeploymentGroup
+    properties:
+      servers: {get_param: controller_servers}
+      config: {get_resource: CephMonUpgradeConfig}
+      input_values: {get_param: input_values}
+      batch_create:
+        max_batch_size: 1
+      rolling_update:
+        max_batch_size: 1
+
   ControllerPacemakerUpgradeConfig_Step1:
     type: OS::Heat::SoftwareConfig
     properties:
@@ -57,6 +74,7 @@ resources:
 
   ControllerPacemakerUpgradeDeployment_Step1:
     type: OS::Heat::SoftwareDeploymentGroup
+    depends_on: CephMonUpgradeDeployment
     properties:
       servers:  {get_param: controller_servers}
       config: {get_resource: ControllerPacemakerUpgradeConfig_Step1}
index 1637cee..fd1fd0d 100755 (executable)
@@ -7,15 +7,23 @@ pacemaker_status=$(systemctl is-active pacemaker)
 # Run if pacemaker is running, we're the bootstrap node,
 # and we're updating the deployment (not creating).
 if [ "$pacemaker_status" = "active" -a \
-     "$(hiera bootstrap_nodeid)" = "$(facter hostname)" -a \
-     "$(hiera stack_action)" = "UPDATE" ]; then
+     "$(hiera bootstrap_nodeid)" = "$(facter hostname)" ]; then
 
-    PCMK_RESOURCES="haproxy-clone redis-master rabbitmq-clone galera-master openstack-cinder-volume openstack-cinder-backup"
-    # Ten minutes of timeout to restart each resource, given there are no constraints should be enough
     TIMEOUT=600
-    for resource in $PCMK_RESOURCES; do
-      if pcs status | grep $resource; then
-        pcs resource restart --wait=$TIMEOUT $resource
-      fi
+    SERVICES_TO_RESTART="$(ls /var/lib/tripleo/pacemaker-restarts)"
+    PCS_STATUS_OUTPUT="$(pcs status)"
+
+    for service in $SERVICES_TO_RESTART; do
+        if ! echo "$PCS_STATUS_OUTPUT" | grep $service; then
+            echo "Service $service not found as a pacemaker resource, cannot restart it."
+            exit 1
+        fi
+    done
+
+    for service in $SERVICES_TO_RESTART; do
+        echo "Restarting $service..."
+        pcs resource restart --wait=$TIMEOUT $service
+        rm -f /var/lib/tripleo/pacemaker-restarts/$service
     done
+
 fi
diff --git a/network/config/bond-with-vlans/compute-dpdk.yaml b/network/config/bond-with-vlans/compute-dpdk.yaml
new file mode 100644 (file)
index 0000000..3fc764b
--- /dev/null
@@ -0,0 +1,192 @@
+heat_template_version: 2015-04-30
+
+description: >
+  Software Config to drive os-net-config with 2 bonded nics on a bridge
+  with VLANs attached for the compute role.
+
+parameters:
+  ControlPlaneIp:
+    default: ''
+    description: IP address/subnet on the ctlplane network
+    type: string
+  ExternalIpSubnet:
+    default: ''
+    description: IP address/subnet on the external network
+    type: string
+  InternalApiIpSubnet:
+    default: ''
+    description: IP address/subnet on the internal API network
+    type: string
+  StorageIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage network
+    type: string
+  StorageMgmtIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage mgmt network
+    type: string
+  TenantIpSubnet:
+    default: ''
+    description: IP address/subnet on the tenant network
+    type: string
+  ManagementIpSubnet: # Only populated when including environments/network-management.yaml
+    default: ''
+    description: IP address/subnet on the management network
+    type: string
+  BondInterfaceOvsOptions:
+    default: ''
+    description: The ovs_options string for the bond interface. Set things like
+                 lacp=active and/or bond_mode=balance-slb using this option.
+    type: string
+  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::StructuredConfig
+    properties:
+      group: os-apply-config
+      config:
+        os_net_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: ovs_bridge
+              name: {get_input: bridge_name}
+              members:
+                -
+                  type: ovs_bond
+                  name: bond1
+                  ovs_options: {get_param: BondInterfaceOvsOptions}
+                  members:
+                    -
+                      type: interface
+                      name: nic2
+                      primary: true
+                    -
+                      type: interface
+                      name: nic3
+                -
+                  type: vlan
+                  device: bond1
+                  vlan_id: {get_param: InternalApiNetworkVlanID}
+                  addresses:
+                    -
+                      ip_netmask: {get_param: InternalApiIpSubnet}
+                -
+                  type: vlan
+                  device: bond1
+                  vlan_id: {get_param: StorageNetworkVlanID}
+                  addresses:
+                    -
+                      ip_netmask: {get_param: StorageIpSubnet}
+                -
+                  type: vlan
+                  device: bond1
+                  vlan_id: {get_param: TenantNetworkVlanID}
+                  addresses:
+                    -
+                      ip_netmask: {get_param: TenantIpSubnet}
+                # Uncomment when including environments/network-management.yaml
+                # If setting default route on the Management interface, comment
+                # out the default route on the Control Plane.
+                #-
+                #  type: vlan
+                #  device: bond1
+                #  vlan_id: {get_param: ManagementNetworkVlanID}
+                #  addresses:
+                #    -
+                #      ip_netmask: {get_param: ManagementIpSubnet}
+                #  routes:
+                #    -
+                #      default: true
+                #      next_hop: {get_param: ManagementInterfaceDefaultRoute}
+            -
+              type: ovs_user_bridge
+              name: br-link
+              members:
+                -
+                  type: ovs_dpdk_bond
+                  name: dpdkbond0
+                  members:
+                    -
+                      type: ovs_dpdk_port
+                      name: dpdk0
+                      members:
+                        -
+                          type: interface
+                          name: nic4
+                    -
+                      type: ovs_dpdk_port
+                      name: dpdk1
+                      members:
+                        -
+                          type: interface
+                          name: nic5
+
+outputs:
+  OS::stack_id:
+    description: The OsNetConfigImpl resource.
+    value: {get_resource: OsNetConfigImpl}
index 36f3358..07e2de4 100644 (file)
@@ -28,6 +28,9 @@ parameters:
   ServiceNetMap:
     default: {}
     type: json
+  ServiceHostnameList:
+    default: []
+    type: comma_delimited_list
 
 outputs:
   net_ip_map:
@@ -71,3 +74,19 @@ outputs:
                   storage_mgmt: {get_param: StorageMgmtIpList}
                   tenant: {get_param: TenantIpList}
                   management: {get_param: ManagementIpList}
+  service_hostnames:
+    description: >
+      Map of enabled services to a list of hostnames where they're running
+    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_node_names: {get_param: ServiceHostnameList}
+                for_each:
+                    SERVICE: {get_param: EnabledServices}
index 50f5c55..4cfff40 100644 (file)
@@ -13,6 +13,7 @@ parameters:
 
   ServiceNetMapDefaults:
     default:
+      ApacheNetwork: internal_api
       NeutronTenantNetwork: tenant
       CeilometerApiNetwork: internal_api
       AodhApiNetwork: internal_api
@@ -22,7 +23,8 @@ parameters:
       CinderIscsiNetwork: storage
       GlanceApiNetwork: storage
       GlanceRegistryNetwork: internal_api
-      IronicApiNetwork: internal_api
+      IronicApiNetwork: ctlplane
+      IronicNetwork: ctlplane
       KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
       KeystonePublicApiNetwork: internal_api
       ManilaApiNetwork: internal_api
@@ -40,7 +42,7 @@ parameters:
       RedisNetwork: internal_api
       MysqlNetwork: internal_api
       CephClusterNetwork: storage_mgmt
-      CephPublicNetwork: storage
+      CephMonNetwork: storage
       ControllerHostnameResolveNetwork: internal_api
       ComputeHostnameResolveNetwork: internal_api
       BlockStorageHostnameResolveNetwork: internal_api
@@ -58,6 +60,7 @@ parameters:
     default:
       MongoDbNetwork: MongodbNetwork
       RabbitMqNetwork: RabbitmqNetwork
+      CephPublicNetwork: CephMonNetwork
     description: Mapping older deprecated service names, intended for
                  internal use only, this will be removed in future.
     type: json
index 5739921..b0a9c10 100644 (file)
@@ -57,7 +57,6 @@ resource_registry:
 
   # TripleO overcloud networks
   OS::TripleO::Network: network/networks.yaml
-  OS::TripleO::VipConfig: puppet/vip-config.yaml
 
   OS::TripleO::Network::External: OS::Heat::None
   OS::TripleO::Network::InternalApi: OS::Heat::None
@@ -130,6 +129,7 @@ resource_registry:
 
   # services
   OS::TripleO::Services: puppet/services/services.yaml
+  OS::TripleO::Services::Apache: puppet/services/apache.yaml
   OS::TripleO::Services::CACerts: puppet/services/ca-certs.yaml
   OS::TripleO::Services::CephMon: OS::Heat::None
   OS::TripleO::Services::CephOSD: OS::Heat::None
@@ -166,7 +166,6 @@ resource_registry:
   OS::TripleO::Services::NeutronCorePluginOpencontrail: puppet/services/neutron-plugin-opencontrail.yaml
   OS::TripleO::Services::NeutronCorePluginMidonet: puppet/services/neutron-midonet.yaml
   OS::TripleO::Services::NeutronOvsAgent: puppet/services/neutron-ovs-agent.yaml
-  # ComputeNeutronOvsAgent can be overriden to puppet/services/neutron-ovs-dpdk-agent.yaml also to enable DPDK
   OS::TripleO::Services::ComputeNeutronOvsAgent: puppet/services/neutron-ovs-agent.yaml
   OS::TripleO::Services::Pacemaker: OS::Heat::None
   OS::TripleO::Services::NeutronSriovAgent: OS::Heat::None
@@ -222,6 +221,7 @@ resource_registry:
   OS::TripleO::Services::TripleoFirewall: puppet/services/tripleo-firewall.yaml
   OS::TripleO::Services::OpenDaylight: OS::Heat::None
   OS::TripleO::Services::OpenDaylightOvs: OS::Heat::None
+  OS::TripleO::Services::SensuClient: OS::Heat::None
 
 parameter_defaults:
   EnablePackageInstall: false
diff --git a/overcloud-without-mergepy.yaml b/overcloud-without-mergepy.yaml
deleted file mode 120000 (symlink)
index 23dc646..0000000
+++ /dev/null
@@ -1 +0,0 @@
-overcloud.yaml
\ No newline at end of file
index 38a3680..6e03917 100644 (file)
@@ -1,8 +1,8 @@
-heat_template_version: 2016-04-08
+heat_template_version: 2016-10-14
 
 description: >
   Deploy an OpenStack environment, consisting of several node types (roles),
-  Controller, Compute, BlockStorage, SwiftStorage and CephStorage.  The Storage
+  Controller, Compute, BlockStorage, SwiftStorage and CephStorage. The Storage
   roles enable independent scaling of the storage components, but the minimal
   deployment is one Controller and one Compute node.
 
@@ -13,7 +13,7 @@ parameters:
 
   # Common parameters (not specific to a role)
   CloudName:
-    default: overcloud
+    default: overcloud.localdomain
     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
     type: string
   CloudNameInternal:
@@ -199,6 +199,7 @@ parameters:
       - OS::TripleO::Services::TripleoPackages
       - OS::TripleO::Services::TripleoFirewall
       - OS::TripleO::Services::OpenDaylight
+      - OS::TripleO::Services::SensuClient
     description: A list of service resources (configured in the Heat
                  resource_registry) which represent nested stacks
                  for each service that should get installed on the Controllers.
@@ -224,6 +225,7 @@ parameters:
       - OS::TripleO::Services::TripleoFirewall
       - OS::TripleO::Services::NeutronSriovAgent
       - OS::TripleO::Services::OpenDaylightOvs
+      - OS::TripleO::Services::SensuClient
     description: A list of service resources (configured in the Heat
                  resource_registry) which represent nested stacks
                  for each service that should get installed on the Compute Nodes.
@@ -249,6 +251,7 @@ parameters:
       - OS::TripleO::Services::Snmp
       - OS::TripleO::Services::TripleoPackages
       - OS::TripleO::Services::TripleoFirewall
+      - OS::TripleO::Services::SensuClient
     description: A list of service resources (configured in the Heat
                  resource_registry) which represent nested stacks
                  for each service that should get installed on the BlockStorage nodes.
@@ -275,6 +278,7 @@ parameters:
       - OS::TripleO::Services::Timezone
       - OS::TripleO::Services::TripleoPackages
       - OS::TripleO::Services::TripleoFirewall
+      - OS::TripleO::Services::SensuClient
     description: A list of service resources (configured in the Heat
                  resource_registry) which represent nested stacks
                  for each service that should get installed on the ObjectStorage nodes.
@@ -301,6 +305,7 @@ parameters:
       - OS::TripleO::Services::Timezone
       - OS::TripleO::Services::TripleoPackages
       - OS::TripleO::Services::TripleoFirewall
+      - OS::TripleO::Services::SensuClient
     description: A list of service resources (configured in the Heat
                  resource_registry) which represent nested stacks
                  for each service that should get installed on the CephStorage nodes.
@@ -435,10 +440,7 @@ resources:
         properties:
           CloudDomain: {get_param: CloudDomain}
           controllerExtraConfig: {get_param: controllerExtraConfig}
-          HorizonSecret: {get_resource: HorizonSecret}
-          PcsdPassword: {get_resource: PcsdPassword}
           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
-          RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
           ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map]}
           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
           Hostname:
@@ -449,6 +451,7 @@ resources:
           NodeIndex: '%index%'
           ServiceConfigSettings: {get_attr: [ControllerServiceChain, role_data, config_settings]}
           ServiceNames: {get_attr: [ControllerServiceChain, role_data, service_names]}
+          MonitoringSubscriptions: {get_attr: [ControllerServiceChain, role_data, monitoring_subscriptions]}
 
   ComputeServiceChain:
     type: OS::TripleO::Services
@@ -480,6 +483,7 @@ resources:
           NodeIndex: '%index%'
           ServiceConfigSettings: {get_attr: [ComputeServiceChain, role_data, config_settings]}
           ServiceNames: {get_attr: [ComputeServiceChain, role_data, service_names]}
+          MonitoringSubscriptions: {get_attr: [ComputeServiceChain, role_data, monitoring_subscriptions]}
 
   BlockStorageServiceChain:
     type: OS::TripleO::Services
@@ -512,6 +516,7 @@ resources:
           NodeIndex: '%index%'
           ServiceConfigSettings: {get_attr: [BlockStorageServiceChain, role_data, config_settings]}
           ServiceNames: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
+          MonitoringSubscriptions: {get_attr: [BlockStorageServiceChain, role_data, monitoring_subscriptions]}
 
   ObjectStorageServiceChain:
     type: OS::TripleO::Services
@@ -544,6 +549,7 @@ resources:
           NodeIndex: '%index%'
           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, role_data, config_settings]}
           ServiceNames: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
+          MonitoringSubscriptions: {get_attr: [ObjectStorageServiceChain, role_data, monitoring_subscriptions]}
 
   CephStorageServiceChain:
     type: OS::TripleO::Services
@@ -576,6 +582,7 @@ resources:
           NodeIndex: '%index%'
           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, role_data, config_settings]}
           ServiceNames: {get_attr: [CephStorageServiceChain, role_data, service_names]}
+          MonitoringSubscriptions: {get_attr: [CephStorageServiceChain, role_data, monitoring_subscriptions]}
 
   ControllerIpListMap:
     type: OS::TripleO::Network::Ports::NetIpListMap
@@ -589,6 +596,63 @@ resources:
       ManagementIpList: {get_attr: [Controller, management_ip_address]}
       EnabledServices: {get_attr: [ControllerServiceChain, role_data, service_names]}
       ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]}
+      ServiceHostnameList: {get_attr: [Controller, hostname]}
+
+  ComputeIpListMap:
+    type: OS::TripleO::Network::Ports::NetIpListMap
+    properties:
+      ControlPlaneIpList: {get_attr: [Compute, ip_address]}
+      ExternalIpList: {get_attr: [Compute, external_ip_address]}
+      InternalApiIpList: {get_attr: [Compute, internal_api_ip_address]}
+      StorageIpList: {get_attr: [Compute, storage_ip_address]}
+      StorageMgmtIpList: {get_attr: [Compute, storage_mgmt_ip_address]}
+      TenantIpList: {get_attr: [Compute, tenant_ip_address]}
+      ManagementIpList: {get_attr: [Compute, management_ip_address]}
+      EnabledServices: {get_attr: [ComputeServiceChain, role_data, service_names]}
+      ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]}
+      ServiceHostnameList: {get_attr: [Compute, hostname]}
+
+  BlockStorageIpListMap:
+    type: OS::TripleO::Network::Ports::NetIpListMap
+    properties:
+      ControlPlaneIpList: {get_attr: [BlockStorage, ip_address]}
+      ExternalIpList: {get_attr: [BlockStorage, external_ip_address]}
+      InternalApiIpList: {get_attr: [BlockStorage, internal_api_ip_address]}
+      StorageIpList: {get_attr: [BlockStorage, storage_ip_address]}
+      StorageMgmtIpList: {get_attr: [BlockStorage, storage_mgmt_ip_address]}
+      TenantIpList: {get_attr: [BlockStorage, tenant_ip_address]}
+      ManagementIpList: {get_attr: [BlockStorage, management_ip_address]}
+      EnabledServices: {get_attr: [BlockStorageServiceChain, role_data, service_names]}
+      ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]}
+      ServiceHostnameList: {get_attr: [BlockStorage, hostname]}
+
+  ObjectStorageIpListMap:
+    type: OS::TripleO::Network::Ports::NetIpListMap
+    properties:
+      ControlPlaneIpList: {get_attr: [ObjectStorage, ip_address]}
+      ExternalIpList: {get_attr: [ObjectStorage, external_ip_address]}
+      InternalApiIpList: {get_attr: [ObjectStorage, internal_api_ip_address]}
+      StorageIpList: {get_attr: [ObjectStorage, storage_ip_address]}
+      StorageMgmtIpList: {get_attr: [ObjectStorage, storage_mgmt_ip_address]}
+      TenantIpList: {get_attr: [ObjectStorage, tenant_ip_address]}
+      ManagementIpList: {get_attr: [ObjectStorage, management_ip_address]}
+      EnabledServices: {get_attr: [ObjectStorageServiceChain, role_data, service_names]}
+      ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]}
+      ServiceHostnameList: {get_attr: [ObjectStorage, hostname]}
+
+  CephStorageIpListMap:
+    type: OS::TripleO::Network::Ports::NetIpListMap
+    properties:
+      ControlPlaneIpList: {get_attr: [CephStorage, ip_address]}
+      ExternalIpList: {get_attr: [CephStorage, external_ip_address]}
+      InternalApiIpList: {get_attr: [CephStorage, internal_api_ip_address]}
+      StorageIpList: {get_attr: [CephStorage, storage_ip_address]}
+      StorageMgmtIpList: {get_attr: [CephStorage, storage_mgmt_ip_address]}
+      TenantIpList: {get_attr: [CephStorage, tenant_ip_address]}
+      ManagementIpList: {get_attr: [CephStorage, management_ip_address]}
+      EnabledServices: {get_attr: [CephStorageServiceChain, role_data, service_names]}
+      ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]}
+      ServiceHostnameList: {get_attr: [CephStorage, hostname]}
 
   allNodesConfig:
     type: OS::TripleO::AllNodes::SoftwareConfig
@@ -619,14 +683,36 @@ resources:
           - {get_attr: [CephStorageServiceChain, role_data, service_names]}
       controller_ips: {get_attr: [Controller, ip_address]}
       controller_names: {get_attr: [Controller, hostname]}
-      service_ips: {get_attr: [ControllerIpListMap, service_ips]}
+      service_ips:
+        # Note (shardy) this somewhat complex yaql may be replaced
+        # with a map_deep_merge function in ocata.  It merges the
+        # list of maps, but appends to colliding lists when a service
+        # is deployed on more than one role
+        yaql:
+          expression: dict($.data.l.where($ != null).selectMany($.items()).groupBy($[0], $[1], [$[0], $[1].flatten()]))
+          data:
+            l:
+              - {get_attr: [ControllerIpListMap, service_ips]}
+              - {get_attr: [ComputeIpListMap, service_ips]}
+              - {get_attr: [BlockStorageIpListMap, service_ips]}
+              - {get_attr: [ObjectStorageIpListMap, service_ips]}
+              - {get_attr: [CephStorageIpListMap, service_ips]}
+      service_node_names:
+        yaql:
+          expression: dict($.data.l.where($ != null).selectMany($.items()).groupBy($[0], $[1], [$[0], $[1].flatten()]))
+          data:
+            l:
+              - {get_attr: [ControllerIpListMap, service_hostnames]}
+              - {get_attr: [ComputeIpListMap, service_hostnames]}
+              - {get_attr: [BlockStorageIpListMap, service_hostnames]}
+              - {get_attr: [ObjectStorageIpListMap, service_hostnames]}
+              - {get_attr: [CephStorageIpListMap, service_hostnames]}
       # FIXME(shardy): These require further work to move into service_ips
-      rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, RabbitmqNetwork]}]}
       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MemcachedNetwork]}]}
       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
-      ceph_mon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CephPublicNetwork]}]}
-      ceph_mon_node_names: {get_attr: [Controller, hostname]}
+      NetVipMap: {get_attr: [VipMap, net_ip_map]}
+      ServiceNetMap: {get_attr: [ServiceNetMap, service_net_map_lower]}
       DeployIdentifier: {get_param: DeployIdentifier}
       UpdateIdentifier: {get_param: UpdateIdentifier}
 
@@ -722,45 +808,6 @@ resources:
       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
       # No tenant or management VIP required
 
-  VipConfig:
-    type: OS::TripleO::VipConfig
-
-  VipDeployment:
-    type: OS::Heat::StructuredDeployments
-    properties:
-      name: VipDeployment
-      config: {get_resource: VipConfig}
-      servers: {get_attr: [Controller, attributes, nova_server_resource]}
-      input_values:
-        # service VIP mappings
-        keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystoneAdminApiNetwork]}]}
-        keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, KeystonePublicApiNetwork]}]}
-        neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NeutronApiNetwork]}]}
-        cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CinderApiNetwork]}]}
-        glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceApiNetwork]}]}
-        glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GlanceRegistryNetwork]}]}
-        swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SwiftProxyNetwork]}]}
-        nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaApiNetwork]}]}
-        nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, NovaMetadataNetwork]}]}
-        ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, CeilometerApiNetwork]}]}
-        aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, AodhApiNetwork]}]}
-        gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, GnocchiApiNetwork]}]}
-        heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HeatApiNetwork]}]}
-        horizon_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, HorizonNetwork]}]}
-        redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
-        manila_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, ManilaApiNetwork]}]}
-        mysql_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, MysqlNetwork]}]}
-        rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, RabbitMqNetwork]}]}
-        # direct configuration of Virtual IPs for each network
-        control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
-        public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
-        internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
-        sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, SaharaApiNetwork]}]}
-        ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, IronicApiNetwork]}]}
-        opendaylight_api_vip: {get_attr: [VipMap, net_ip_map, {get_attr: [ServiceNetMap, service_net_map, OpenDaylightApiNetwork]}]}
-        storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
-        storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
-
   ControllerSwiftDeployment:
     type: OS::Heat::StructuredDeployments
     properties:
@@ -780,7 +827,6 @@ resources:
     properties:
       controller_swift_devices: {get_attr: [Controller, swift_device]}
       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
-      controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
 
   ControllerAllNodesDeployment:
     type: OS::Heat::StructuredDeployments
@@ -952,6 +998,7 @@ resources:
       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
       RoleData: {get_attr: [CephStorageServiceChain, role_data]}
 
+
 outputs:
   ManagedEndpoints:
     description: Asserts that the keystone endpoints have been provisioned.
index 644c193..7aa29b2 100644 (file)
@@ -12,22 +12,23 @@ parameters:
     type: comma_delimited_list
   service_ips:
     type: json
+  service_node_names:
+    type: json
   controller_names:
     type: comma_delimited_list
-  rabbit_node_ips:
-    type: comma_delimited_list
   memcache_node_ips:
     type: comma_delimited_list
   keystone_public_api_node_ips:
     type: comma_delimited_list
   keystone_admin_api_node_ips:
     type: comma_delimited_list
-  ceph_mon_node_ips:
-    type: comma_delimited_list
-  ceph_mon_node_names:
-    type: comma_delimited_list
+  NetVipMap:
+    type: json
+  ServiceNetMap:
+    type: json
   DeployIdentifier:
     type: string
+    default: ''
     description: >
       Setting this to a unique value will re-run any deployment tasks which
       perform configuration on a Heat stack-update.
@@ -78,6 +79,7 @@ resources:
                             str_split: [',', {get_param: enabled_services}]
                   # provides a mapping of service_name_ips to a list of IPs
                   - {get_param: service_ips}
+                  - {get_param: service_node_names}
                   - controller_node_ips:
                       list_join:
                       - ','
@@ -86,18 +88,6 @@ resources:
                       list_join:
                       - ','
                       - {get_param: controller_names}
-                    galera_node_names:
-                      list_join:
-                      - ','
-                      - {get_param: controller_names}
-                    rabbitmq_node_ips: &rabbit_nodes_array
-                      str_replace:
-                        template: "['SERVERS_LIST']"
-                        params:
-                          SERVERS_LIST:
-                            list_join:
-                            - "','"
-                            - {get_param: rabbit_node_ips}
                     memcached_node_ips_v6:
                       str_replace:
                         template: "['inet6:[SERVERS_LIST]']"
@@ -122,39 +112,57 @@ resources:
                             list_join:
                             - "','"
                             - {get_param: keystone_admin_api_node_ips}
-                    tripleo::profile::base::ceph::ceph_mon_initial_members:
-                      list_join:
-                      - ','
-                      - {get_param: ceph_mon_node_names}
-                    tripleo::profile::base::ceph::ceph_mon_host:
-                      list_join:
-                      - ','
-                      - {get_param: ceph_mon_node_ips}
-                    tripleo::profile::base::ceph::ceph_mon_host_v6:
-                      str_replace:
-                        template: "'[IPS_LIST]'"
-                        params:
-                          IPS_LIST:
-                            list_join:
-                            - '],['
-                            - {get_param: ceph_mon_node_ips}
-                    # NOTE(gfidente): interpolation with %{} in the
-                    # hieradata file can't be used as it returns string
-                    ceilometer::rabbit_hosts: *rabbit_nodes_array
-                    aodh::rabbit_hosts: *rabbit_nodes_array
-                    cinder::rabbit_hosts: *rabbit_nodes_array
-                    glance::notify::rabbitmq::rabbit_hosts: *rabbit_nodes_array
-                    manila::rabbit_hosts: *rabbit_nodes_array
-                    heat::rabbit_hosts: *rabbit_nodes_array
-                    neutron::rabbit_hosts: *rabbit_nodes_array
-                    nova::rabbit_hosts: *rabbit_nodes_array
-                    keystone::rabbit_hosts: *rabbit_nodes_array
-                    sahara::rabbit_hosts: *rabbit_nodes_array
-                    ironic::rabbit_hosts: *rabbit_nodes_array
 
                     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]}
+                    # 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::redis_notification::haproxy_monitor_ip: {get_param: [NetVipMap, ctlplane]}
 
 outputs:
   config_id:
index a83e0cf..df6b724 100644 (file)
@@ -15,6 +15,7 @@ parameters:
     default: {}
   DeployIdentifier:
      type: string
+     default: ''
      description: Value which changes if the node configuration may need to be re-applied
 
 resources:
index 829456b..fe2a916 100644 (file)
@@ -90,6 +90,9 @@ parameters:
   ServiceNames:
     type: comma_delimited_list
     default: []
+  MonitoringSubscriptions:
+    type: comma_delimited_list
+    default: []
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
@@ -252,6 +255,7 @@ resources:
             service_names:
               mapped_data:
                 service_names: {get_param: ServiceNames}
+                sensu::subscriptions: {get_param: MonitoringSubscriptions}
             service_configs:
               mapped_data:
                 map_replace:
index 6416c43..0620bc6 100644 (file)
@@ -10,6 +10,7 @@ parameters:
     type: json
   DeployIdentifier:
      type: string
+     default: ''
      description: Value which changes if the node configuration may need to be re-applied
   RoleData:
     type: json
index ef3f08f..bc26df7 100644 (file)
@@ -30,14 +30,6 @@ parameters:
     default: default
     description: Name of an existing Nova key pair to enable SSH access to the instances
     type: string
-  SnmpdReadonlyUserName:
-    default: ro_snmp_user
-    description: The user name for SNMPd with readonly rights running on all Overcloud nodes
-    type: string
-  SnmpdReadonlyUserPassword:
-    description: The user password for SNMPd with readonly rights running on all Overcloud nodes
-    type: string
-    hidden: true
   UpdateIdentifier:
     default: ''
     type: string
@@ -92,6 +84,9 @@ parameters:
   ServiceNames:
     type: comma_delimited_list
     default: []
+  MonitoringSubscriptions:
+    type: comma_delimited_list
+    default: []
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
@@ -232,8 +227,6 @@ resources:
       server: {get_resource: BlockStorage}
       config: {get_resource: BlockStorageConfig}
       input_values:
-        snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
-        snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
 
   # Map heat metadata into hiera datafiles
@@ -258,6 +251,7 @@ resources:
             service_names:
               mapped_data:
                 service_names: {get_param: ServiceNames}
+                sensu::subscriptions: {get_param: MonitoringSubscriptions}
             service_configs:
               mapped_data:
                 map_replace:
@@ -270,8 +264,6 @@ resources:
             volume:
               mapped_data:
                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
-                snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
-                snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
 
   # Resource for site-specific injection of root certificate
   NodeTLSCAData:
index d0c6082..358ec5a 100644 (file)
@@ -15,6 +15,7 @@ parameters:
     default: {}
   DeployIdentifier:
      type: string
+     default: ''
      description: Value which changes if the node configuration may need to be re-applied
 
 resources:
index 1790aa0..0f9e031 100644 (file)
@@ -107,6 +107,9 @@ parameters:
   ServiceNames:
     type: comma_delimited_list
     default: []
+  MonitoringSubscriptions:
+    type: comma_delimited_list
+    default: []
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
@@ -271,6 +274,7 @@ resources:
             service_names:
               mapped_data:
                 service_names: {get_param: ServiceNames}
+                sensu::subscriptions: {get_param: MonitoringSubscriptions}
             service_configs:
               mapped_data:
                 map_replace:
index 4af6cb4..c97c3bc 100644 (file)
@@ -15,6 +15,7 @@ parameters:
     default: {}
   DeployIdentifier:
      type: string
+     default: ''
      description: Value which changes if the node configuration may need to be re-applied
 
 resources:
index 28fd08d..c85546f 100644 (file)
@@ -23,18 +23,10 @@ parameters:
         ...
       }
     type: json
-  CorosyncIPv6:
-    default: false
-    description: Enable IPv6 in Corosync
-    type: boolean
   Debug:
     default: ''
     description: Set to True to enable debugging on all services.
     type: string
-  EnableFencing:
-    default: false
-    description: Whether to enable fencing in Pacemaker or not.
-    type: boolean
   EnableLoadBalancer:
     default: true
     description: Whether to deploy a LoadBalancer on the Controller
@@ -45,48 +37,12 @@ parameters:
       Additional hieradata to inject into the cluster, note that
       ControllerExtraConfig takes precedence over ExtraConfig.
     type: json
-  FencingConfig:
-    default: {}
-    description: |
-      Pacemaker fencing configuration. The JSON should have
-      the following structure:
-        {
-          "devices": [
-            {
-              "agent": "AGENT_NAME",
-              "host_mac": "HOST_MAC_ADDRESS",
-              "params": {"PARAM_NAME": "PARAM_VALUE"}
-            }
-          ]
-        }
-      For instance:
-        {
-          "devices": [
-            {
-              "agent": "fence_xvm",
-              "host_mac": "52:54:00:aa:bb:cc",
-              "params": {
-                "multicast_address": "225.0.0.12",
-                "port": "baremetal_0",
-                "manage_fw": true,
-                "manage_key_file": true,
-                "key_file": "/etc/fence_xvm.key",
-                "key_file_password": "abcdef"
-              }
-            }
-          ]
-        }
-    type: json
   OvercloudControlFlavor:
     description: Flavor for control nodes to request when deploying.
     default: baremetal
     type: string
     constraints:
       - custom_constraint: nova.flavor
-  HorizonSecret:
-    description: Secret key for Django
-    type: string
-    hidden: true
   controllerImage:
     type: string
     default: overcloud-full
@@ -96,76 +52,23 @@ parameters:
     default: 'REBUILD_PRESERVE_EPHEMERAL'
     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
     type: string
-  InstanceNameTemplate:
-    default: 'instance-%08x'
-    description: Template string to be used to generate instance names
-    type: string
   KeyName:
     default: default
     description: Name of an existing Nova key pair to enable SSH access to the instances
     type: string
     constraints:
       - custom_constraint: nova.keypair
-  ManageFirewall:
-    default: false
-    description: Whether to manage IPtables rules.
-    type: boolean
-  MemcachedIPv6:
-    default: false
-    description: Enable IPv6 features in Memcached.
-    type: boolean
-  PurgeFirewallRules:
-    default: false
-    description: Whether IPtables rules should be purged before setting up the new ones.
-    type: boolean
-  NeutronMetadataProxySharedSecret:
-    description: Shared secret to prevent spoofing
-    type: string
-    hidden: true
-  NeutronPassword:
-    description: The password for the neutron service and db account, used by neutron agents.
-    type: string
-    hidden: true
   NeutronPublicInterface:
     default: nic1
     description: What interface to bridge onto br-ex for network nodes.
     type: string
-  NovaEnableDBPurge:
-    default: true
-    description: |
-        Whether to create cron job for purging soft deleted rows in Nova database.
-    type: boolean
-  NovaIPv6:
-    default: false
-    description: Enable IPv6 features in Nova
-    type: boolean
-  NovaPassword:
-    description: The password for the nova service and db account, used by nova-api.
-    type: string
-    hidden: true
-  PcsdPassword:
-    type: string
-    description: The password for the 'pcsd' user.
-    hidden: true
-  RedisPassword:
-    description: The password for Redis
-    type: string
-    hidden: true
   RedisVirtualIP:
     type: string
     default: ''  # Has to be here because of the ignored empty value bug
-  RedisVirtualIPUri:
-    type: string
-    default: ''  # Has to be here because of the ignored empty value bug
-    description: An IP address which is wrapped in brackets in case of IPv6
   SwiftRawDisks:
     default: {}
     description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
     type: json
-  UpgradeLevelNovaCompute:
-    type: string
-    description: Nova Compute upgrade level
-    default: ''
   ServiceNetMap:
     default: {}
     description: Mapping of service_name -> network name. Typically set
@@ -225,6 +128,9 @@ parameters:
   ServiceNames:
     type: comma_delimited_list
     default: []
+  MonitoringSubscriptions:
+    type: comma_delimited_list
+    default: []
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
@@ -392,45 +298,9 @@ resources:
       server: {get_resource: Controller}
       input_values:
         bootstack_nodeid: {get_attr: [Controller, name]}
-        horizon_secret: {get_param: HorizonSecret}
-        debug: {get_param: Debug}
-        keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
-        keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
-        keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
-        enable_fencing: {get_param: EnableFencing}
         enable_load_balancer: {get_param: EnableLoadBalancer}
-        manage_firewall: {get_param: ManageFirewall}
-        purge_firewall_rules: {get_param: PurgeFirewallRules}
-        neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
-        nova_enable_db_purge: {get_param: NovaEnableDBPurge}
-        nova_ipv6: {get_param: NovaIPv6}
-        corosync_ipv6: {get_param: CorosyncIPv6}
-        memcached_ipv6: {get_param: MemcachedIPv6}
-        nova_password: {get_param: NovaPassword}
-        upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
-        instance_name_template: {get_param: InstanceNameTemplate}
-        fencing_config: {get_param: FencingConfig}
-        pcsd_password: {get_param: PcsdPassword}
         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
-        glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
-        neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
-        nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
-        nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
-        horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
-        horizon_subnet:
-          str_replace:
-            template: "['SUBNET']"
-            params:
-              SUBNET:
-                get_attr:
-                  - NetIpMap
-                  - net_ip_map
-                  - str_replace:
-                      template: "NETWORK_subnet"
-                      params:
-                        NETWORK: {get_param: [ServiceNetMap, HorizonNetwork]}
         redis_vip: {get_param: RedisVirtualIP}
-        ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
 
   # Map heat metadata into hiera datafiles
   ControllerConfig:
@@ -450,7 +320,7 @@ resources:
             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
             - bootstrap_node # provided by BootstrapNodeConfig
             - all_nodes # provided by allNodesConfig
-            - vip_data # provided by vip-config
+            - vip_data # provided by allNodesConfig
             - '"%{::osfamily}"'
             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
@@ -465,6 +335,7 @@ resources:
             service_names:
               mapped_data:
                 service_names: {get_param: ServiceNames}
+                sensu::subscriptions: {get_param: MonitoringSubscriptions}
             service_configs:
               mapped_data:
                 map_replace:
@@ -482,44 +353,11 @@ resources:
                 bootstack_nodeid: {get_input: bootstack_nodeid}
 
                 # Pacemaker
-                enable_fencing: {get_input: enable_fencing}
                 enable_load_balancer: {get_input: enable_load_balancer}
-                hacluster_pwd: {get_input: pcsd_password}
-                corosync_ipv6: {get_input: corosync_ipv6}
-                tripleo::fencing::config: {get_input: fencing_config}
-
-                # Neutron
-                neutron::bind_host: {get_input: neutron_api_network}
-                neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
-                snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
-                snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
-
-                # Nova
-                nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
-                nova::use_ipv6: {get_input: nova_ipv6}
-                nova::api::api_bind_address: {get_input: nova_api_network}
-                nova::api::metadata_listen: {get_input: nova_metadata_network}
-                nova::glance_api_servers: {get_input: glance_api_servers}
-                nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
-                nova::api::instance_name_template: {get_input: instance_name_template}
-                nova::vncproxy::host: {get_input: nova_api_network}
-                nova_enable_db_purge: {get_input: nova_enable_db_purge}
-
-                # Horizon
-                apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
-                apache::ip: {get_input: horizon_network}
-                horizon::django_debug: {get_input: debug}
-                horizon::secret_key: {get_input: horizon_secret}
-                horizon::bind_address: {get_input: horizon_network}
-                horizon::keystone_url: {get_input: keystone_auth_uri}
 
                 # Redis
                 redis_vip: {get_input: redis_vip}
-                # Firewall
-                tripleo::firewall::manage_firewall: {get_input: manage_firewall}
-                tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
                 # Misc
-                memcached_ipv6: {get_input: memcached_ipv6}
                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
 
@@ -654,20 +492,6 @@ outputs:
                   template: "NETWORK_uri"
                   params:
                     NETWORK: {get_param: [ServiceNetMap, SwiftMgmtNetwork]}
-  swift_proxy_memcache:
-    description: Swift proxy-memcache value
-    value:
-      str_replace:
-        template: "IP:11211"
-        params:
-          IP:
-            get_attr:
-              - NetIpMap
-              - net_ip_map
-              - str_replace:
-                  template: "NETWORK_uri"
-                  params:
-                    NETWORK: {get_param: [ServiceNetMap, MemcachedNetwork]}
   tls_key_modulus_md5:
     description: MD5 checksum of the TLS Key Modulus
     value: {get_attr: [NodeTLSData, key_modulus_md5]}
index 4308052..65afffa 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionAodhApi:
+    default: 'overcloud-ceilometer-aodh-api'
+    type: string
 
 resources:
   AodhBase:
@@ -27,14 +30,23 @@ resources:
       DefaultPasswords: {get_param: DefaultPasswords}
       EndpointMap: {get_param: EndpointMap}
 
+  ApacheServiceBase:
+    type: ./apache.yaml
+    properties:
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+      EndpointMap: {get_param: EndpointMap}
+
 outputs:
   role_data:
     description: Role data for the Aodh API service.
     value:
       service_name: aodh_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionAodhApi}
       config_settings:
         map_merge:
           - get_attr: [AodhBase, role_data, config_settings]
+          - get_attr: [ApacheServiceBase, role_data, config_settings]
           - aodh::wsgi::apache::ssl: false
             aodh::api::service_name: 'httpd'
             tripleo.aodh_api.firewall_rules:
index 3988c94..405c500 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionAodhEvaluator:
+    default: 'overcloud-ceilometer-aodh-evaluator'
+    type: string
 
 resources:
   AodhBase:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Aodh Evaluator service.
     value:
       service_name: aodh_evaluator
+      monitoring_subscription: {get_param: MonitoringSubscriptionAodhEvaluator}
       config_settings:
         get_attr: [AodhBase, role_data, config_settings]
       step_config: |
index bc1ccde..fc4e8b3 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionAodhListener:
+    default: 'overcloud-ceilometer-aodh-listener'
+    type: string
 
 resources:
   AodhBase:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Aodh Listener service.
     value:
       service_name: aodh_listener
+      monitoring_subscription: {get_param: MonitoringSubscriptionAodhListener}
       config_settings:
         get_attr: [AodhBase, role_data, config_settings]
       step_config: |
index 66e9f3e..2e51c63 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionAodhNotifier:
+    default: 'overcloud-ceilometer-aodh-notifier'
+    type: string
 
 resources:
   AodhBase:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Aodh Notifier service.
     value:
       service_name: aodh_notifier
+      monitoring_subscription: {get_param: MonitoringSubscriptionAodhNotifier}
       config_settings:
         get_attr: [AodhBase, role_data, config_settings]
       step_config: |
diff --git a/puppet/services/apache.yaml b/puppet/services/apache.yaml
new file mode 100644 (file)
index 0000000..7595e4c
--- /dev/null
@@ -0,0 +1,42 @@
+heat_template_version: 2016-10-14
+
+description: >
+  Apache service configured with Puppet. Note this is typically included
+  automatically via other services which run via Apache.
+
+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 Apache role.
+    value:
+      service_name: apache
+      config_settings:
+        # for the given network; replacement examples (eg. for internal_api):
+        # internal_api -> IP
+        # internal_api_uri -> [IP]
+        # internal_api_subnet - > IP/CIDR
+        apache::ip: {get_param: [ServiceNetMap, ApacheNetwork]}
+        apache::server_signature: 'Off'
+        apache::server_tokens: 'Prod'
+        apache_remote_proxy_ips_network:
+          str_replace:
+            template: "NETWORK_subnet"
+            params:
+              NETWORK: {get_param: [ServiceNetMap, ApacheNetwork]}
+        apache::mod::remoteip::proxy_ips:
+          - "%{hiera('apache_remote_proxy_ips_network')}"
index 72bad63..5d980d7 100644 (file)
@@ -22,6 +22,9 @@ parameters:
     description: The password for the redis service account.
     type: string
     hidden: true
+  MonitoringSubscriptionCeilometerCentral:
+    default: 'overcloud-ceilometer-agent-central'
+    type: string
 
 resources:
   CeilometerServiceBase:
@@ -36,6 +39,7 @@ outputs:
     description: Role data for the Ceilometer Central Agent role.
     value:
       service_name: ceilometer_agent_central
+      monitoring_subscription: {get_param: MonitoringSubscriptionCeilometerCentral}
       config_settings:
         map_merge:
           - get_attr: [CeilometerServiceBase, role_data, config_settings]
index 5bfecfe..5457539 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionCeilometerCompute:
+    default: 'overcloud-ceilometer-agent-compute'
+    type: string
 
 resources:
   CeilometerServiceBase:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Ceilometer Compute Agent role.
     value:
       service_name: ceilometer_agent_compute
+      monitoring_subscription: {get_param: MonitoringSubscriptionCeilometerCompute}
       config_settings:
         get_attr: [CeilometerServiceBase, role_data, config_settings]
       step_config: |
index 7873706..bedb8b0 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     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:
@@ -33,6 +36,7 @@ outputs:
     description: Role data for the Ceilometer Notification Agent role.
     value:
       service_name: ceilometer_agent_notification
+      monitoring_subscription: {get_param: MonitoringSubscriptionCeilometerNotification}
       config_settings:
         get_attr: [CeilometerServiceBase, role_data, config_settings]
       step_config: |
index 201a2b7..5df9f2b 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     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:
@@ -28,13 +31,22 @@ resources:
       DefaultPasswords: {get_param: DefaultPasswords}
       EndpointMap: {get_param: EndpointMap}
 
+  ApacheServiceBase:
+    type: ./apache.yaml
+    properties:
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+      EndpointMap: {get_param: EndpointMap}
+
 outputs:
   role_data:
     description: Role data for the Ceilometer API role.
     value:
       service_name: ceilometer_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionCeilometerApi}
       config_settings:
         map_merge:
+          - get_attr: [ApacheServiceBase, role_data, config_settings]
           - get_attr: [CeilometerServiceBase, role_data, config_settings]
           - tripleo.ceilometer_api.firewall_rules:
               '124 ceilometer':
index ef7ffbd..9dbb275 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     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:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Ceilometer Collector role.
     value:
       service_name: ceilometer_collector
+      monitoring_subscription: {get_param: MonitoringSubscriptionCeilometerCollector}
       config_settings:
         get_attr: [CeilometerServiceBase, role_data, config_settings]
       step_config: |
index 63a6d41..3b811c4 100644 (file)
@@ -18,7 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
-
+  MonitoringSubscriptionCeilometerExpirer:
+    default: 'overcloud-ceilometer-expirer'
+    type: string
 
 resources:
   CeilometerServiceBase:
@@ -33,6 +35,7 @@ outputs:
     description: Role data for the Ceilometer Expirer role.
     value:
       service_name: ceilometer_expirer
+      monitoring_subscription: {get_param: MonitoringSubscriptionCeilometerExpirer}
       config_settings:
         get_attr: [CeilometerServiceBase, role_data, config_settings]
       step_config: |
index 4d98546..ce8d915 100644 (file)
@@ -20,9 +20,6 @@ parameters:
   CephClusterFSID:
     type: string
     description: The Ceph cluster FSID. Must be a UUID.
-  CephIPv6:
-    default: False
-    type: boolean
   CinderRbdPoolName:
     default: volumes
     type: string
@@ -72,7 +69,6 @@ outputs:
     value:
       service_name: ceph_base
       config_settings:
-        tripleo::profile::base::ceph::ceph_ipv6: {get_param: CephIPv6}
         tripleo::profile::base::ceph::enable_ceph_storage: {get_param: ControllerEnableCephStorage}
         ceph::profile::params::osd_pool_default_min_size: 1
         ceph::profile::params::osds: {/srv/data: {}}
@@ -93,8 +89,8 @@ outputs:
           str_replace:
             template: "NETWORK_subnet"
             params:
-              NETWORK: {get_param: [ServiceNetMap, CephPublicNetwork]}
-        ceph::profile::params::public_addr: {get_param: [ServiceNetMap, CephPublicNetwork]}
+              NETWORK: {get_param: [ServiceNetMap, CephMonNetwork]}
+        ceph::profile::params::public_addr: {get_param: [ServiceNetMap, CephMonNetwork]}
         ceph::profile::params::client_keys:
           str_replace:
             template: "{
index a9e4621..b482dd2 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionCephClient:
+    default: 'overcloud-ceph-client'
+    type: string
 
 resources:
   CephBase:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Cinder OSD service.
     value:
       service_name: ceph_client
+      monitoring_subscription: {get_param: MonitoringSubscriptionCephClient}
       config_settings:
         get_attr: [CephBase, role_data, config_settings]
       step_config: |
index 959cee2..52c4824 100644 (file)
@@ -47,12 +47,16 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionCephExternal:
+    default: 'overcloud-ceph-external'
+    type: string
 
 outputs:
   role_data:
     description: Role data for the Ceph External service.
     value:
       service_name: ceph_external
+      monitoring_subscription: {get_param: MonitoringSubscriptionCephExternal}
       config_settings:
         tripleo::profile::base::ceph::ceph_mon_host: {get_param: CephExternalMonHost}
         ceph::profile::params::fsid: {get_param: CephClusterFSID}
index f634ce8..a2b3f13 100644 (file)
@@ -53,6 +53,9 @@ parameters:
       }
     default: {}
     type: json
+  MonitoringSubscriptionCephMon:
+    default: 'overcloud-ceph-mon'
+    type: string
 
 resources:
   CephBase:
@@ -67,6 +70,7 @@ outputs:
     description: Role data for the Ceph Monitor service.
     value:
       service_name: ceph_mon
+      monitoring_subscription: {get_param: MonitoringSubscriptionCephMon}
       config_settings:
         map_merge:
           - get_attr: [CephBase, role_data, config_settings]
index d18ccab..f637872 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionCephOsd:
+    default: 'overcloud-ceph-osd'
+    type: string
 
 resources:
   CephBase:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Cinder OSD service.
     value:
       service_name: ceph_osd
+      monitoring_subscription: {get_param: MonitoringSubscriptionCephOsd}
       config_settings:
         map_merge:
           - get_attr: [CephBase, role_data, config_settings]
index 5df0739..94c94a6 100644 (file)
@@ -31,6 +31,9 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  MonitoringSubscriptionCinderApi:
+    default: 'overcloud-cinder-api'
+    type: string
 
 resources:
 
@@ -46,6 +49,7 @@ outputs:
     description: Role data for the Cinder API role.
     value:
       service_name: cinder_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionCinderApi}
       config_settings:
         map_merge:
           - get_attr: [CinderBase, role_data, config_settings]
index f92fdfd..8079545 100644 (file)
@@ -30,6 +30,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionCinderBackup:
+    default: 'overcloud-cinder-backup'
+    type: string
 
 resources:
 
@@ -45,6 +48,7 @@ outputs:
     description: Role data for the Cinder Backup role.
     value:
       service_name: cinder_backup
+      monitoring_subscription: {get_param: MonitoringSubscriptionCinderBackup}
       config_settings:
         map_merge:
           - get_attr: [CinderBase, role_data, config_settings]
index 129706b..1326e26 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionCinderScheduler:
+    default: 'overcloud-cinder-scheduler'
+    type: string
 
 resources:
 
@@ -33,6 +36,7 @@ outputs:
     description: Role data for the Cinder Scheduler role.
     value:
       service_name: cinder_scheduler
+      monitoring_subscription: {get_param: MonitoringSubscriptionCinderScheduler}
       config_settings:
         map_merge:
           - get_attr: [CinderBase, role_data, config_settings]
index de7e6ba..c84c784 100644 (file)
@@ -56,6 +56,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionCinderVolume:
+    default: 'overcloud-cinder-volume'
+    type: string
 
 resources:
 
@@ -71,6 +74,7 @@ outputs:
     description: Role data for the Cinder Volume role.
     value:
       service_name: cinder_volume
+      monitoring_subscription: {get_param: MonitoringSubscriptionCinderVolume}
       config_settings:
         map_merge:
           - get_attr: [CinderBase, role_data, config_settings]
@@ -95,10 +99,6 @@ outputs:
             # internal_api -> IP
             # internal_api_uri -> [IP]
             # internal_api_subnet - > IP/CIDR
-            tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address:
-              str_replace:
-                template: "NETWORK_uri"
-                params:
-                  NETWORK: {get_param: [ServiceNetMap, CinderIscsiNetwork]}
+            tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_param: [ServiceNetMap, CinderIscsiNetwork]}
       step_config: |
         include ::tripleo::profile::base::cinder::volume
index d2376af..adc1b4c 100644 (file)
@@ -73,12 +73,16 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  MonitoringSubscriptionGlanceApi:
+    default: 'overcloud-glance-api'
+    type: string
 
 outputs:
   role_data:
     description: Role data for the Glance API role.
     value:
       service_name: glance_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionGlanceApi}
       config_settings:
         glance::api::database_connection:
           list_join:
@@ -90,14 +94,14 @@ outputs:
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/glance'
         glance::api::bind_port: {get_param: [EndpointMap, GlanceInternal, port]}
-        glance::api::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
-        glance::api::identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
+        glance::api::authtoken::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
+        glance::api::authtoken::auth_url: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
         glance::api::registry_host:
           str_replace:
             template: "'REGISTRY_HOST'"
             params:
               REGISTRY_HOST: {get_param: [EndpointMap, GlanceRegistryInternal, host]}
-        glance::api::keystone_password: {get_param: GlancePassword}
+        glance::api::authtoken::password: {get_param: GlancePassword}
         glance::api::enable_proxy_headers_parsing: true
         glance::api::debug: {get_param: Debug}
         glance::api::workers: {get_param: GlanceWorkers}
@@ -128,7 +132,7 @@ outputs:
               - 9292
               - 13292
         glance::keystone::auth::tenant: 'service'
-        glance::api::keystone_tenant: 'service'
+        glance::api::authtoken::project_name: 'service'
         glance::api::pipeline: 'keystone'
         glance::api::show_image_direct_url: true
         # NOTE: bind IP is found in Heat replacing the network name with the
index 06ef937..d5f01d4 100644 (file)
@@ -30,12 +30,16 @@ parameters:
     default: 0
     description: Number of workers for Glance service.
     type: number
+  MonitoringSubscriptionGlanceRegistry:
+    default: 'overcloud-glance-registry'
+    type: string
 
 outputs:
   role_data:
     description: Role data for the Glance Registry role.
     value:
       service_name: glance_registry
+      monitoring_subscription: {get_param: MonitoringSubscriptionGlanceRegistry}
       config_settings:
         glance::registry::database_connection:
           list_join:
@@ -46,11 +50,11 @@ outputs:
               - '@'
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/glance'
-        glance::registry::keystone_password: {get_param: GlancePassword}
-        glance::registry::keystone_tenant: 'service'
+        glance::registry::authtoken::password: {get_param: GlancePassword}
+        glance::registry::authtoken::project_name: 'service'
         glance::registry::pipeline: 'keystone'
-        glance::registry::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
-        glance::registry::identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
+        glance::registry::authtoken::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
+        glance::registry::authtoken::auth_url: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
         glance::registry::debug: {get_param: Debug}
         glance::registry::workers: {get_param: GlanceWorkers}
         glance::db::mysql::user: glance
@@ -61,7 +65,6 @@ outputs:
           - "%{hiera('mysql_bind_host')}"
         glance::registry::db::database_db_max_retries: -1
         glance::registry::db::database_max_retries: -1
-
         tripleo.glance_registry.firewall_rules:
           '112 glance_registry':
             dport:
index ec42f3f..650865e 100644 (file)
@@ -33,8 +33,12 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  MonitoringSubscriptionGnocchiApi:
+    default: 'overcloud-gnocchi-api'
+    type: string
 
 resources:
+
   GnocchiServiceBase:
     type: ./gnocchi-base.yaml
     properties:
@@ -42,13 +46,22 @@ resources:
       DefaultPasswords: {get_param: DefaultPasswords}
       EndpointMap: {get_param: EndpointMap}
 
+  ApacheServiceBase:
+    type: ./apache.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_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionGnocchiApi}
       config_settings:
         map_merge:
+          - get_attr: [ApacheServiceBase, role_data, config_settings]
           - get_attr: [GnocchiServiceBase, role_data, config_settings]
           - tripleo.gnocchi_api.firewall_rules:
               '129 gnocchi-api':
index 205d055..ebdebd1 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     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:
@@ -32,6 +35,7 @@ outputs:
     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]
index 018ad2b..04339f4 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     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:
@@ -32,6 +35,7 @@ outputs:
     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]
index 691540a..974928c 100644 (file)
@@ -44,12 +44,16 @@ parameters:
         Specifies the interface where the public-facing virtual ip will be assigned.
         This should be int_public when a VLAN is being used.
     type: string
+  MonitoringSubscriptionHaproxy:
+    default: 'overcloud-haproxy'
+    type: string
 
 outputs:
   role_data:
     description: Role data for the HAproxy role.
     value:
       service_name: haproxy
+      monitoring_subscription: {get_param: MonitoringSubscriptionHaproxy}
       config_settings:
         tripleo.haproxy.firewall_rules:
           '107 haproxy stats':
index a15ea32..61a6907 100644 (file)
@@ -30,6 +30,9 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  MonitoringSubscriptionHeatApiCnf:
+    default: 'overcloud-heat-api-cfn'
+    type: string
 
 resources:
   HeatBase:
@@ -44,6 +47,7 @@ outputs:
     description: Role data for the Heat CloudFormation API role.
     value:
       service_name: heat_api_cfn
+      monitoring_subscription: {get_param: MonitoringSubscriptionHeatApiCnf}
       config_settings:
         map_merge:
           - get_attr: [HeatBase, role_data, config_settings]
index 6d645ee..c12e56e 100644 (file)
@@ -22,6 +22,9 @@ parameters:
     default: 0
     description: Number of workers for Heat service.
     type: number
+  MonitoringSubscriptionHeatApiCloudwatch:
+    default: 'overcloud-heat-api-cloudwatch'
+    type: string
 
 resources:
   HeatBase:
@@ -36,6 +39,7 @@ outputs:
     description: Role data for the Heat Cloudwatch API role.
     value:
       service_name: heat_api_cloudwatch
+      monitoring_subscription: {get_param: MonitoringSubscriptionHeatApiCloudwatch}
       config_settings:
         map_merge:
           - get_attr: [HeatBase, role_data, config_settings]
index ec3b0e3..64b0c53 100644 (file)
@@ -30,6 +30,9 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  MonitoringSubscriptionHeatApi:
+    default: 'overcloud-heat-api'
+    type: string
 
 resources:
   HeatBase:
@@ -44,6 +47,7 @@ outputs:
     description: Role data for the Heat API role.
     value:
       service_name: heat_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionHeatApi}
       config_settings:
         map_merge:
           - get_attr: [HeatBase, role_data, config_settings]
index 226d2a5..7eb58f5 100644 (file)
@@ -32,6 +32,10 @@ parameters:
                  via parameter_defaults in the resource registry.  This
                  mapping overrides those in ServiceNetMapDefaults.
     type: json
+  HeatPassword:
+    description: The password for the Heat service and db account, used by the Heat services.
+    type: string
+    hidden: true
   DefaultPasswords:
     default: {}
     type: json
@@ -60,11 +64,13 @@ outputs:
             key: 'context_is_admin'
             value: 'role:admin'
         heat::rabbit_heartbeat_timeout_threshold: 60
-        heat::keystone_tenant: 'service'
+        heat::keystone::authtoken::project_name: 'service'
+        heat::keystone::authtoken::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
+        heat::keystone::authtoken::auth_url: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
+        heat::keystone::authtoken::password: {get_param: HeatPassword}
         heat::keystone::domain::domain_name: 'heat_stack'
         heat::keystone::domain::domain_admin: 'heat_stack_domain_admin'
         heat::keystone::domain::domain_admin_email: 'heat_stack_domain_admin@localhost'
-        heat::auth_plugin: 'password'
         heat::cron::purge_deleted::age: 30
         heat::cron::purge_deleted::age_type: 'days'
         heat::cron::purge_deleted::maxdelay: 3600
index b230ec1..089bf53 100644 (file)
@@ -40,6 +40,9 @@ parameters:
     type: string
     hidden: true
     default: ''
+  MonitoringSubscriptionHeatEngine:
+    default: 'overcloud-heat-engine'
+    type: string
 
 resources:
   HeatBase:
@@ -54,6 +57,7 @@ outputs:
     description: Role data for the Heat Engine role.
     value:
       service_name: heat_engine
+      monitoring_subscription: {get_param: MonitoringSubscriptionHeatEngine}
       config_settings:
         map_merge:
           - get_attr: [HeatBase, role_data, config_settings]
@@ -71,8 +75,6 @@ outputs:
                   - {get_param: [EndpointMap, MysqlInternal, host]}
                   - '/heat'
             heat::keystone_ec2_uri: {get_param: [EndpointMap, KeystoneEC2, uri]}
-            heat::identity_uri: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
-            heat::keystone_password: {get_param: HeatPassword}
             heat::db::mysql::password: {get_param: HeatPassword}
             heat::keystone::domain::domain_password: {get_param: HeatStackDomainAdminPassword}
             heat::db::mysql::user: heat
index c5d9681..6ea5ec4 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: 2016-10-14
 
 description: >
   Horizon service configured with Puppet
@@ -10,6 +10,10 @@ parameters:
                  via parameter_defaults in the resource registry.  This
                  mapping overrides those in ServiceNetMapDefaults.
     type: json
+  Debug:
+    default: ''
+    description: Set to True to enable debugging on all services.
+    type: string
   DefaultPasswords:
     default: {}
     type: json
@@ -22,17 +26,30 @@ parameters:
     default: '*'
     description: A list of IP/Hostname allowed to connect to horizon
     type: comma_delimited_list
+  HorizonSecret:
+    description: Secret key for Django
+    type: string
+    hidden: true
+    default: ''
   NeutronMechanismDrivers:
     default: 'openvswitch'
     description: |
         The mechanism drivers for the Neutron tenant network.
     type: comma_delimited_list
+  MemcachedIPv6:
+    default: false
+    description: Enable IPv6 features in Memcached.
+    type: boolean
+  MonitoringSubscriptionHorizon:
+    default: 'overcloud-horizon'
+    type: string
 
 outputs:
   role_data:
     description: Role data for the Horizon role.
     value:
       service_name: horizon
+      monitoring_subscription: {get_param: MonitoringSubscriptionHorizon}
       config_settings:
         horizon::allowed_hosts: {get_param: HorizonAllowedHosts}
         neutron::plugins::ml2::mechanism_drivers:
@@ -51,5 +68,16 @@ outputs:
           add_listen: false
           priority: 10
           access_log_format: '%a %l %u %t \"%r\" %>s %b \"%%{}{Referer}i\" \"%%{}{User-Agent}i\"'
+        horizon::bind_address: {get_param: [ServiceNetMap, HorizonNetwork]}
+        horizon::django_debug: {get_param: Debug}
+        horizon::keystone_url: {get_param: [EndpointMap, KeystoneInternal, uri]}
+        horizon::secret_key:
+          yaql:
+            expression: $.data.passwords.where($ != '').first()
+            data:
+              passwords:
+                - {get_param: HorizonSecret}
+                - {get_param: [DefaultPasswords, horizon_secret]}
+        memcached_ipv6: {get_param: MemcachedIPv6}
       step_config: |
         include ::tripleo::profile::base::horizon
index d0516e1..5c3f370 100644 (file)
@@ -22,6 +22,9 @@ parameters:
     description: The password for the Ironic service and db account, used by the Ironic services
     type: string
     hidden: true
+  MonitoringSubscriptionIronicApi:
+    default: 'overcloud-ironic-api'
+    type: string
 
 resources:
   IronicBase:
@@ -36,27 +39,28 @@ outputs:
     description: Role data for the Ironic API role.
     value:
       service_name: ironic_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionIronicApi}
       config_settings:
         map_merge:
           - get_attr: [IronicBase, role_data, config_settings]
-          # NOTE(dtantsur): the my_ip parameter is heavily overloaded in
-          # ironic. It's used as a default value for e.g. TFTP server IP,
-          # glance and neutron endpoints, virtual console IP. We override
-          # the TFTP server IP in ironic-conductor.yaml as it should not be
-          # the VIP, but rather a real IP of the controller.
-          - ironic::my_ip: {get_param: [EndpointMap, MysqlInternal, host]}
-            ironic::api::authtoken::password: {get_param: IronicPassword}
+          - ironic::api::authtoken::password: {get_param: IronicPassword}
             ironic::api::authtoken::project_name: 'service'
             ironic::api::authtoken::username: 'ironic'
             ironic::api::authtoken::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
             ironic::api::authtoken::auth_url: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
-            ironic::api::host_ip: {get_input: ironic_api_network}
+            # 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
+            ironic::api::host_ip: {get_param: [ServiceNetMap, IronicApiNetwork]}
             ironic::api::port: {get_param: [EndpointMap, IronicInternal, port]}
             # This is used to build links in responses
             ironic::api::public_endpoint: {get_param: [EndpointMap, IronicPublic, uri_no_suffix]}
-            ironic::keystone::auth::admin_url: {get_param: [EndpointMap, IronicAdmin, uri]}
-            ironic::keystone::auth::internal_url: {get_param: [EndpointMap, IronicInternal, uri]}
-            ironic::keystone::auth::public_url: {get_param: [EndpointMap, IronicPublic, uri]}
+            ironic::keystone::auth::admin_url: {get_param: [EndpointMap, IronicAdmin, uri_no_suffix]}
+            ironic::keystone::auth::internal_url: {get_param: [EndpointMap, IronicInternal, uri_no_suffix]}
+            ironic::keystone::auth::public_url: {get_param: [EndpointMap, IronicPublic, uri_no_suffix]}
             ironic::keystone::auth::auth_name: 'ironic'
             ironic::keystone::auth::password: {get_param: IronicPassword }
             ironic::keystone::auth::tenant: 'service'
index 27479f7..4ac9fc3 100644 (file)
@@ -18,10 +18,27 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  IronicCleaningDiskErase:
+    default: 'full'
+    description: Type of disk cleaning before and between deployments,
+                 "full" for full cleaning, "metadata" to clean only disk
+                 metadata (partition table).
+    type: string
   IronicEnabledDrivers:
-    default: ['pxe_ipmitool', 'agent_ipmitool']
+    default: ['pxe_ipmitool', 'pxe_drac', 'pxe_ilo']
     description: Enabled Ironic drivers
     type: comma_delimited_list
+  IronicIPXEEnabled:
+    default: true
+    description: Whether to use iPXE instead of PXE for deployment.
+    type: boolean
+  IronicIPXEPort:
+    default: 8088
+    description: Port to use for serving images when iPXE is used.
+    type: string
+  MonitoringSubscriptionIronicConductor:
+    default: 'overcloud-ironic-conductor'
+    type: string
 
 resources:
   IronicBase:
@@ -36,20 +53,48 @@ outputs:
     description: Role data for the Ironic conductor role.
     value:
       service_name: ironic_conductor
+      monitoring_subscription: {get_param: MonitoringSubscriptionIronicConductor}
       config_settings:
         map_merge:
           - get_attr: [IronicBase, role_data, config_settings]
           # FIXME: I have no idea why neutron_url is in "api" manifest
           - ironic::api::neutron_url: {get_param: [EndpointMap, NeutronInternal, uri]}
             ironic::conductor::api_url: {get_param: [EndpointMap, IronicInternal, uri_no_suffix]}
+            ironic::conductor::cleaning_disk_erase: {get_param: IronicCleaningDiskErase}
+            ironic::conductor::enabled_drivers: {get_param: IronicEnabledDrivers}
+            # We need an endpoint containing a real IP, not a VIP here
+            ironic_conductor_http_host: {get_param: [ServiceNetMap, IronicNetwork]}
+            ironic::conductor::http_url:
+              list_join:
+                - ''
+                - - 'http://'
+                  - '%{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]}
-            ironic::enabled_drivers: {get_param: IronicEnabledDrivers}
-            # Prevent tftp_server from defaulting to my_ip setting, which is
-            # controller VIP, not a real IP.
-            ironic::drivers::pxe::tftp_server: {get_input: ironic_api_network}
+            # 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
+            ironic::drivers::pxe::tftp_server: {get_param: [ServiceNetMap, IronicNetwork]}
+            # NOTE(dtantsur): UEFI only works with iPXE currently for us
+            ironic::drivers::pxe::uefi_pxe_config_template: '$pybasedir/drivers/modules/ipxe_config.template'
+            ironic::drivers::pxe::uefi_pxe_bootfile_name: 'ipxe.efi'
             tripleo.ironic_conductor.firewall_rules:
               '134 ironic conductor TFTP':
                 dport: 69
                 proto: udp
+              '135 ironic conductor HTTP':
+                dport: {get_param: IronicIPXEPort}
+            # NOTE(dtantsur): the my_ip parameter is heavily overloaded in
+            # ironic. It's used as a default value for e.g. TFTP server IP,
+            # glance and neutron endpoints, virtual console IP. We override
+            # the TFTP server IP in ironic-conductor.yaml as it should not be
+            # the VIP, but rather a real IP of the host.
+            ironic::my_ip: {get_param: [ServiceNetMap, IronicNetwork]}
+            ironic::pxe::common::http_port: {get_param: IronicIPXEPort}
+
       step_config: |
         include ::tripleo::profile::base::ironic::conductor
index b783345..2b069d6 100644 (file)
@@ -28,12 +28,16 @@ parameters:
         Specifies the interface where the public-facing virtual ip will be assigned.
         This should be int_public when a VLAN is being used.
     type: string
+  MonitoringSubscriptionKeepalived:
+    default: 'overcloud-keepalived'
+    type: string
 
 outputs:
   role_data:
     description: Role data for the Keepalived role.
     value:
       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}
index c763c39..7903304 100644 (file)
@@ -84,81 +84,98 @@ parameters:
     type: string
     description: Set the number of workers for keystone::wsgi::apache
     default: '"%{::processorcount}"'
+  MonitoringSubscriptionKeystone:
+    default: 'overcloud-kestone'
+    type: string
+
+resources:
+
+  ApacheServiceBase:
+    type: ./apache.yaml
+    properties:
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+      EndpointMap: {get_param: EndpointMap}
+
 outputs:
   role_data:
     description: Role data for the Keystone role.
     value:
       service_name: keystone
+      monitoring_subscription: {get_param: MonitoringSubscriptionKeystone}
       config_settings:
-        keystone::database_connection:
-          list_join:
-            - ''
-            - - {get_param: [EndpointMap, MysqlInternal, protocol]}
-              - '://keystone:'
-              - {get_param: AdminToken}
-              - '@'
-              - {get_param: [EndpointMap, MysqlInternal, host]}
-              - '/keystone'
-        keystone::admin_token: {get_param: AdminToken}
-        keystone::roles::admin::password: {get_param: AdminPassword}
-        keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
-        keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
-        keystone::enable_proxy_headers_parsing: true
-        keystone::debug: {get_param: Debug}
-        keystone::db::mysql::password: {get_param: AdminToken}
-        keystone::rabbit_userid: {get_param: RabbitUserName}
-        keystone::rabbit_password: {get_param: RabbitPassword}
-        keystone::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
-        keystone::rabbit_port: {get_param: RabbitClientPort}
-        keystone::notification_driver: {get_param: KeystoneNotificationDriver}
-        keystone::notification_format: {get_param: KeystoneNotificationFormat}
-        keystone::roles::admin::email: {get_param: AdminEmail}
-        keystone::roles::admin::password: {get_param: AdminPassword}
-        keystone::endpoint::public_url: {get_param: [EndpointMap, KeystonePublic, uri_no_suffix]}
-        keystone::endpoint::internal_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix]}
-        keystone::endpoint::admin_url: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
-        keystone::endpoint::region: {get_param: KeystoneRegion}
-        keystone_enable_db_purge: {get_param: KeystoneEnableDBPurge}
-        keystone::public_endpoint: {get_param: [EndpointMap, KeystonePublic, uri_no_suffix]}
-        keystone::db::mysql::user: keystone
-        keystone::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
-        keystone::db::mysql::dbname: keystone
-        keystone::db::mysql::allowed_hosts:
-          - '%'
-          - "%{hiera('mysql_bind_host')}"
-        keystone::rabbit_heartbeat_timeout_threshold: 60
-        keystone::cron::token_flush::maxdelay: 3600
-        keystone::roles::admin::service_tenant: 'service'
-        keystone::roles::admin::admin_tenant: 'admin'
-        keystone::cron::token_flush::destination: '/dev/null'
-        keystone::config::keystone_config:
-          ec2/driver:
-            value: 'keystone.contrib.ec2.backends.sql.Ec2'
-        keystone::service_name: 'httpd'
-        keystone::wsgi::apache::ssl: false
-
-        keystone::wsgi::apache::workers: {get_param: KeystoneWorkers}
-        # override via extraconfig:
-        keystone::wsgi::apache::threads: 1
-        keystone::db::database_db_max_retries: -1
-        keystone::db::database_max_retries: -1
-        tripleo.keystone.firewall_rules:
-          '111 keystone':
-            dport:
-              - 5000
-              - 13000
-              - 35357
-              - 13357
-        # 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
-        # NOTE: this applies to all 4 bind IP settings below...
-        keystone::admin_bind_host: {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}
-        keystone::public_bind_host: {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}
-        keystone::wsgi::apache::bind_host: {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}
-        keystone::wsgi::apache::admin_bind_host: {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}
+      config_settings:
+        map_merge:
+          - get_attr: [ApacheServiceBase, role_data, config_settings]
+          - keystone::database_connection:
+              list_join:
+                - ''
+                - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+                  - '://keystone:'
+                  - {get_param: AdminToken}
+                  - '@'
+                  - {get_param: [EndpointMap, MysqlInternal, host]}
+                  - '/keystone'
+            keystone::admin_token: {get_param: AdminToken}
+            keystone::roles::admin::password: {get_param: AdminPassword}
+            keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
+            keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
+            keystone::enable_proxy_headers_parsing: true
+            keystone::debug: {get_param: Debug}
+            keystone::db::mysql::password: {get_param: AdminToken}
+            keystone::rabbit_userid: {get_param: RabbitUserName}
+            keystone::rabbit_password: {get_param: RabbitPassword}
+            keystone::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
+            keystone::rabbit_port: {get_param: RabbitClientPort}
+            keystone::notification_driver: {get_param: KeystoneNotificationDriver}
+            keystone::notification_format: {get_param: KeystoneNotificationFormat}
+            keystone::roles::admin::email: {get_param: AdminEmail}
+            keystone::roles::admin::password: {get_param: AdminPassword}
+            keystone::endpoint::public_url: {get_param: [EndpointMap, KeystonePublic, uri_no_suffix]}
+            keystone::endpoint::internal_url: {get_param: [EndpointMap, KeystoneInternal, uri_no_suffix]}
+            keystone::endpoint::admin_url: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
+            keystone::endpoint::region: {get_param: KeystoneRegion}
+            keystone_enable_db_purge: {get_param: KeystoneEnableDBPurge}
+            keystone::public_endpoint: {get_param: [EndpointMap, KeystonePublic, uri_no_suffix]}
+            keystone::db::mysql::user: keystone
+            keystone::db::mysql::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
+            keystone::db::mysql::dbname: keystone
+            keystone::db::mysql::allowed_hosts:
+              - '%'
+              - "%{hiera('mysql_bind_host')}"
+            keystone::rabbit_heartbeat_timeout_threshold: 60
+            keystone::cron::token_flush::maxdelay: 3600
+            keystone::roles::admin::service_tenant: 'service'
+            keystone::roles::admin::admin_tenant: 'admin'
+            keystone::cron::token_flush::destination: '/dev/null'
+            keystone::config::keystone_config:
+              ec2/driver:
+                value: 'keystone.contrib.ec2.backends.sql.Ec2'
+            keystone::service_name: 'httpd'
+            keystone::wsgi::apache::ssl: false
+    
+            keystone::wsgi::apache::workers: {get_param: KeystoneWorkers}
+            # override via extraconfig:
+            keystone::wsgi::apache::threads: 1
+            keystone::db::database_db_max_retries: -1
+            keystone::db::database_max_retries: -1
+            tripleo.keystone.firewall_rules:
+              '111 keystone':
+                dport:
+                  - 5000
+                  - 13000
+                  - 35357
+                  - 13357
+            # 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
+            # NOTE: this applies to all 4 bind IP settings below...
+            keystone::admin_bind_host: {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}
+            keystone::public_bind_host: {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}
+            keystone::wsgi::apache::bind_host: {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}
+            keystone::wsgi::apache::admin_bind_host: {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}
       step_config: |
         include ::tripleo::profile::base::keystone
index b398774..2e43730 100644 (file)
@@ -26,6 +26,9 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  MonitoringSubscriptionManilaApi:
+    default: 'overcloud-manila-api'
+    type: string
 
 resources:
   ManilaBase:
@@ -40,6 +43,7 @@ outputs:
     description: Role data for the Manila-api role.
     value:
       service_name: manila_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionManilaApi}
       config_settings:
         map_merge:
           - get_attr: [ManilaBase, role_data, config_settings]
index a5122ba..28addd6 100644 (file)
@@ -30,6 +30,9 @@ parameters:
     description: The password for the manila service account.
     type: string
     hidden: true
+  MonitoringSubscriptionManilaScheduler:
+    default: 'overcloud-manila-scheduler'
+    type: string
 
 resources:
   ManilaBase:
@@ -44,6 +47,7 @@ outputs:
     description: Role data for the Manila-scheduler role.
     value:
       service_name: manila_scheduler
+      monitoring_subscription: {get_param: MonitoringSubscriptionManilaScheduler}
       config_settings:
         map_merge:
           - get_attr: [ManilaBase, role_data, config_settings]
@@ -65,4 +69,3 @@ outputs:
                   - '/manila'
       step_config: |
         include ::tripleo::profile::base::manila::scheduler
-
index 184f369..e42d2fa 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionManilaShare:
+    default: 'overcloud-manila-share'
+    type: string
 
 resources:
   ManilaBase:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Manila-share role.
     value:
       service_name: manila_share
+      monitoring_subscription: {get_param: MonitoringSubscriptionManilaShare}
       config_settings:
         map_merge:
           - get_attr: [ManilaBase, role_data, config_settings]
index 3b47261..9e3f637 100644 (file)
@@ -18,12 +18,16 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionMemcached:
+    default: 'overcloud-memcached'
+    type: string
 
 outputs:
   role_data:
     description: Role data for the Memcached role.
     value:
       service_name: memcached
+      monitoring_subscription: {get_param: MonitoringSubscriptionMemcached}
       config_settings:
         # 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):
diff --git a/puppet/services/monitoring/sensu-base.yaml b/puppet/services/monitoring/sensu-base.yaml
new file mode 100644 (file)
index 0000000..d7350d0
--- /dev/null
@@ -0,0 +1,68 @@
+heat_template_version: 2016-04-08
+
+description: Sensu base service
+
+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
+  MonitoringRabbitHost:
+    description: RabbitMQ host Sensu has to connect to.
+    type: string
+    default: ''
+  MonitoringRabbitPort:
+    default: 5672
+    description: Set RabbitMQ subscriber port, change this if using SSL.
+    type: number
+  MonitoringRabbitUseSSL:
+    default: false
+    description: >
+        RabbitMQ client subscriber parameter to specify an SSL connection
+        to the RabbitMQ host.
+    type: string
+  MonitoringRabbitPassword:
+    description: The RabbitMQ password used for monitoring purposes.
+    type: string
+    hidden: true
+  MonitoringRabbitUserName:
+    description: The RabbitMQ username used for monitoring purposes.
+    type: string
+    default: sensu
+  MonitoringRabbitVhost:
+    description: The RabbitMQ vhost used for monitoring purposes.
+    type: string
+    default: '/sensu'
+
+
+outputs:
+  role_data:
+    description: Role data for the Sensu role.
+    value:
+      service_name: sensu_base
+      config_settings:
+        sensu::enterprise: false
+        sensu::enterprise_dashboard: false
+        sensu::install_repo: false
+        sensu::manage_user: false
+        sensu::rabbitmq_host: {get_param: MonitoringRabbitHost}
+        sensu::rabbitmq_password: {get_param: MonitoringRabbitPassword}
+        sensu::rabbitmq_port: {get_param: MonitoringRabbitPort}
+        sensu::rabbitmq_ssl: {get_param: MonitoringRabbitUseSSL}
+        sensu::rabbitmq_user: {get_param: MonitoringRabbitUserName}
+        sensu::rabbitmq_vhost: {get_param: MonitoringRabbitVhost}
+        #sensu::redis_host: {get_param: MonitoringRedisHost}
+        #sensu::redis_password: {get_param: MonitoringRedisPassword}
+        sensu::sensu_plugin_provider: 'yum'
+        sensu::sensu_plugin_name: 'rubygem-sensu-plugin'
+        sensu::version: 'present'
diff --git a/puppet/services/monitoring/sensu-client.yaml b/puppet/services/monitoring/sensu-client.yaml
new file mode 100644 (file)
index 0000000..3f37e75
--- /dev/null
@@ -0,0 +1,49 @@
+heat_template_version: 2016-04-08
+
+description: Sensu client 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
+  SensuClientCustomConfig:
+    default: {}
+    description: Hash containing custom sensu-client variables.
+    type: json
+    label: Custom configuration for Sensu Client variables
+
+resources:
+  SensuBase:
+    type: ./sensu-base.yaml
+    properties:
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+      EndpointMap: {get_param: EndpointMap}
+
+outputs:
+  role_data:
+    description: Role data for the Sensu client role.
+    value:
+      service_name: sensu_client
+      monitoring_subscription: all
+      config_settings:
+        map_merge:
+          - get_attr: [SensuBase, role_data, config_settings]
+          - sensu::api: false
+            sensu::client: true
+            sensu::server: false
+            sensu::client_custom: {get_param: SensuClientCustomConfig}
+      step_config: |
+        include ::tripleo::profile::base::monitoring::sensu
index 35ac32d..da4ec26 100644 (file)
@@ -46,6 +46,9 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  MonitoringSubscriptionNeutronServer:
+    default: 'overcloud-neutron-server'
+    type: string
 
 resources:
 
@@ -61,6 +64,7 @@ outputs:
     description: Role data for the Neutron Server agent service.
     value:
       service_name: neutron_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionNeutronServer}
       config_settings:
         map_merge:
           - get_attr: [NeutronBase, role_data, config_settings]
@@ -79,19 +83,19 @@ outputs:
             neutron::keystone::auth::admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
             neutron::keystone::auth::password: {get_param: NeutronPassword}
             neutron::keystone::auth::region: {get_param: KeystoneRegion}
-            neutron::server::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
-            neutron::server::auth_url: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
+            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}
             neutron::server::allow_automatic_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
             neutron::server::l3_ha: {get_param: NeutronL3HA}
-            neutron::server::password: {get_param: NeutronPassword}
+            neutron::keystone::authtoken::password: {get_param: NeutronPassword}
 
             neutron::server::notifications::nova_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
             neutron::server::notifications::auth_url: { get_param: [ EndpointMap, KeystoneV3Admin, uri ] }
             neutron::server::notifications::tenant_name: 'service'
             neutron::server::notifications::project_name: 'service'
             neutron::server::notifications::password: {get_param: NovaPassword}
-            neutron::server::project_name: 'service'
+            neutron::keystone::authtoken::project_name: 'service'
             neutron::server::sync_db: true
             neutron::db::mysql::password: {get_param: NeutronPassword}
             neutron::db::mysql::user: neutron
@@ -111,5 +115,11 @@ outputs:
               '106 vrrp':
                 proto: vrrp
             neutron::server::router_distributed: {get_param: NeutronEnableDVR}
+            # 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
+            neutron::bind_host: {get_param: [ServiceNetMap, NeutronApiNetwork]}
       step_config: |
         include tripleo::profile::base::neutron::server
index 39ffea2..4eb417c 100644 (file)
@@ -48,6 +48,15 @@ parameters:
     description: >
         Remove configuration that is not generated by TripleO. Setting
         to false may result in configuration remnants after updates/upgrades.
+  NeutronGlobalPhysnetMtu:
+    type: number
+    default: 1500
+    description: |
+        MTU of the underlying physical network. Neutron uses this value to
+        calculate MTU for all virtual network components. For flat and VLAN
+        networks, neutron uses this value without modification. For overlay
+        networks such as VXLAN, neutron automatically subtracts the overlay
+        protocol overhead from this value.
   ServiceNetMap:
     default: {}
     description: Mapping of service_name -> network name. Typically set
@@ -87,3 +96,4 @@ outputs:
         neutron::host: '"%{::fqdn}"'    #NOTE: extra quoting is needed
         neutron::db::database_db_max_retries: -1
         neutron::db::database_max_retries: -1
+        neutron::global_physnet_mtu: {get_param: NeutronGlobalPhysnetMtu}
index 513cb2d..b2ad5da 100644 (file)
@@ -31,6 +31,9 @@ parameters:
     default: false
     description: If True, DHCP always provides metadata route to VM.
     type: boolean
+  MonitoringSubscriptionNeutronDhcp:
+    default: 'overcloud-neutron-dhcp'
+    type: string
 
 resources:
 
@@ -46,6 +49,7 @@ outputs:
     description: Role data for the Neutron DHCP agent service.
     value:
       service_name: neutron_dhcp
+      monitoring_subscription: {get_param: MonitoringSubscriptionNeutronDhcp}
       config_settings:
         map_merge:
           - get_attr: [NeutronBase, role_data, config_settings]
index 0f3c2a7..5eb3e25 100644 (file)
@@ -26,6 +26,9 @@ parameters:
     description: Name of bridge used for external network traffic.
     type: string
     default: 'br-ex'
+  MonitoringSubscriptionNeutronL3Dvr:
+    default: 'overcloud-neutron-l3-dvr'
+    type: string
 
 resources:
 
@@ -41,6 +44,7 @@ outputs:
     description: Role data for DVR L3 Agent on Compute Nodes
     value:
       service_name: neutron_l3_compute_dvr
+      monitoring_subscription: {get_param: MonitoringSubscriptionNeutronL3Dvr}
       config_settings:
         map_merge:
           - get_attr: [NeutronBase, role_data, config_settings]
index 54beee6..de62a50 100644 (file)
@@ -34,6 +34,9 @@ parameters:
       - allowed_values:
         - legacy
         - dvr_snat
+  MonitoringSubscriptionNeutronL3:
+    default: 'overcloud-neutron-l3-agent'
+    type: string
 
 resources:
 
@@ -49,6 +52,7 @@ outputs:
     description: Role data for the Neutron L3 agent service.
     value:
       service_name: neutron_l3
+      monitoring_subscription: {get_param: MonitoringSubscriptionNeutronL3}
       config_settings:
         map_merge:
           - get_attr: [NeutronBase, role_data, config_settings]
index b9ec277..320ae0c 100644 (file)
@@ -30,6 +30,9 @@ parameters:
     description: The password for the neutron service and db account, used by neutron agents.
     type: string
     hidden: true
+  MonitoringSubscriptionNeutronMetadata:
+    default: 'overcloud-neutron-metadata'
+    type: string
 
 resources:
 
@@ -45,6 +48,7 @@ outputs:
     description: Role data for the Neutron Metadata agent service.
     value:
       service_name: neutron_metadata
+      monitoring_subscription: {get_param: MonitoringSubscriptionNeutronMetadata}
       config_settings:
         map_merge:
           - get_attr: [NeutronBase, role_data, config_settings]
@@ -53,5 +57,11 @@ 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'
+            # 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
+            neutron::agents::metadata::metadata_ip: {get_param: [ServiceNetMap, NeutronApiNetwork]}
       step_config: |
         include tripleo::profile::base::neutron::metadata
index 48830d8..0de256c 100644 (file)
@@ -40,12 +40,16 @@ parameters:
     description: 'Whether enable Cassandra cluster on Controller'
     type: boolean
     default: false
+  MonitoringSubscriptionNeutronMidonet:
+    default: 'overcloud-neutron-midonet'
+    type: string
 
 outputs:
   role_data:
     description: Role data for the Neutron Midonet plugin and services
     value:
       service_name: neutron_midonet
+      monitoring_subscription: {get_param: MonitoringSubscriptionNeutronMidonet}
       config_settings:
         tripleo::profile::base::neutron::midonet::admin_password: {get_param: AdminPassword}
         tripleo::profile::base::neutron::midonet::keystone_admin_token: {get_param: AdminToken}
index 1b19f90..36b609f 100644 (file)
@@ -53,6 +53,9 @@ parameters:
     description: |
       Enable ARP responder feature in the OVS Agent.
     type: boolean
+  MonitoringSubscriptionNeutronOvs:
+    default: 'overcloud-neutron-ovs-agent'
+    type: string
 
 resources:
 
@@ -68,6 +71,7 @@ outputs:
     description: Role data for the Neutron OVS agent service.
     value:
       service_name: neutron_ovs_agent
+      monitoring_subscription: {get_param: MonitoringSubscriptionNeutronOvs}
       config_settings:
         map_merge:
           - get_attr: [NeutronBase, role_data, config_settings]
index 1f1e14a..8ee98a3 100644 (file)
@@ -19,13 +19,15 @@ parameters:
                  via parameter_defaults in the resource registry.
     type: json
   NeutronDpdkCoreList:
-    default: ""
     description: List of cores to be used for DPDK Poll Mode Driver
     type: string
+    constraints:
+      - allowed_pattern: "[0-9,-]+"
   NeutronDpdkMemoryChannels:
-    default: ""
     description: Number of memory channels to be used for DPDK
     type: string
+    constraints:
+      - allowed_pattern: "[0-9]+"
   NeutronDpdkSocketMemory:
     default: ""
     description: Memory allocated for each socket
index 559500d..b9a9339 100644 (file)
@@ -53,6 +53,6 @@ outputs:
       config_settings:
         neutron::agents::ml2::sriov::physical_device_mappings: {get_param: NeutronPhysicalDevMappings}
         neutron::agents::ml2::sriov::exclude_devices: {get_param: NeutronExcludeDevices}
-        neutron::agents::ml2::sriov::number_of_vfs: {get_param: NeutronSriovNumVFs}
+        tripleo::host::sriov::number_of_vfs: {get_param: NeutronSriovNumVFs}
       step_config: |
         include ::tripleo::profile::base::neutron::sriov
index c2bd395..e1dbd8e 100644 (file)
@@ -30,6 +30,22 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  NeutronMetadataProxySharedSecret:
+    description: Shared secret to prevent spoofing
+    type: string
+    hidden: true
+  InstanceNameTemplate:
+    default: 'instance-%08x'
+    description: Template string to be used to generate instance names
+    type: string
+  NovaEnableDBPurge:
+    default: true
+    description: |
+        Whether to create cron job for purging soft deleted rows in Nova database.
+    type: boolean
+  MonitoringSubscriptionNovaApi:
+    default: 'overcloud-nova-api'
+    type: string
 
 resources:
   NovaBase:
@@ -44,6 +60,7 @@ outputs:
     description: Role data for the Nova API service.
     value:
       service_name: nova_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionNovaApi}
       config_settings:
         map_merge:
           - get_attr: [NovaBase, role_data, config_settings]
@@ -75,5 +92,16 @@ 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}
+            # 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::api::api_bind_address: {get_param: [ServiceNetMap, NovaApiNetwork]}
+            nova::api::metadata_listen: {get_param: [ServiceNetMap, NovaMetadataNetwork]}
+            nova::api::neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
+            nova::api::instance_name_template: {get_param: InstanceNameTemplate}
+            nova_enable_db_purge: {get_param: NovaEnableDBPurge}
+
       step_config: |
         include tripleo::profile::base::nova::api
index 471ece3..24a63bb 100644 (file)
@@ -95,14 +95,14 @@ outputs:
               - '@'
               - {get_param: [EndpointMap, MysqlInternal, host]}
               - '/nova_api'
-        nova::db::mysql::password: {get_input: nova_password}
+        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_input: nova_password}
+        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
index 6bc1c18..ccdcb52 100644 (file)
@@ -60,6 +60,16 @@ parameters:
       Ex. NovaVcpuPinSet: ['4-12','^8'] will reserve cores from 4-12 excluding 8
     type: comma_delimited_list
     default: []
+  NovaReservedHostMemory:
+    description: >
+      Reserved RAM for host processes.
+    type: number
+    default: 2048
+    constraints:
+      - range: { min: 512 }
+  MonitoringSubscriptionNovaCompute:
+    default: 'overcloud-nova-compute'
+    type: string
 
 resources:
   NovaBase:
@@ -74,6 +84,7 @@ outputs:
     description: Role data for the Nova Compute service.
     value:
       service_name: nova_compute
+      monitoring_subscription: {get_param: MonitoringSubscriptionNovaCompute}
       config_settings:
         map_merge:
           - get_attr: [NovaBase, role_data, config_settings]
@@ -84,6 +95,7 @@ outputs:
                 params:
                   JSON_PARAM: {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
             nova::compute::libvirt::migration_support: false
             tripleo::profile::base::nova::manage_migration: true
@@ -108,11 +120,6 @@ outputs:
             # encryption work will obsolete the need to use TUNNELLED transport
             # mode.
             nova::migration::live_migration_tunnelled: {get_param: NovaEnableRbdBackend}
-            # Changing the default from 512MB. The current templates can not deploy
-            # overclouds with swap. On an idle compute node, we see ~1024MB of RAM
-            # used. 2048 is suggested to account for other possible operations for
-            # example openvswitch.
-            nova::compute::reserved_host_memory: 2048
             nova::compute::neutron::libvirt_vif_driver: {get_param: NovaComputeLibvirtVifDriver}
             # NOTE: bind IP is found in Heat replacing the network name with the
             # local node IP for the given network; replacement examples
index 0b6169d..5dbc7ca 100644 (file)
@@ -22,6 +22,9 @@ parameters:
     default: 0
     description: Number of workers for Nova Conductor service.
     type: number
+  MonitoringSubscriptionNovaConductor:
+    default: 'overcloud-nova-conductor'
+    type: string
 
 resources:
   NovaBase:
@@ -36,6 +39,7 @@ outputs:
     description: Role data for the Nova Conductor service.
     value:
       service_name: nova_conductor
+      monitoring_subscription: {get_param: MonitoringSubscriptionNovaConductor}
       config_settings:
         map_merge:
           - get_attr: [NovaBase, role_data, config_settings]
index 67ff2ec..13e3a26 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionNovaConsoleauth:
+    default: 'overcloud-nova-consoleauth'
+    type: string
 
 resources:
   NovaBase:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Nova Consoleauth service.
     value:
       service_name: nova_consoleauth
+      monitoring_subscription: {get_param: MonitoringSubscriptionNovaConsoleauth}
       config_settings:
         get_attr: [NovaBase, role_data, config_settings]
       step_config: |
index 1ebec97..b5ca243 100644 (file)
@@ -21,6 +21,9 @@ parameters:
   NovaComputeLibvirtType:
     type: string
     default: kvm
+  MonitoringSubscriptionNovaLibvirt:
+    default: 'overcloud-nova-libvirt'
+    type: string
 
 resources:
   NovaBase:
@@ -35,6 +38,7 @@ outputs:
     description: Role data for the Libvirt service.
     value:
       service_name: nova_libvirt
+      monitoring_subscription: {get_param: MonitoringSubscriptionNovaLibvirt}
       config_settings:
         map_merge:
           - get_attr: [NovaBase, role_data, config_settings]
index c8f2591..3ffc9c5 100644 (file)
@@ -29,6 +29,9 @@ parameters:
       An array of filters used by Nova to filter a node.These filters will be
       applied in the order they are listed, so place your most restrictive
       filters first to make the filtering process more efficient.
+  MonitoringSubscriptionNovaScheduler:
+    default: 'overcloud-nova-scheduler'
+    type: string
 
 resources:
   NovaBase:
@@ -43,6 +46,7 @@ outputs:
     description: Role data for the Nova Scheduler service.
     value:
       service_name: nova_scheduler
+      monitoring_subscription: {get_param: MonitoringSubscriptionNovaScheduler}
       config_settings:
         map_merge:
           - get_attr: [NovaBase, role_data, config_settings]
index 0a1785d..ce15fcc 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionNovaVNCProxy:
+    default: 'overcloud-nova-vncproxy'
+    type: string
 
 resources:
   NovaBase:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Nova Vncproxy service.
     value:
       service_name: nova_vncproxy
+      monitoring_subscription: {get_param: MonitoringSubscriptionNovaVNCProxy}
       config_settings:
         map_merge:
           - get_attr: [NovaBase, role_data, config_settings]
@@ -46,5 +50,11 @@ outputs:
                   '[': ''
                   ']': ''
             nova::vncproxy::common::vncproxy_port: {get_param: [EndpointMap, NovaVNCProxyPublic, port]}
+            # 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::vncproxy::host: {get_param: [ServiceNetMap, NovaApiNetwork]}
       step_config: |
         include tripleo::profile::base::nova::vncproxy
index ac5b85c..5d1d666 100644 (file)
@@ -1,4 +1,4 @@
-heat_template_version: 2016-04-08
+heat_template_version: 2016-10-14
 
 description: >
   Pacemaker service configured with Puppet
@@ -18,12 +18,61 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionPacemaker:
+    default: 'overcloud-pacemaker'
+    type: string
+  CorosyncIPv6:
+    default: false
+    description: Enable IPv6 in Corosync
+    type: boolean
+  EnableFencing:
+    default: false
+    description: Whether to enable fencing in Pacemaker or not.
+    type: boolean
+  PcsdPassword:
+    type: string
+    description: The password for the 'pcsd' user for pacemaker.
+    hidden: true
+    default: ''
+  FencingConfig:
+    default: {}
+    description: |
+      Pacemaker fencing configuration. The JSON should have
+      the following structure:
+        {
+          "devices": [
+            {
+              "agent": "AGENT_NAME",
+              "host_mac": "HOST_MAC_ADDRESS",
+              "params": {"PARAM_NAME": "PARAM_VALUE"}
+            }
+          ]
+        }
+      For instance:
+        {
+          "devices": [
+            {
+              "agent": "fence_xvm",
+              "host_mac": "52:54:00:aa:bb:cc",
+              "params": {
+                "multicast_address": "225.0.0.12",
+                "port": "baremetal_0",
+                "manage_fw": true,
+                "manage_key_file": true,
+                "key_file": "/etc/fence_xvm.key",
+                "key_file_password": "abcdef"
+              }
+            }
+          ]
+        }
+    type: json
 
 outputs:
   role_data:
     description: Role data for the Pacemaker role.
     value:
       service_name: pacemaker
+      monitoring_subscription: {get_param: MonitoringSubscriptionPacemaker}
       config_settings:
         pacemaker::corosync::cluster_name: 'tripleo_cluster'
         pacemaker::corosync::manage_fw: false
@@ -40,5 +89,15 @@ outputs:
           '131 pacemaker udp':
             proto: 'udp'
             dport: 5405
+        corosync_ipv6: {get_param: CorosyncIPv6}
+        tripleo::fencing::config: {get_param: FencingConfig}
+        enable_fencing: {get_param: EnableFencing}
+        hacluster_pwd:
+          yaql:
+            expression: $.data.passwords.where($ != '').first()
+            data:
+              passwords:
+                - {get_param: PcsdPassword}
+                - {get_param: [DefaultPasswords, pcsd_password]}
       step_config: |
         include ::tripleo::profile::base::pacemaker
index 7871487..5dcb62c 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     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:
@@ -32,6 +35,7 @@ outputs:
     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]
index 6290203..dbe1449 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     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:
@@ -32,6 +35,7 @@ outputs:
     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]
index d130a4b..4b6c18f 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     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:
@@ -32,6 +35,7 @@ outputs:
     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]
index 97da92e..4c91951 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     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:
@@ -32,6 +35,7 @@ outputs:
     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]
index 7c83037..e4bcfc3 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Cinder API role.
     value:
       service_name: cinder_api
+      monitoring_subscription: {get_attr: [CinderApiBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [CinderApiBase, role_data, config_settings]
index 7e940c7..2ebc768 100644 (file)
@@ -48,6 +48,7 @@ outputs:
     description: Role data for the Cinder Backup role.
     value:
       service_name: cinder_backup
+      monitoring_subscription: {get_attr: [CinderBackupBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [CinderBackupBase, role_data, config_settings]
index 6f26b41..eb578e5 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Cinder Scheduler role.
     value:
       service_name: cinder_scheduler
+      monitoring_subscription: {get_attr: [CinderSchedulerBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [CinderSchedulerBase, role_data, config_settings]
index ffcdb52..d5dedf3 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Cinder Volume role.
     value:
       service_name: cinder_volume
+      monitoring_subscription: {get_attr: [CinderVolumeBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [CinderVolumeBase, role_data, config_settings]
index ef4ba79..684785a 100644 (file)
@@ -57,6 +57,7 @@ outputs:
     description: Role data for the Glance role.
     value:
       service_name: glance_api
+      monitoring_subscription: {get_attr: [GlanceApiBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [GlanceApiBase, role_data, config_settings]
index e417f09..5bcabca 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Glance role.
     value:
       service_name: glance_registry
+      monitoring_subscription: {get_attr: [GlanceRegistryBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [GlanceRegistryBase, role_data, config_settings]
index 42c7131..6a9161f 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionGnocchiApi:
+    default: 'overcloud-gnocchi-api'
+    type: string
 
 resources:
   GnocchiServiceBase:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Gnocchi role.
     value:
       service_name: gnocchi_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionGnocchiApi}
       config_settings:
         map_merge:
           - get_attr: [GnocchiServiceBase, role_data, config_settings]
index 177d774..0f36b5d 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     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:
@@ -32,6 +35,7 @@ outputs:
     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]
index a247a51..b9afc59 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     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:
@@ -32,6 +35,7 @@ outputs:
     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]
index de02833..52104a7 100644 (file)
@@ -32,6 +32,7 @@ outputs:
     description: Role data for the HAproxy with pacemaker role.
     value:
       service_name: haproxy
+      monitoring_subscription: {get_attr: [LoadbalancerServiceBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [LoadbalancerServiceBase, role_data, config_settings]
index 155a35e..eae01b5 100644 (file)
@@ -32,6 +32,7 @@ outputs:
     description: Role data for the Heat CloudFormation API role.
     value:
       service_name: heat_api_cfn
+      monitoring_subscription: {get_attr: [HeatApiCfnBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [HeatApiCfnBase, role_data, config_settings]
index 8592765..5608ae9 100644 (file)
@@ -32,6 +32,7 @@ outputs:
     description: Role data for the Heat Cloudwatch API role.
     value:
       service_name: heat_api_cloudwatch
+      monitoring_subscription: {get_attr: [HeatApiCloudwatchBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
            - get_attr: [HeatApiCloudwatchBase, role_data, config_settings]
index d722061..6fd790c 100644 (file)
@@ -32,6 +32,7 @@ outputs:
     description: Role data for the Heat API role.
     value:
       service_name: heat_api
+      monitoring_subscription: {get_attr: [HeatApiBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [HeatApiBase, role_data, config_settings]
index 579f5f1..b8c962a 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Heat engine role.
     value:
       service_name: heat_engine
+      monitoring_subscription: {get_attr: [HeatEngineBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [HeatEngineBase, role_data, config_settings]
index bd1ff04..18de23a 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     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: |
index 701f01f..0a479c9 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Keystone pacemaker role.
     value:
       service_name: keystone
+      monitoring_subscription: {get_attr: [KeystoneServiceBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [KeystoneServiceBase, role_data, config_settings]
index 7479eb0..cabc31a 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the manila-share pacemaker role.
     value:
       service_name: manila_share
+      monitoring_subscription: {get_attr: [ManilaShareBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [ManilaShareBase, role_data, config_settings]
index e612d77..04b895b 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     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]
index f5f785e..9b9e584 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Neutron DHCP role.
     value:
       service_name: neutron_dhcp
+      monitoring_subscription: {get_attr: [NeutronDhcpBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [NeutronDhcpBase, role_data, config_settings]
index 8717663..21ac02d 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Neutron L3 role.
     value:
       service_name: neutron_l3
+      monitoring_subscription: {get_attr: [NeutronL3Base, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [NeutronL3Base, role_data, config_settings]
index e00c242..8c22d42 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Neutron Metadata role.
     value:
       service_name: neutron_metadata
+      monitoring_subscription: {get_attr: [NeutronMetadataBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [NeutronMetadataBase, role_data, config_settings]
index fb39ea4..fdd5daf 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     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]
index 353c295..18d6073 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Neutron OVS agent service.
     value:
       service_name: neutron_ovs_agent
+      monitoring_subscription: {get_attr: [NeutronOvsBase, role_data, monitoring_subscription]}
       config_settings:
         get_attr: [NeutronOvsBase, role_data, config_settings]
       step_config: |
index fc04e5e..33bc2d9 100644 (file)
@@ -37,6 +37,7 @@ outputs:
     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]
index 709761e..3d56534 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Nova API role.
     value:
       service_name: nova_api
+      monitoring_subscription: {get_attr: [NovaApiBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [NovaApiBase, role_data, config_settings]
index 7a2313c..9d55a48 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Nova Conductor role.
     value:
       service_name: nova_conductor
+      monitoring_subscription: {get_attr: [NovaConductorBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [NovaConductorBase, role_data, config_settings]
index 77550c8..814505f 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Nova Consoleauth role.
     value:
       service_name: nova_consoleauth
+      monitoring_subscription: {get_attr: [NovaConsoleauthBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [NovaConsoleauthBase, role_data, config_settings]
index 2571ec4..2769226 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Nova Scheduler role.
     value:
       service_name: nova_scheduler
+      monitoring_subscription: {get_attr: [NovaSchedulerBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [NovaSchedulerBase, role_data, config_settings]
index e536826..0ec5de6 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Nova Vncproxy role.
     value:
       service_name: nova_vncproxy
+      monitoring_subscription: {get_attr: [NovaVncproxyBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [NovaVncproxyBase, role_data, config_settings]
index 3eb0139..f3fa2d2 100644 (file)
@@ -32,6 +32,7 @@ outputs:
     description: Role data for the RabbitMQ pacemaker role.
     value:
       service_name: rabbitmq
+      monitoring_subscription: {get_attr: [RabbitMQServiceBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [RabbitMQServiceBase, role_data, config_settings]
index e20b7a0..214e8db 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Sahara API role.
     value:
       service_name: sahara_api
+      monitoring_subscription: {get_attr: [SaharaApiBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [SaharaApiBase, role_data, config_settings]
index 07de74c..aa85115 100644 (file)
@@ -33,6 +33,7 @@ outputs:
     description: Role data for the Sahara Engine role.
     value:
       service_name: sahara_engine
+      monitoring_subscription: {get_attr: [SaharaEngineBase, role_data, monitoring_subscription]}
       config_settings:
         map_merge:
           - get_attr: [SaharaEngineBase, role_data, config_settings]
index 06595b0..a0669dc 100644 (file)
@@ -38,12 +38,16 @@ parameters:
     type: string
     default: ''
     hidden: true
+  MonitoringSubscriptionRabbitmq:
+    default: 'overcloud-rabbitmq'
+    type: string
 
 outputs:
   role_data:
     description: Role data for the RabbitMQ role.
     value:
       service_name: rabbitmq
+      monitoring_subscription: {get_param: MonitoringSubscriptionRabbitmq}
       config_settings:
         rabbitmq::file_limit: {get_param: RabbitFDLimit}
         rabbitmq::default_user: {get_param: RabbitUserName}
index fae9c43..7f15ca7 100644 (file)
@@ -30,6 +30,9 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  MonitoringSubscriptionSaharaApi:
+    default: 'overcloud-sahara-api'
+    type: string
 
 resources:
   SaharaBase:
@@ -44,6 +47,7 @@ outputs:
     description: Role data for the Sahara API role.
     value:
       service_name: sahara_api
+      monitoring_subscription: {get_param: MonitoringSubscriptionSaharaApi}
       config_settings:
         map_merge:
           - get_attr: [SaharaBase, role_data, config_settings]
index fcf4d48..9224fd5 100644 (file)
@@ -18,6 +18,9 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  MonitoringSubscriptionSaharaEngine:
+    default: 'overcloud-sahara-engine'
+    type: string
 
 resources:
   SaharaBase:
@@ -32,6 +35,7 @@ outputs:
     description: Role data for the Sahara Engine role.
     value:
       service_name: sahara_engine
+      monitoring_subscription: {get_param: MonitoringSubscriptionSaharaEngine}
       config_settings:
         map_merge:
           - get_attr: [SaharaBase, role_data, config_settings]
index bb40001..669e287 100644 (file)
@@ -49,5 +49,9 @@ outputs:
         yaql:
           expression: list($.data.s_names.where($ != null))
           data: {s_names: {get_attr: [ServiceChain, role_data, service_name]}}
+      monitoring_subscriptions:
+        yaql:
+          expression: list($.data.subscriptions.where($ != null))
+          data: {subscriptions: {get_attr: [ServiceChain, role_data, monitoring_subscription]}}
       config_settings: {map_merge: {get_attr: [ServiceChain, role_data, config_settings]}}
       step_config: {list_join: ["\n", {get_attr: [ServiceChain, role_data, step_config]}]}
index e38ccf4..4d01632 100644 (file)
@@ -35,8 +35,8 @@ outputs:
     value:
       service_name: snmp
       config_settings:
-        snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
-        snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
+        tripleo::profile::base::snmp::snmpd_user: {get_param: SnmpdReadonlyUserName}
+        tripleo::profile::base::snmp::snmpd_password: {get_param: SnmpdReadonlyUserPassword}
         tripleo.snmp.firewall_rules:
           '127 snmp':
             dport: 161
index cba0809..d7b0cd7 100644 (file)
@@ -38,6 +38,9 @@ parameters:
     type: string
     default: 'regionOne'
     description: Keystone region for endpoint
+  MonitoringSubscriptionSwiftProxy:
+    default: 'overcloud-swift-proxy'
+    type: string
 
 resources:
   SwiftBase:
@@ -52,14 +55,15 @@ outputs:
     description: Role data for the Swift proxy service.
     value:
       service_name: swift_proxy
+      monitoring_subscription: {get_param: MonitoringSubscriptionSwiftProxy}
       config_settings:
         map_merge:
           - get_attr: [SwiftBase, role_data, config_settings]
 
           - swift::proxy::authtoken::auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri]}
-            swift::proxy::authtoken::identity_uri: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
-            swift::proxy::authtoken::admin_password: {get_param: SwiftPassword}
-            swift::proxy::authtoken::admin_tenant_name: 'service'
+            swift::proxy::authtoken::auth_url: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
+            swift::proxy::authtoken::password: {get_param: SwiftPassword}
+            swift::proxy::authtoken::project_name: 'service'
             swift::proxy::node_timeout: {get_param: SwiftProxyNodeTimeout}
             swift::proxy::workers: {get_param: SwiftWorkers}
             swift::keystone::auth::public_url: {get_param: [EndpointMap, SwiftPublic, uri]}
index 6c7c3c7..91d5256 100644 (file)
@@ -30,6 +30,9 @@ parameters:
     default: {}
     description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
     type: json
+  MonitoringSubscriptionSwiftStorage:
+    default: 'overcloud-swift-storage'
+    type: string
 
   # DEPRECATED options for compatibility with overcloud.yaml
   # This should be removed and manipulation of the ControllerServices list
@@ -58,6 +61,7 @@ outputs:
     description: Role data for the Swift Proxy role.
     value:
       service_name: swift_storage
+      monitoring_subscription: {get_param: MonitoringSubscriptionSwiftStorage}
       config_settings:
         map_merge:
           - get_attr: [SwiftBase, role_data, config_settings]
index 14965b4..f6ec458 100644 (file)
@@ -18,11 +18,22 @@ parameters:
     description: Mapping of service endpoint -> protocol. Typically set
                  via parameter_defaults in the resource registry.
     type: json
+  ManageFirewall:
+    default: false
+    description: Whether to manage IPtables rules.
+    type: boolean
+  PurgeFirewallRules:
+    default: false
+    description: Whether IPtables rules should be purged before setting up the new ones.
+    type: boolean
 
 outputs:
   role_data:
     description: Role data for the TripleO firewall settings
     value:
       service_name: tripleo_firewall
+      config_settings:
+        tripleo::firewall::manage_firewall: {get_param: ManageFirewall}
+        tripleo::firewall::purge_firewall_rules: {get_param: PurgeFirewallRules}
       step_config: |
         include ::tripleo::firewall
index 14df831..afee4da 100644 (file)
@@ -6,8 +6,6 @@ parameters:
     type: comma_delimited_list
   object_store_swift_devices:
     type: comma_delimited_list
-  controller_swift_proxy_memcaches:
-    type: comma_delimited_list
 
 resources:
 
@@ -29,14 +27,6 @@ resources:
                     - list_join:
                       - ", "
                       - {get_param: object_store_swift_devices}
-                swift::proxy::cache::memcache_servers:
-                  str_replace:
-                    template: "['SERVERS_LIST']"
-                    params:
-                      SERVERS_LIST:
-                        list_join:
-                        - "','"
-                        - {get_param: controller_swift_proxy_memcaches}
 
 outputs:
   config_id:
index 859fad2..ebc54ab 100644 (file)
@@ -13,6 +13,7 @@ parameters:
     default: {}
   DeployIdentifier:
      type: string
+     default: ''
      description: Value which changes if the node configuration may need to be re-applied
 
 resources:
index b933c54..a5bb140 100644 (file)
@@ -84,6 +84,9 @@ parameters:
   ServiceNames:
     type: comma_delimited_list
     default: []
+  MonitoringSubscriptions:
+    type: comma_delimited_list
+    default: []
   ConfigCommand:
     type: string
     description: Command which will be run whenever configuration data changes
@@ -242,6 +245,7 @@ resources:
             service_names:
               mapped_data:
                 service_names: {get_param: ServiceNames}
+                sensu::subscriptions: {get_param: MonitoringSubscriptions}
             service_configs:
               mapped_data:
                 map_replace:
diff --git a/puppet/vip-config.yaml b/puppet/vip-config.yaml
deleted file mode 100644 (file)
index cbd7ea0..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-heat_template_version: 2015-04-30
-
-description: >
-  Configure hieradata for service -> virtual IP mappings.
-
-resources:
-  VipConfigImpl:
-    type: OS::Heat::StructuredConfig
-    properties:
-      group: os-apply-config
-      config:
-        hiera:
-          datafiles:
-            vip_data:
-              mapped_data:
-                keystone_admin_api_vip: {get_input: keystone_admin_api_vip}
-                keystone_public_api_vip: {get_input: keystone_public_api_vip}
-                neutron_api_vip: {get_input: neutron_api_vip}
-                # TODO: pass a `midonet_api_vip` var
-                midonet_api_vip: {get_input: neutron_api_vip}
-                cinder_api_vip: {get_input: cinder_api_vip}
-                glance_api_vip: {get_input: glance_api_vip}
-                glance_registry_vip: {get_input: glance_registry_vip}
-                sahara_api_vip: {get_input: sahara_api_vip}
-                swift_proxy_vip: {get_input: swift_proxy_vip}
-                manila_api_vip: {get_input: manila_api_vip}
-                nova_api_vip: {get_input: nova_api_vip}
-                nova_metadata_vip: {get_input: nova_metadata_vip}
-                ceilometer_api_vip: {get_input: ceilometer_api_vip}
-                aodh_api_vip: {get_input: aodh_api_vip}
-                gnocchi_api_vip: {get_input: gnocchi_api_vip}
-                heat_api_vip: {get_input: heat_api_vip}
-                horizon_vip: {get_input: horizon_vip}
-                redis_vip: {get_input: redis_vip}
-                mysql_vip: {get_input: mysql_vip}
-                public_virtual_ip: {get_input: public_virtual_ip}
-                controller_virtual_ip: {get_input: control_virtual_ip}
-                internal_api_virtual_ip: {get_input: internal_api_virtual_ip}
-                storage_virtual_ip: {get_input: storage_virtual_ip}
-                storage_mgmt_virtual_ip: {get_input: storage_mgmt_virtual_ip}
-                ironic_api_vip: {get_input: ironic_api_vip}
-                opendaylight_api_vip: {get_input: opendaylight_api_vip}
-                # public_virtual_ip and controller_virtual_ip are needed in
-                # both HAproxy & keepalived.
-                tripleo::haproxy::public_virtual_ip: {get_input: public_virtual_ip}
-                tripleo::haproxy::controller_virtual_ip: {get_input: control_virtual_ip}
-                tripleo::keepalived::public_virtual_ip: {get_input: public_virtual_ip}
-                tripleo::keepalived::controller_virtual_ip: {get_input: control_virtual_ip}
-                tripleo::keepalived::internal_api_virtual_ip: {get_input: internal_api_virtual_ip}
-                tripleo::keepalived::storage_virtual_ip: {get_input: storage_virtual_ip}
-                tripleo::keepalived::storage_mgmt_virtual_ip: {get_input: storage_mgmt_virtual_ip}
-                tripleo::redis_notification::haproxy_monitor_ip: {get_input: control_virtual_ip}
-
-
-outputs:
-  OS::stack_id:
-    description: The VipConfigImpl resource.
-    value: {get_resource: VipConfigImpl}
index d75aeb4..7b3d347 100755 (executable)
@@ -17,6 +17,8 @@ import traceback
 import yaml
 
 
+required_params = ['EndpointMap', 'ServiceNetMap', 'DefaultPasswords']
+
 def exit_usage():
     print('Usage %s <yaml file or directory>' % sys.argv[0])
     sys.exit(1)
@@ -40,7 +42,6 @@ def validate_service(filename, tpl):
                   % filename)
             return 1
     if 'parameters' in tpl:
-        required_params = ['EndpointMap', 'ServiceNetMap', 'DefaultPasswords']
         for param in required_params:
             if param not in tpl['parameters']:
                 print('ERROR: parameter %s is required for %s.'
@@ -64,6 +65,8 @@ def validate(filename):
         return 1
     # yaml is OK, now walk the parameters and output a warning for unused ones
     for p in tpl.get('parameters', {}):
+        if p in required_params:
+            continue
         str_p = '\'%s\'' % p
         in_resources = str_p in str(tpl.get('resources', {}))
         in_outputs = str_p in str(tpl.get('outputs', {}))