From 4a6d9adfc7f6ea5938b21055acbd059856aaebf2 Mon Sep 17 00:00:00 2001 From: Michael Chapman Date: Wed, 20 Jan 2016 00:54:52 -0500 Subject: [PATCH] Aodh Add support for Aodh. Current packaged module is out of date and the module is very young, so it is pulled from git on liberty branch. Change-Id: Iff72c8b63970021e212bb9d78f9a805d108f0bcf --- build/instack.sh | 24 ++ build/opnfv-tripleo-heat-templates.patch | 515 ++++++++++++++++++++++++++++--- 2 files changed, 497 insertions(+), 42 deletions(-) diff --git a/build/instack.sh b/build/instack.sh index 80cfa473..e0d71d51 100755 --- a/build/instack.sh +++ b/build/instack.sh @@ -242,11 +242,16 @@ pushd stack # make a copy of the cached overcloud-full image cp overcloud-full.qcow2 overcloud-full-odl.qcow2 +#install aodh on overcloud +AODH_PKG="openstack-aodh-api,openstack-aodh-common,openstack-aodh-compat,openstack-aodh-evaluator,openstack-aodh-expirer" +AODH_PKG+=",openstack-aodh-listener,openstack-aodh-notifier" + # remove unnecessary packages and install necessary packages LIBGUESTFS_BACKEND=direct virt-customize --run-command "yum remove -y openstack-neutron-openvswitch" \ --install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \ --upload /etc/yum.repos.d/opendaylight.repo:/etc/yum.repos.d/opendaylight.repo \ --install opendaylight,python-networking-odl,ceph \ + --install $AODH_PKG \ -a overcloud-full-odl.qcow2 ## WORK AROUND @@ -265,6 +270,7 @@ LIBGUESTFS_BACKEND=direct virt-customize --upload puppet-opendaylight.tar.gz:/et LIBGUESTFS_BACKEND=direct virt-customize --upload ../opnfv-tripleo-heat-templates.patch:/tmp \ --run-command "cd /usr/share/openstack-tripleo-heat-templates/ && patch -Np1 < /tmp/opnfv-tripleo-heat-templates.patch" \ -a instack.qcow2 + LIBGUESTFS_BACKEND=direct virt-customize --upload ../opendaylight-puppet-neutron.patch:/tmp \ --run-command "cd /etc/puppet/modules/neutron && patch -Np1 < /tmp/opendaylight-puppet-neutron.patch" \ -a overcloud-full-odl.qcow2 @@ -276,6 +282,24 @@ LIBGUESTFS_BACKEND=direct virt-customize --upload ../puppet-cinder-quota-fix.pat --run-command "cd /etc/puppet/modules/cinder && patch -Np1 < /tmp/puppet-cinder-quota-fix.patch" \ -a overcloud-full-odl.qcow2 # END REMOVE ME AFTER Brahmaputra + +## END WORK AROUND +popd + +## WORK AROUND +## Current package of puppet-aodh is old + +pushd stack +rm -rf aodh +git clone https://github.com/openstack/puppet-aodh aodh +pushd aodh +git checkout stable/liberty +popd + +tar -czf puppet-aodh.tar.gz aodh +LIBGUESTFS_BACKEND=direct virt-customize --upload puppet-aodh.tar.gz:/etc/puppet/modules/ \ + --run-command "cd /etc/puppet/modules/ && rm -rf aodh && tar xzf puppet-aodh.tar.gz" \ + -a overcloud-full-odl.qcow2 ## END WORK AROUND popd diff --git a/build/opnfv-tripleo-heat-templates.patch b/build/opnfv-tripleo-heat-templates.patch index f96f1251..dc6ebadd 100644 --- a/build/opnfv-tripleo-heat-templates.patch +++ b/build/opnfv-tripleo-heat-templates.patch @@ -1,4 +1,4 @@ -From d9b3ccc28ff57bfa4e1135cea038ac4e5318947c Mon Sep 17 00:00:00 2001 +From 3bdd51fc8aa137e65422d6b1f5b0ddc4391b3201 Mon Sep 17 00:00:00 2001 From: Tim Rozet Date: Tue, 12 Jan 2016 16:49:57 -0500 Subject: [PATCH] Adds current opnfv patch with ODL and ONOS support @@ -8,17 +8,20 @@ Subject: [PATCH] Adds current opnfv patch with ODL and ONOS support environments/opendaylight-external.yaml | 25 ++ environments/opendaylight.yaml | 25 ++ environments/opendaylight_l3.yaml | 9 + + network/endpoints/endpoint_map.yaml | 31 ++ overcloud-resource-registry-puppet.yaml | 3 + - overcloud-without-mergepy.yaml | 73 +++++ - puppet/all-nodes-config.yaml | 6 + - puppet/compute.yaml | 35 +++ - puppet/controller.yaml | 47 ++++ - puppet/manifests/overcloud_compute.pp | 33 ++- - puppet/manifests/overcloud_controller.pp | 86 +++++- - puppet/manifests/overcloud_controller_pacemaker.pp | 302 +++++++++++++-------- + overcloud-without-mergepy.yaml | 87 +++++ + puppet/all-nodes-config.yaml | 16 + + puppet/compute.yaml | 35 ++ + puppet/controller.yaml | 84 +++++ + puppet/hieradata/common.yaml | 1 + + puppet/hieradata/controller.yaml | 3 + + puppet/manifests/overcloud_compute.pp | 33 +- + puppet/manifests/overcloud_controller.pp | 104 +++++- + puppet/manifests/overcloud_controller_pacemaker.pp | 385 +++++++++++++++------ puppet/manifests/overcloud_opendaylight.pp | 27 ++ - puppet/opendaylight-puppet.yaml | 217 +++++++++++++++ - 14 files changed, 772 insertions(+), 124 deletions(-) + puppet/opendaylight-puppet.yaml | 217 ++++++++++++ + 17 files changed, 968 insertions(+), 125 deletions(-) create mode 100644 environments/onos.yaml create mode 100644 environments/opendaylight-external.yaml create mode 100644 environments/opendaylight.yaml @@ -117,6 +120,69 @@ index 0000000..ffdb017 + neutron_mechanism_drivers: ['opendaylight'] + neutron_tenant_network_type: vxlan + opendaylight_install: true +diff --git a/network/endpoints/endpoint_map.yaml b/network/endpoints/endpoint_map.yaml +index 0521401..7caa91b 100644 +--- a/network/endpoints/endpoint_map.yaml ++++ b/network/endpoints/endpoint_map.yaml +@@ -4,6 +4,9 @@ description: > + A Map of OpenStack Endpoints + + parameters: ++ AodhApiVirtualIP: ++ type: string ++ default: '' + CeilometerApiVirtualIP: + type: string + default: '' +@@ -43,6 +46,9 @@ parameters: + EndpointMap: + type: json + default: ++ AodhAdmin: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'} ++ AodhInternal: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'} ++ AodhPublic: {protocol: 'http', port: '8042', host: 'IP_ADDRESS'} + CeilometerAdmin: {protocol: 'http', port: '8777', host: 'IP_ADDRESS'} + CeilometerInternal: {protocol: 'http', port: '8777', host: 'IP_ADDRESS'} + CeilometerPublic: {protocol: 'http', port: '8777', host: 'IP_ADDRESS'} +@@ -83,6 +89,28 @@ parameters: + + resources: + ++ AodhInternal: ++ type: OS::TripleO::Endpoint ++ properties: ++ EndpointName: AodhInternal ++ EndpointMap: { get_param: EndpointMap } ++ CloudName: {get_param: CloudName} ++ IP: {get_param: AodhApiVirtualIP} ++ AodhPublic: ++ type: OS::TripleO::Endpoint ++ properties: ++ EndpointName: AodhPublic ++ EndpointMap: { get_param: EndpointMap } ++ CloudName: {get_param: CloudName} ++ IP: {get_param: PublicVirtualIP} ++ AodhAdmin: ++ type: OS::TripleO::Endpoint ++ properties: ++ EndpointName: AodhAdmin ++ EndpointMap: { get_param: EndpointMap } ++ CloudName: {get_param: CloudName} ++ IP: {get_param: AodhApiVirtualIP} ++ + CeilometerInternal: + type: OS::TripleO::Endpoint + properties: +@@ -407,6 +435,9 @@ resources: + outputs: + endpoint_map: + value: ++ AodhInternal: {get_attr: [ AodhInternal, endpoint] } ++ AodhPublic: {get_attr: [ AodhPublic, endpoint] } ++ AodhAdmin: {get_attr: [ AodhAdmin, endpoint] } + CeilometerInternal: {get_attr: [ CeilometerInternal, endpoint] } + CeilometerPublic: {get_attr: [ CeilometerPublic, endpoint] } + CeilometerAdmin: {get_attr: [ CeilometerAdmin, endpoint] } diff --git a/overcloud-resource-registry-puppet.yaml b/overcloud-resource-registry-puppet.yaml index 4cfed6b..adecc79 100644 --- a/overcloud-resource-registry-puppet.yaml @@ -132,10 +198,22 @@ index 4cfed6b..adecc79 100644 # NodeUserData == Cloud-init additional user-data, e.g cloud-config # ControllerExtraConfigPre == Controller configuration pre service deployment diff --git a/overcloud-without-mergepy.yaml b/overcloud-without-mergepy.yaml -index a532c2f..1aa87ae 100644 +index a532c2f..5206004 100644 --- a/overcloud-without-mergepy.yaml +++ b/overcloud-without-mergepy.yaml -@@ -113,6 +113,10 @@ parameters: +@@ -15,6 +15,11 @@ parameters: + description: The password for the keystone admin account, used for monitoring, querying neutron etc. + type: string + hidden: true ++ AodhPassword: ++ default: unset ++ description: The password for the aodh services ++ type: string ++ hidden: true + CeilometerBackend: + default: 'mongodb' + description: The ceilometer backend type. +@@ -113,6 +118,10 @@ parameters: default: '' type: string description: Neutron ID for ctlplane network. @@ -146,7 +224,7 @@ index a532c2f..1aa87ae 100644 NeutronEnableTunnelling: type: string default: "True" -@@ -227,6 +231,27 @@ parameters: +@@ -227,6 +236,27 @@ parameters: default: false description: Should MongoDb journaling be disabled type: boolean @@ -174,7 +252,15 @@ index a532c2f..1aa87ae 100644 PublicVirtualFixedIPs: default: [] description: > -@@ -664,6 +689,18 @@ parameters: +@@ -575,6 +605,7 @@ parameters: + default: + NeutronTenantNetwork: tenant + CeilometerApiNetwork: internal_api ++ AodhApiNetwork: internal_api + MongoDbNetwork: internal_api + CinderApiNetwork: internal_api + CinderIscsiNetwork: storage +@@ -664,6 +695,18 @@ parameters: structure as ExtraConfig. type: json @@ -193,7 +279,7 @@ index a532c2f..1aa87ae 100644 # Hostname format for each role # Note %index% is translated into the index of the node, e.g 0/1/2 etc # and %stackname% is replaced with OS::stack_name in the template below. -@@ -688,6 +725,10 @@ parameters: +@@ -688,6 +731,10 @@ parameters: type: string description: Format for CephStorage node hostnames default: '%stackname%-cephstorage-%index%' @@ -204,7 +290,15 @@ index a532c2f..1aa87ae 100644 # Identifiers to trigger tasks on nodes UpdateIdentifier: -@@ -770,6 +811,28 @@ resources: +@@ -758,6 +805,7 @@ resources: + properties: + CloudName: {get_param: CloudName} + CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]} ++ AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]} + CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]} + GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]} + GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]} +@@ -770,6 +818,28 @@ resources: SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]} PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]} @@ -233,7 +327,15 @@ index a532c2f..1aa87ae 100644 Controller: type: OS::Heat::ResourceGroup depends_on: Networks -@@ -832,6 +895,7 @@ resources: +@@ -781,6 +851,7 @@ resources: + properties: + AdminPassword: {get_param: AdminPassword} + AdminToken: {get_param: AdminToken} ++ AodhPassword: {get_param: AodhPassword} + CeilometerBackend: {get_param: CeilometerBackend} + CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret} + CeilometerPassword: {get_param: CeilometerPassword} +@@ -832,6 +903,7 @@ resources: NeutronBridgeMappings: {get_param: NeutronBridgeMappings} NeutronExternalNetworkBridge: {get_param: NeutronExternalNetworkBridge} NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling} @@ -241,7 +343,7 @@ index a532c2f..1aa87ae 100644 NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges} NeutronPublicInterface: {get_param: NeutronPublicInterface} NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute} -@@ -853,6 +917,11 @@ resources: +@@ -853,6 +925,11 @@ resources: NovaPassword: {get_param: NovaPassword} NtpServer: {get_param: NtpServer} MongoDbNoJournal: {get_param: MongoDbNoJournal} @@ -253,7 +355,15 @@ index a532c2f..1aa87ae 100644 PcsdPassword: {get_resource: PcsdPassword} PublicVirtualInterface: {get_param: PublicVirtualInterface} RabbitPassword: {get_param: RabbitPassword} -@@ -948,6 +1017,9 @@ resources: +@@ -878,6 +955,7 @@ resources: + ServiceNetMap: {get_param: ServiceNetMap} + EndpointMap: {get_attr: [EndpointMap, endpoint_map]} + CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]} ++ AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]} + CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]} + HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]} + GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]} +@@ -948,6 +1026,9 @@ resources: NovaPublicIP: {get_attr: [PublicVirtualIP, ip_address]} NovaPassword: {get_param: NovaPassword} NtpServer: {get_param: NtpServer} @@ -263,7 +373,7 @@ index a532c2f..1aa87ae 100644 RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]} RabbitPassword: {get_param: RabbitPassword} RabbitUserName: {get_param: RabbitUserName} -@@ -1068,6 +1140,7 @@ resources: +@@ -1068,6 +1149,7 @@ resources: compute_hosts: {get_attr: [Compute, hosts_entry]} controller_hosts: {get_attr: [Controller, hosts_entry]} controller_ips: {get_attr: [Controller, ip_address]} @@ -271,8 +381,34 @@ index a532c2f..1aa87ae 100644 block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]} object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]} ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]} +@@ -1081,6 +1163,7 @@ resources: + heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]} + swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]} + ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]} ++ aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]} + nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]} + nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]} + glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]} +@@ -1189,6 +1272,7 @@ resources: + nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]} + nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]} + ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]} ++ aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]} + heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]} + horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]} + redis_vip: {get_attr: [RedisVirtualIP, ip_address]} +@@ -1434,6 +1518,9 @@ outputs: + PublicVip: + description: Controller VIP for public API endpoints + value: {get_attr: [PublicVirtualIP, ip_address]} ++ AodhInternalVip: ++ description: VIP for Aodh API internal endpoint ++ value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]} + CeilometerInternalVip: + description: VIP for Ceilometer API internal endpoint + value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]} diff --git a/puppet/all-nodes-config.yaml b/puppet/all-nodes-config.yaml -index 2bc519b..98283c2 100644 +index 2bc519b..6342df3 100644 --- a/puppet/all-nodes-config.yaml +++ b/puppet/all-nodes-config.yaml @@ -8,6 +8,8 @@ parameters: @@ -284,7 +420,16 @@ index 2bc519b..98283c2 100644 block_storage_hosts: type: comma_delimited_list object_storage_hosts: -@@ -82,6 +84,10 @@ resources: +@@ -34,6 +36,8 @@ parameters: + type: comma_delimited_list + ceilometer_api_node_ips: + type: comma_delimited_list ++ aodh_api_node_ips: ++ type: comma_delimited_list + nova_api_node_ips: + type: comma_delimited_list + nova_metadata_node_ips: +@@ -82,6 +86,10 @@ resources: raw_data: {get_file: hieradata/RedHat.yaml} all_nodes: mapped_data: @@ -295,6 +440,21 @@ index 2bc519b..98283c2 100644 controller_node_ips: list_join: - ',' +@@ -166,6 +174,14 @@ resources: + list_join: + - "','" + - {get_param: ceilometer_api_node_ips} ++ aodh_api_node_ips: ++ str_replace: ++ template: "['SERVERS_LIST']" ++ params: ++ SERVERS_LIST: ++ list_join: ++ - "','" ++ - {get_param: aodh_api_node_ips} + nova_api_node_ips: + str_replace: + template: "['SERVERS_LIST']" diff --git a/puppet/compute.yaml b/puppet/compute.yaml index 70c7403..13fd4f6 100644 --- a/puppet/compute.yaml @@ -384,10 +544,25 @@ index 70c7403..13fd4f6 100644 description: Hostname of the server value: {get_attr: [NovaCompute, name]} diff --git a/puppet/controller.yaml b/puppet/controller.yaml -index ea0b3af..1d52922 100644 +index ea0b3af..489aa57 100644 --- a/puppet/controller.yaml +++ b/puppet/controller.yaml -@@ -357,6 +357,10 @@ parameters: +@@ -14,6 +14,14 @@ parameters: + description: The keystone auth secret and db password. + type: string + hidden: true ++ AodhApiVirtualIP: ++ type: string ++ default: '' ++ AodhPassword: ++ default: unset ++ description: The password for the aodh services. ++ type: string ++ hidden: true + CeilometerApiVirtualIP: + type: string + default: '' +@@ -357,6 +365,10 @@ parameters: default: 'True' description: Allow automatic l3-agent failover type: string @@ -398,7 +573,7 @@ index ea0b3af..1d52922 100644 NeutronEnableTunnelling: type: string default: "True" -@@ -443,6 +447,31 @@ parameters: +@@ -443,6 +455,31 @@ parameters: NtpServer: type: string default: '' @@ -430,7 +605,7 @@ index ea0b3af..1d52922 100644 PcsdPassword: type: string description: The password for the 'pcsd' user. -@@ -696,6 +725,7 @@ resources: +@@ -696,6 +733,7 @@ resources: input_values: bootstack_nodeid: {get_attr: [Controller, name]} neutron_enable_tunneling: {get_param: NeutronEnableTunnelling} @@ -438,7 +613,7 @@ index ea0b3af..1d52922 100644 haproxy_log_address: {get_param: HAProxySyslogAddress} heat.watch_server_url: list_join: -@@ -805,6 +835,12 @@ resources: +@@ -805,6 +843,12 @@ resources: template: tripleo-CLUSTER params: CLUSTER: {get_param: MysqlClusterUniquePart} @@ -451,7 +626,36 @@ index ea0b3af..1d52922 100644 neutron_flat_networks: {get_param: NeutronFlatNetworks} neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret} neutron_agent_mode: {get_param: NeutronAgentMode} -@@ -1136,6 +1172,16 @@ resources: +@@ -879,6 +923,7 @@ resources: + ceilometer_backend: {get_param: CeilometerBackend} + ceilometer_metering_secret: {get_param: CeilometerMeteringSecret} + ceilometer_password: {get_param: CeilometerPassword} ++ aodh_password: {get_param: AodhPassword} + ceilometer_coordination_url: + list_join: + - '' +@@ -891,6 +936,12 @@ resources: + - - 'mysql://ceilometer:unset@' + - {get_param: MysqlVirtualIP} + - '/ceilometer' ++ ceilometer_public_url: {get_param: [EndpointMap, CeilometerPublic, uri]} ++ ceilometer_internal_url: {get_param: [EndpointMap, CeilometerInternal, uri]} ++ ceilometer_admin_url: {get_param: [EndpointMap, CeilometerAdmin, uri]} ++ aodh_public_url: {get_param: [EndpointMap, AodhPublic, uri]} ++ aodh_internal_url: {get_param: [EndpointMap, AodhInternal, uri]} ++ aodh_admin_url: {get_param: [EndpointMap, AodhAdmin, uri]} + snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName} + snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword} + nova_password: {get_param: NovaPassword} +@@ -948,6 +999,7 @@ resources: + neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]} + neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]} + ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]} ++ aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]} + 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]}]} +@@ -1136,6 +1188,16 @@ resources: mysql_bind_host: {get_input: mysql_network} mysql_virtual_ip: {get_input: mysql_virtual_ip} @@ -461,14 +665,14 @@ index ea0b3af..1d52922 100644 + opendaylight_username: {get_input: opendaylight_username} + opendaylight_password: {get_input: opendaylight_password} + opendaylight_enable_l3: {get_input: opendaylight_enable_l3} -+ ++ + # ONOS + onos_port: {get_input: onos_port} + # Neutron neutron::bind_host: {get_input: neutron_api_network} neutron::rabbit_password: {get_input: rabbit_password} -@@ -1152,6 +1198,7 @@ resources: +@@ -1152,6 +1214,7 @@ resources: neutron_flat_networks: {get_input: neutron_flat_networks} neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret} neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network} @@ -476,6 +680,74 @@ index ea0b3af..1d52922 100644 neutron_agent_mode: {get_input: neutron_agent_mode} neutron_router_distributed: {get_input: neutron_router_distributed} neutron::core_plugin: {get_input: neutron_core_plugin} +@@ -1198,6 +1261,27 @@ resources: + snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name} + snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password} + ++ # Aodh ++ aodh::rabbit_userid: {get_input: rabbit_username} ++ aodh::rabbit_password: {get_input: rabbit_password} ++ aodh::rabbit_use_ssl: {get_input: rabbit_client_use_ssl} ++ aodh::rabbit_port: {get_input: rabbit_client_port} ++ aodh::debug: {get_input: debug} ++ aodh::wsgi::apache::ssl: false ++ aodh::api::service_name: 'httpd' ++ aodh::api::host: {get_input: aodh_api_network} ++ aodh::api::keystone_password: {get_input: aodh_password} ++ aodh::api::keystone_auth_uri: {get_input: keystone_auth_uri} ++ aodh::api::keystone_identity_uri: {get_input: keystone_identity_uri} ++ aodh::auth::auth_password: {get_input: aodh_password} ++ aodh::keystone::auth::public_url: {get_input: aodh_public_url } ++ aodh::keystone::auth::internal_url: {get_input: aodh_internal_url } ++ aodh::keystone::auth::admin_url: {get_input: aodh_admin_url } ++ aodh::keystone::auth::password: {get_input: aodh_password } ++ aodh::keystone::auth::region: {get_input: keystone_region} ++ # for a migration path from ceilometer-alarm to aodh, we use the same database & coordination ++ aodh::evaluator::coordination_url: {get_input: ceilometer_coordination_url} ++ + # Nova + nova::rabbit_userid: {get_input: rabbit_username} + nova::rabbit_password: {get_input: rabbit_password} +diff --git a/puppet/hieradata/common.yaml b/puppet/hieradata/common.yaml +index 030f661..5840016 100644 +--- a/puppet/hieradata/common.yaml ++++ b/puppet/hieradata/common.yaml +@@ -6,6 +6,7 @@ ceilometer::agent::auth::auth_region: 'regionOne' + # FIXME: Might be better to use 'service' tenant here but this requires + # changes in the tripleo-incubator keystone role setup + ceilometer::agent::auth::auth_tenant_name: 'admin' ++aodh::auth::auth_tenant_name: 'admin' + + nova::network::neutron::neutron_admin_tenant_name: 'service' + nova::network::neutron::neutron_admin_username: 'neutron' +diff --git a/puppet/hieradata/controller.yaml b/puppet/hieradata/controller.yaml +index 4b7fd81..4f1fef6 100644 +--- a/puppet/hieradata/controller.yaml ++++ b/puppet/hieradata/controller.yaml +@@ -32,6 +32,7 @@ redis::sentinel::notification_script: '/usr/local/bin/redis-notifications.sh' + # service tenant + nova::api::admin_tenant_name: 'service' + glance::api::keystone_tenant: 'service' ++aodh::api::keystone_tenant: 'service' + glance::registry::keystone_tenant: 'service' + neutron::server::auth_tenant: 'service' + neutron::agents::metadata::auth_tenant: 'service' +@@ -39,6 +40,7 @@ cinder::api::keystone_tenant: 'service' + swift::proxy::authtoken::admin_tenant_name: 'service' + ceilometer::api::keystone_tenant: 'service' + heat::keystone_tenant: 'service' ++aodh::keystone::auth::tenant: 'service' + + # keystone + keystone::cron::token_flush::maxdelay: 3600 +@@ -115,6 +117,7 @@ tripleo::loadbalancer::mysql: true + tripleo::loadbalancer::redis: true + tripleo::loadbalancer::swift_proxy_server: true + tripleo::loadbalancer::ceilometer: true ++tripleo::loadbalancer::aodh: true + tripleo::loadbalancer::heat_api: true + tripleo::loadbalancer::heat_cloudwatch: true + tripleo::loadbalancer::heat_cfn: true diff --git a/puppet/manifests/overcloud_compute.pp b/puppet/manifests/overcloud_compute.pp index cd41cc7..b8336ee 100644 --- a/puppet/manifests/overcloud_compute.pp @@ -521,7 +793,7 @@ index cd41cc7..b8336ee 100644 if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') { diff --git a/puppet/manifests/overcloud_controller.pp b/puppet/manifests/overcloud_controller.pp -index 1f6c2be..7851b45 100644 +index 1f6c2be..474bb1d 100644 --- a/puppet/manifests/overcloud_controller.pp +++ b/puppet/manifests/overcloud_controller.pp @@ -30,6 +30,21 @@ if hiera('step') >= 1 { @@ -546,7 +818,17 @@ index 1f6c2be..7851b45 100644 if count(hiera('ntp::servers')) > 0 { include ::ntp } -@@ -223,9 +238,7 @@ if hiera('step') >= 3 { +@@ -158,6 +173,9 @@ if hiera('step') >= 2 { + + if hiera('step') >= 3 { + ++ # Apache ++ include ::apache ++ + include ::keystone + + #TODO: need a cleanup-keystone-tokens.sh solution here +@@ -223,9 +241,7 @@ if hiera('step') >= 3 { include ::nova::scheduler include ::nova::scheduler::filter @@ -556,7 +838,7 @@ index 1f6c2be..7851b45 100644 include ::neutron::agents::dhcp include ::neutron::agents::metadata -@@ -237,15 +250,76 @@ if hiera('step') >= 3 { +@@ -237,15 +253,77 @@ if hiera('step') >= 3 { require => Package['neutron'], } @@ -587,6 +869,7 @@ index 1f6c2be..7851b45 100644 + if ! str2bool(hiera('opendaylight_enable_l3', 'no')) { + Service['neutron-server'] -> Service['neutron-l3'] + } ++ + if str2bool(hiera('opendaylight_install', 'false')) { + $controller_ips = split(hiera('controller_node_ips'), ',') + $opendaylight_controller_ip = $controller_ips[0] @@ -636,7 +919,7 @@ index 1f6c2be..7851b45 100644 if 'cisco_n1kv' in hiera('neutron_mechanism_drivers') { include ::neutron::plugins::ml2::cisco::nexus1000v -@@ -280,8 +354,6 @@ if hiera('step') >= 3 { +@@ -280,8 +358,6 @@ if hiera('step') >= 3 { } Service['neutron-server'] -> Service['neutron-dhcp-service'] @@ -645,8 +928,29 @@ index 1f6c2be..7851b45 100644 Service['neutron-server'] -> Service['neutron-metadata'] include ::cinder +@@ -447,6 +523,20 @@ if hiera('step') >= 3 { + + Cron <| title == 'ceilometer-expirer' |> { command => "sleep $((\$(od -A n -t d -N 3 /dev/urandom) % 86400)) && ${::ceilometer::params::expirer_command}" } + ++ # Aodh ++ include ::aodh::auth ++ include ::aodh::api ++ include ::aodh::evaluator ++ include ::aodh::notifier ++ include ::aodh::listener ++ include ::aodh::client ++ include ::aodh::db::sync ++ class { '::aodh' : ++ database_connection => $ceilometer_database_connection, ++ } ++ # To manage the upgrade: ++ Exec['ceilometer-dbsync'] -> Exec['aodh-db-sync'] ++ + # Heat + include ::heat + include ::heat::api diff --git a/puppet/manifests/overcloud_controller_pacemaker.pp b/puppet/manifests/overcloud_controller_pacemaker.pp -index 3fb92f3..9568390 100644 +index 3fb92f3..770fc77 100644 --- a/puppet/manifests/overcloud_controller_pacemaker.pp +++ b/puppet/manifests/overcloud_controller_pacemaker.pp @@ -380,6 +380,21 @@ if hiera('step') >= 2 { @@ -667,7 +971,7 @@ index 3fb92f3..9568390 100644 + controllers_ip => $controller_node_ips + } + } -+ ++ exec { 'galera-ready' : command => '/usr/bin/clustercheck >/dev/null', timeout => 30, @@ -721,7 +1025,7 @@ index 3fb92f3..9568390 100644 + } else { + $opendaylight_controller_ip = hiera('opendaylight_controller_ip') + } -+ + + $opendaylight_port = hiera('opendaylight_port') + $private_ip = hiera('neutron::agents::ml2::ovs::local_ip') + @@ -731,7 +1035,7 @@ index 3fb92f3..9568390 100644 + odl_password => hiera('opendaylight_password'), + odl_port => hiera('opendaylight_port'), + } - ++ + if str2bool(hiera('opendaylight_install', 'false')) { + class { 'neutron::plugins::ovs::opendaylight': + odl_controller_ip => $opendaylight_controller_ip, @@ -786,13 +1090,42 @@ index 3fb92f3..9568390 100644 } neutron_dhcp_agent_config { 'DEFAULT/ovs_use_veth': value => hiera('neutron_ovs_use_veth', false); -@@ -1055,62 +1125,21 @@ if hiera('step') >= 4 { +@@ -879,6 +949,28 @@ if hiera('step') >= 3 { + enabled => false, + } + ++ # Aodh ++ include ::aodh ++ include ::aodh::config ++ include ::aodh::auth ++ include ::aodh::client ++ class { '::aodh::api': ++ manage_service => false, ++ enabled => false, ++ } ++ class { '::aodh::evaluator': ++ manage_service => false, ++ enabled => false, ++ } ++ class { '::aodh::notifier': ++ manage_service => false, ++ enabled => false, ++ } ++ class { '::aodh::listener': ++ manage_service => false, ++ enabled => false, ++ } ++ + # httpd/apache and horizon + # NOTE(gfidente): server-status can be consumed by the pacemaker resource agent + class { '::apache' : +@@ -1055,62 +1147,21 @@ if hiera('step') >= 4 { clone_params => 'interleave=true', require => Pacemaker::Resource::Service[$::keystone::params::service_name], } - pacemaker::resource::service { $::neutron::params::l3_agent_service: - clone_params => 'interleave=true', -+ if !('onos_ml2' in hiera('neutron_mechanism_drivers')) { ++ if !('onos_ml2' in hiera('neutron_mechanism_drivers') or str2bool(hiera('opendaylight_enable_l3', 'no'))) { + pacemaker::resource::service { $::neutron::params::l3_agent_service: + clone_params => 'interleave=true', + } @@ -853,7 +1186,7 @@ index 3fb92f3..9568390 100644 pacemaker::constraint::base { 'keystone-to-neutron-server-constraint': constraint_type => 'order', first_resource => "${::keystone::params::service_name}-clone", -@@ -1120,65 +1149,110 @@ if hiera('step') >= 4 { +@@ -1120,65 +1171,110 @@ if hiera('step') >= 4 { require => [Pacemaker::Resource::Service[$::keystone::params::service_name], Pacemaker::Resource::Service[$::neutron::params::server_service]], } @@ -1020,6 +1353,104 @@ index 3fb92f3..9568390 100644 # Nova pacemaker::resource::service { $::nova::params::api_service_name : clone_params => 'interleave=true', +@@ -1276,7 +1372,7 @@ if hiera('step') >= 4 { + Pacemaker::Resource::Service[$::nova::params::conductor_service_name]], + } + +- # Ceilometer ++ # Ceilometer and Aodh + case downcase(hiera('ceilometer_backend')) { + /mysql/: { + pacemaker::resource::service { $::ceilometer::params::agent_central_service_name : +@@ -1304,6 +1400,21 @@ if hiera('step') >= 4 { + pacemaker::resource::service { $::ceilometer::params::alarm_notifier_service_name : + clone_params => 'interleave=true', + } ++ pacemaker::resource::service { $::aodh::params::notifier_service_name : ++ clone_params => 'interleave=true', ++ } ++ pacemaker::resource::service { $::aodh::params::expirer_package_serice : ++ clone_params => 'interleave=true', ++ } ++ pacemaker::resource::service { $::aodh::params::listener_service_name : ++ clone_params => 'interleave=true', ++ } ++ pacemaker::resource::service { $::aodh::params::api_service_name : ++ clone_params => 'interleave=true', ++ } ++ pacemaker::resource::service { $::aodh::params::evaluator_service_name : ++ clone_params => 'interleave=true', ++ } + pacemaker::resource::service { $::ceilometer::params::agent_notification_service_name : + clone_params => 'interleave=true', + } +@@ -1315,8 +1426,10 @@ if hiera('step') >= 4 { + # Fedora doesn't know `require-all` parameter for constraints yet + if $::operatingsystem == 'Fedora' { + $redis_ceilometer_constraint_params = undef ++ $redis_aodh_constraint_params = undef + } else { + $redis_ceilometer_constraint_params = 'require-all=false' ++ $redis_aodh_constraint_params = 'require-all=false' + } + pacemaker::constraint::base { 'redis-then-ceilometer-central-constraint': + constraint_type => 'order', +@@ -1328,6 +1441,16 @@ if hiera('step') >= 4 { + require => [Pacemaker::Resource::Ocf['redis'], + Pacemaker::Resource::Service[$::ceilometer::params::agent_central_service_name]], + } ++ pacemaker::constraint::base { 'redis-then-aodh-evaluator-constraint': ++ constraint_type => 'order', ++ first_resource => 'redis-master', ++ second_resource => "${::aodh::params::evaluator_service_name}-clone", ++ first_action => 'promote', ++ second_action => 'start', ++ constraint_params => $redis_aodh_constraint_params, ++ require => [Pacemaker::Resource::Ocf['redis'], ++ Pacemaker::Resource::Service[$::aodh::params::evaluator_service_name]], ++ } + pacemaker::constraint::base { 'keystone-then-ceilometer-central-constraint': + constraint_type => 'order', + first_resource => "${::keystone::params::service_name}-clone", +@@ -1426,6 +1549,38 @@ if hiera('step') >= 4 { + require => [Pacemaker::Resource::Service[$::ceilometer::params::agent_notification_service_name], + Pacemaker::Resource::Service[$::ceilometer::params::alarm_notifier_service_name]], + } ++ pacemaker::constraint::base { 'aodh-delay-then-aodh-evaluator-constraint': ++ constraint_type => 'order', ++ first_resource => 'delay-clone', ++ second_resource => "${::aodh::params::evaluator_service_name}-clone", ++ first_action => 'start', ++ second_action => 'start', ++ require => [Pacemaker::Resource::Service[$::aodh::params::evaluator_service_name], ++ Pacemaker::Resource::Ocf['delay']], ++ } ++ pacemaker::constraint::colocation { 'aodh-evaluator-with-aodh-delay-colocation': ++ source => "${::aodh::params::evaluator_service_name}-clone", ++ target => 'delay-clone', ++ score => 'INFINITY', ++ require => [Pacemaker::Resource::Service[$::horizon::params::http_service], ++ Pacemaker::Resource::Ocf['delay']], ++ } ++ pacemaker::constraint::base { 'aodh-evaluator-then-aodh-notifier-constraint': ++ constraint_type => 'order', ++ first_resource => "${::aodh::params::evaluator_service_name}-clone", ++ second_resource => "${::aodh::params::notifier_service_name}-clone", ++ first_action => 'start', ++ second_action => 'start', ++ require => [Pacemaker::Resource::Service[$::aodh::params::evaluator_service_name], ++ Pacemaker::Resource::Service[$::aodh::params::notifier_service_name]], ++ } ++ pacemaker::constraint::colocation { 'aodh-notifier-with-aodh-evaluator-colocation': ++ source => "${::aodh::params::notifier_service_name}-clone", ++ target => "${::aodh::params::evaluator_service_name}-clone", ++ score => 'INFINITY', ++ require => [Pacemaker::Resource::Service[$::aodh::params::evaluator_service_name], ++ Pacemaker::Resource::Service[$::aodh::params::notifier_service_name]], ++ } + if downcase(hiera('ceilometer_backend')) == 'mongodb' { + pacemaker::constraint::base { 'mongodb-then-ceilometer-central-constraint': + constraint_type => 'order', diff --git a/puppet/manifests/overcloud_opendaylight.pp b/puppet/manifests/overcloud_opendaylight.pp new file mode 100644 index 0000000..33f609a @@ -1277,5 +1708,5 @@ index 0000000..b876dc7 + - - {get_attr: [OpenDaylightDeployment, deploy_stdout]} + - {get_param: UpdateIdentifier} -- -2.5.0 +2.5.4 (Apple Git-61) -- 2.16.6