Nova Placement API composable service
authorEmilien Macchi <emilien@redhat.com>
Fri, 2 Dec 2016 23:13:50 +0000 (18:13 -0500)
committerJuan Antonio Osorio Robles <jaosorior@redhat.com>
Tue, 17 Jan 2017 16:23:16 +0000 (16:23 +0000)
Add support to deploy Nova Placement API service in TripleO.

Change-Id: Ie41ebc362a0695c8f55419e231100c63007405ed

15 files changed:
ci/environments/scenario001-multinode.yaml
ci/environments/scenario002-multinode.yaml
ci/environments/scenario003-multinode.yaml
ci/environments/scenario004-multinode.yaml
deployed-server/deployed-server-roles-data.yaml
environments/tls-endpoints-public-dns.yaml
environments/tls-endpoints-public-ip.yaml
environments/tls-everywhere-endpoints-dns.yaml
network/endpoints/endpoint_data.yaml
network/endpoints/endpoint_map.yaml
overcloud-resource-registry-puppet.j2.yaml
puppet/services/nova-base.yaml
puppet/services/nova-placement.yaml [new file with mode: 0644]
roles_data.yaml
roles_data_undercloud.yaml

index 0e9c1c7..e459d2b 100644 (file)
@@ -30,6 +30,7 @@ parameter_defaults:
     - OS::TripleO::Services::Pacemaker
     - OS::TripleO::Services::NovaConductor
     - OS::TripleO::Services::NovaApi
+    - OS::TripleO::Services::NovaPlacement
     - OS::TripleO::Services::NovaMetadata
     - OS::TripleO::Services::NovaScheduler
     - OS::TripleO::Services::Ntp
index 7875ef4..6fd54f1 100644 (file)
@@ -28,6 +28,7 @@ parameter_defaults:
     - OS::TripleO::Services::Pacemaker
     - OS::TripleO::Services::NovaConductor
     - OS::TripleO::Services::NovaApi
+    - OS::TripleO::Services::NovaPlacement
     - OS::TripleO::Services::NovaMetadata
     - OS::TripleO::Services::NovaScheduler
     - OS::TripleO::Services::Ntp
index 26f94d0..32c9e8e 100644 (file)
@@ -31,6 +31,7 @@ parameter_defaults:
     - OS::TripleO::Services::Pacemaker
     - OS::TripleO::Services::NovaConductor
     - OS::TripleO::Services::NovaApi
+    - OS::TripleO::Services::NovaPlacement
     - OS::TripleO::Services::NovaMetadata
     - OS::TripleO::Services::NovaScheduler
     - OS::TripleO::Services::Ntp
index 0d94cea..ec075c1 100644 (file)
@@ -33,6 +33,7 @@ parameter_defaults:
     - OS::TripleO::Services::Pacemaker
     - OS::TripleO::Services::NovaConductor
     - OS::TripleO::Services::NovaApi
+    - OS::TripleO::Services::NovaPlacement
     - OS::TripleO::Services::NovaMetadata
     - OS::TripleO::Services::NovaScheduler
     - OS::TripleO::Services::Ntp
index 8857070..76317a5 100644 (file)
@@ -58,6 +58,7 @@
     - OS::TripleO::Services::MongoDb
     - OS::TripleO::Services::NovaApi
     - OS::TripleO::Services::NovaMetadata
+    - OS::TripleO::Services::NovaPlacement
     - OS::TripleO::Services::NovaScheduler
     - OS::TripleO::Services::NovaConsoleauth
     - OS::TripleO::Services::NovaVncProxy
index fb66b38..4d8543c 100644 (file)
@@ -50,6 +50,9 @@ parameter_defaults:
     NovaAdmin: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
     NovaInternal: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
     NovaPublic: {protocol: 'https', port: '13774', host: 'CLOUDNAME'}
+    NovaPlacementAdmin: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'}
+    NovaPlacementInternal: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'}
+    NovaPlacementPublic: {protocol: 'https', port: '13778', host: 'CLOUDNAME'}
     NovaVNCProxyAdmin: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'}
     NovaVNCProxyInternal: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'}
     NovaVNCProxyPublic: {protocol: 'https', port: '13080', host: 'CLOUDNAME'}
index 6586a54..f47a28e 100644 (file)
@@ -50,6 +50,9 @@ parameter_defaults:
     NovaAdmin: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
     NovaInternal: {protocol: 'http', port: '8774', host: 'IP_ADDRESS'}
     NovaPublic: {protocol: 'https', port: '13774', host: 'IP_ADDRESS'}
+    NovaPlacementAdmin: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'}
+    NovaPlacementInternal: {protocol: 'http', port: '8778', host: 'IP_ADDRESS'}
+    NovaPlacementPublic: {protocol: 'https', port: '13778', host: 'IP_ADDRESS'}
     NovaVNCProxyAdmin: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'}
     NovaVNCProxyInternal: {protocol: 'http', port: '6080', host: 'IP_ADDRESS'}
     NovaVNCProxyPublic: {protocol: 'https', port: '13080', host: 'IP_ADDRESS'}
index ebb491f..9265ada 100644 (file)
@@ -50,6 +50,9 @@ parameter_defaults:
     NovaAdmin: {protocol: 'https', port: '8774', host: 'CLOUDNAME'}
     NovaInternal: {protocol: 'https', port: '8774', host: 'CLOUDNAME'}
     NovaPublic: {protocol: 'https', port: '13774', host: 'CLOUDNAME'}
+    NovaPlacementAdmin: {protocol: 'https', port: '8778', host: 'CLOUDNAME'}
+    NovaPlacementInternal: {protocol: 'https', port: '8778', host: 'CLOUDNAME'}
+    NovaPlacementPublic: {protocol: 'https', port: '13778', host: 'CLOUDNAME'}
     NovaVNCProxyAdmin: {protocol: 'https', port: '6080', host: 'CLOUDNAME'}
     NovaVNCProxyInternal: {protocol: 'https', port: '6080', host: 'CLOUDNAME'}
     NovaVNCProxyPublic: {protocol: 'https', port: '13080', host: 'CLOUDNAME'}
index 9975df2..fd4d05d 100644 (file)
@@ -205,6 +205,21 @@ Nova:
             '': /v2.1
     port: 8774
 
+NovaPlacement:
+    Internal:
+        net_param: NovaApi
+        uri_suffixes:
+            '': /placement
+    Public:
+        net_param: Public
+        uri_suffixes:
+            '': /placement
+    Admin:
+        net_param: NovaApi
+        uri_suffixes:
+            '': /placement
+    port: 8778
+
 NovaVNCProxy:
     Internal:
         net_param: NovaApi
index af89d0b..ca58282 100644 (file)
@@ -67,6 +67,9 @@ parameters:
       NovaAdmin: {protocol: http, port: '8774', host: IP_ADDRESS}
       NovaInternal: {protocol: http, port: '8774', host: IP_ADDRESS}
       NovaPublic: {protocol: http, port: '8774', host: IP_ADDRESS}
+      NovaPlacementAdmin: {protocol: http, port: '8778', host: IP_ADDRESS}
+      NovaPlacementInternal: {protocol: http, port: '8778', host: IP_ADDRESS}
+      NovaPlacementPublic: {protocol: http, port: '8778', host: IP_ADDRESS}
       NovaVNCProxyAdmin: {protocol: http, port: '6080', host: IP_ADDRESS}
       NovaVNCProxyInternal: {protocol: http, port: '6080', host: IP_ADDRESS}
       NovaVNCProxyPublic: {protocol: http, port: '6080', host: IP_ADDRESS}
@@ -5077,6 +5080,255 @@ outputs:
                         template: NETWORK_uri
             - ':'
             - get_param: [EndpointMap, NovaPublic, port]
+      NovaPlacementAdmin:
+        host:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaPlacementAdmin, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, NovaApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, NovaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaPlacementAdmin, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, NovaApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, NovaApiNetwork]
+        port:
+          get_param: [EndpointMap, NovaPlacementAdmin, port]
+        protocol:
+          get_param: [EndpointMap, NovaPlacementAdmin, protocol]
+        uri:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, NovaPlacementAdmin, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, NovaPlacementAdmin, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, NovaApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, NovaPlacementAdmin, port]
+            - /placement
+        uri_no_suffix:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, NovaPlacementAdmin, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, NovaPlacementAdmin, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, NovaApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, NovaPlacementAdmin, port]
+            - /placement
+      NovaPlacementInternal:
+        host:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaPlacementInternal, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, NovaApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, NovaApiNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaPlacementInternal, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, NovaApiNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, NovaApiNetwork]
+        port:
+          get_param: [EndpointMap, NovaPlacementInternal, port]
+        protocol:
+          get_param: [EndpointMap, NovaPlacementInternal, protocol]
+        uri:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, NovaPlacementInternal, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, NovaPlacementInternal, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, NovaApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, NovaPlacementInternal, port]
+            - /placement
+        uri_no_suffix:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, NovaPlacementInternal, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, NovaPlacementInternal, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, NovaApiNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, NovaApiNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, NovaPlacementInternal, port]
+            - /placement
+      NovaPlacementPublic:
+        host:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaPlacementPublic, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, PublicNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - str_replace:
+                    params:
+                      NETWORK:
+                        get_param: [ServiceNetMap, PublicNetwork]
+                    template: NETWORK_uri
+        host_nobrackets:
+          str_replace:
+            template:
+              get_param: [EndpointMap, NovaPlacementPublic, host]
+            params:
+              CLOUDNAME:
+                get_param:
+                - CloudEndpoints
+                - get_param: [ServiceNetMap, PublicNetwork]
+              IP_ADDRESS:
+                get_param:
+                - NetIpMap
+                - get_param: [ServiceNetMap, PublicNetwork]
+        port:
+          get_param: [EndpointMap, NovaPlacementPublic, port]
+        protocol:
+          get_param: [EndpointMap, NovaPlacementPublic, protocol]
+        uri:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, NovaPlacementPublic, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, NovaPlacementPublic, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, PublicNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                        params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                        template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, NovaPlacementPublic, port]
+            - /placement
+        uri_no_suffix:
+          list_join:
+          - ''
+          - - get_param: [EndpointMap, NovaPlacementPublic, protocol]
+            - ://
+            - str_replace:
+                template:
+                  get_param: [EndpointMap, NovaPlacementPublic, host]
+                params:
+                  CLOUDNAME:
+                    get_param:
+                    - CloudEndpoints
+                    - get_param: [ServiceNetMap, PublicNetwork]
+                  IP_ADDRESS:
+                    get_param:
+                    - NetIpMap
+                    - str_replace:
+                       params:
+                          NETWORK:
+                            get_param: [ServiceNetMap, PublicNetwork]
+                       template: NETWORK_uri
+            - ':'
+            - get_param: [EndpointMap, NovaPlacementPublic, port]
+            - /placement
       NovaVNCProxyAdmin:
         host:
           str_replace:
index fcc2dd2..2ebf2db 100644 (file)
@@ -173,6 +173,7 @@ resource_registry:
   OS::TripleO::Services::NovaConductor: puppet/services/nova-conductor.yaml
   OS::TripleO::Services::MongoDb: puppet/services/database/mongodb.yaml
   OS::TripleO::Services::NovaApi: puppet/services/nova-api.yaml
+  OS::TripleO::Services::NovaPlacement: puppet/services/nova-placement.yaml
   OS::TripleO::Services::NovaMetadata: puppet/services/nova-metadata.yaml
   OS::TripleO::Services::NovaScheduler: puppet/services/nova-scheduler.yaml
   OS::TripleO::Services::NovaConsoleauth: puppet/services/nova-consoleauth.yaml
index dabb135..d70e66a 100644 (file)
@@ -103,6 +103,17 @@ outputs:
                 - '/nova_api'
                 - '?bind_address='
                 - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
+          nova::placement_database_connection:
+            list_join:
+              - ''
+              - - {get_param: [EndpointMap, MysqlInternal, protocol]}
+                - '://nova_placement:'
+                - {get_param: NovaPassword}
+                - '@'
+                - {get_param: [EndpointMap, MysqlInternal, host]}
+                - '/nova_placement'
+                - '?bind_address='
+                - "%{hiera('tripleo::profile::base::database::mysql::client_bind_address')}"
           nova::debug: {get_param: Debug}
           nova::purge_config: {get_param: EnableConfigPurge}
           nova::network::neutron::neutron_project_name: 'service'
diff --git a/puppet/services/nova-placement.yaml b/puppet/services/nova-placement.yaml
new file mode 100644 (file)
index 0000000..9b7120d
--- /dev/null
@@ -0,0 +1,124 @@
+heat_template_version: ocata
+
+description: >
+  OpenStack Nova Placement API service configured with Puppet
+
+parameters:
+  ServiceNetMap:
+    default: {}
+    description: Mapping of service_name -> network name. Typically set
+                 via parameter_defaults in the resource registry.  This
+                 mapping overrides those in ServiceNetMapDefaults.
+    type: json
+  DefaultPasswords:
+    default: {}
+    type: json
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    type: json
+  NovaWorkers:
+    default: 0
+    description: Number of workers for Nova Placement API service.
+    type: number
+  NovaPassword:
+    description: The password for the nova service and db account, used by nova-placement.
+    type: string
+    hidden: true
+  KeystoneRegion:
+    type: string
+    default: 'regionOne'
+    description: Keystone region for endpoint
+  MonitoringSubscriptionNovaPlacement:
+    default: 'overcloud-nova-placement'
+    type: string
+  NovaPlacementLoggingSource:
+    type: json
+    default:
+      tag: openstack.nova.placement
+      path: /var/log/httpd/nova_placement_wsgi_error_ssl.log
+  EnableInternalTLS:
+    type: boolean
+    default: false
+
+conditions:
+  nova_workers_zero: {equals : [{get_param: NovaWorkers}, 0]}
+
+resources:
+  ApacheServiceBase:
+    type: ./apache.yaml
+    properties:
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+      EndpointMap: {get_param: EndpointMap}
+      EnableInternalTLS: {get_param: EnableInternalTLS}
+
+  NovaBase:
+    type: ./nova-base.yaml
+    properties:
+      ServiceNetMap: {get_param: ServiceNetMap}
+      DefaultPasswords: {get_param: DefaultPasswords}
+      EndpointMap: {get_param: EndpointMap}
+
+outputs:
+  role_data:
+    description: Role data for the Nova Placement API service.
+    value:
+      service_name: nova_placement
+      monitoring_subscription: {get_param: MonitoringSubscriptionNovaPlacement}
+      logging_source: {get_param: NovaPlacementLoggingSource}
+      logging_groups:
+        - nova
+      config_settings:
+        map_merge:
+        - get_attr: [NovaBase, role_data, config_settings]
+        - get_attr: [ApacheServiceBase, role_data, config_settings]
+        - tripleo.nova_placement.firewall_rules:
+            '138 nova_placement':
+              dport:
+                - 8778
+                - 13778
+          nova::placement::project_name: 'service'
+          nova::placement::password: {get_param: NovaPassword}
+          nova::placement::auth_url: {get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix]}
+          nova::placement::os_region_name: {get_param: KeystoneRegion}
+          nova::wsgi::apache_placement::api_port: '8778'
+          nova::wsgi::apache_placement::ssl: {get_param: EnableInternalTLS}
+          # NOTE: bind IP is found in Heat replacing the network name with the local node IP
+          # for the given network; replacement examples (eg. for internal_api):
+          # internal_api -> IP
+          # internal_api_uri -> [IP]
+          # internal_api_subnet - > IP/CIDR
+          nova::wsgi::apache_placement::bind_host: {get_param: [ServiceNetMap, NovaApiNetwork]}
+          nova::wsgi::apache_placement::servername:
+            str_replace:
+              template:
+                "%{hiera('fqdn_$NETWORK')}"
+              params:
+                $NETWORK: {get_param: [ServiceNetMap, NovaApiNetwork]}
+        -
+          if:
+          - nova_workers_zero
+          - {}
+          - nova::wsgi::apache_placement::workers: {get_param: NovaWorkers}
+      step_config: |
+        include tripleo::profile::base::nova::placement
+      service_config_settings:
+        keystone:
+          nova::keystone::auth_placement::tenant: 'service'
+          nova::keystone::auth_placement::public_url: {get_param: [EndpointMap, NovaPlacementPublic, uri]}
+          nova::keystone::auth_placement::internal_url: {get_param: [EndpointMap, NovaPlacementInternal, uri]}
+          nova::keystone::auth_placement::admin_url: {get_param: [EndpointMap, NovaPlacementAdmin, uri]}
+          nova::keystone::auth_placement::password: {get_param: NovaPassword}
+          nova::keystone::auth_placement::region: {get_param: KeystoneRegion}
+        mysql:
+          map_merge:
+          - {get_attr: [NovaBase, role_data, service_config_settings, mysql]}
+          - nova::db::mysql_placement::password: {get_param: NovaPassword}
+            nova::db::mysql_placement::user: nova_placement
+            nova::db::mysql_placement::host: {get_param: [EndpointMap, MysqlInternal, host_nobrackets]}
+            nova::db::mysql_placement::dbname: nova_placement
+            nova::db::mysql_placement::allowed_hosts:
+              - '%'
+              - "%{hiera('mysql_bind_host')}"
index 8b82066..d828d14 100644 (file)
@@ -57,6 +57,7 @@
     - OS::TripleO::Services::NovaConductor
     - OS::TripleO::Services::MongoDb
     - OS::TripleO::Services::NovaApi
+    - OS::TripleO::Services::NovaPlacement
     - OS::TripleO::Services::NovaMetadata
     - OS::TripleO::Services::NovaScheduler
     - OS::TripleO::Services::NovaConsoleauth
index 08213b6..30f9509 100644 (file)
@@ -18,6 +18,7 @@
     - OS::TripleO::Services::HeatApiCfn
     - OS::TripleO::Services::HeatEngine
     - OS::TripleO::Services::NovaApi
+    - OS::TripleO::Services::NovaPlacement
     - OS::TripleO::Services::NovaMetadata
     - OS::TripleO::Services::NovaScheduler
     - OS::TripleO::Services::NovaConductor