質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

3回答

3033閲覧

Ansibleで各サーバのIP、ホスト名を自動取得しApacheの設定ファイルに追記する方法

papachiropa

総合スコア14

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2020/06/26 04:27

編集2020/06/26 06:54

Apache2.4のインストール、設定、起動を下記のような内容のplaybookで実行しようとしております。
対象サーバはA(host1:192.168.100.251)とB(host3:192.168.100.253)。
※Ansible操作端末も対象サーバもCentOS7です。

YAML

1- hosts: tomcat 2 gather_facts: yes 3 remote_user: root 4 become: true 5 tasks: 6 - name: install Apache 7 yum: 8 name: httpd 9 10 - name: set httpd.conf 11 template: 12 src: /tmp/httpd.conf.j2 13 dest: /etc/httpd/conf/httpd.conf 14 15 - name: run httpd 16 systemd: 17 name: httpd 18 state: started 19 enabled: yes

Apacheの設定ファイルであるhttpd.confファイルで、
サーバA側には「Listen」の項目に「192.168.100.251:80」、「ServerName」の項目に「host1」、
サーバB側には「Listen」の項目に「192.168.100.253:80」、「ServerName」の項目に「host3」を
それぞれ記述したいです。ただし手動での追記ではなくAnsibleを活かしてIPとホスト名をサーバから
それぞれ自動取得しての追記を行いたいのですが、どのようにplaybookを作成していいか分からない為、
ご教示頂きたいです。宜しくお願い致します。

現在のターゲットホストのIPアドレスを取得する
↑を見ると{{ansible_eth0.ipv4.address}} {{inventory_hostname}}辺りを使うのかなと思いますが
どのように組み込むのか分からないです。他にも方法が無いか現在調査中です。

~追記~
インベントリファイルにホスト名の記載が出来ていなかった為、
{{inventory_hostname}}で指定してもホスト名が表示されずIPが追記されてしまったことが分かりました。
すみませんでした。インベントリファイルにホスト名を追記するとhttpd.confの編集は成功しました。
しかし、最後の起動で失敗してしまいます。エラーメッセージは以下です。

ERROR

1[root@hoge tmp]# ansible-playbook Apache.yml -i hosts 2SSH password: 3 4PLAY [tomcat] ************************************************************************************************************************************* 5 6TASK [Gathering Facts] **************************************************************************************************************************** 7ok: [host1] 8ok: [host3] 9 10TASK [apache : install Apache] ******************************************************************************************************************** 11ok: [host3] 12ok: [host1] 13 14TASK [apache : set httpd.conf] ******************************************************************************************************************** 15changed: [host1] 16changed: [host3] 17 18TASK [apache : run httpd] ************************************************************************************************************************* 19fatal: [host1]: FAILED! => {"changed": false, "msg": "Unable to start service httpd: Job for httpd.service failed because the control process exited with error code. See \"systemctl status httpd.service\" and \"journalctl -xe\" for details.\n"} 20fatal: [host3]: FAILED! => {"changed": false, "msg": "Unable to start service httpd: Job for httpd.service failed because the control process exited with error code. See \"systemctl status httpd.service\" and \"journalctl -xe\" for details.\n"} 21 to retry, use: --limit @/tmp/Apache.retry 22 23PLAY RECAP **************************************************************************************************************************************** 24host1 : ok=3 changed=1 unreachable=0 failed=1 25host3 : ok=3 changed=1 unreachable=0 failed=1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

2つ目の修正後のエラーについては、エラーメッセージにあるようにコマンドを実行してみると原因がわかるかもしれません。

# systemctl status httpd.service # journalctl -xe

投稿2020/06/26 07:10

SugiTK

総合スコア495

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papachiropa

2020/06/26 08:17

コマンドを試したところ、j2ファイルの記述に一部インデントのズレがあったことが分かりました。 修正したら起動しました。ありがとうございました。
guest

0

配付するsrcファイルにて置換対象変数を定義すれば、配布時に変数が展開されます

/tmp/httpd.conf.j2

: Listen {{ansible_eth0.ipv4.address}}:80 :

など。

以下はplaybook側で定義した変数を配布するtemplateファイルに代入してる例ですが参考になるかと思います
https://www.scsk.jp/product/oss/tec_guide/ansible/1_ansible3_1.html

投稿2020/06/26 05:13

編集2020/06/26 05:20
aAss

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papachiropa

2020/06/26 06:08

ありがとうございます。 httpd.conf.j2に Listen "{{ ansible_eth0.ipv4.address }}" ServerName "{{ inventory_hostname }}" と書いて実行した結果、 両方の項目にIPアドレスが追記されておりました。 一度頂いたURLを参考に修正してみます。
guest

0

/tmp/httpd.conf.j2 の該当箇所に {{ }} で書きます。ぜひ試してみてください :)

投稿2020/06/26 04:37

SugiTK

総合スコア495

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papachiropa

2020/06/26 06:06

ありがとうございます。 httpd.conf.j2に Listen "{{ ansible_eth0.ipv4.address }}" ServerName "{{ inventory_hostname }}" と書いて実行した結果、 両方の項目にIPアドレスが追記されておりました。 ServerNameにはホスト名を入れたいのですが、どうしてIPが入ってしまうのでしょうか…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問