「Ansible」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(翻訳)
(同期)
7行目: 7行目:
 
== インストール ==
 
== インストール ==
   
制御マシン (サーバーあるいはマスター) に {{Pkg|ansible}} パッケージを[[インストール]]してください。
+
制御マシン (サーバーあるいはマスター) に {{Pkg|ansible}} パッケージを[[インストール]]してください。{{Pkg|python}} も必要です (Python バージョン 2.6, 2.7, 3.5 以上がサポートされています)
   
自動デプロイや設定作業を適用したい管理マシン (クライアントあるいはスレーブ) には {{Pkg|python2}} (あるい実験的な {{Pkg|python}}) と {{Pkg|openssh}} をインストールしてください。ssh 接続を正しく機能させるには [[SSH_鍵#リモートサーバーに公開鍵をコピー|ssh 鍵の設定]]が必
+
自動デプロイや設定作業を適用したい管理マシン (クライアントあるいはスレーブ) には通信手段 (通常[[SSH]]) をインストールしてください。[[SSH_鍵#リモートサーバーに公開鍵をコピー|ssh 鍵の設定]]をすることで Ansible 使いやすくなりますが、はありません
   
 
== 基本的な使い方 ==
 
== 基本的な使い方 ==
31行目: 31行目:
   
 
=== Playbook ===
 
=== Playbook ===
Playbook はインフラをデプロイ・設定するための強力なツールです。詳しくは [http://docs.ansible.com/ansible/latest/playbooks.html 公式ドキュメント] を読んでください。以下は全てのノードでシステムアップグレードを実行する例です。まず YAML 形式の playbook ファイルを作成します:
+
Playbook はインフラをデプロイ・設定するための強力なツールです。詳しくは [http://docs.ansible.com/ansible/latest/playbooks.html 公式ドキュメント] を読んでください。以下は全ての Arch Linux ノードでシステムアップグレードを実行する例です。まず YAML 形式の playbook ファイルを作成します (インデントは空白2つです):
 
{{hc|syu.yml|
 
{{hc|syu.yml|
  +
---
- hosts: control managed
 
  +
- name: All hosts up-to-date
  +
hosts: control managed
  +
become: yes
  +
 
tasks:
 
tasks:
- name: full system upgrade
+
- name: full system upgrade
script: /usr/bin/pacman -Syu
+
pacman:
  +
update_cache: yes
  +
upgrade: yes
 
}}
 
}}
   
 
そして playbook スクリプトを実行:
 
そして playbook スクリプトを実行:
   
# ansible-playbook syu.yml
+
# ansible-playbook --ask-become-pass syu.yml
  +
  +
=== Vault ===
  +
[http://docs.ansible.com/ansible/latest/playbooks_vault.html#using-vault-in-playbooks vault] を使うことで機密データを playbook などに暗号化された状態で保存することができます。vault のパスワードはファイルに平文で保存できます。{{ic|echo myvaultpassword > vault_pass.txt}} で作成して、以下のように Ansible で使うことが可能です:
  +
  +
# ansible-playbook site.yml --vault-id vault_pass.txt
  +
  +
{{ic|varname}} という名前の変数の中身 {{ic|varcontent}} を暗号化するには、以下のコマンドを使用します:
  +
  +
# ansible-vault encrypt_string --vault-id vault_pass.txt varcontent -n varname
  +
  +
playbook に挿入できる暗号化された変数が直接出力されます。暗号化された変数は YAML ファイルの中で他の変数と一緒に混ぜて使うことができます:
  +
{{bc|<nowiki>notsecret: myvalue
  +
mysecret: !vault |
  +
$ANSIBLE_VAULT;1.1;AES256
  +
66386439653236336462626566653063336164663966303231363934653561363964363833313662
  +
6431626536303530376336343832656537303632313433360a626438346336353331386135323734
  +
62656361653630373231613662633962316233633936396165386439616533353965373339616234
  +
3430613539666330390a313736323265656432366236633330313963326365653937323833366536
  +
3462
  +
other_plain_text: othervalue</nowiki>}}
   
 
== Tips and tricks ==
 
== Tips and tricks ==
  +
=== ユーザーアカウントの作成 ===
  +
Ansible はユーザーアカウントを管理することができ、新しいアカウントを作成することもできます。[http://docs.ansible.com/ansible/latest/user_module.html user モジュール] を使うことで playbook でアカウントを作成できます。任意でユーザーのパスワードを設定する {{ic|password}} 引数が使えます。モジュールに指定するときパスワードはハッシュ化する必要があります。[http://docs.ansible.com/ansible/latest/playbooks_filters.html#hash-filters ハッシュフィルタ] を使うことで Ansible の中でハッシュ化することが可能です:
  +
  +
<nowiki>- user:
  +
name: madhead
  +
password: "{{ 'user_password' | password_hash('sha512', 'permsalt') }}"
  +
shell: /usr/bin/nologin</nowiki>
  +
  +
{{Tip|The salt should be fixed and explicitely supplied as a second parameter of the hash function for the operation to be indempotent (can be repeated without changing the state of the system).}}
  +
  +
ユーザーアカウントを作成するときは vault を使ってパスワードを暗号化することが推奨されています。[[#Vault]] を見てください。ただし、暗号化された変数は直接パイプで渡すことができないため、先に別の変数に渡してからパイプで渡す必要があります。
  +
  +
また、ハッシュ化は Ansible の外で行うことも可能です。以下のコマンドは ''user_password'' を MD5 と SHA512 でハッシュ化した値を返します:
  +
  +
$ openssl passwd -1 user_password
  +
 
=== Python の場所を Ansible に指定する ===
 
=== Python の場所を Ansible に指定する ===
   
Ansible は管理対象のマシンに [[Python]] を必要とします。プレビューとして Python 3 がサポートされていますが [https://docs.ansible.com/ansible/python_3_support.html]、全てのモジュールが機能するとは限りません。デフォルトでは Ansible はリモートシステム上の {{ic|/usr/bin/python}} が 2.X あるいは 3.X バージョンの Python (特に 2.4 以上) だと想定しています。
+
Ansible は管理対象のマシンに [[Python]] を必要とします。デフォルトでは Ansible はリモートシステム上の {{ic|/usr/bin/python}} が 2.X あるいは 3.X バージョンの Python (特に 2.6 以上) だと想定しています。
   
 
使用するモジュールが Python 2 を必要とする場合、Ansible のインベントリファイルで {{ic|ansible_python_interpreter}} 変数を設定して Python 2 の場所を Ansible に指定する必要があります。以下のようにホストグループを使って設定できます:
 
使用するモジュールが Python 2 を必要とする場合、Ansible のインベントリファイルで {{ic|ansible_python_interpreter}} 変数を設定して Python 2 の場所を Ansible に指定する必要があります。以下のようにホストグループを使って設定できます:
66行目: 108行目:
 
== 参照 ==
 
== 参照 ==
 
* [https://www.ansible.com/quick-start-video Ansible concept in 12 minutes]
 
* [https://www.ansible.com/quick-start-video Ansible concept in 12 minutes]
* [http://docs.ansible.com/ansible/latest/pacman_module.html pacman module details]
+
* [http://docs.ansible.com/ansible/latest/pacman_module.html pacman モジュールの詳細]

2017年10月5日 (木) 22:11時点における版

docs.ansible.com より:

Ansible は IT 自動化ツールです。システムを設定し、ソフトウェアをデプロイして、継続的なデプロイや休止期間を挟まないローリングアップデートなど高度な IT 業務をオーケストラレートできます。

インストール

制御マシン (サーバーあるいはマスター) に ansible パッケージをインストールしてください。python も必要です (Python バージョン 2.6, 2.7, 3.5 以上がサポートされています)。

自動デプロイや設定作業を適用したい管理マシン (クライアントあるいはスレーブ) には通信手段 (通常は SSH) をインストールしてください。ssh 鍵の設定をすることで Ansible が使いやすくなりますが、必須ではありません。

基本的な使い方

インベントリ

/etc/ansible/ansible.cfg のデフォルト設定では、/etc/ansible/hosts にインフラを定義します。3つのノードからなる小規模なクラスタを定義するインベントリの例:

/etc/ansible/hosts
[control]
192.168.12.1

[managed]
192.168.12.2
192.168.12.3

ファイルの中でノードごとに属性を割り当てることができます。詳しくは 公式ドキュメント を読んでください。

Ping

インベントリ内のノードが稼働しているか確認するには:

$ ansible all -m ping

Playbook

Playbook はインフラをデプロイ・設定するための強力なツールです。詳しくは 公式ドキュメント を読んでください。以下は全ての Arch Linux ノードでシステムアップグレードを実行する例です。まず YAML 形式の playbook ファイルを作成します (インデントは空白2つです):

syu.yml
---
- name: All hosts up-to-date
  hosts: control managed
  become: yes
  
  tasks:
    - name: full system upgrade
      pacman:
        update_cache: yes
        upgrade: yes

そして playbook スクリプトを実行:

# ansible-playbook --ask-become-pass syu.yml

Vault

vault を使うことで機密データを playbook などに暗号化された状態で保存することができます。vault のパスワードはファイルに平文で保存できます。echo myvaultpassword > vault_pass.txt で作成して、以下のように Ansible で使うことが可能です:

# ansible-playbook site.yml --vault-id vault_pass.txt

varname という名前の変数の中身 varcontent を暗号化するには、以下のコマンドを使用します:

# ansible-vault encrypt_string --vault-id vault_pass.txt varcontent -n varname

playbook に挿入できる暗号化された変数が直接出力されます。暗号化された変数は YAML ファイルの中で他の変数と一緒に混ぜて使うことができます:

notsecret: myvalue
mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          3462
other_plain_text: othervalue

Tips and tricks

ユーザーアカウントの作成

Ansible はユーザーアカウントを管理することができ、新しいアカウントを作成することもできます。user モジュール を使うことで playbook でアカウントを作成できます。任意でユーザーのパスワードを設定する password 引数が使えます。モジュールに指定するときパスワードはハッシュ化する必要があります。ハッシュフィルタ を使うことで Ansible の中でハッシュ化することが可能です:

- user:
    name: madhead
    password: "{{ 'user_password' | password_hash('sha512', 'permsalt') }}"
    shell: /usr/bin/nologin
ヒント: The salt should be fixed and explicitely supplied as a second parameter of the hash function for the operation to be indempotent (can be repeated without changing the state of the system).

ユーザーアカウントを作成するときは vault を使ってパスワードを暗号化することが推奨されています。#Vault を見てください。ただし、暗号化された変数は直接パイプで渡すことができないため、先に別の変数に渡してからパイプで渡す必要があります。

また、ハッシュ化は Ansible の外で行うことも可能です。以下のコマンドは user_password を MD5 と SHA512 でハッシュ化した値を返します:

$ openssl passwd -1 user_password

Python の場所を Ansible に指定する

Ansible は管理対象のマシンに Python を必要とします。デフォルトでは Ansible はリモートシステム上の /usr/bin/python が 2.X あるいは 3.X バージョンの Python (特に 2.6 以上) だと想定しています。

使用するモジュールが Python 2 を必要とする場合、Ansible のインベントリファイルで ansible_python_interpreter 変数を設定して Python 2 の場所を Ansible に指定する必要があります。以下のようにホストグループを使って設定できます:

Inventory file
[archlinux]
server1
server2

[debian]
server3

[archlinux:vars]
ansible_python_interpreter=/usr/bin/python2

Python の設定に関する詳細は [1], [2], [3] にあります。

参照