Some examples and hints on Ansible

I play with Ansible for quite a while now. Here are some real life examples and hints.

Yaml good indentation

- hosts: ...
  vars:
    filename: ...
  vars_files:
    - ...
  tasks:
  - name:...
    command:
       ...

Managing several versions

- lineinfile:
    name: /etc/inittab
    regexp: '^ca::ctrlaltdel'
    line: 'ca::ctrlaltdel:/bin/logger -p authpriv.warning -t init "Console-invoked Ctrl-Alt-Del was ignored"'
    state: 'present'
  when: ansible_distribution_major_version == "5"

    - name: Disable Ctrl+Alt+Delete on RHEL6
      block:
        - file:
            path: /etc/init/control-alt-delete.override
            state: absent

        - lineinfile:
            path: /etc/init/control-alt-delete.override
            create: yes
            owner: root
            group: root
            mode: 0644
            line: 'exec /usr/bin/logger -p authpriv.notice -t init "Console-invoked Ctrl-Alt-Del was ignored"'
            state: 'present'
      when: ansible_distribution_major_version == "6"

    - name: Disable Ctrl+Alt+Delete on RHEL7
      block:
        - file:
            path: /usr/lib/systemd/system/ctrl-alt-del.target
            state: absent

        - file:
            path: /usr/lib/systemd/system/ctrl-alt-del.target
            src: /dev/null
            state: link
      when: ansible_distribution_major_version == "7"

Managing users

  • Deleting a user
    user: name={{user}} state=absent remove=yes
    

Creating and mounting a volume

tasks:
  - name: Create u01 logical volume for PL01
    command:  "{{item}}"
    with_items:
     - vgcreate u01vg /dev/xvdc
     - lvcreate -l 100%FREE -n u01lv u01vg
     - mkfs.ext4 /dev/u01vg/u01lv

  - name: add mountpoint in /etc/fstab
    mount:
      name: /u01
      src: /dev/mapper/u01vg-u01lv
      fstype: ext4
      opts: defaults
      state: present

Using lineinfile

  • Allow the user "psoft" to submit cron jobs
    - name: Add  psoft user une cron.allow
      lineinfile:
        dest=/etc/cron.allow
        line="psoft"
    
  • Add the Ansible server in /etc/hosts
    - name: Add   int /etc/hosts
      lineinfile:
        dest=/etc/hosts
        line="{{ansible_default_ipv4.address}} {{ansible_hostname}}"
    
  • Modify sshd_config and restart sshd
    - hosts: all
      vars:
        filename: /etc/ssh/sshd_config
    
      vars_files:
        - ../data/sshd_config.yml
    
      tasks:
    
    Do a backup
        - shell:
            cp {{filename}} {{filename}}.`date '+%Y%m%d%H%M%S'`.bak
    
    Replace the line, even if commented out
        - lineinfile:
            name: "{{ filename }}"
            regexp: '^[# ]*{{ item.param }}[ =]+'
            line: '{{ item.param }} {{ item.value }}'
            state: '{{ item.state }}'
          with_items: '{{ sshd_config }}'
    
    Restart the service
        - service:
            name=sshd
            state=restarted
    
    Here the file used for data:
    sshd_config:
      - { param: 'AddressFamily', value: 'inet', state: 'present' }
      - { param: 'AllowTcpForwarding', value: 'no', state: 'present' }
      - { param: 'PermitRootLogin', value: 'no', state: 'present' }
    
  • Replace lines with empty lines
    - lineinfile:
        dest: /etc/sysctl.conf
        insertafter: EOF
        line: '{{ item }}'
      with_items:
        - ' '
        - '# fs.suid_dumpable: disallow core dumping by setuid and setgid programs'
        - 'fs.suid_dumpable=0'
        - ' '
        - '# kernel.randomize_va_space: Address Space Layout Randomization, 
        - '#   randomize the positions of the stack, VDSO page, shared memory regions, and the data segment.'
        - 'kernel.randomize_va_space=2'
    
  • Replace a word in a line
    - lineinfile:
      name: '{{filename}}'
      regexp: '^(password[ \t]+sufficient[ \t]+pam_unix.so md5 shadow nullok try_first_pass use_authtok) remember=5$'
      line: '\1 remember=6'
      backrefs: yes
    
  • Comment out the privilege to SU in sudoers
    vars:
      filename: /etc/sudoers
    
    tasks:
      - lineinfile:
        name: "{{filename}}"
        regexp: '^([ \t]*Cmnd_Alias[ \t]+SU[ \t]+=[ \t]+(?:/usr)*/bin/su[ \t]+-)$'
        line: '# \1'
        backrefs: yes
    

Playing with packages

  • Sending a local archive
    - unarchive:
      src=/local/ansible/roles/common/files/ctmagent.tar.gz
      dest=/opt/tools/ctmagent
    
  • Removing samba
    yum:
      name: samba
      state: absent
    

Misc

  • Encrypting a password with python
    Use: python -c 'import crypt; print crypt.crypt(password,salt)'
    # python -c 'import crypt; print crypt.crypt("S3cret!","salt")'
    saj4Pa9MfKdsI
    

Comments

Anonymous said…
This comment has been removed by a blog administrator.

Popular Posts