Ansible の基本 の編集履歴

nishikawa が 2016-04-05 00:48 に編集

--- Ver.5	2016-01-29 01:35:54+09:00
+++ Ver.6	2016-04-05 00:48:13+09:00
@@ -72,7 +72,7 @@
 
 以下の playbook では、構成管理ツール界の hello, world にあたる、Apache のインストールを行っています。
 
-```yaml
+```yaml linenums:
 ---
 - hosts: all
   gather_facts: no
@@ -107,7 +107,7 @@
 
 5行目以降が、実際にゲスト上で実行されるタスクの一覧になります。再掲します。
 
-```yaml
+```yaml linenums:5
   tasks:
     - name: be sure httpd is installed
       yum: name=httpd state=installed

nishikawa が 2016-01-29 01:35 に編集

--- Ver.4	2016-01-29 00:55:46+09:00
+++ Ver.5	2016-01-29 01:35:54+09:00
@@ -31,6 +31,12 @@
     $ pip install ansible
 
 必要に応じて `sudo` をつけてください。
+
+本稿では以下のバージョンを対象としています:
+
+    $ ansible --version
+    ansible 2.0.0.2
+
 
 # 実行対象の準備
 
@@ -70,7 +76,7 @@
 ---
 - hosts: all
   gather_facts: no
-  sudo: yes
+  become: yes
   tasks:
     - name: be sure httpd is installed
       yum: name=httpd state=installed
@@ -87,15 +93,17 @@
       service: name=httpd state=restarted
 ```
 
-1行目の `---` は YAML 文書の区切りを表します。[^1] 上記の `hosts` から `tasks` のような定義を1ファイル内に複数書きたいとき、それらを `---` で区切るような形で利用します。
+1行目の `---` は YAML 文書の区切りを表します。[^2] 上記の `hosts` から `tasks` のような定義を1ファイル内に複数書きたいとき、それらを `---` で区切るような形で利用します。
 
-[^1]: YAML では文書の前にディレクティブを書くことができることになっており、 `---` はディレクティブと文書、および文書と文書を区切るための記号です。最初の文書を始める際にも必要なので、1 行目に書いています。詳しくは [YAML のドキュメント](http://www.yaml.org/spec/1.2/spec.html#id2760395) を参照してください。
+[^2]: YAML では文書の前にディレクティブを書くことができることになっており、 `---` はディレクティブと文書、および文書と文書を区切るための記号です。最初の文書を始める際にも必要なので、1 行目に書いています。詳しくは [YAML のドキュメント](http://www.yaml.org/spec/1.2/spec.html#id2760395) を参照してください。
 
 2行目の `hosts` は、イベントリファイルに定義されているゲストのうち、どのホストを対象とするかを指定する項目です。ここでは `all` としているので、全ゲストが対象となります。
 
 3行目の `gather_facts` は、playbook の実行時にゲストの情報を収拾するかどうかを指定する項目です。デフォルトは「収拾する」です。ここでは `no` としており、「収拾しない」ようにしています。`gather_facts` による情報収集はそれなりに時間がかかるので、不要な場合には `no` としておくのがよいでしょう。
 
-4行目の `sudo` は、各タスクを `sudo` コマンドを通して実行するかどうかを指定します。サーバーのセットアップ作業では、パッケージのインストールや設定ファイルの変更など、`sudo` コマンドを使うことが多くなります。ここでは `yes` を指定し、各タスクを `sudo` コマンドを通して実行するようにしています。
+4行目の `become` は、各タスクをホストとは別のアカウントで実行するかどうかを指定します。要は `sudo` コマンドを使って `root` としてコマンドを実行したい (など) に指定します。[^3] サーバーのセットアップ作業では、パッケージのインストールや設定ファイルの変更など、`sudo` コマンドを使うことが多くなります。ここでは `yes` を指定し、各タスクを `sudo` コマンドを通して実行するようにしています。
+
+[^3]: 2.0 から `sudo` は非推奨となり、`become` が推奨されるようになりました。`sudo` が `sudo` コマンドに直接依存していたのに対し、`become` では `become_method` を用いてバックエンドのコマンドを指定することができるようになっています。まぁ話は分かるんですが、`become: yes` より `sudo: yes` のほうが分かりやすいと、私は思いますけどね。ちなみに [sudo も残ってる](http://docs.ansible.com/ansible/become.html#sudo-and-su-still-work) ので、使おうと思えば使えます。
 
 5行目以降が、実際にゲスト上で実行されるタスクの一覧になります。再掲します。
 

nishikawa が 2016-01-29 00:55 に編集

--- Ver.3	2016-01-29 00:51:21+09:00
+++ Ver.4	2016-01-29 00:55:46+09:00
@@ -124,7 +124,7 @@
 
 のような記述があれば、playbook 上で定義された変数 `document_root` によって `{{ document_root }}` の部分が置き換えられたうえで、ゲストに転送されます。
 
-`notify: restart httpd` は、後述の `handlers` に対する命令です。「このタスク (template) によってゲストに変更が生じた場合、`restart httpd` という名前のついた handler を実行せよ」という意味になります。つまり、「httpd.conf に変更があったら httpd を再起動せよ」ということになります。
+`notify: restart httpd` は、後述の `handlers` に対する命令です。「このタスク (be sure httpd is configured) によってゲストに変更が生じた場合、`restart httpd` という名前のついた handler を実行せよ」という意味になります。つまり、「httpd.conf に変更があったら httpd を再起動せよ」ということになります。
 
 3番目のタスクでは、httpd サービスが OS 起動後に自動起動されるよう、サービスを有効化しています。
 

nishikawa が 2016-01-29 00:51 に編集

--- Ver.2	2016-01-29 00:49:46+09:00
+++ Ver.3	2016-01-29 00:51:21+09:00
@@ -89,7 +89,7 @@
 
 1行目の `---` は YAML 文書の区切りを表します。[^1] 上記の `hosts` から `tasks` のような定義を1ファイル内に複数書きたいとき、それらを `---` で区切るような形で利用します。
 
-[^1]: YAML では文書の前にディレクティブを書くことができることになっており、ディレクティブと文書、および文書と文書を区切るための記号です。最初の文書を始める際にも必要なので、1 行目に書いています。詳しくは [YAML のドキュメント](http://www.yaml.org/spec/1.2/spec.html#id2760395) を参照してください。
+[^1]: YAML では文書の前にディレクティブを書くことができることになっており、 `---` はディレクティブと文書、および文書と文書を区切るための記号です。最初の文書を始める際にも必要なので、1 行目に書いています。詳しくは [YAML のドキュメント](http://www.yaml.org/spec/1.2/spec.html#id2760395) を参照してください。
 
 2行目の `hosts` は、イベントリファイルに定義されているゲストのうち、どのホストを対象とするかを指定する項目です。ここでは `all` としているので、全ゲストが対象となります。
 

nishikawa が 2016-01-29 00:49 に編集

--- Ver.1	2015-08-29 16:50:05+09:00
+++ Ver.2	2016-01-29 00:49:46+09:00
@@ -87,7 +87,9 @@
       service: name=httpd state=restarted
 ```
 
-1行目の `---` は playbook の区切りです。慣習として1行目には必ず書きます。上記の `hosts` から `tasks` のような定義を1ファイル内に複数書きたいとき、それらを `---` で区切るような形で利用します。
+1行目の `---` は YAML 文書の区切りを表します。[^1] 上記の `hosts` から `tasks` のような定義を1ファイル内に複数書きたいとき、それらを `---` で区切るような形で利用します。
+
+[^1]: YAML では文書の前にディレクティブを書くことができることになっており、ディレクティブと文書、および文書と文書を区切るための記号です。最初の文書を始める際にも必要なので、1 行目に書いています。詳しくは [YAML のドキュメント](http://www.yaml.org/spec/1.2/spec.html#id2760395) を参照してください。
 
 2行目の `hosts` は、イベントリファイルに定義されているゲストのうち、どのホストを対象とするかを指定する項目です。ここでは `all` としているので、全ゲストが対象となります。
 
@@ -112,9 +114,9 @@
 
 最初のタスクでは、`yum` モジュールを使って httpd パッケージをインストールしています。期待する状態は `state=installed` であり、すでに httpd がインストールされていれば何もしません。
 
-2番目のタスクでは、ホスト上にある httpd.conf.j2 をゲストの /etc/httpd/conf/httpd.conf にコピーしています。`backup=yes` としており、転送前のファイルのバックアップがゲスト上に保存されます (同じフォルダ上に、日付付きのファイル名として保存されます)。
+2番目のタスクでは、ホスト上にある httpd.conf.j2 をゲストの /etc/httpd/conf/httpd.conf にアップロードしています。`backup=yes` としており、転送前のファイルのバックアップがゲスト上に保存されます (同じフォルダ上に、日付付きのファイル名として保存されます)。
 
-モジュールの名前が `copy` などではなく `template` となっているのは、転送元のファイルはあくまでテンプレートであり、テンプレートから生成したファイルを転送しているからです。Ansible はテンプレートエンジンとして [Jinja2](http://jinja.pocoo.org/) を採用しています。例えば httpd.conf.j2 に
+モジュールの名前が `copy` などではなく `template` となっているのは、転送元のファイルはあくまでテンプレートであり、テンプレートから生成したファイルをアップロードしているからです。Ansible はテンプレートエンジンとして [Jinja2](http://jinja.pocoo.org/) を採用しています。例えば httpd.conf.j2 に
 
     ...
     DocumentRoot {{ document_root }}

nishikawa が 2015-08-29 16:50 に投稿