From e200974421427773ec7adf7b575cf43e75141965 Mon Sep 17 00:00:00 2001 From: Flavio Percoco Date: Tue, 13 Feb 2018 14:39:14 +0100 Subject: [PATCH] Add an openshift-cns service This service file allows for enabling CNS in an OpenShift deployment. It works as a tagging service and the rest of the configs are applied in the openshift-master service file. Note that the disks used can be specified as follows: parameter_defaults: OpenShiftGlusterDisks: - /dev/sdb Or per-role like: parameter_defaults: OpenShiftMasterParameters: OpenShiftGlusterDisks: - /dev/sdb OpenShiftWorkerParameters: OpenShiftGlusterDisks: - /dev/sdc Change-Id: I92972d89ee7edf2ff211e88c6e0758628c3018a2 --- environments/openshift-cns.yaml | 7 ++ extraconfig/services/openshift-cns.yaml | 84 ++++++++++++++++++++++ extraconfig/services/openshift-master.yaml | 39 ++++++++++ overcloud-resource-registry-puppet.j2.yaml | 1 + 4 files changed, 131 insertions(+) create mode 100644 environments/openshift-cns.yaml create mode 100644 extraconfig/services/openshift-cns.yaml diff --git a/environments/openshift-cns.yaml b/environments/openshift-cns.yaml new file mode 100644 index 0000000000..bcc4b02918 --- /dev/null +++ b/environments/openshift-cns.yaml @@ -0,0 +1,7 @@ +resource_registry: + OS::TripleO::Services::OpenShift::GlusterFS: ../extraconfig/services/openshift-cns.yaml + +parameter_defaults: + OpenShiftGlobalVariables: + openshift_storage_glusterfs_namespace: glusterfs + openshift_storage_glusterfs_name: storage diff --git a/extraconfig/services/openshift-cns.yaml b/extraconfig/services/openshift-cns.yaml new file mode 100644 index 0000000000..462ddb52cd --- /dev/null +++ b/extraconfig/services/openshift-cns.yaml @@ -0,0 +1,84 @@ +heat_template_version: queens + +description: External tasks definition for OpenShift + +parameters: + RoleNetIpMap: + default: {} + type: json + ServiceData: + default: {} + description: Dictionary packing service data + type: json + 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 + RoleName: + default: '' + description: Role name on which the service is applied + type: string + RoleParameters: + default: {} + description: Parameters specific to the role + type: json + EndpointMap: + default: {} + description: Mapping of service endpoint -> protocol. Typically set + via parameter_defaults in the resource registry. + type: json + OpenShiftGlusterDisks: + default: + - /dev/vdb + - /dev/vdc + - /dev/vdd + description: List of disks for openshift_glusterfs service to use + type: comma_delimited_list + tags: + - role_specific + +resources: + RoleParametersValue: + type: OS::Heat::Value + properties: + type: json + value: + map_replace: + - map_replace: + - OpenShiftGlusterDisks: OpenShiftGlusterDisks + - values: {get_param: [RoleParameters]} + - values: + OpenShiftGlusterDisks: {get_param: OpenShiftGlusterDisks} + +outputs: + role_data: + description: Role data for the Openshift Service + value: + # This service template essentially tags the nodes that we want + # as cns. The actual installation is performed in + # openshift-master service template. + service_name: openshift_glusterfs + config_settings: + tripleo.openshift_glusterfs.firewall_rules: + '200 openshift-glusterfs kubelet': + dport: + - 2222 + - 3260 + - 10250 + - 24008 + - 24010 + proto: tcp + '200 openshift-glusterfs external services': + dport: '49152-49251' + host_prep_tasks: + - name: Wipe the configured disks + shell: + wipefs -af {{item}} + with_items: {get_attr: [RoleParametersValue, value, OpenShiftGlusterDisks]} + upgrade_tasks: [] + step_config: '' diff --git a/extraconfig/services/openshift-master.yaml b/extraconfig/services/openshift-master.yaml index deefa627f1..7b4d8edc26 100644 --- a/extraconfig/services/openshift-master.yaml +++ b/extraconfig/services/openshift-master.yaml @@ -48,6 +48,28 @@ parameters: default: {} description: OpenShift node vars specific for the worker nodes type: json + OpenShiftGlusterDisks: + default: + - /dev/vdb + - /dev/vdc + - /dev/vdd + description: List of disks for openshift_glusterfs service to use + type: comma_delimited_list + tags: + - role_specific + +resources: + RoleParametersValue: + type: OS::Heat::Value + properties: + type: json + value: + map_replace: + - map_replace: + - OpenShiftGlusterDisks: OpenShiftGlusterDisks + - values: {get_param: [RoleParameters]} + - values: + OpenShiftGlusterDisks: {get_param: OpenShiftGlusterDisks} outputs: role_data: @@ -82,6 +104,7 @@ outputs: openshift_global_vars: {get_param: OpenShiftGlobalVariables} openshift_master_node_vars: {get_param: OpenShiftMasterNodeVars} openshift_worker_node_vars: {get_param: OpenShiftWorkerNodeVars} + openshift_gluster_disks: {get_attr: [RoleParametersValue, value, OpenShiftGlusterDisks]} - name: generate openshift inventory copy: @@ -127,6 +150,21 @@ outputs: {% endfor %} + {% if groups['openshift_glusterfs'] | default([]) %} + glusterfs: + hosts: + {% for host in groups['openshift_glusterfs'] | default([]) -%} + {{ hostvars.raw_get(host)['ansible_hostname'] }}: + glusterfs_ip: {{hostvars.raw_get(host)['storage_ip']}} + glusterfs_devices: + {{openshift_gluster_disks | to_nice_yaml() | indent(8) }} + ansible_user: {{ hostvars.raw_get(host)['ansible_user'] | default(hostvars.raw_get(host)['ansible_ssh_user']) | default('root') }} + ansible_host: {{ hostvars.raw_get(host)['ansible_host'] | default(host) }} + ansible_become: true + openshift_schedulable: true + {% endfor %} + {% endif %} + etcd: children: masters: {} @@ -135,6 +173,7 @@ outputs: children: masters: {} nodes: {} + {% if groups['openshift_glusterfs'] | default([]) %}glusterfs: {}{% endif %} - name: generate openshift global defaults copy: diff --git a/overcloud-resource-registry-puppet.j2.yaml b/overcloud-resource-registry-puppet.j2.yaml index 6a10edad89..2692fae3d1 100644 --- a/overcloud-resource-registry-puppet.j2.yaml +++ b/overcloud-resource-registry-puppet.j2.yaml @@ -200,6 +200,7 @@ resource_registry: OS::TripleO::Services::ContainersLogrotateCrond: docker/services/logrotate-crond.yaml OS::TripleO::Services::OpenShift::Master: OS::Heat::None OS::TripleO::Services::OpenShift::Worker: OS::Heat::None + OS::TripleO::Services::OpenShift::GlusterFS: OS::Heat::None OS::TripleO::Services::SwiftProxy: docker/services/swift-proxy.yaml OS::TripleO::Services::SwiftDispersion: OS::Heat::None OS::TripleO::Services::ExternalSwiftProxy: OS::Heat::None