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

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

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

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

Ansible Tutorial

Ansible Tutorialは、Pythonで記述されたサーバの設定・管理を自動化させるためのツールです。サーバからクライアントへ直接命令し結果を取得するため、各クライアントでAnsible Tutorialをインストールが不要になります。

Q&A

解決済

1回答

593閲覧

Playbookのwhenが効いていない(Ansible_Tower/VMware)

YONGJUN-PE

総合スコア3

Ansible

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

Ansible Tutorial

Ansible Tutorialは、Pythonで記述されたサーバの設定・管理を自動化させるためのツールです。サーバからクライアントへ直接命令し結果を取得するため、各クライアントでAnsible Tutorialをインストールが不要になります。

0グッド

0クリップ

投稿2021/04/05 07:02

編集2021/04/05 07:13

前提・実現したいこと

下記リンクに挑戦いたしましたが、httpd-inst.ymlの実行にて
タグのついていない既存の仮想マシンにも
httpdインストールされ、サービス起動して、ポートあいてしまい、
whenで記載した箇所が効いていないようです。

ユースケースから学ぶ、Ansible AutomationによるVMware環境の自動化
Ansible Tower による VMware vSphere 環境の自動化 Part5 (仮想マシンの作成編)

どう修正したらタグのついていない仮想マシンには実行されないようになりますでしょうか?

また、playbook中の変数ansible_nodenameには何を指定したらよいでしょうか?
実在する仮想マシンの名前を何か指定しないとエラーになってしまいますが、
vmware_guest_infoで電源ON状態の仮想マシン分だけ実行されますが、
取得される情報がすべて指定した仮想マシンだけのものになり、
ここではすべての仮想マシンの情報が取得されなくてはいけないのではと考えております。

該当のソースコード

--- - name: Get VM Tag & httpd install & Firewall (80/443) config hosts: all gather_facts: yes tasks: - name: Confirm VM Tag & Register to variable vmware_guest_info: hostname: "{{lookup('env', 'VMWARE_HOST')}}" username: "{{lookup('env', 'VMWARE_USER')}}" password: "{{lookup('env', 'VMWARE_PASSWORD')}}" validate_certs: False datacenter: DC name: "{{ansible_nodename}}" tags: yes register: vm_facts delegate_to: localhost - name: httpd install yum: name: httpd state: latest when: vm_facts.instance.tags == ["New_VM"] - name: httpd running & Enabled service: name: httpd state: started enabled: yes when: vm_facts.instance.tags == ["New_VM"] - name: Firewall Setting 80/443 firewalld: service: "{{item}}" zone: public state: enabled permanent: true immediate: true with_items: - http - https when: vm_facts.instance.tags == ["New_VM"]

試したこと

インベントリをlocalhostにしてみたり、
変数ansible_nodenameを指定しないでみたくらいです。
httpdをインストールしたくない仮想マシンにはタグがついていない、また、
httpdをインストールしたい仮想マシンにはタグがついていることは確認済みです。

補足情報(FW/ツールのバージョンなど)

ESXi6.5
VCSA6.5
Ansible2.9.7
仮想マシンCent8

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

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

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

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

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

guest

回答1

0

ベストアンサー

vm_facts.instance.tagsをdebugで表示した時の中身はなにになっていますでしょうか?

playbook中の変数ansible_nodenameには何を指定したらよいでしょうか?

リファレンスを確認した限りでは、指定したVMの名前みたいですが、このパラメータはuuidとmoidを指定していなければ必須になるようです。

投稿2021/04/05 13:44

comefigo

総合スコア1045

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

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

YONGJUN-PE

2021/04/06 01:53

このたびはご回答いただきまして、誠にありがとうございました。 debugしてみた結果、whenはちゃんと効いており、 自分の理解が正しくなかったことがわかりました。 変数ansible_nodenameをタグなしの仮想マシンに指定した場合、 vm_facts.instance.tagsに何も値がはいってないので、 後続の処理がタグ付きの仮想マシンにも、タグなしの仮想マシンにも 実行されないことが確認できました。 また、変数ansible_nodenameをタグ付きの仮想マシンに指定した場合、 vm_facts.instance.tagsで指定のタグ名がとれていたので、 後続の処理がタグ付きの仮想マシンにも、タグなしの仮想マシンにも 実行されることが確認できました。 whenはちゃんと効いていました。 変数ansible_nodenameの指定が正しくないようです。 [vmware_guest_info モジュールを使って自分自身のタグ情報を取得](https://rheb.hatenablog.com/entry/ansible_tower_vmware_part5) ができるものを指定しないといけないみたいです。 そのためにはどういう指定をしないといけないのかが不明です。 実現したいことははまだ実現できていませんが、 タイトル「Playbookのwhenが効いていない(Ansible_Tower/VMware)」としては解決ですので、 本件は一旦クローズし、残りの疑問は、もうちょっと前提を明確にした上で 新たにトピックたてさせていただこうと思います。 こんな質問にもご回答いただきまして 誠にありがとうございました。
comefigo

2021/04/06 05:03

いえいえ。 whenについて無事に解決できてよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問