diff options
Diffstat (limited to 'roles')
18 files changed, 150 insertions, 89 deletions
diff --git a/roles/openshift_facts/library/openshift_facts.py b/roles/openshift_facts/library/openshift_facts.py index 44983cfd6..bbcdbadd8 100755 --- a/roles/openshift_facts/library/openshift_facts.py +++ b/roles/openshift_facts/library/openshift_facts.py @@ -498,34 +498,6 @@ def set_selectors(facts):      return facts -def set_project_cfg_facts_if_unset(facts): -    """ Set Project Configuration facts if not already present in facts dict -            dict: -        Args: -            facts (dict): existing facts -        Returns: -            dict: the facts dict updated with the generated Project Configuration -            facts if they were not already present - -    """ - -    config = { -        'default_node_selector': '', -        'project_request_message': '', -        'project_request_template': '', -        'mcs_allocator_range': 's0:/2', -        'mcs_labels_per_project': 5, -        'uid_allocator_range': '1000000000-1999999999/10000' -    } - -    if 'master' in facts: -        for key, value in config.items(): -            if key not in facts['master']: -                facts['master'][key] = value - -    return facts - -  def set_identity_providers_if_unset(facts):      """ Set identity_providers fact if not already present in facts dict @@ -1800,7 +1772,6 @@ class OpenShiftFacts(object):          facts = migrate_oauth_template_facts(facts)          facts['current_config'] = get_current_config(facts)          facts = set_url_facts_if_unset(facts) -        facts = set_project_cfg_facts_if_unset(facts)          facts = set_selectors(facts)          facts = set_identity_providers_if_unset(facts)          facts = set_deployment_facts_if_unset(facts) @@ -1930,6 +1901,7 @@ class OpenShiftFacts(object):                          glusterfs=dict(                              endpoints='glusterfs-registry-endpoints',                              path='glusterfs-registry-volume', +                            ips=[],                              readOnly=False,                              swap=False,                              swapcopy=True), diff --git a/roles/openshift_hosted/README.md b/roles/openshift_hosted/README.md index d6f6e3e09..a1c2c3956 100644 --- a/roles/openshift_hosted/README.md +++ b/roles/openshift_hosted/README.md @@ -34,13 +34,27 @@ variables also control configuration behavior:  | Name                                         | Default value | Description                                                                  |  |----------------------------------------------|---------------|------------------------------------------------------------------------------| -| openshift_hosted_registry_glusterfs_swap     | False         | Whether to swap an existing registry's storage volume for a GlusterFS volume | -| openshift_hosted_registry_glusterfs_swapcopy | True          | If swapping, also copy the current contents of the registry volume           | +| openshift_hosted_registry_storage_glusterfs_endpoints | glusterfs-registry-endpoints | The name for the Endpoints resource that will point the registry to the GlusterFS nodes +| openshift_hosted_registry_storage_glusterfs_path      | glusterfs-registry-volume    | The name for the GlusterFS volume that will provide registry storage +| openshift_hosted_registry_storage_glusterfs_readonly  | False                        | Whether the GlusterFS volume should be read-only +| openshift_hosted_registry_storage_glusterfs_swap      | False                        | Whether to swap an existing registry's storage volume for a GlusterFS volume +| openshift_hosted_registry_storage_glusterfs_swapcopy  | True                         | If swapping, copy the contents of the pre-existing registry storage to the new GlusterFS volume +| openshift_hosted_registry_storage_glusterfs_ips       | `[]`                         | A list of IP addresses of the nodes of the GlusterFS cluster to use for hosted registry storage + +**NOTE:** Configuring a value for +`openshift_hosted_registry_storage_glusterfs_ips` with a `glusterfs_registry` +host group is not allowed. Specifying a `glusterfs_registry` host group  +indicates that a new GlusterFS cluster should be configured, whereas  +specifying `openshift_hosted_registry_storage_glusterfs_ips` indicates wanting  +to use a pre-configured GlusterFS cluster for the registry storage. + +_  Dependencies  ------------  * openshift_hosted_facts +* openshift_persistent_volumes  Example Playbook  ---------------- @@ -56,6 +70,10 @@ Example Playbook        cafile: /path/to/my-router-ca.crt      openshift_hosted_router_registryurl: 'registry.access.redhat.com/openshift3/ose-haproxy-router:v3.0.2.0'      openshift_hosted_router_selector: 'type=infra' +    openshift_hosted_registry_storage_kind=glusterfs +    openshift_hosted_registry_storage_glusterfs_path=external_glusterfs_volume_name +    openshift_hosted_registry_storage_glusterfs_ips=['192.168.20.239','192.168.20.96','192.168.20.114'] +  ```  License diff --git a/roles/openshift_hosted/defaults/main.yml b/roles/openshift_hosted/defaults/main.yml index 2af42fba4..e70c0c420 100644 --- a/roles/openshift_hosted/defaults/main.yml +++ b/roles/openshift_hosted/defaults/main.yml @@ -70,7 +70,6 @@ r_openshift_hosted_registry_use_firewalld: "{{ os_firewall_use_firewalld | defau  openshift_hosted_registry_name: docker-registry  openshift_hosted_registry_wait: "{{ not (openshift_master_bootstrap_enabled | default(False)) }}"  openshift_hosted_registry_cert_expire_days: 730 -  r_openshift_hosted_registry_os_firewall_deny: []  r_openshift_hosted_registry_os_firewall_allow:  - service: Docker Registry Port diff --git a/roles/openshift_hosted/tasks/registry.yml b/roles/openshift_hosted/tasks/registry.yml index eaaac9da2..9f2ef4e40 100644 --- a/roles/openshift_hosted/tasks/registry.yml +++ b/roles/openshift_hosted/tasks/registry.yml @@ -1,4 +1,10 @@  --- +- name: Create temp directory for doing work in +  command: mktemp -d /tmp/openshift-hosted-ansible-XXXXXX +  register: mktempHosted +  changed_when: False +  check_mode: no +  - name: setup firewall    include: firewall.yml    vars: @@ -36,13 +42,13 @@        l_default_replicas: "{{ l_node_count if openshift.hosted.registry.storage.kind | default(none) is not none else 1 }}"      when: l_node_count | int > 0 -  - name: set openshift_hosted facts    set_fact:      openshift_hosted_registry_replicas: "{{ openshift.hosted.registry.replicas | default(l_default_replicas) }}"      openshift_hosted_registry_namespace: "{{ openshift.hosted.registry.namespace | default('default') }}"      openshift_hosted_registry_selector: "{{ openshift.hosted.registry.selector }}"      openshift_hosted_registry_images: "{{ openshift.hosted.registry.registryurl | default('openshift3/ose-${component}:${version}')}}" +    openshift_hosted_registry_storage_glusterfs_ips: "{%- set gluster_ips = [] %}{% if groups.glusterfs_registry is defined %}{% for node in groups.glusterfs_registry %}{%- set _ = gluster_ips.append(hostvars[node].glusterfs_ip | default(hostvars[node].openshift.common.ip)) %}{% endfor %}{{ gluster_ips }}{% elif groups.glusterfs is defined %}{% for node in groups.glusterfs %}{%- set _ = gluster_ips.append(hostvars[node].glusterfs_ip | default(hostvars[node].openshift.common.ip)) %}{% endfor %}{{ gluster_ips }}{% else %}{{ openshift.hosted.registry.storage.glusterfs.ips }}{% endif %}"  - name: Update registry environment variables when pushing via dns    set_fact: @@ -113,6 +119,11 @@    when:    - openshift.hosted.registry.storage.kind | default(none) in ['nfs', 'openstack', 'glusterfs'] +- include: storage/glusterfs_endpoints.yml +  when: +  - openshift_hosted_registry_storage_glusterfs_ips|length > 0 +  - openshift.hosted.registry.storage.kind | default(none) in ['glusterfs'] +  - name: Create OpenShift registry    oc_adm_registry:      name: "{{ openshift_hosted_registry_name }}" @@ -141,3 +152,10 @@  - include: storage/glusterfs.yml    when:    - openshift.hosted.registry.storage.kind | default(none) == 'glusterfs' or openshift.hosted.registry.storage.glusterfs.swap + +- name: Delete temp directory +  file: +    name: "{{ mktempHosted.stdout }}" +    state: absent +  changed_when: False +  check_mode: no diff --git a/roles/openshift_hosted/tasks/storage/glusterfs.yml b/roles/openshift_hosted/tasks/storage/glusterfs.yml index 81241535b..7cae67baa 100644 --- a/roles/openshift_hosted/tasks/storage/glusterfs.yml +++ b/roles/openshift_hosted/tasks/storage/glusterfs.yml @@ -35,7 +35,7 @@    mount:      state: mounted      fstype: glusterfs -    src: "{% if 'glusterfs_registry' in groups %}{% set node = groups.glusterfs_registry[0] %}{% else %}{% set node = groups.glusterfs[0] %}{% endif %}{% if 'glusterfs_hostname' in hostvars[node] %}{{ hostvars[node].glusterfs_hostname }}{% elif 'openshift' in hostvars[node] %}{{ hostvars[node].openshift.node.nodename }}{% else %}{{ node }}{% endif %}:/{{ openshift.hosted.registry.storage.glusterfs.path }}" +    src: "{% if 'glusterfs_registry' in groups %}{% set node = groups.glusterfs_registry[0] %}{% elif 'glusterfs' in groups %}{% set node = groups.glusterfs[0] %}{% endif %}{% if openshift_hosted_registry_storage_glusterfs_ips is defined and openshift_hosted_registry_storage_glusterfs_ips|length > 0 %}{{ openshift_hosted_registry_storage_glusterfs_ips[0] }}{% elif 'glusterfs_hostname' in hostvars[node] %}{{ hostvars[node].glusterfs_hostname }}{% elif 'openshift' in hostvars[node] %}{{ hostvars[node].openshift.node.nodename }}{% else %}{{ node }}{% endif %}:/{{ openshift.hosted.registry.storage.glusterfs.path }}"      name: "{{ mktemp.stdout }}"  - name: Set registry volume permissions diff --git a/roles/openshift_hosted/tasks/storage/glusterfs_endpoints.yml b/roles/openshift_hosted/tasks/storage/glusterfs_endpoints.yml new file mode 100644 index 000000000..0f4381748 --- /dev/null +++ b/roles/openshift_hosted/tasks/storage/glusterfs_endpoints.yml @@ -0,0 +1,16 @@ +--- +- name: Generate GlusterFS registry endpoints +  template: +    src: "{{ openshift.common.examples_content_version }}/glusterfs-registry-endpoints.yml.j2" +    dest: "{{ mktempHosted.stdout }}/glusterfs-registry-endpoints.yml" + +- name: Generate GlusterFS registry service +  template: +    src: "{{ openshift.common.examples_content_version }}/glusterfs-registry-service.yml.j2" +    dest: "{{ mktempHosted.stdout }}/glusterfs-registry-service.yml" + +- name: Create GlusterFS registry service and endpoint +  command: "{{ openshift.common.client_binary }} apply -f {{ item }} -n {{ openshift.hosted.registry.namespace | default('default') }}" +  with_items: +  - "{{ mktempHosted.stdout }}/glusterfs-registry-service.yml" +  - "{{ mktempHosted.stdout }}/glusterfs-registry-endpoints.yml" diff --git a/roles/openshift_hosted/templates/v3.6/glusterfs-registry-endpoints.yml.j2 b/roles/openshift_hosted/templates/v3.6/glusterfs-registry-endpoints.yml.j2 new file mode 100644 index 000000000..607d25533 --- /dev/null +++ b/roles/openshift_hosted/templates/v3.6/glusterfs-registry-endpoints.yml.j2 @@ -0,0 +1,12 @@ +--- +apiVersion: v1 +kind: Endpoints +metadata: +  name: {{ openshift.hosted.registry.storage.glusterfs.endpoints }} +subsets: +- addresses: +{% for ip in openshift_hosted_registry_storage_glusterfs_ips %} +  - ip: {{ ip }} +{% endfor %} +  ports: +  - port: 1 diff --git a/roles/openshift_hosted/templates/v3.6/glusterfs-registry-service.yml.j2 b/roles/openshift_hosted/templates/v3.6/glusterfs-registry-service.yml.j2 new file mode 100644 index 000000000..452c7c3e1 --- /dev/null +++ b/roles/openshift_hosted/templates/v3.6/glusterfs-registry-service.yml.j2 @@ -0,0 +1,10 @@ +--- +apiVersion: v1 +kind: Service +metadata: +  name: {{ openshift.hosted.registry.storage.glusterfs.endpoints }} +spec: +  ports: +  - port: 1 +status: +  loadBalancer: {} diff --git a/roles/openshift_hosted/templates/v3.7/glusterfs-registry-endpoints.yml.j2 b/roles/openshift_hosted/templates/v3.7/glusterfs-registry-endpoints.yml.j2 new file mode 100644 index 000000000..607d25533 --- /dev/null +++ b/roles/openshift_hosted/templates/v3.7/glusterfs-registry-endpoints.yml.j2 @@ -0,0 +1,12 @@ +--- +apiVersion: v1 +kind: Endpoints +metadata: +  name: {{ openshift.hosted.registry.storage.glusterfs.endpoints }} +subsets: +- addresses: +{% for ip in openshift_hosted_registry_storage_glusterfs_ips %} +  - ip: {{ ip }} +{% endfor %} +  ports: +  - port: 1 diff --git a/roles/openshift_hosted/templates/v3.7/glusterfs-registry-service.yml.j2 b/roles/openshift_hosted/templates/v3.7/glusterfs-registry-service.yml.j2 new file mode 100644 index 000000000..452c7c3e1 --- /dev/null +++ b/roles/openshift_hosted/templates/v3.7/glusterfs-registry-service.yml.j2 @@ -0,0 +1,10 @@ +--- +apiVersion: v1 +kind: Service +metadata: +  name: {{ openshift.hosted.registry.storage.glusterfs.endpoints }} +spec: +  ports: +  - port: 1 +status: +  loadBalancer: {} diff --git a/roles/openshift_master/defaults/main.yml b/roles/openshift_master/defaults/main.yml index 1fe7086bc..8e4a46ebb 100644 --- a/roles/openshift_master/defaults/main.yml +++ b/roles/openshift_master/defaults/main.yml @@ -16,6 +16,12 @@ system_images_registry: "{{ system_images_registry_dict[openshift_deployment_typ  l_is_master_system_container: "{{ (openshift_use_master_system_container | default(openshift_use_system_containers | default(false)) | bool) }}"  openshift_master_dns_port: 8053 +osm_default_node_selector: '' +osm_project_request_template: '' +osm_mcs_allocator_range: 's0:/2' +osm_mcs_labels_per_project: 5 +osm_uid_allocator_range: '1000000000-1999999999/10000' +osm_project_request_message: ''  openshift_node_ips: []  r_openshift_master_clean_install: false diff --git a/roles/openshift_master/templates/master.yaml.v1.j2 b/roles/openshift_master/templates/master.yaml.v1.j2 index d5dd9e9c0..a0f00e545 100644 --- a/roles/openshift_master/templates/master.yaml.v1.j2 +++ b/roles/openshift_master/templates/master.yaml.v1.j2 @@ -196,13 +196,13 @@ policyConfig:    openshiftInfrastructureNamespace: openshift-infra    openshiftSharedResourcesNamespace: openshift  projectConfig: -  defaultNodeSelector: "{{ openshift.master.default_node_selector }}" -  projectRequestMessage: "{{ openshift.master.project_request_message }}" -  projectRequestTemplate: "{{ openshift.master.project_request_template }}" +  defaultNodeSelector: "{{ osm_default_node_selector }}" +  projectRequestMessage: "{{ osm_project_request_message }}" +  projectRequestTemplate: "{{ osm_project_request_template }}"    securityAllocator: -    mcsAllocatorRange: "{{ openshift.master.mcs_allocator_range }}" -    mcsLabelsPerProject: {{ openshift.master.mcs_labels_per_project }} -    uidAllocatorRange: "{{ openshift.master.uid_allocator_range  }}" +    mcsAllocatorRange: "{{ osm_mcs_allocator_range }}" +    mcsLabelsPerProject: {{ osm_mcs_labels_per_project }} +    uidAllocatorRange: "{{ osm_uid_allocator_range }}"  routingConfig:    subdomain:  "{{ openshift_master_default_subdomain | default("") }}"  serviceAccountConfig: diff --git a/roles/openshift_master_facts/tasks/main.yml b/roles/openshift_master_facts/tasks/main.yml index 39d571358..20cc5358e 100644 --- a/roles/openshift_master_facts/tasks/main.yml +++ b/roles/openshift_master_facts/tasks/main.yml @@ -75,12 +75,6 @@        sdn_cluster_network_cidr: "{{ osm_cluster_network_cidr | default(None) }}"        sdn_host_subnet_length: "{{ osm_host_subnet_length | default(None) }}"        custom_cors_origins: "{{ osm_custom_cors_origins | default(None) }}" -      default_node_selector: "{{ osm_default_node_selector | default(None) }}" -      project_request_message: "{{ osm_project_request_message | default(None) }}" -      project_request_template: "{{ osm_project_request_template | default(None) }}" -      mcs_allocator_range: "{{ osm_mcs_allocator_range | default(None) }}" -      mcs_labels_per_project: "{{ osm_mcs_labels_per_project | default(None) }}" -      uid_allocator_range: "{{ osm_uid_allocator_range | default(None) }}"        registry_selector: "{{ openshift_registry_selector | default(None) }}"        api_server_args: "{{ osm_api_server_args | default(None) }}"        controller_args: "{{ osm_controller_args | default(None) }}" diff --git a/roles/openshift_sanitize_inventory/tasks/unsupported.yml b/roles/openshift_sanitize_inventory/tasks/unsupported.yml index b70ab90a1..1c4984467 100644 --- a/roles/openshift_sanitize_inventory/tasks/unsupported.yml +++ b/roles/openshift_sanitize_inventory/tasks/unsupported.yml @@ -40,3 +40,27 @@        openshift_master_dynamic_provisioning_enabled to True and set an        openshift_cloudprovider_kind. You can disable this check with        'dynamic_volumes_check=False'. + +#if we have registry backend as glusterfs, and we have clashing configuration. +- name: Ensure the hosted registry's GlusterFS storage is configured correctly +  when: +  - openshift_hosted_registry_storage_kind | default(none) in ['glusterfs'] +  - openshift_hosted_registry_storage_glusterfs_ips is defined and openshift_hosted_registry_storage_glusterfs_ips != '' +  - "'glusterfs_registry' in groups | default([])" +  fail: +    msg: |- +      Configuring a value for openshift_hosted_registry_storage_glusterfs_ips and with a glusterfs_registry host group is not allowed. +      Specifying a glusterfs_registry host group indicates that a new GlusterFS cluster should be configured, whereas +      specifying openshift_hosted_registry_storage_glusterfs_ips indicates wanting to use a pre-configured GlusterFS cluster for the registry storage. + +#if we have registry backend as glusterfs and no gluster specified. +- name: Ensure the hosted registry's GlusterFS storage is configured correctly +  when: +  - openshift_hosted_registry_storage_kind | default(none) in ['glusterfs'] +  - not openshift_hosted_registry_storage_glusterfs_ips is defined +  - not 'glusterfs_registry' in groups | default([]) +  - not 'glusterfs' in groups | default([]) +  fail: +    msg: |- +      Configuring a value for openshift_hosted_registry_storage_kind=glusterfs without a any glusterfs option is not allowed. +      Specify either openshift_hosted_registry_storage_glusterfs_ips variable or glusterfs, glusterfs_registry host groups. diff --git a/roles/openshift_storage_glusterfs/README.md b/roles/openshift_storage_glusterfs/README.md index 54adcf78d..be749a2e1 100644 --- a/roles/openshift_storage_glusterfs/README.md +++ b/roles/openshift_storage_glusterfs/README.md @@ -133,8 +133,7 @@ are an exception:  | openshift_storage_glusterfs_registry_heketi_admin_key | auto-generated        | Separate from the above  | openshift_storage_glusterfs_registry_heketi_user_key  | auto-generated        | Separate from the above -Additionally, this role's behavior responds to the following registry-specific -variables: +Additionally, this role's behavior responds to several registry-specific variables in the [openshift_hosted role](../openshift_hosted/README.md):  | Name                                                  | Default value                | Description                             |  |-------------------------------------------------------|------------------------------|-----------------------------------------| diff --git a/roles/openshift_storage_glusterfs/tasks/glusterfs_config.yml b/roles/openshift_storage_glusterfs/tasks/glusterfs_config.yml index 1ede0ae94..b8fd7979f 100644 --- a/roles/openshift_storage_glusterfs/tasks/glusterfs_config.yml +++ b/roles/openshift_storage_glusterfs/tasks/glusterfs_config.yml @@ -44,6 +44,6 @@      glusterfs_heketi_ssh_sudo: "{{ openshift_storage_glusterfs_heketi_ssh_sudo | bool }}"      glusterfs_heketi_ssh_keyfile: "{{ openshift_storage_glusterfs_heketi_ssh_keyfile }}"      glusterfs_heketi_fstab: "{{ openshift_storage_glusterfs_heketi_fstab }}" -    glusterfs_nodes: "{{ groups.glusterfs }}" +    glusterfs_nodes: "{{ groups.glusterfs | default([]]) }}"  - include: glusterfs_common.yml diff --git a/roles/openshift_storage_glusterfs/tasks/glusterfs_deploy.yml b/roles/openshift_storage_glusterfs/tasks/glusterfs_deploy.yml index ef37762f9..30e83e79b 100644 --- a/roles/openshift_storage_glusterfs/tasks/glusterfs_deploy.yml +++ b/roles/openshift_storage_glusterfs/tasks/glusterfs_deploy.yml @@ -77,6 +77,14 @@      files:      - "{{ mktemp.stdout }}/glusterfs-template.yml" +- name: Check GlusterFS DaemonSet status +  oc_obj: +    namespace: "{{ glusterfs_namespace }}" +    kind: daemonset +    name: glusterfs-{{ glusterfs_name }} +    state: list +  register: glusterfs_ds +  - name: Deploy GlusterFS pods    oc_process:      namespace: "{{ glusterfs_namespace }}" @@ -88,6 +96,8 @@        NODE_LABELS: "{{ glusterfs_nodeselector }}"        CLUSTER_NAME: "{{ glusterfs_name }}"        GB_GLFS_LRU_COUNT: "{{ glusterfs_block_host_vol_max }}" +  when: (glusterfs_ds.results.results[0].status is not defined) or +        (glusterfs_ds.results.results[0].status.numberReady | default(0) < glusterfs_ds.results.results[0].status.desiredNumberScheduled | default(glusterfs_nodes | count))  - name: Wait for GlusterFS pods    oc_obj: diff --git a/roles/openshift_storage_glusterfs/tasks/glusterfs_registry.yml b/roles/openshift_storage_glusterfs/tasks/glusterfs_registry.yml index 1fa42efa7..d3cba61cf 100644 --- a/roles/openshift_storage_glusterfs/tasks/glusterfs_registry.yml +++ b/roles/openshift_storage_glusterfs/tasks/glusterfs_registry.yml @@ -44,52 +44,13 @@      glusterfs_heketi_ssh_sudo: "{{ openshift_storage_glusterfs_registry_heketi_ssh_sudo | bool }}"      glusterfs_heketi_ssh_keyfile: "{{ openshift_storage_glusterfs_registry_heketi_ssh_keyfile }}"      glusterfs_heketi_fstab: "{{ openshift_storage_glusterfs_registry_heketi_fstab }}" -    glusterfs_nodes: "{{ groups.glusterfs_registry | default(groups.glusterfs) }}" +    glusterfs_nodes: "{% if groups.glusterfs_registry is defined %}{% set nodes = groups.glusterfs_registry %}{% elif 'groups.glusterfs' is defined %}{% set nodes = groups.glusterfs %}{% else %}{% set nodes = '[]' %}{% endif %}{{ nodes }}"  - include: glusterfs_common.yml    when:    - glusterfs_nodes | default([]) | count > 0    - "'glusterfs' not in groups or glusterfs_nodes != groups.glusterfs" -- name: Delete pre-existing GlusterFS registry resources -  oc_obj: -    namespace: "{{ glusterfs_namespace }}" -    kind: "{{ item.kind }}" -    name: "{{ item.name }}" -    state: absent -  with_items: -  - kind: "svc" -    name: "glusterfs-{{ glusterfs_name | default }}-endpoints" -  failed_when: False - -- name: Generate GlusterFS registry endpoints -  template: -    src: "{{ openshift.common.examples_content_version }}/glusterfs-registry-endpoints.yml.j2" -    dest: "{{ mktemp.stdout }}/glusterfs-registry-endpoints.yml" - -- name: Copy GlusterFS registry service -  template: -    src: "{{ openshift.common.examples_content_version }}/glusterfs-registry-service.yml.j2" -    dest: "{{ mktemp.stdout }}/glusterfs-registry-service.yml" - -- name: Create GlusterFS registry endpoints -  oc_obj: -    namespace: "{{ openshift.hosted.registry.namespace | default('default') }}" -    state: present -    kind: endpoints -    name: "glusterfs-{{ glusterfs_name }}-endpoints" -    files: -    - "{{ mktemp.stdout }}/glusterfs-registry-endpoints.yml" - -- name: Create GlusterFS registry service -  oc_obj: -    namespace: "{{ openshift.hosted.registry.namespace | default('default') }}" -    state: present -    kind: service -    name: "glusterfs-{{ glusterfs_name }}-endpoints" -    files: -    - "{{ mktemp.stdout }}/glusterfs-registry-service.yml" -  - name: Check if GlusterFS registry volume exists    command: "{{ glusterfs_heketi_client }} volume list"    register: registry_volume  | 
