2017-01-16 4 views
4

私はAnsibleロールNFSを使用していた時に質問があります。文字列を動的に構築してください。

NFSの役割: https://github.com/geerlingguy/ansible-role-nfs

私の状況はこのようなものです:私たちは、NFSクライアントであるVMのリストを作成します。 NFSサーバー上でアクセス制御が必要です。そこで、上記の役割に従って、Ansibleのインベントリに「nfs_exports」という名前のリストを設定しました。

一部のVMは、完全なワークロードの後に​​終了され、廃止されます。 NFSサーバーの設定を更新するためのNFSロールを含むプレイブックを再実行します。したがって、ホストグループ 'client_group'があり、ホスト数は可変です。 1 VMがある場合

、nfs_exportsリストは次のようになります。

nfs_clients: "{{ groups['client_group'] }}" 
nfs_exports: 
- "{{ nfs_dirs[0] }} {{ nfs_clients[0] }}(rw)" 
- "{{ nfs_dirs[1] }} {{ nfs_clients[0] }}(ro)" 

をそして2つのVMがある場合

nfs_clients: "{{ groups['client_group'] }}" 
nfs_exports: 
- "{{ nfs_dirs[0] }} {{ nfs_clients[0] }}(rw) {{ nfs_clients[1] }}(rw)" 
- "{{ nfs_dirs[1] }} {{ nfs_clients[0] }}(ro) {{ nfs_clients[1] }}(ro)" 

三台のVMがある場合

nfs_clients: "{{ groups['client_group'] }}" 
nfs_exports: 
- "{{ nfs_dirs[0] }} {{ nfs_clients[0] }}(rw) {{ nfs_clients[1] }}(rw) {{ nfs_clients[2] }}(rw)" 
- "{{ nfs_dirs[1] }} {{ nfs_clients[0] }}(ro) {{ nfs_clients[1] }}(ro) {{ nfs_clients[2] }}(ro)" 

これは私たちの場合は良くありません。 VMの量が変わるたびに、手動で 'nfs_exports'を変更する必要があるためです。

リスト 'nfs_exports'に動的に文字列を作成する必要があります。したがって、VMが1つの場合、 'nfs_exports'には1つのクライアントしか存在しません。複数のVMがある場合、すべてのVMを自動的に 'nfs_exports'に含める必要があります。

'nfs_exports'に文字列を作成する方法については誰でも解決できますが、 'client_group'が変更されたときに手動で 'nfs_exports'を変更することはできませんか?ここで

答えて

4

あなたが行く:

- hosts: localhost 
    gather_facts: no 
    vars: 
    nfs_clients: 
     - server1 
     - server2 
     - server3 
    nfs_dirs: 
     - path1 
     - path2 
    nfs_exports: 
     - "{{ nfs_dirs[0] }} {{ ' '.join(nfs_clients | map('regex_replace','$','(rw)')) }}" 
     - "{{ nfs_dirs[1] }} {{ ' '.join(nfs_clients | map('regex_replace','$','(ro)')) }}" 
    tasks: 
    - debug: var=nfs_exports 

出力:

ok: [localhost] => { 
    "nfs_exports": [ 
     "path1 server1(rw) server2(rw) server3(rw)", 
     "path2 server1(ro) server2(ro) server3(ro)" 
    ] 
} 
+0

私はあなたのコードを確認しても、それが正常に動作します。どうもありがとうございます! –

関連する問題