[PYTHON] Ansible Note

All version? skip setup

ansible.cfg


[defaults]
gathering=explicit

module ref

ansible-doc <module>

git clone use git module

For repo=git:// (ssh), hostkey issue.

accept_hostkey=yes

git for private repo ssh-agent? http://qiita.com/seizans/items/f5f052aec1592c47767f

SELinux python Mandatory...

    - name: install essential packages
      yum: name=libselinux-python state=installed

string append via lineinfile

    - name: disable SELinux
      lineinfile: dest=/etc/selinux/config regexp=^SELINUXPLUS= line=SELINUXPLUS=disabled

When you want to erase, use state=absent

Ansible 2.0x

Set tags for a role

python


roles:
  - { role: webserver, port: 5000, tags: [ 'web', 'foo' ] }

[DEPRECATION WARNING]: Using bare variables is deprecated. NG

var/main.yml


---
user:
 - hoge
 - fuga
 - use1

python


- name: mk user dir
  file:
    dest: '/home/{{item}}'
    state: directory
    owner: '{{item}}'
    group: '{{item}}'
    mode: 0700
  with_items:
    - user

OK

python


- name: mk user dir
  file:
    dest: '/home/{{item}}'
    state: directory
    owner: '{{item}}'
    group: '{{item}}'
    mode: 0700
  with_items:
    - '{{user}}'

More YAMLish! http://qiita.com/Hiraku/items/e8b55775fa55b0e72a44

python


- name: some task
  shell: |
    echo hoge >> somelog.txt
    echo foo
    echo baa
  args:
    chdir: somedir/

Ref module's document

python


# show all modules
ansible-doc -l

# show file module doc
ansible-doc file

Gem & rbenv set executable = [your gem path] set user_install=False

python


- name: install bundler
  gem: name=bundler user_install=no executable=/opt/rbenv/shims/gem

I want to use 2.0's extra mods

  1. Create library dir in your ansible_home directory.
  2. Download extra mods source from github and move to library dir.

Can I use nested vars? No. this is W/A.

task.yml


- name: copy user-indivisual files
  copy:
    content: '{{ sample_text[item] }}'
    dest: '/home/{{item}}/test.txt'
  with_items:
    - hoge
    - fuga

vars.yml


sample_text:
  hoge: |
    hello world.
    this is hoge.
  fuga: |
    hello world!
    this is fuga.

Apply ansible vault to file use copy: content="{{ encrypted_var }}" dest=hoge.txt

User-defined template filter (jinja2)

  1. Set custom filter path in ansible.cfg.
  2. Write python script!

ansible.cfg


[defaults]
filter_plugins = /filter_plugins/auto_server_id.py

auto_server_id.py


def calc_server_id(ipaddr):
    octs = ipaddr.split('.')
    return eval(octs[2] + "*256+" + octs[3])


class FilterModule(object):
    def filters(self):
        return {'auto_server_id': calc_server_id}
        

Use it!

sample.j2


{{ "192.168.1.200"|auto_server_id }}

Idempotence (idempotence)

User handlers

role/hoge/tasks/main.yml


- name: config httpd
  copy: src=xxx dest=/etc/httpd/httpd.conf
  notify: restart httpd

role/hoge/handlers/main.yml


- name: restart httpd
  service: name=httpd state=restarted

notify launched by task result changed. Even if notify occured any times, handler runs only once.

shell/command module dafault

Modify changed judgement

python


tasks:
  - name: install python-apt
    shell: LANG=C sudo apt-get install -y python-apt
    register: result
    changed_when: '"is already the newest version" not in result.stdout'
  - debug: var=result

Modify failed judgement

tasks/main.yml


- name: set Timezone
  shell: /tmp/set-localtime.sh
  register: tz_res
  failed_when: tz_res.rc not in [0, 1]
  changed_when: tz_res.rc != 0
  tags: config

files/set-localtime.sh


P_LG=`localectl status`
localectl set-locale LANG=ja_JP.UTF-8
localectl set-keymap jp-OADG109A
C_LG=`localectl status`
echo $P_LG | ( echo $C_LG | diff /dev/fd/3 -) 3<&0

Recommended Posts

Ansible Note
Note
Note
Django note 4
pyenv note
Ansible overview
Note: Python
Install Ansible
Python note
Django Note 1
direnv note
Django note 3
Django note 2
[Note] RepresenterError
[Note] Image resizing
Python study note_002
Note: Python Decorator
Python programming note
[Python] Learning Note 1
Kinesis Firehose Note
Python study note_004
[Note] Regarding Tensorflow
Note: confusing nonlocal
Markdown Beginner's Note
Python study note_003
Completely personal note
Flask's personal note # 2
Jupyter Study Note_002
TensFlow Preferences Note
[Note] openCV + python
Note about awk
Just a note
PyCharm Preferences Note
Note: List comprehension
Python beginner's note
Flask's personal note # 1
Jupyter Study Note_003
Jupyter Study Note_007
[Note] pandas unstack
Jupyter Study Note_005