DevOps Classroom Series – 20/Aug/2020

What can be done if the module is not available?

  • Scenario: You want to automate certain deployment and couldn’t find the module for the command

  • If the module is not found, then ansible gives provision to directly run the linux/windows commands using command modules. But these modules are not idempotent. Ensuring idempotence is your responsibility

  • In Ansible we have following command modules Refer Here

    1. command: Execute command on targets
    2. expect: Executes a command & respond to prompts
    3. psexec: Runs commands on a remote Windows host based on PSExec model
    4. raw: Executes a low level command on machines where python is not installed.
    5. shell: Executes the shell command on nodes
    6. script: Executes a local script on remote node after transferring it.
    7. telnet: Executes a low level telnet command
  • Lets write a very simple playbook with command modules

---
- name: execute commands
  hosts: all
  tasks:
    - name: execute simple shell command
      shell: 
        cmd: touch test.txt
        chdir: /home/ansible
  • Now execute this twice and we can observe there is no idempotance by ansible since we used command modules Preview
  • One approach for making this idempotent is check if file exists and if the file doesnot exist then execute the task Preview
  • Now lets change the playbook to
---
- name: execute commands
  hosts: all
  tasks:
    - name: check for file existence
      stat:
        path: /home/ansible/test.txt
      register: stat_result
    - name: execute simple shell command
      shell: 
        cmd: touch test.txt
        chdir: /home/ansible
      when: not stat_result.stat.exists
      
        
  • Now execute the ansible playbook again Preview
  • How to make the commands which donot create a file idempotent
---
- name: execute commands
  hosts: all
  tasks:
    - name: check for file existence
      stat:
        path: /home/ansible/.pingexecution
      register: stat_result
    - name: execute simple shell command
      shell: 
        cmd: ping -c 4 google.com
      when: not stat_result.stat.exists
      notify:
        - store ping execution
  handlers:
    - name: store ping execution
      file:
        path: /home/ansible/.pingexecution
        state: touch
  • During the execution of playbook if i need to set the variable value for usage at the host level we have a module called as set_fact

Reusing others work

  • Scenario: I have been asked to install mysql on centos and ubuntu nodes.
  • Solution: Write your own ansible playbook or since we are not the first people to try mysql execution from ansible we can reuse others work
  • Ansible makes it possible to share work(playbooks/roles/collection) done by users to community using Ansible-Galaxy
  • Now lets search mysql in ansible galaxy Preview
  • We should understand how to reuse work shared by others i.e. understanding roles and collections.

Leave a Reply

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

Please turn AdBlock off
Floating Social Media Icons by Acurax Wordpress Designers

Discover more from Direct DevOps from Quality Thought

Subscribe now to keep reading and get access to the full archive.

Continue reading

Visit Us On FacebookVisit Us On LinkedinVisit Us On Youtube