Send emails through ansible

Recently I was watching this video and got to know about `mail` attribute in ansible and we can send emails through it and I gave it a try and finally after some hacks I sent an email from my one account to another.

Here below code I have written to send the email –

---
- hosts: webservers
  tasks:
  - name: Sending an e-mail using Gmail SMTP servers
    mail:
      host: smtp.gmail.com
      port: 587
      username: your@email.com
      password: yourPassword
      to: Aniruddha Basak <some@email.com>
      subject: Ansible check email
      body: I am using {{ ansible_facts['os_family'] }}.
    delegate_to: localhost

Above we are using gmail SMTP server. In case you are using 2FA of google then you have to add a device password for that and write the password in the password field.

Advertisement

Take user input by ansible prompts

In ansible we generally execute instruction written in playbook one after another. In some cases we have to collect some data from the user that can be a sensitive data or not. In this scenario we use prompts to collect the data from the user. We write all our prompts inside vars_prompt section. By default the data we write as input is private and we can change it by private: no . Below there is a basic example of ansible prompt.

---
- hosts: webservers
  vars_prompt:
    - name: username
      prompt: "What is your username?"
      private: no
    
    - name: password_1
      prompt: "What is your password?"

Here is the result –

$ ansible-playbook prompt.yml 
What is your username?: ani
What is your password?: 

PLAY [webservers] ***************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************
ok: [localhost]

PLAY RECAP **********************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

We can even set a default value for any prompt and by default: 'value' and if there is a need of verifying any value like password then we can do this by confirm: yes . Below there is a example –

---
- hosts: webservers
  vars_prompt:
    - name: release_version
      prompt: "What is product release version?"
      private: no
      default: "1.0"
    
    - name: password_2
      prompt: "Enter password_2"
      confirm: yes

Here is the result of the above playbook –

$ ansible-playbook prompt.yml 
What is product release version? [1.0]: 2.0
Enter password_2: 
confirm Enter password_2: 
***** VALUES ENTERED DO NOT MATCH ****
Enter password_2: 
confirm Enter password_2: 

PLAY [webservers] ***************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************
ok: [localhost]

PLAY RECAP **********************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

In the above you can see that the default value in the square bracket what we have mention in the playbook and if we skip that part then ansible will take the default value. You can see that we have entered the confirmed password wrong so it is showing a warning like this **** VALUES ENTERED DO NOT MATCH **** and second time we have entered the right value that’s why everything is ok.

Thank you 🙂

It is not ok to quit

So, If you face any problem in your day to day life you always have two option either you can quit or you can stick to that problem untill and unless you solve it. Today I am going to tell you about one thing from that I have learned something. So, I am always eager to learn new technologis and I was planning to start learning Ansible from past couple of days.

Let me give you a overviw aout Ansible. It is a IT automation tool to manage our systems and it uses a very simple language called YAML. In this blog I am not going to tell you about Ansible briefly if you want to learn it here is the right place for you.

So, as like all of us when you start learning something you face lots of problem even in the very basic thing. After I started learning Ansible from their official docs I added some IP in the /etc/ansible/hosts file but when I am executing this command ansible all -m ping it is giving me some weired errors that I was not able to figure out what it is and after that I searched a lot in the internet and found the exact solution. After that I again stuck somewhere and this time I was not able to find the relevent solution in the internet and decided to ask in the DGPLUG(it is Linux Users Group og Durgapur where we all hang around and share our knowledge) and a member named Nabarun Pal helped me. We discussed about the error for over 1 hour and after all of that I understand the concept and successfully implemented it. And after overcomming all kind of errors I today I have succesfully wrote my first ansible playbook. Here below the code.

---
- hosts: webservers
  gather_facts: yes
  become_user: root
  tasks:
  - name: Install tree
    apt: pkg=tree state=present
    notify:
    - restart tree
  handlers:
    - name: restart tree
      service: name=tree state=restarted

- hosts: dbservers
  become_user: root
  tasks:
  - name: Install mysql
    apt: pkg=mysql-server state=present

Above the code does very simple thing that it install tree package in my webserver host and install mysql in my dbserver host but I am very happy to see it because I havn’t quit in between my journey and completed what I decided to do.

Thank you. 🙂