It was asked to have the playbooks shared with the community from the Ansible demo that was presented at the Red Hat Summit. Down below, I have each of the playbooks posted for anyone to take a look at and review. Please note that since this was my first time messing around with Ansible, there are most likely cleaner ways to do some of these activities, but these worked for our demo and should be a good starting point for others that want to try it out. Each playbook was broken into sections, but there’s no reason that you could not put all of these into a single playbook. With that said, here you go!

Playbook #1 – Basic Provisioning of EC2 instances in AWS.

---
# Basic provisioning of EC2 instances.
- name: Create AWS resources
  hosts: localhost
  connection: local
  gather_facts: False
  tasks:
  - name: Create an EC2 instance
    ec2:
      aws_access_key: "{{aws_access_key}}"
      aws_secret_key: "{{aws_secret_key}}"
      key_name: "{{key_name}}"
      region: "{{aws_region}}"
      group_id: "{{firewall_group_id}}"
      instance_type: "{{instance_type}}"
      vpc_subnet_id: "{{vpc_subnet_id}}"
      image: "{{ami_id}}"
      assign_public_ip: yes
      wait: yes
      volumes:
        - device_name: /dev/sda1
          volume_type: gp2
          volume_size: 10
          delete_on_termination: true
      exact_count: 5
      count_tag:
        Env: Demo
      instance_tags:
        Name: ansible-aws-rhs
        Project: RHS-Demo
        Env: Demo
    register: ec2

Playbook #2 – Install Apache on EC2 instances using a dynamic inventory.

---
- name: This sets up an httpd webserver
  hosts: tag_Env_Demo
  become: yes
  tasks:
    - name: Install the httpd rpm
      yum: name=httpd
    - name: start the httpd service
      service: name=httpd state=started

Playbook #3 – Get ONTAP version information from Cloud ONTAP. In this playbook, you need to define your host as the NetApp EC2 instance IP address.

---
- hosts: netapp
  gather_facts: no
  tasks:
    - name: Get ONTAP Version
      raw: version
      register: ontap_version
    - debug: var=ontap_version

Playbook #4 – Clone the Demo volume that we used in our demo. Change the command for your particular volume name and snapshot parent name and date. (Please note that the raw command is one line but is wrapping in this display)

---
- hosts: netapp
  gather_facts: no
  tasks:
  - name: Create Demo Clone FlexClone from SnapMirror
    raw: volume clone create -vserver svm_RHSAnsible -flexclone DemoClone -type RW -parent-vserver svm_RHSAnsible -parent-volume RHSAnsible_copy -parent-snapshot daily.2018-05-19_0010 -junction-path /DemoClone -junction-active true
    register: output
  - debug: var=output
  - name: Create Export Policy
    raw: volume modify -vserver svm_RHSAnsible -volume DemoClone -policy export-svm_RHSAnsible-RHSNFS
    register: output2
  - debug: var=output2

Playbook #5 – Installs NFS client tools and mounts the DemoClone volume that we created. Also sets the appropriate access.

---
- hosts: tag_Env_Demo
  become: yes
  gather_facts: yes
  vars:
    aws_profile: default
    aws_region: us-east-1
    nfs_package: nfs-utils
    rhs_mount_dir: /rhs
  tasks:
    - name: Ensure NFS is installed.
      package: "name={{ nfs_package }} state=installed"
    - name: Ensure mount directory exists.
      file:
        path: "{{ rhs_mount_dir }}"
        state: directory
        mode: 0777
    - name: Mount NFS volume
      mount:
        path: /rhs
        src: '10.0.1.117:/DemoClone'
        fstype: nfs
        state: mounted

Playbook #6 – Copies a modified httpd.conf file from our DemoClone volume and overwrites the existing one. There is definitely a better way to do this change but we needed something quick.

---
- name: Import apache directory configuration
  hosts: tag_Env_Demo
  become: yes
  tasks:
    - name: Copy httpd.conf file
      copy:
        src: /rhs/httpd.conf
        dest: /etc/httpd/conf/httpd.conf
        owner: root
        group: root
        mode: 0644
        remote_src: yes
    - name: Change Apache NFS permissions
      command: setsebool -P httpd_use_nfs 1
    - name: start the httpd service
      service: name=httpd state=restarted

That’s it! I hope that helps folks. I’m going to be updating playbooks 3 and 4 soon to work with the new NetApp modules. Hopefully next week.

Last note. I hope the font for the code is acceptable. It’s not so straightforward to post code in WordPress. Another thing to learn!

Matt

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.