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
library dir in your ansible_home directory.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)
ansible.cfg.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 }}
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
failed caused by rturn code != 0 $? != 0changed !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