Ansibleのよくつかうモジュールsample
個人的な使用頻度を添えて。思いついたら追記します
-
file ファイルやディレクトリを置く
- まあまあつかう
# ディレクトリ作成
- file:
path=/var/tmp/example
state=directory
mode=0755
# ディレクトリの中身すべてのオーナーをroot:rootに変更
- file:
path=/usr/local/hoge
state=directory
owner=root
group=root
recurse=yes
# ディレクトリのシンボリックリンクを作成
- file:
src=/usr/local/hoge
dest=/opt/hoge
state=link
-
copy ファイルをコピーする
- 案外使うはず
# vaultと組み合わせて秘密鍵と証明書を配布
- name: copy ssl_cert(with vault)
copy:
content: "{{ private_ssl_crt }}"
dest: '/tmp/server.crt'
no_log: true
tags: copy-sslcrt
- name: copy ssl_key(with vault)
copy:
content: "{{ private_ssl_key }}"
dest: '/tmp/server.key'
no_log: true
tags: copy-sslkey
# vaultと組み合わせてパスワード入りファイルを配布
- name: copy dbpass
copy:
content: "{{ dbpass }}"
dest: '/root/.mysql_pwd'
no_log: true
tags: copy-dbpass
-
lineinfile 正規表現などで指定した行を置換する
- 結構つかいます
# 設定ファイルの正規表現指定置換
- name: zabbix-agent.conf
lineinfile: >-
dest='/etc/zabbix/zabbix_agentd.conf'
state=present
backrefs=yes
regexp='{{ item.regexp }}'
line='{{ item.line }}'
with_items:
- regexp: '^Server=127.0.0.1'
line: 'Server={{ zabbix_server }}'
- regexp: '^ListenIP=127.0.0.1'
line: 'ListenIP=0.0.0.0'
- regexp: '^# ServerActive='
line: 'ServerActive={{ zabbix_server }}'
- regexp: '^# Timeout=3'
line: 'Timeout=30'
- regexp: '^Include=/etc/zabbix/zabbix_agentd.d/'
line: '#Include=/etc/zabbix/zabbix_agentd.d/'
tags: zabbix30`
2回やってみたり正規表現を単体テストしてみて動確したほうがいいやつ。
複数行まとめてならreplaceつかう。ブロック追加ならblockinfileつかう。
-
template 変数やループや条件を埋め込んだファイルを配置する
- 超つかう
# apacheの設定ファイルを置く
## templateモジュールで使用する変数を設定
vars:
virtualhosts:
- { port: 80, fqdn: site1.example.com, allow_override: True }
- { port: 80, fqdn: site2.example.com, allow_override: False }
## templateタスクを定義
tasks:
- name: set virtualhost conf
template:
src: 'files/virtual_hosts.conf.j2
dest: '/etc/httpd/conf.d/virtual_hosts.conf
owner: 'root'
group: 'root'
mode: 0644
## templateモジュールで転送するテンプレートファイル
{% for host in virtual_hosts %}
<VirtualHost *:{{host_port }}>
ServerName {{ host.fqdn }}
DocumentRoot /var/www/html/{{ host.fqdn }}/
ErrorLog logs/{{ host.fqdn }}-error_log
CustomLog logs/{{ host.fqdn }}-access_log common
{% if host.allow_override %}
<Directory /var/www/html/{{ host.fqdn }}/>
Options FollowSymLinks
AllowOverride All
</Directory>
{% endif %}
</VirtualHost>
{% endfor %}
## templateモジュールで設置されたファイル
<VirtualHost *:80>
ServerName site1.example.com
DocumentRoot /var/www/html/site1.example.com/
ErrorLog logs/site1.example.com-error_log
CustomLog logs/site1.example.com-access_log common
<Directory /var/www/html/site1.example.com/>
Options FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName site2.example.com
DocumentRoot /var/www/html/site2.example.com/
ErrorLog logs/site2.example.com-error_log
CustomLog logs/site2.example.com-access_log common
</VirtualHost>
# nginxの設定ファイルを置く(validateつき)
- name: set nginx default config
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
validate: nginx -t -c %s
notify:
- nginx-reload
tags: set-conf-nginx,nginx-latest
-
unarchive アーカイブを解凍する
- たぶんこのさき使うハズ → と思いきやfileでおなじことできたりするのであんまつかってない。
- unarchive:
src=hoge.tar.gz
dest=/usr/local/src
-
group OSグループを作成する
- つかったことはある
# hogeグループをGID:1001で作成。
- group:
name=hoge
gid=1001
- つかったことはある
# piyoユーザを作成。オプションは全てデフォルト。
- user:
name=piyo
# hogeユーザを作成。各オプションを指定。
- user:
name=hoge
uid=1001
group=hoge
groups=wheel
home=/home/hoge
shell=/bin/bash
-
yum パッケージをインストールする
- 最も使うモジュール
# mysqldをyumで入れる
- name: install mysqld
yum:
name: "{{ item }}"
enablerepo: mysql57-community
state: present
with_items:
- mysql-community-server
- mysql-community-client
- mysql-community-common
- mysql-community-libs
- mysql-community-libs-compat
tags: install_mysqld
# zabbix3.0をyumで入れる
- block:
- name: import Zabbix RPM-GPG-KEY
rpm_key: key=http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX state=present
tags: zabbix30
- name: zabbix3.0 release install yum
yum: name='http://repo.zabbix.com/zabbix/3.0/rhel/{{ ansible_distribution_major_version }}/x86_64/zabbix-release-3.0-1.el{{ ansible_distribution_major_version }}.noarch.rpm' state=present
tags: zabbix30
- name: zabbix3.0-agent install
yum:
name: "{{ item }}"
state: present
enablerepo: zabbix
tags: zabbix30
with_items:
- zabbix-agent
- zabbix-sender
when: ansible_os_family == 'RedHat'
-
apt パッケージをインストールする
- ubuntuやdebianならyumでなくてこっちつかう
# zabbix3.0をubuntuに入れる
- block:
- name: import Zabbix Debian-Ubuntu-GPG-KEY
apt_key:
url: 'http://repo.zabbix.com/zabbix-official-repo.key'
state: present
tags: zabbix30
- name: zabbix3.0 release install apt
apt_repository:
repo: 'deb http://repo.zabbix.com/zabbix/3.0/ubuntu {{ ansible_distribution_release }} main'
state: present
tags: zabbix30
- name: zabbix3.0 agent install apt
apt:
pkg: "{{ item }}"
state: present
allow_unauthenticated: yes
# update_cache: yes
# cache_valid_time: 0
tags: zabbix30
with_items:
- zabbix-agent
- zabbix-sender
when:
- ansible_distribution == "Ubuntu"
- ansible_lsb.major_release > 14
-
service サービスの有効無効と起動停止再起動などを制御する
- 超つかう
# handlerにかくnginxをreload
- name: nginx-reload
service:
name: nginx
state: reloaded
# 複数を無効化
- name: disable services
service:
name: "{{ item }}"
enabled: no
with_items:
- auditd
- lvm2-monitor
- mdmonitor
- atd
- NetworkManager
tags: disable-services
# ntpd起動と有効化
- name: start ntpd service
service:
name: ntpd
state: started
enabled: true
tags: start_enable_ntpd
-
shell コマンドを実行する(複数行,pipe,redirectつかえる)
- 使ったことはある。registerやwhenと組み合わせたい
# /var/tmp/exampleに移動し、somescript.shを実行して、結果をsomelog.txtに出力
- shell: somescript.sh >> somelog.txt
args:
chdir=/var/tmp/example
-
command コマンドを実行する(1行)
- よく見たら意外と使ってる。registerやwhenと組み合わせたい
# get letsencrypt sslcerts.
- name: obtains cert keys
command: letsencrypt certonly --webroot -d {{ nginx_servername }} -w /usr/share/nginx/html --email {{ letsencypt_mail }} --agree-tos --keep-until-expiring --non-interactive
when: use_letsencrypt
tags: obtains-cert-keys,nginx-ssl
- set_fact 途中で変わる内容を変数に入れて使うなど
- set_fact:
ip_mask: "{{ ansible_default_ipv4.address}}/{{ansible_default_ipv4.netmask }}"
when: ansible_default_ipv4
- stat ファイルのステータスを取ってregisterで変数に入れて後のタスクのwhenで分岐につかう
- name: check systemd
stat:
path: /usr/bin/systemctl
register: check_systemd
- name: check if timezone is common_timezone
shell: /usr/bin/timedatectl status|grep -i 'time zone'|awk '{print $3}'
register: check_timezone
ignore_errors: true
when: check_systemd.stat.xusr
- debug その変数の中身はなんなのかを実行時の標準出力に出してたしかめる
- hosts: localhost
gather_facts: no
tasks:
- name: remove_mariadb_libs
yum:
name: mariadb-libs
state: absent
register: res_malialib_absent
- name: debug res_malialib_absent
debug: var=res_malialib_absent.stdout