2017-08-01 10 views
0

私はこれが本当にまっすぐなはずだと思っていますが、私は危険な文書やその他の答えをここに注いできました。作曲者のルーピングが不可能な仕事を必要とする

私がしたいのは、可能なコンポーザーオブジェクトを使用してcomposer requireステートメントで使用するコンポーザーパッケージの配列またはリストをセットアップすることです。

だから、私はモジュールを定義するので、のようなset factを持っている:

- name: Define modules to be required 
    set_fact: 
    modules: 
     - vendor1/package1 
     - vendor2/package2 
     - vendorN/packageN 

それは(それは甘いだろう簡単にアクセスして編集可能ですので、私は私のansibleプロジェクトのトップでこれを入れていますyamlファイルのパッケージをvarsとして単純に定義する方法を理解してから、set_factを使用してください)

これを念頭に置いて、私はプロジェクトで役割を持っています私がこれらのそれぞれを必要としたい作曲家の仕事で:

- name: "Require packages" 
    composer: 
    command: require 
    arguments: {{ modules_to_be_required }} 
    working_dir: "{{ app['directory'] }}" 

もともと、私はこれがそうのようwith_itemsを使用していた:

- name: "Require packages" 
    composer: 
    command: require 
    arguments: "{{ item }}" 
    working_dir: "{{ app['directory'] }}" 
    with_items 
    - vendor1/package1 
    - vendor2/package2 
    - vendorN/packageN 

これは動作しません。ただし、with_itemsの各反復が実行されるまでには、composer updateが実行されますが、時間がかかりすぎます。私にとっては、必要なパッケージのリストを空白で区切られた文字列に変換し、それを引数として渡す方が理にかなっています。私の研究では

私はjoinフィルタを文字列にリストを変換できることがわかったので、私はこれを試してみました:

- name: "Require packages" 
    composer: 
    command: require 
    arguments: {{ modules | join(" ") }} 
    working_dir: "{{ app['directory'] }}" 

しかし、これは私のYAML構文エラーを与える:

The offending line appears to be: 
command: require 
arguments: {{ modules | join(" ") }} 
      ^here 

私は"{{ modules | join(" ") }}"をラップしようとしましたが、かっこ内の引用符については怒鳴ります。

私は正しい方法でこのアイデアに近づいていますか、または答えに到達するためにどのような質問をする必要がありますか?どんな指導も高く評価されます。

答えて

1

あなたの結合フィルタは、単一引用符

arguments: "{{ modules | join(' ') }}" 

を使用するか、二重引用符

arguments: "{{ modules | join(\" \") }}" 

を逃れることができるか、参加のための変数と、二重のための単一引用符を使用することができます

arguments: '{{ modules | join(" ") }}' 
+0

これは素晴らしいです、詳細な説明に感謝します。 –

関連する問題