Example of using Ansible to update Container Native Storage

Container Native Storage (CNS) is implemented in OpenShift as pods. These pods are created from a template that is built into OpenShift. After an automated install, we want to make sure we have the latest template, and the latest containers when using the Advanced Installer. While typically this is a multi-step manual process, an Ansible Script makes this a lot simpler.

Let’s walk through the update using an Ansible script. First, we add the gluster channel on one of the CNS nodes. Next, we will update the herketi client and the CNS deployer. During this update, the gluster OpenShift templates are updated. We need that in order to update the template inside OpenShift. The fetch, with the flat, copies it from the CNS node.

In the next step, we make sure we are in the right project, and we delete the daemon set. As this is designed to run before a workload is on CNS, we delete the pods and the daemon set.

The following step deletes the template for Gluster inside of OpenShift.

In the new version, the nodes are labeled differently. This uses a local_action to run it directly on the bastion host. You will note the command will run multiple times locally with the node names changing.

At this point, we load the new template and recreate the CNS daemon set.

The original instructions for this are here in Chapter 13.3. And a gist of the code is here.

- hosts: cns01
  vars:
    description: "get updated templates for cns"
  tasks:
  - name: add cns channel
    shell: subscription-manager repos --enable=rh-gluster-3-for-rhel-7-server-rpms
  - name: install latest cns-deploy package
    yum: name="cns-deploy" state=latest
  - name: install latest herketi packages
    yum: name="heketi-client" state=latest
  - name: remove cns channel
    shell: subscription-manager repos --disable=rh-gluster-3-for-rhel-7-server-rpms
  - name: Copy templates from cns01 to bastion for /usr/share/heketi/templates
    fetch:
      src:  /usr/share/heketi/templates/glusterfs-template.yaml
      dest: glusterfs-template.yaml
      flat: yes
- hosts: master1
  tasks:
  - name: use gluster project
    shell: oc project glusterfs
  - name: delete daemon set
    command: oc delete ds glusterfs
    ignore_errors: yes
  - name: Delete Old Templates
    shell:  oc delete templates glusterfs
    ignore_errors: yes
- hosts: glusterfs
  tasks:
  - name: relabel nodes
    local_action: command oc label nodes {{ansible_hostname}} storagenode=glusterfs --overwrite
- hosts: localhost
  tasks:
  - name: Use new template
    local_action: command  oc create -f glusterfs-template.yaml
  - name: Wait for distribution of template
    pause:
      seconds: 10
  - name: Deploy the template
    local_action: shell oc process glusterfs | oc create -f -

Take advantage of your Red Hat Developers membership and download RHEL today at no cost.

Share