From a7503a7d3f1dd41fde7f8c22dc227bb55dc2d0b6 Mon Sep 17 00:00:00 2001 From: Pete Birley Date: Tue, 20 Jun 2017 00:22:49 -0500 Subject: [PATCH] Kubernetes Entrypoint: Lookup service names for dependency checks The existing entrypoint logic used static names to reolve dependencies. This prevented the service names, and thus the hostnames of services being altered. This PS resolves that issue by looking up the service name from the endpoints specified in the values for a chart. Partial-Implements: blueprint enhance-entrypoint-dependency-checking External-Tracking-Id: OSH-21 Change-Id: Ib49490f332f8cd88e98c50d9335dfd314a170936 --- barbican/values.yaml | 35 +++++--- cinder/values.yaml | 67 ++++++++------ glance/values.yaml | 65 ++++++++------ heat/templates/job-db-init.yaml | 2 +- heat/values.yaml | 59 +++++++----- .../endpoints/_hostname_endpoint_lookup.tpl | 32 +++++++ .../snippets/_k8s_init_dep_check.tpl | 2 +- .../utils/_comma_joined_hostname_list.tpl | 19 ++++ horizon/values.yaml | 13 ++- keystone/templates/job-db-init.yaml | 2 +- keystone/values.yaml | 32 ++++--- magnum/templates/job-db-init.yaml | 2 +- magnum/values.yaml | 43 +++++---- mistral/values.yaml | 59 +++++++----- neutron/values.yaml | 82 ++++++++++------- nova/values.yaml | 90 +++++++++++++------ rabbitmq/values.yaml | 5 +- senlin/templates/job-db-init.yaml | 2 +- senlin/values.yaml | 43 +++++---- 19 files changed, 427 insertions(+), 227 deletions(-) create mode 100644 helm-toolkit/templates/endpoints/_hostname_endpoint_lookup.tpl create mode 100644 helm-toolkit/templates/utils/_comma_joined_hostname_list.tpl diff --git a/barbican/values.yaml b/barbican/values.yaml index b9b16021..bc7975da 100644 --- a/barbican/values.yaml +++ b/barbican/values.yaml @@ -63,32 +63,39 @@ keystone: dependencies: db_init: - service: - - mariadb + services: + - service: oslo_db + endpoint: internal db_sync: jobs: - barbican-db-init - service: - - mariadb + services: + - service: oslo_db + endpoint: internal ks_user: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_service: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_endpoints: jobs: - barbican-ks-service - service: - - keystone-api + services: + - service: identity + endpoint: internal api: jobs: - barbican-db-sync - barbican-ks-user - barbican-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal conf: paste: @@ -171,7 +178,7 @@ endpoints: amqp: 5672 oslo_cache: hosts: - default: memcache + default: memcached port: memcache: 11211 diff --git a/cinder/values.yaml b/cinder/values.yaml index e9acbe6b..fd9ce2d6 100644 --- a/cinder/values.yaml +++ b/cinder/values.yaml @@ -153,60 +153,75 @@ conf: dependencies: db_init: - service: - - mariadb + services: + - service: oslo_db + endpoint: internal db_sync: jobs: - cinder-db-init - service: - - mariadb + services: + - service: oslo_db + endpoint: internal ks_user: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_service: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_endpoints: jobs: - cinder-ks-service - service: - - keystone-api + services: + - service: identity + endpoint: internal api: jobs: - cinder-db-sync - cinder-ks-user - cinder-ks-endpoints - service: - - mariadb - - keystone-api + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal bootstrap: - service: - - keystone-api - - cinder-api + services: + - service: identity + endpoint: internal + - service: volume + endpoint: internal volume: jobs: - cinder-db-sync - cinder-ks-user - cinder-ks-endpoints - service: - - keystone-api - - cinder-api + services: + - service: identity + endpoint: internal + - service: volume + endpoint: internal scheduler: jobs: - cinder-db-sync - cinder-ks-user - cinder-ks-endpoints - service: - - keystone-api - - cinder-api + services: + - service: identity + endpoint: internal + - service: volume + endpoint: internal backup: jobs: - cinder-db-sync - cinder-ks-user - cinder-ks-endpoints - service: - - keystone-api - - cinder-api + services: + - service: identity + endpoint: internal + - service: volume + endpoint: internal # We use a different layout of the endpoints here to account for versioning # this swaps the service name and type, and should be rolled out to other @@ -284,7 +299,7 @@ endpoints: amqp: 5672 oslo_cache: hosts: - default: memcache + default: memcached port: memcache: 11211 diff --git a/glance/values.yaml b/glance/values.yaml index 891a4f3c..6dbca9ab 100644 --- a/glance/values.yaml +++ b/glance/values.yaml @@ -232,54 +232,69 @@ resources: dependencies: db_init: - service: - - mariadb + services: + - service: oslo_db + endpoint: internal db_sync: jobs: - glance-db-init - service: - - mariadb + services: + - service: oslo_db + endpoint: internal bootstrap: jobs: - glance-db-sync - glance-ks-user - glance-ks-endpoints - service: - - mariadb - - glance-api + services: + - service: identity + endpoint: internal + - service: image + endpoint: internal ks_user: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_service: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_endpoints: jobs: - glance-ks-service - service: - - keystone-api + services: + - service: identity + endpoint: internal api: jobs: - glance-db-sync - glance-ks-user - glance-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal registry: jobs: - glance-db-sync - glance-ks-user - glance-ks-endpoints - service: - - keystone-api - - mariadb - - glance-api + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal + - service: image + endpoint: internal tests: - service: - - keystone-api - - glance-api - - glance-registry + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal + - service: image + endpoint: internal # typically overriden by environmental # values, but should include all endpoints @@ -326,7 +341,7 @@ endpoints: mysql: 3306 oslo_cache: hosts: - default: memcache + default: memcached port: memcache: 11211 oslo_messaging: diff --git a/heat/templates/job-db-init.yaml b/heat/templates/job-db-init.yaml index d61b2f9d..1693fbcc 100644 --- a/heat/templates/job-db-init.yaml +++ b/heat/templates/job-db-init.yaml @@ -13,7 +13,7 @@ # limitations under the License. {{- $envAll := . }} -{{- $dependencies := .Values.dependencies.init }} +{{- $dependencies := .Values.dependencies.db_init }} apiVersion: batch/v1 kind: Job metadata: diff --git a/heat/values.yaml b/heat/values.yaml index c0a47128..f480900b 100644 --- a/heat/values.yaml +++ b/heat/values.yaml @@ -181,56 +181,69 @@ network: dependencies: db_init: - service: - - mariadb + services: + - service: oslo_db + endpoint: internal db_sync: jobs: - heat-db-init - service: - - mariadb + services: + - service: oslo_db + endpoint: internal ks_user: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_service: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_endpoints: jobs: - heat-ks-service - service: - - keystone-api + services: + - service: identity + endpoint: internal api: jobs: - heat-db-sync - heat-ks-user - heat-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal cfn: jobs: - heat-db-sync - heat-ks-user - heat-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal cloudwatch: jobs: - heat-db-sync - heat-ks-user - heat-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal engine: jobs: - heat-db-sync - heat-ks-user - heat-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal # typically overriden by environmental # values, but should include all endpoints @@ -287,7 +300,7 @@ endpoints: mysql: 3306 oslo_cache: hosts: - default: memcache + default: memcached port: memcache: 11211 oslo_messaging: diff --git a/helm-toolkit/templates/endpoints/_hostname_endpoint_lookup.tpl b/helm-toolkit/templates/endpoints/_hostname_endpoint_lookup.tpl new file mode 100644 index 00000000..de813ab4 --- /dev/null +++ b/helm-toolkit/templates/endpoints/_hostname_endpoint_lookup.tpl @@ -0,0 +1,32 @@ +# Copyright 2017 The Openstack-Helm Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This function returns hostnames from endpoint definitions for use cases +# where the uri style return is not appropriate, and only the short hostname or +# kubernetes servicename is used or relevant in the template: +# { tuple "memcache" "internal" . | include "helm-toolkit.endpoints.hostname_endpoint_lookup" } +# returns: the short internal hostname, which will also match the service name + + +{{- define "helm-toolkit.endpoints.hostname_endpoint_lookup" -}} +{{- $type := index . 0 -}} +{{- $endpoint := index . 1 -}} +{{- $context := index . 2 -}} +{{- $endpointMap := index $context.Values.endpoints $type }} +{{- with $endpointMap -}} +{{- $endpointScheme := .scheme }} +{{- $endpointHost := index .hosts $endpoint | default .hosts.default}} +{{- printf "%s" $endpointHost -}} +{{- end -}} +{{- end -}} diff --git a/helm-toolkit/templates/snippets/_k8s_init_dep_check.tpl b/helm-toolkit/templates/snippets/_k8s_init_dep_check.tpl index b3d9ba6b..4c0b7623 100644 --- a/helm-toolkit/templates/snippets/_k8s_init_dep_check.tpl +++ b/helm-toolkit/templates/snippets/_k8s_init_dep_check.tpl @@ -33,7 +33,7 @@ - name: INTERFACE_NAME value: eth0 - name: DEPENDENCY_SERVICE - value: "{{ include "helm-toolkit.utils.joinListWithComma" $deps.service }}" + value: "{{ tuple $deps.services $envAll | include "helm-toolkit.utils.comma_joined_hostname_list" }}" - name: DEPENDENCY_JOBS value: "{{ include "helm-toolkit.utils.joinListWithComma" $deps.jobs }}" - name: DEPENDENCY_DAEMONSET diff --git a/helm-toolkit/templates/utils/_comma_joined_hostname_list.tpl b/helm-toolkit/templates/utils/_comma_joined_hostname_list.tpl new file mode 100644 index 00000000..f697d616 --- /dev/null +++ b/helm-toolkit/templates/utils/_comma_joined_hostname_list.tpl @@ -0,0 +1,19 @@ +# Copyright 2017 The Openstack-Helm Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +{{- define "helm-toolkit.utils.comma_joined_hostname_list" -}} +{{- $deps := index . 0 -}} +{{- $envAll := index . 1 -}} +{{- range $k, $v := $deps -}}{{- if $k -}},{{- end -}}{{ tuple $v.service $v.endpoint $envAll | include "helm-toolkit.endpoints.hostname_endpoint_lookup" }}{{- end -}} +{{- end -}} diff --git a/horizon/values.yaml b/horizon/values.yaml index 04439e18..c6d609f7 100644 --- a/horizon/values.yaml +++ b/horizon/values.yaml @@ -58,9 +58,11 @@ local_settings: dependencies: dashboard: - service: - - memcached - - keystone-api + services: + - service: oslo_cache + endpoint: internal + - service: identity + endpoint: internal resources: enabled: false @@ -85,6 +87,11 @@ endpoints: port: admin: 35357 api: 5000 + oslo_cache: + hosts: + default: memcached + port: + memcache: 11211 mounts: horizon: diff --git a/keystone/templates/job-db-init.yaml b/keystone/templates/job-db-init.yaml index d8727d22..50cd04a6 100644 --- a/keystone/templates/job-db-init.yaml +++ b/keystone/templates/job-db-init.yaml @@ -13,7 +13,7 @@ # limitations under the License. {{- $envAll := . }} -{{- $dependencies := .Values.dependencies.init }} +{{- $dependencies := .Values.dependencies.db_init }} {{- $mounts_keystone_db_init := .Values.mounts.keystone_db_init.keystone_db_init }} {{- $mounts_keystone_db_init_init := .Values.mounts.keystone_db_init.init_container }} diff --git a/keystone/values.yaml b/keystone/values.yaml index 11afa5a5..46db9a9b 100644 --- a/keystone/values.yaml +++ b/keystone/values.yaml @@ -79,23 +79,29 @@ dependencies: api: jobs: - keystone-db-sync - service: - - mariadb - - memcached + services: + - service: oslo_cache + endpoint: internal + - service: oslo_db + endpoint: internal + db_init: + services: + - service: oslo_db + endpoint: internal db_sync: jobs: - keystone-db-init - service: - - mariadb - init: - service: - - mariadb + services: + - service: oslo_db + endpoint: internal tests: - service: - - keystone-api + services: + - service: identity + endpoint: internal bootstrap: - service: - - keystone-api + services: + - service: identity + endpoint: internal resources: enabled: false @@ -225,6 +231,6 @@ endpoints: amqp: 5672 oslo_cache: hosts: - default: memcache + default: memcached port: memcache: 11211 diff --git a/magnum/templates/job-db-init.yaml b/magnum/templates/job-db-init.yaml index b6dc3587..e696ea4d 100644 --- a/magnum/templates/job-db-init.yaml +++ b/magnum/templates/job-db-init.yaml @@ -13,7 +13,7 @@ # limitations under the License. {{- $envAll := . }} -{{- $dependencies := .Values.dependencies.init }} +{{- $dependencies := .Values.dependencies.db_init }} apiVersion: batch/v1 kind: Job metadata: diff --git a/magnum/values.yaml b/magnum/values.yaml index a59f7a4d..3d16b459 100644 --- a/magnum/values.yaml +++ b/magnum/values.yaml @@ -102,40 +102,49 @@ network: dependencies: db_init: - service: - - mariadb + services: + - service: oslo_db + endpoint: internal db_sync: jobs: - magnum-db-init - service: - - mariadb + services: + - service: oslo_db + endpoint: internal ks_user: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_service: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_endpoints: jobs: - magnum-ks-service - service: - - keystone-api + services: + - service: identity + endpoint: internal api: jobs: - magnum-db-sync - magnum-ks-user - magnum-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal conductor: jobs: - magnum-db-sync - magnum-ks-user - magnum-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal # typically overriden by environmental # values, but should include all endpoints @@ -174,7 +183,7 @@ endpoints: mysql: 3306 oslo_cache: hosts: - default: memcache + default: memcached port: memcache: 11211 oslo_messaging: diff --git a/mistral/values.yaml b/mistral/values.yaml index 46acc4c1..92fb0884 100644 --- a/mistral/values.yaml +++ b/mistral/values.yaml @@ -86,56 +86,69 @@ network: dependencies: db_init: - service: - - mariadb + services: + - service: oslo_db + endpoint: internal db_sync: jobs: - mistral-db-init - service: - - mariadb + services: + - service: oslo_db + endpoint: internal ks_user: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_service: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_endpoints: jobs: - mistral-ks-service - service: - - keystone-api + services: + - service: identity + endpoint: internal api: jobs: - mistral-db-sync - mistral-ks-user - mistral-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal engine: jobs: - mistral-db-sync - mistral-ks-user - mistral-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal event_engine: jobs: - mistral-db-sync - mistral-ks-user - mistral-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal executor: jobs: - mistral-db-sync - mistral-ks-user - mistral-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal # typically overriden by environmental # values, but should include all endpoints @@ -188,7 +201,7 @@ endpoints: amqp: 5672 oslo_cache: hosts: - default: memcache + default: memcached port: memcache: 11211 diff --git a/neutron/values.yaml b/neutron/values.yaml index cee9d9f4..d73ad9bd 100644 --- a/neutron/values.yaml +++ b/neutron/values.yaml @@ -134,57 +134,77 @@ ml2: dependencies: db_init: - service: - - mariadb + services: + - service: oslo_db + endpoint: internal db_sync: jobs: - neutron-db-init - service: - - mariadb + services: + - service: oslo_db + endpoint: internal ks_user: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_service: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_endpoints: jobs: - neutron-ks-service - service: - - keystone-api + services: + - service: identity + endpoint: internal server: jobs: - neutron-db-sync - neutron-ks-user - neutron-ks-endpoints - service: - - rabbitmq - - mariadb - - keystone-api - - memcached + services: + - service: oslo_db + endpoint: internal + - service: oslo_messaging + endpoint: internal + - service: oslo_cache + endpoint: internal + - service: identity + endpoint: internal dhcp: - service: - - rabbitmq - - neutron-server - - nova-api + services: + - service: oslo_messaging + endpoint: internal + - service: network + endpoint: internal + - service: compute + endpoint: internal daemonset: - ovs-agent metadata: - service: - - rabbitmq - - neutron-server - - nova-api + services: + - service: oslo_messaging + endpoint: internal + - service: network + endpoint: internal + - service: compute + endpoint: internal daemonset: - ovs-agent ovs_agent: - service: - - rabbitmq - - neutron-server + services: + - service: oslo_messaging + endpoint: internal + - service: network + endpoint: internal l3: - service: - - rabbitmq - - neutron-server - - nova-api + services: + - service: oslo_messaging + endpoint: internal + - service: network + endpoint: internal + - service: compute + endpoint: internal daemonset: - ovs-agent @@ -462,7 +482,7 @@ endpoints: amqp: 5672 oslo_cache: hosts: - default: memcache + default: memcached port: memcache: 11211 compute: diff --git a/nova/values.yaml b/nova/values.yaml index d5dd214d..5e0b9c94 100644 --- a/nova/values.yaml +++ b/nova/values.yaml @@ -147,60 +147,94 @@ dependencies: - nova-db-sync - nova-ks-user - nova-ks-endpoints - service: - - mariadb + services: + - service: oslo_messaging + endpoint: internal + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal db_init: - service: - - mariadb + services: + - service: oslo_db + endpoint: internal db_sync: jobs: - nova-db-init - service: - - mariadb + services: + - service: oslo_db + endpoint: internal bootstrap: - service: - - keystone-api - - nova-api + services: + - service: identity + endpoint: internal + - service: compute + endpoint: internal ks_user: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_service: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_endpoints: jobs: - nova-ks-service - service: - - keystone-api + services: + - service: identity + endpoint: internal compute: jobs: - nova-db-sync - service: - - keystone-api - - nova-api + services: + - service: oslo_messaging + endpoint: internal + - service: compute + endpoint: internal + - service: network + endpoint: internal daemonset: - ovs-agent libvirt: jobs: - nova-db-sync - service: - - keystone-api - - nova-api consoleauth: jobs: - nova-db-sync - service: - - mariadb + services: + - service: oslo_messaging + endpoint: internal + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal + - service: compute + endpoint: internal scheduler: jobs: - nova-db-sync - service: - - mariadb + services: + - service: oslo_messaging + endpoint: internal + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal + - service: compute + endpoint: internal conductor: jobs: - nova-db-sync - service: - - mariadb + services: + - service: oslo_messaging + endpoint: internal + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal + - service: compute + endpoint: internal mounts: nova_compute: @@ -393,7 +427,7 @@ endpoints: amqp: 5672 oslo_cache: hosts: - default: memcache + default: memcached port: memcache: 11211 compute: diff --git a/rabbitmq/values.yaml b/rabbitmq/values.yaml index dff17be8..a1054b4b 100644 --- a/rabbitmq/values.yaml +++ b/rabbitmq/values.yaml @@ -75,5 +75,6 @@ probes_delay: 180 probes_timeout: 10 dependencies: - service: - - etcd + services: + - service: etcd + endpoint: internal diff --git a/senlin/templates/job-db-init.yaml b/senlin/templates/job-db-init.yaml index 78a31ec6..4b1f8b2a 100644 --- a/senlin/templates/job-db-init.yaml +++ b/senlin/templates/job-db-init.yaml @@ -13,7 +13,7 @@ # limitations under the License. {{- $envAll := . }} -{{- $dependencies := .Values.dependencies.init }} +{{- $dependencies := .Values.dependencies.db_init }} apiVersion: batch/v1 kind: Job metadata: diff --git a/senlin/values.yaml b/senlin/values.yaml index 1dfe20f4..e26f505f 100644 --- a/senlin/values.yaml +++ b/senlin/values.yaml @@ -103,40 +103,49 @@ network: dependencies: db_init: - service: - - mariadb + services: + - service: oslo_db + endpoint: internal db_sync: jobs: - senlin-db-init - service: - - mariadb + services: + - service: oslo_db + endpoint: internal ks_user: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_service: - service: - - keystone-api + services: + - service: identity + endpoint: internal ks_endpoints: jobs: - senlin-ks-service - service: - - keystone-api + services: + - service: identity + endpoint: internal api: jobs: - senlin-db-sync - senlin-ks-user - senlin-ks-endpoints - service: - - keystone-api - - mariadb + services: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal engine: jobs: - senlin-db-sync - senlin-ks-user - senlin-ks-endpoints - service: - - keystone-api - - mariadb + servics: + - service: oslo_db + endpoint: internal + - service: identity + endpoint: internal # typically overriden by environmental # values, but should include all endpoints @@ -175,7 +184,7 @@ endpoints: mysql: 3306 oslo_cache: hosts: - default: memcache + default: memcached port: memcache: 11211 oslo_messaging: