2016-05-27 6 views
1

ec2インベントリ情報のリストから情報のサブセットをフィルタリングしようとしています。この場合、特定の条件に一致するサブネットのリスト:不可能条件付き一致

- name: Get the VPC ID 
    ec2_vpc_subnet_facts: 
    region: "{{ aws_region }}" 
    register: subnet_facts 

- debug: "var=subnet_facts.subnets" 

- debug: "var={{ item }}" 
    with_items: "{{ subnet_facts.subnets }}" 
    when: "'Public Subnet' in item.tags.Name" 
    register: public_subnets 

残念ながら、私はエラーを取得しています:

"The conditional check ''Public Subnet' in item.tags.Name' failed. The error was: error while evaluating conditional ('Public Subnet' in item.tags.Name): 'item' is undefined" 

が、これはAに基づいて情報のリストをフィルタリングするための最良の方法です条件付き?

私はAnatile Filtersを見ましたが、私のニーズに合わないようでした。

答えて

1

私はまったく同じ問題を抱えていましたが、私はそれを解決するために本当に小さなプラグインを作成しました。

from jinja2.utils import soft_unicode 

''' 
USAGE: 
- debug: 
    msg: "{{ vpc.subnets | get_public_subnets_ids('Type','Public') }}" 
''' 

class FilterModule(object): 
    def filters(self): 
     return { 
      'get_public_subnets_ids': get_public_subnets_ids, 
     } 

def get_public_subnets_ids(list, tag_key, tag_value): 
    subnets_ids = [] 
    for item in list: 
     for key, value in item['resource_tags'].iteritems(): 
      if key == tag_key and value == tag_value: 
       subnets_ids.append(item['id']) 

    return subnets_ids 

は、あなたがこのプラグインのお手伝いをhere 希望の詳細な使用方法を見つけることができます:ここではそのプラグインのコードがあります。

+0

応答とリンク(私が読んでくれたこと)ありがとう。私の唯一の質問は構成です。あなたのサンプルに基づいてアクションプラグインを作成し、私のanipal.cfgファイルに 'action_plugins =〜/ ansible/playbooks/action_plugins /'を追加しましたが、テンプレート文字列中にテンプレートエラーが発生しました: 'get_public_subnets_ids'という名前のフィルタはありません。プラグイン/機能を認識できるように、私はどの設定ステップを逃しましたか? –

+0

それを見て、私は注意を払っていませんでした。それはActionModuleではなく、FilterModuleとして定義されていました。それは、action_pluginsディレクトリではなくfilter_pluginsディレクトリに移動する必要があります。 –

+0

うまくいけばうれしいです。 –

関連する問題