Stuck on a playbook development - Fs

89 views
Skip to first unread message

Miguel Lopez Laguna

unread,
Sep 29, 2016, 3:16:11 AM9/29/16
to Ansible Development
Hi, first of all i would like to introduce myself, i work with linux and AIX systems  and I'm trying to have some automation over the servers farm

I'm new to ansible and i've been reading the docs and i get how playbooks works but i'm still pretty new with all this so i'm learning everyday about modules and how to use them. 

Problem comes as i have a tight agenda and i'm getting stuck with some tasks i don't know how to get over with, basically because i lack the knowlegde of the modules to use or how yo use them.

What i'm trying to do is a playbook to install some agents, so i have to do several tasks like creating users, checking Fs and install the agent

The Playbook i've created is still a work in progress as it's on a very early stage

-rw-r--r-- 1 ansible ansible 141 sep 28 16:48 patrol.yml

drwxr-xr-x 5 ansible ansible  40 sep 28 14:03 roles

drwxr-xr-x 2 ansible ansible  38 sep 28 17:25 vars


./roles/fs/tasks/main.yml

./roles/patrol/meta/main.yml

./roles/patrol/tasks/main.yml

./roles/users/tasks/main.yml


./vars:

total 8

-rw-r--r-- 1 ansible ansible  24 sep 28 17:25 aix.yml

-rw-r--r-- 1 ansible ansible  24 sep 28 17:25 linux.yml

-rw-r--r-- 1 ansible ansible 808 sep 28 13:54 comunes.yml


On vars i have comunes as the first variables:

is_aix: "'{{ ansible_distribution|lower }}' == 'aix'"

is_linux: "'{{ ansible_system|lower }}' == 'linux'"


is_centos: "'{{ ansible_distribution|lower }}' == 'centos'"

is_ubuntu: "'{{ ansible_distribution|lower }}' == 'ubuntu'"

is_redhat: "'{{ ansible_distribution|lower }}' == 'redhat'"


is_redhat6: "'{{ ansible_distribution|lower }}' == 'redhat' and '{{ ansible_distribution_major_version }}' == '6'"

is_redhat65: "'{{ ansible_distribution|lower }}' == 'redhat' and '{{ ansible_distribution_version }}' == '6.5'"


is_aix5: "'{{ ansible_system|lower }}' == 'aix' and '{{ ansible_distribution_version }}' == '5'"

is_aix6: "'{{ ansible_system|lower }}' == 'aix' and '{{ ansible_distribution_version }}' == '6'"

is_aix7: "'{{ ansible_system|lower }}' == 'aix' and '{{ ansible_distribution_version }}' == '7'"


And on aix and linux must go specific variables based on the OS platform, like var dir_agente with the installation path. The main playbook is patrol.yml 


- hosts: masteraix71

  vars_files:

  - vars/comunes.yml

  - "vars/{{ ansible_system|lower }}.yml"

  roles:

    - users

    - fs

    - patrol


Through meta patrol depends on users and fs, my problem is with the fs role, as it has to check the Fs to use, some checks are:

- The path exists and is a dir

- The volume exists on LVM 

- The volume is mounted and on fstab


The first one i'm doing it through stat so it fails if the file exist and its not a directory and create the mount point if it doesn't exist

---

- name: Check the path

  stat: path={{ dir_agente }}

  register: p

- fail: msg="Path exists and is not a directory"

  when: p.stat.exists == True and p.stat.isdir == False

- name: creamos el path del agente

  become: yes

  become_user: root

  file: state=directory path={{ dir_agente }} mode=0755 owner={{patrol_user}} group={{patrol_group}}

  when: p.stat.exists == False


What i have no idea is how to continue, i'm looking module mount but don't really get how to check if a Fs mounted or not, to check if the Fs is mounted i've found several examples but they dont really seem right or i cant get them to work, for example


vars:
- myvolume: /backup

tasks:
- debug: msg="The dir is a mount point"
  with_items: ansible_mounts
  when: item.mount == myvolume

Could someone give me some directions on how to check if:

- The Fs "patrol_fs" already exists

- the fs is mounted on that path "dir_agente" or if its mounted somewhere else


Thanks a lot for any help i can get










Miguel Lopez Laguna

unread,
Sep 29, 2016, 3:59:54 AM9/29/16
to Ansible Development
From what i read on mount module creating the mount point ir unnecessary as it seems to create it if needed when using state=mounted

absent = remove from fstab, unmount, remove mount point
present = add to fstab (this does not create a mount point so subsequent commands or reboots could error on this line)
mounted = create mount point (if needed), add to fstab, mount (remount if existing and changed)
unmounted = unmount (this leaves the fstab file unchanged.  subsequent commands or reboots will remount this)

Miguel Lopez Laguna

unread,
Sep 29, 2016, 7:54:54 AM9/29/16
to Ansible Development
Hi,
Still working on it, i've found that my bigger problem is that i was doing my tests against an AIX server and not everything works as expected, for instance the facts do not include the mounts (ansible_mounts) so i was unable to make it work. 

In order to avoid this i'll start working just with linux servers so i can try again with AIX once i have everything working as expected on Linux

So, what i've done so far... after checking my mount point point i want to check if it has a Fs over it:

- debug: msg="The dir is a mount point {{ item.mount }}"

  with_items: '{{ ansible_mounts|default([]) }}'

  register: montaje

  when: is_linux and item.mount == '{{ dir_agente }}'


this gives me the info but it doesn't do anything really, is there a way to use the info and act according to the output? 

For now i'll try to do the same check using mount module but i have to find how to mount it only if it not already mounted

- mount: xxxxxxxxxxxxx

  with_items: '{{ ansible_mounts|default([]) }}'

  when: is_linux and  '{{ dir_agente }}' not included in item.mount    ---> is there something similar to this?


I know i could use mount directly as it only updates the info if there's no change but what happens if the server has a non standar volume name and tries to mount a new Fs over the old one?

Just thinking to myself as i'm doing some test in order to find a working configuration


El jueves, 29 de septiembre de 2016, 9:16:11 (UTC+2), Miguel Lopez Laguna escribió:

Will Thames

unread,
Sep 29, 2016, 10:23:36 PM9/29/16
to Ansible Development


This list is for development of Ansible itself, rather than problems you might have developing ansible configuration management.

The ansible-project list is a more appropriate list for your questions.

Will

Miguel Lopez Laguna

unread,
Sep 30, 2016, 2:42:21 AM9/30/16
to Ansible Development
I didn't realized there was another list , sorry for inconvenience and thanks for pointing me in the right direction :D
Reply all
Reply to author
Forward
0 new messages