Ansible(5)パッケージ管理関連モジュール

Ansible

yum_repository

YUMリポジトリの追加削除を行う。

変数 デフォルト 内容 備考
name 必須 レポジトリ名  
description   詳細内容  
baseurl   ベースURL  
gpgkey   GPG KEYのURL  
gpgcheck システムに依存 GPGチェックをするかどうか  
enabled yes 有効化するかどうか  

Example

- name: Add repository
  yum_repository:
    name: epel
    description: EPEL YUM repo
    enabled: no
    baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
    gpgkey: https://download.fedoraproject.org/pub/fedora/epel/RPM-GPG-KEY-EPEL-7
    gpgcheck: yes

yum

YUMによるパッケージのインストールや更新、削除を行う。

変数 デフォルト 内容 備考
name   パッケージ名 全てを選択する場合は*
enablerepo   有効化するリポジトリ名  
security   no セキュリティ関連の更新のみインストール
state   実行内容 absent, installed, latest, present, removed

Example

- name: ensure a list of packages installed
  yum:
    name: "{{ packages }}"
    enablerepo: epel
  vars:
    packages:
    - httpd
    - httpd-tools

- name: upgrade all packages about security
  yum:
    name: '*'
    state: latest
    security: yes

Ansible(4)コマンド実行モジュール

Ansible

command

コマンドを実行する。

変数 デフォルト 内容 備考
  必須 実行するコマンド  
chdir   実行する前に移動するディレクトリ  

Example

- name: return motd to registered var
  command: cat /etc/motd
  register: mymotd

debug

コマンド実行内容を表示する。

変数 デフォルト 内容 備考
var   表示する変数  

Example

- debug:
    var: result
    verbosity: 2

expect

コマンドを実行しプロンプトに応答する。

変数 デフォルト 内容 備考
command 必須 実行するコマンド  
chdir   実行する前に移動するディレクトリ  
responses   プロンプトへの応答 正規表現にて規定する

Example

- name: Case insensitive password string match
  expect:
    command: passwd username
    responses:
      (?i)password: "MySekretPa$$word"
  # you don't want to show passwords in your logs
  no_log: true

make

Makeファイルを実行する

変数 デフォルト 内容 備考
chdir 必須 実行する前に移動するディレクトリ  
target   ターゲット install, all

Example

# Run `install` target as root
- make:
    chdir: /home/ubuntu/cool-project
    target: install
  become: yes

service

サービスの管理を行う。

変数 デフォルト 内容 備考
name 必須 サービス名  
state   実行内容 reloaded, restarted, started, stopped
enabled   ブート時に起動するかどうか  

Example

- name: Enable service httpd, and not touch the state
  service:
    name: httpd
    enabled: yes

shell

コマンドを実行する。
ワイルドカードを指定する場合はcommandモジュールではなくshellコマンドを使用する

変数 デフォルト 内容 備考
  必須 実行するコマンド  
chdir   実行する前に移動するディレクトリ  

 

Ansible(3)システム管理モジュール

Ansible

cron

cronの設定を行う。

変数 デフォルト 内容 備考
name   cron名  
job   実行コマンド  
minute *  
hour *  
day *  
month *  
month *  
state present 実行内容 absent, present

Example

- name: Ensure a job that runs at 2 and 5 exists. Creates an entry like "0 5,2 * * ls -alh > /dev/null"
  cron:
    name: "check dirs"
    minute: "0"
    hour: "5,2"
    job: "ls -alh > /dev/null"

group

グループを管理する。

変数 デフォルト 内容 備考
name 必須 グループ名  
state present 実行内容 absent, present

Example

- name: Ensure group "somegroup" exists
  group:
    name: somegroup
    state: present

lvol

LVMボリュームを作成する。

変数 デフォルト 内容 備考
vg   ボリュームグループ名  
lv   論理ボリューム名  
size   ボリュームサイズ  
state present 実行内容 absent, present

Example

- name: Create a logical volume of 512m
  lvol:
    vg: firefly
    lv: test
    size: 512

mount

ファイルシステムをマウントする。

変数 デフォルト 内容 備考
path 必須 マウントポイント  
state 必須 実行内容 absent, mounted, present, unmounted
src   マウントパス  
fstype   ファイルシステム  

selinux

SELinuxのポリシーを変更する。

変数 デフォルト 内容 備考
state None 実行内容 enforcing, permissive, disabled

Example

# Enable SELinux
- selinux:
    policy: targeted
    state: enforcing

sysctl

sysctl.confを管理する。

変数 デフォルト 内容 備考
name 必須 キー  
value    
state present 実行内容 absent, present

Example

# Set vm.swappiness to 5 in /etc/sysctl.conf
- sysctl:
    name: vm.swappiness
    value: 5
    state: present

user

ユーザを管理する。

変数 デフォルト 内容 備考
name 必須 ユーザ名  
password   パスワード  
groups   グループ名  
shell   シェル  
createhome yes ホームディレクトリを作るかどうか  
home   ホームディレクトリ  

Example

- name: Add the user 'johnd' with a specific uid and a primary group of 'admin'
  user:
    name: johnd
    comment: John Doe
    uid: 1040
    group: admin

timezone

タイムゾーンを設定する。

変数 デフォルト 内容 備考
name   タイムゾーン  

Example

- name: set timezone to Asia/Tokyo
  timezone:
    name: Asia/Tokyo

Ansible(2)ファイル関連モジュール

Ansible

blockinfile

ファイル内にテキストブロックを追加/削除する。

変数 デフォルト 内容 備考
path 必須 ファイルパス  
block   挿入するテキストブロック  
insertafter EOF 何の後にテキストブロックを追加するか  
insertbefoer   何の前にテキストブロックを追加するか  
marker # {mark} ANSIBLE MANAGED BLOCK テキストブロック前後に挿入されるマーカー  
backup no バックアップファイルを作成するかどうか  
owner   所有者  
group   グループ  
mode   ファイルパーミッション  
state present 実行内容 absent, present

Example

- name: Add mappings to /etc/hosts
  blockinfile:
    path: /etc/hosts
    block: |
      {{ item.ip }} {{ item.name }}
    marker: "# {mark} ANSIBLE MANAGED BLOCK {{ item.name }}"
  with_items:
    - { name: host1, ip: 10.10.1.10 }
    - { name: host2, ip: 10.10.1.11 }
    - { name: host3, ip: 10.10.1.12 }

copy

リモートサーバへファイルをコピーする。

変数 デフォルト 内容 備考
src   コピー元のファイルパス  
remote_src no コピー元のファイルパスがリモートサーバのパスであるかどうか  
backup no バックアップファイルを作成するかどうか  
owner   所有者  
group   グループ  
mode   ファイルパーミッション  

Example

- name: example copying file with owner and permissions
  copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: 0644

file

ファイル属性を変更する。

変数 デフォルト 内容 備考
path   コピー元のファイルパス  
owner   所有者  
group   グループ  
mode   ファイルパーミッション  
state file ファイルの状態 absent, directory, file, hard, link, touch

Example

# change file ownership, group and mode
- file:
    path: /etc/foo.conf
    owner: foo
    group: foo
    # when specifying mode using octal numbers, add a leading 0
    mode: 0644

get_url

ファイルのダウンロードを行う。

変数 デフォルト 内容 備考
url 必須 ファイルのURL  
dest 必須 ダウンロードしたファイルを設置するディレクトリの絶対パス  
timeout 10 タイムアウト  
force no 既にファイルが存在していたとしても毎回ダウンロードを行うかどうか  
insertbefoer   何の前にテキストブロックを追加するか  
backup no バックアップファイルを作成するかどうか  
owner   所有者  
group   グループ  
mode   ファイルパーミッション  

Example

- name: Download foo.conf
  get_url:
    url: https://example.com/path/file.conf
    dest: /etc/foo.conf
    mode: 0440

git

gitプロジェクトをデプロイする。

変数 デフォルト 内容 備考
dest 必須 gitプロジェクトのチェックアウト先  
repo 必須 gitリポジトリ  

Example

# Example git checkout from Ansible Playbooks
- git:
    repo: 'https://foosball.example.org/path/to/repo.git'
    dest: /srv/checkout
    version: release-0.22

lineinfile

ファイル内にテキスト行を追加/削除する。

変数 デフォルト 内容 備考
path 必須 ファイルパス  
line   挿入するテキスト  
insertafter EOF 何の後にテキストブロックを追加するか  
insertbefoer   何の前にテキストブロックを追加するか  
backup no バックアップファイルを作成するかどうか  
owner   所有者  
group   グループ  
mode   ファイルパーミッション  
state present 実行内容 absent, present

Example

# Before 2.3, option 'dest', 'destfile' or 'name' was used instead of 'path'
- lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: 'SELINUX=enforcing'

replace

特定の文字列を置換する。

変数 デフォルト 内容 備考
path 必須 ファイル名  
regexp 必須 対象文字列の正規表現  
replace   変換後の文字列  
backup no バックアップファイルを作成するかどうか  
owner   所有者  
group   グループ  
mode   ファイルパーミッション  

Example

- replace:
    path: /etc/hosts
    regexp: '(\s+)old\.host\.name(\s+.*)?$'
    replace: '\1new.host.name\2'
    backup: yes

template

テンプレートファイルをリモートサーバに設置する。

変数 デフォルト 内容 備考
src 必須 Playbook上のテンプレートファイルの名前  
dest 必須 リモートサーバ上のパス  
backup no バックアップファイルを作成するかどうか  
owner   所有者  
group   グループ  
mode   ファイルパーミッション  

Example

- template:
    src: /mytemplates/foo.j2
    dest: /etc/file.conf
    owner: bin
    group: wheel
    mode: 0644

unarchive

アーカイブを展開する。

変数 デフォルト 内容 備考
src 必須 展開するアーカイブのパス  
remote_src no 展開するアーカイブがリモートサーバにあるかどうか  
dest 必須 リモートサーバ上のパス  
owner   所有者  
group   グループ  
mode   ファイルパーミッション  

Example

- name: Unarchive a file that is already on the remote machine
  unarchive:
    src: /tmp/foo.zip
    dest: /usr/local/bin
    remote_src: yes

Ansible(1)Ansibleの概要

Ansible

Ansibleとは

Ansibleは、インフラストラクチャを自動構成可能(Infrastructure as Code)な構成管理ツールで、作業の省人化と効率化によるコスト削減やコード化による高度な品質保証を実現することができる。

Ansibleは、操作対象マシンにエージェントアプリケーションをインストールすることが不要(エージェントレス)であることが特徴で、SSHでログインできる端末であれば操作可能となるので、エージェントアプリケーションをインストールすることができないネットワーク機器なども、Ansibleの操作対象とすることができる。

Inventory

操作対象となるマシンへの接続情報を記したファイル。API経由でマシンへの接続情報を収集してInventory情報を自動生成するDinamic Inventryという機能を使用することもできる。INI形式もしくはYAML形式で記述できる。グループを定義して[グループ名 vars]でグループごとの変数を定義することができる。

変数名 内容
ansible_user SSHでログインするユーザ
ansible_ssh_pass SSHでログインする際のパスワード
ansible_ssh_private_key_file SSHでログインする際の秘密鍵
ansible_become root権限で実行する

Playbook

site.ymlとして定義されるマスタープレイブック。実行するプレイを順に羅列する。

変数名 内容 備考
name
hosts
remote_user
vars_files
roles
environment

Module

Ansibleで実行するコマンド。YAMLで記述する。変更が生じるときのみ実行され、ある操作を何度事項しても常に同じ結果となる冪等性を担保している。