2017-09-13 12 views
0

私はKVMをプロビジョニングするために自分のプレイブックにホストのリストをロードしようとしています。私はhosts.ymlのこれをオフにする必要があります。なぜなら、別のプレイブックがホストを受け取り、接続したらそれらに接続するからです。ハッシュで複数の要素を処理する可能性があります

この私のhosts.yml:

--- 
- hosts: kvm 
    tasks: 
    - name: Get a list of vm's to create 
    include_vars: 
     file: "../hosts.yml" 

    - name: Verify the host list 
    debug: var=dcos 
    when: dcos is defined 

    - name: Provision Volume Groups 
    lvol: 
     vg: vg01 
     lv: "{{ item.value.hosts }}" 
     size: "{{ item.value.vars.lv_size }}" 
    with_dict: "{{ dcos }}" 

:私はこの脚本はDCOSホストに対応した仮想マシンごとに論理ボリュームを作成するために実行し、単一のKVM上だから、

kvm: 
    hosts: 
    kvm01 
dcos: 
    dcos-bootstrap: 
    hosts: 
     dcos-bootstrap 
    vars: 
     lv_size: "10g" 

    dcos-masters: 
    hosts: 
     dcos-master-1 
    vars: 
     lv_size: "50g" 

    dcos-agents: 
    hosts: 
     dcos-agent-1 
     dcos-agent-2 
    vars: 
     lv_size: "50g" 

これは、グループに複数のホストを含​​めるまで正常に動作します。私は他のループを試しましたが、私はどのように続けるか分かりません。グループ内の各ホストで作業中にハッシュを反復処理するにはどうすればよいですか?

答えて

0

あなたは既にAnabilitiesが提供しているものを改革しようとします。

これは人生のAnsbileの方法です:

は、インベントリファイルdcos.iniであなたのホストおよびグループを定義します。

[dcos-bootstraps] 
dcos-bootstrap 

[dcos-masters] 
dcos-master-1 

[dcos-agents] 
dcos-agent-1 
dcos-agent-2 

[dcos:children] 
dcos-bootstraps 
dcos-masters 
dcos-agents 

次にあなたがグループ変数でグループパラメータをカスタマイズします。 groups_vars/dcos-bootstraps.yml

ブートストラップパラメータ:group_vars/dcos-masters.yml

--- 
lv_size: 10g 

マスターズパラメータ:group_vars/dcos-agents.yml

--- 
lv_size: 50g 

エージェントパラメータ:

--- 
lv_size: 50g 

そして、あなたのプレイブックは非常に簡単になる:

--- 
- hosts: dcos 
    tasks: 
    - name: Provision Volume Groups 
     lvol: 
     vg: vg01 
     lv: "{{ inventory_hostname }}" 
     size: "{{ lv_size }}" 

これを実行すると、各ホストはホストのグループメンバーシップに基づいてlv_sizeパラメータを取得します。

+0

申し訳ありませんが、私の質問は明確ではなかった場合:ここでは、絵を完成させることです。私は各dcosホスト上に論理ボリュームを作成しようとしていません - 私はdcosホスト名に対応する単一のマシン(KVM)上に論理ボリュームを作成しようとしています。私は私の意図をより明確にするために質問を更新しました。 –

0

まず、間違ったデータがあると思われます。 あなたのhostsがリストになりたい場合は、あなたがそれを行う必要があります

kvm: 
    hosts: 
    kvm01 
dcos: 
    dcos-bootstrap: 
    hosts: 
     - dcos-bootstrap 
    vars: 
     lv_size: "10g" 

    dcos-masters: 
    hosts: 
     - dcos-master-1 
    vars: 
     lv_size: "50g" 

    dcos-agents: 
    hosts: 
     - dcos-agent-1 
     - dcos-agent-2 
    vars: 
     lv_size: "50g" 

注意ハイフン。

そして、あなたの質問に:あなたは、ループ内の「グループ」の名前(のようなdcos-bootstrapなど)を使用しない場合、あなたはwith_subelementsを使用することができます。

- name: Provision Volume Groups 
    lvol: 
     vg: vg01 
     lv: "{{ item.1 }}" 
     size: "{{ item.0.vars.lv_size }}" 
    with_subelements: 
     - "{{ dcos }}" 
     - hosts 
+0

ホストファイルをリストにすると、ループの問題は解決されますが、ホストファイルとしての使用は中断されます。私が不能なプレイブック-i hosts.yml site.ymlを実行すると、私はこれをdcos上に取得します。このファイルをhostsファイルとして使用する必要があります。 –

+0

元のファイルは、偶然にインベントリファイルとして機能します。間違いなくあなたの環境をリファクタリングする必要があります。 –

+0

偶然ではありませんでした。私は自分のホスト情報を2度入力する必要はありません。ホストはすでにホストファイルにあります...なぜそのファイルを使用しないのですか? –

1

私はそうAnsibleに新たなんです私は本当に私が望んでいたことを達成する方法がわからなかった。私は最初、ホストファイルを自分自身で解析しようとしましたが、Anipalがこれを私のためにしていることは分かりませんでした。今私は知っている...

すべてのホストとグループのデータは、host_varsとグループに格納されています。私はそうのようにこれを使用何をするために必要なすべて:INIが働いたとYAMLがなかったので

vars: 
    dcoshosts: "{{ groups['dcos'] }}" 
tasks: 
    - name: List groups 
    debug: 
     msg: "{{ groups }}" 

    - name: Get All DCOS hosts 
    debug: 
     msg: "Host: {{ item }}" 
    with_items: 
     - "{{ dcoshosts }}" 

    - name: Provision Volume Groups 
    lvol: 
     vg: vg01 
     lv: "{{ item }}" 
     size: "{{ hostvars[item].lv_size }}" 
    with_items: "{{ dcoshosts }}" 

は私の代わりにYAMLのhosts.iniファイルを使用して終了しました。助けをみんなに

[dcos-masters] 
dcos-master-1 
dcos-master-2 

[dcos-masters:vars] 
lv_size="50g" 

[dcos-agents] 
dcos-agent-1 
dcos-agent-2 

[dcos-agents:vars] 
lv_size="50g" 

[dcos-bootstraps] 
dcos-bootstrap 

[dcos-bootstraps:vars] 
lv_size="10g" 

[dcos:children] 
dcos-masters 
dcos-agents 
dcos-bootstraps 

おかげで、私の解決策に私をプッシュ:)

関連する問題