Ansibleについて、色々なモジュールを使ってみたときのその備忘録です。
実行したAnsibleのバージョンは 2.7.1
です。
ではさっそく!!
モジュールMemo
fileモジュール
モジュール/オプション |
説明 |
file |
ファイル・ディレクトリの操作 |
path |
パスを指定 |
mode |
権限を付与 |
owner |
所有者を指定 |
group |
グループを指定 |
- name: make dirs
file:
path: '{{ item }}'
state: directory
mode: 0744
owner: ubuntu
group: ubuntu
with_items:
- /tmp/hoge1
- /tmp/hoge2
- name: symlink nginx conf
file:
src: /etc/nginx/sites-available/default
dest: /etc/nginx/sites-enabled/default
state: link
become: true
aptモジュール
モジュール/オプション |
説明 |
apt |
aptパッケージを利用 |
state |
最新バージョン |
update_cache |
apt-get update後に処理 |
autoremove |
依存関係に対応して削除 |
become |
rootユーザで実行 |
- name: apt-get install
apt:
name: "{{ item }}"
state: latest
update_cache: yes
autoremove: yes
with_items:
- nginx
- git
become: true
apt_repositoryモジュール
- name: add apt repo
apt_repository:
repo: "{{ item }}"
with_items:
- ppa:nginx/stable
become: true
systemdモジュール
モジュール/オプション |
説明 |
systemd |
systemdの設定 |
state(started) |
サービスを開始 |
daemon_reload |
systemdに変更があった場合は起動前にリロードする |
enabled |
OS起動時に自動起動するか |
name |
.serviceを指定する |
- name: ensure nginx start
systemd:
state: started
name: nginx.service
daemon_reload: yes
become: true
モジュール/オプション |
説明 |
debug |
実行中にステートメントを出力 |
with_items |
loop処理 |
failed_when |
条件を満たさない場合に中止 |
ansible_distribution |
ディストリビューションを示す |
ansible_distribution_version |
ディストリビューションバージョンを示す |
- name: check distribution and version
debug:
var: '{{ item }}'
with_items:
- ansible_distribution
- ansible_distribution_version
failed_when:
- ansible_distribution != 'Ubuntu'
- ansible_distribution_version != '16.04'
wait_forモジュール
- wait_for
- pathの場所にファイルが存在するまでtimeout時間待つ
- name: wait until file exit
wait_for:
path: /tmp/hoge
timeout: 60
get_urlモジュール
- wgetをcommandで使うよりも get_urlを使う
- name: Download CloudWatchAgent deb Package
get_url:
url: https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip
dest: /opt/cloudwatch-agent
mode: 0755
become: true
argsモジュール
- shellscriptを実行する
- argsにディレクトリ情報を定義する
- name: Install CloudwatchAgent
command: ./install.sh
args:
chdir: /opt/cloudwatch-agent
gemモジュール
- gem install でパッケージをインストールする
- name: install gem packages
gem:
name: "{{ item }}"
state: latest
with_items:
- bundler
- piculet
- roadworker
pip3モジュール
- pip3 install でパッケージをインストールする
- name: install pip3 packages
pip: name={{ item }} executable=pip3
with_items:
- boto3
- awscli
become: true
lineinfileモジュール
- ubuntuユーザがsudoパスワード無しでnginxをreload/restartできるようにする
モジュール/オプション |
説明 |
lineinfile |
ファイルの中身を操作する |
validate |
%s でコピーするまえに問題ないか確認する |
- name: Allow sudo command with nopassword
lineinfile:
path: /etc/sudoers
line: "{{ item }}"
validate: 'visudo -cf %s'
with_items:
- 'ubuntu ALL=NOPASSWD: /bin/systemctl restart nginx.service'
- 'ubuntu ALL=NOPASSWD: /bin/systemctl reload nginx.service'
become: true
- lineinfile:
path: /etc/selinux/config
regexp: '^SELINUX='
line: 'SELINUX=enforcing'
gitモジュール
モジュール/オプション |
説明 |
repo |
リポジトリを指定する |
dest |
clone先のディレクトリを指定する |
version |
ブランチを指定する |
- name: download git-secrets
git:
repo: https://github.com/awslabs/git-secrets.git
dest: ~/git-secrets
version: master
Rubyインストール(rbenv)
- name: install ruby depends modules
apt:
name: '{{ item }}'
state: latest
update_cache: yes
autoremove: yes
with_items:
- ruby
- ruby-dev
- zlib1g-dev
- build-essential
- libssl-dev
- libreadline-dev
- libyaml-dev
- libxml2-dev
- libxslt1-dev
- libffi-dev
become: true
- name: install rbenv
git:
repo: https://github.com/sstephenson/rbenv.git
dest: ~/.rbenv
version: master
- name: install ruby-build
git:
repo: https://github.com/rbenv/ruby-build.git
dest: ~/.rbenv/plugins/ruby-build
version: master
- name: install ruby {{ ruby_version }}
shell: |
~/.rbenv/bin/rbenv install -s {{ ruby_version }}
~/.rbenv/bin/rbenv rehash
~/.rbenv/bin/rbenv global {{ ruby_version }}
register: install_ruby
changed_when: install_ruby.stdout != ""
handlerについて
nginxのtaskを使った例
nginxの設定が変更されたら、サービスを再起動したいときに使う
- name: symlink nginx conf
file:
src: /etc/nginx/sites-available/default
dest: /etc/nginx/sites-enabled/default
state: link
become: true
notify: "restart nginx"
モジュール/オプション |
説明 |
block |
複数のタスクをまとめて制御 |
check_mode(no) |
dry-run時でも実行する |
changed_when |
常にステータスokを返す |
---
- name: "restart nginx"
block:
- name: check config
command: nginx -t
check_mode: no
changed_when: false
- name: restart nginx
systemd:
name: nginx
state: restarted
daemon_reload: yes
become: true
- TASK[nginx : symlink nginx conf] のステータスが
changed
になったら実行される。以下はansibleの実行結果
TASK [nginx : symlink nginx conf] ***************************************************************************************************************
--- before
+++ after
@@ -1,4 +1,4 @@
{
"path": "/etc/nginx/sites-enabled/default",
- "state": "absent"
+ "state": "link"
}
changed: [localhost]
RUNNING HANDLER [nginx : restart nginx] *********************************************************************************************************
changed: [localhost]