「Ansible」の版間の差分
(翻訳) |
(同期) |
||
7行目: | 7行目: | ||
== インストール == |
== インストール == |
||
− | 制御マシン (サーバーあるいはマスター) に {{Pkg|ansible}} パッケージを[[インストール]]してください。 |
+ | 制御マシン (サーバーあるいはマスター) に {{Pkg|ansible}} パッケージを[[インストール]]してください。{{Pkg|python}} も必要です (Python バージョン 2.6, 2.7, 3.5 以上がサポートされています)。 |
− | 自動デプロイや設定作業を適用したい管理マシン (クライアントあるいはスレーブ) には |
+ | 自動デプロイや設定作業を適用したい管理マシン (クライアントあるいはスレーブ) には通信手段 (通常は [[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 |
|
− | + | 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]] を必要とします |
+ | 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 |
+ | * [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
ユーザーアカウントを作成するときは 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] にあります。