2017-06-19 3 views
3

私たちは多くの機会不足の役割のためにプライベートgit reposを持っています。レポホストは、たとえば、サイトからサイトに異なります私はgalaxyとrequires.ymlで変数置換を使用できますか?

  • サイト1はhttps://gitforsite1.ourdomain.com
  • サイト2は、私が欲しいものhttps://gitforsite2.ourdomain.com

を使用して使用する単一requirements.ymlのファイルを持っているし、正しいGitのレポを置換することです。

#!/bin/bash 
... 
if [ "$1" = "site1" ]; then 
    export REPO_ROOT="https://gitforsite1.ourdomain.com" 
fi 
if [ "$1" = "site2" ]; then 
    export REPO_ROOT="https://gitforsite2.ourdomain.com" 
fi 
... error checking if the value is not site1 or site2 ... 
# Then install the roles 
ansible-galaxy install -f -r config/requirements.yml -p roles 

、その後requirements.ymlにこの値を代入:私はこれを行うことが一つの方法は、bashスクリプトは、環境変数を設定することです

--- 

- src: {{ lookup('env', 'REPO_ROOT') }}/role1.git 
    name: role1 

- src: {{ lookup('env', 'REPO_ROOT') }}/role.git 
    name: role2 

このアプローチが与える:ファイル構造があることを示唆しているERROR! Unable to load data from the requirements fileを間違っている。 (それはアプローチが働くかもしれないし、私は構文が間違っているかもしれない)。

私は変数を設定することができますアプローチは、環境、コマンドライン、何でも良いです。また、これがサポートされていない場合は、実行時にファイルを書き直す必要がありますか?おそらくsedを使用していますか?

EDIT 1:requirements.ymlファイルが使用されている方法を示すために、上記のbashスクリプトの抜粋でansible-galaxy行を追加しました。私はこれが問題だと思う:ansible-galaxyは、group_vars/allまたは環境に含まれているかどうかにかかわらず、変数の置換を展開していません。 Python 2.7.10でAniableバージョン2.3.1.0を使用する。

EDIT 2:発見 in the docsansible.cfgに、別のGalaxyインスタンスを指すようにserverオプションがそうのような、そこにある:

[galaxy] 
server=https://gitforsite1.ourdomain.com 

ギャラクシーは、使用この設定を行いますしかしそれがなければなりませんそれはhttps://gitforsite1.ourdomain.com/apiを呼び出すため、完全なGalaxy Webアプリになります。それは私にも役に立たない。

+0

異なるサイトのインベントリの 'group_vars/all'ファイルに' REPO_ROOT'を入れてみませんか? – Jack

+0

Ansibleのバージョンは? 1.4以降では ' - src:" {{ansible_env.REPO_ROOT}}/role1.git "'を使うことができます。 – Deathgrip

+0

@Jackありがとう - いいアイデアですが、 'ansible-galaxy'はこれらを無視しているようです(投稿編集を参照)。 – ChalkBoard

答えて

1

{で始まる場合は、sourceに関連付けられたマッピングの値を引用する必要があります。ない場合はYAMLパーサではなく、スカラーのフロースタイルのマッピングとしてその値を試してみて、解析します:

- src: "{{ lookup('env', 'REPO_ROOT') }}/role1.git" 
    name: role1 

あなたがスカラーで単一引用符なし二重引用符、またバックスラッシュ(\)を持っているので、私は、スカラーの周りに二重引用符を使用しました。スカラーに一重引用符がない場合や、バックスラッシュがある場合は、一重引用符を使用することをお勧めします。両方のタイプの引用符を使用している場合は、単一引用符を使用し、任意の単一引用符を二重にしてください。内のスカラー。以下は、上記と同じようにロードします:あなたはそれをこのようにやった場合

- src: '{{ lookup(''env'', ''REPO_ROOT'') }}/role1.git' 
    name: role1 
+0

ありがとうございます - あなたの書式はyamlパーサのエラーを越えてしまいました(そしてあなたは正しい、2つの形式は同じ結果に等しい)が、変数置換は 'anagers-galaxy'によって拡張されていません。 – ChalkBoard

0

何:

#!/bin/bash 
... 
if [ "$1" = "site1" ]; then 
    export REPO_ROOT="https://gitforsite1.ourdomain.com" 
fi 
if [ "$1" = "site2" ]; then 
    export REPO_ROOT="https://gitforsite2.ourdomain.com" 
fi 
... error checking if the value is not site1 or site2 ... 
# Then install the roles 
ansible-galaxy install -f -r config/requirements.yml -p roles -s ${REPO_ROOT} 

をして、要件にこの値を代入します。yml:

--- 

- src: role1.git 
    name: role1 

- src: role.git 
    name: role2 
関連する問題