내 의견에 언급했듯이 첫 번째 문제는 set_fact
블록의 구문이 올바르지 않다는 것입니다. 이 경우 :
"{{item.0}}:{{item.1}}"
이 아닌 하나의 문자열이 있습니다. 보이도록 수정해야합니다.
- name: set variables
set_fact:
"{{item.0}}": "{{item.1}}"
with_together:
- "{{ variable_keys.stdout_lines }}"
- "{{ variable_values.stdout_lines }}"
그러나 문제의 절반 정도입니다. sed
표현식은 bash 함수 정의를 포함하기 때문에 구문 적으로 유효하지 않은 출력을 생성 할 수 있습니다. 즉, 내가 내 로컬 환경에서 첫 번째 명령을 실행하면, 출력은 다음과 같이 등 bash는 완료, 자식 프롬프트에 대한 쉘 기능의 모든 cruft에 포함 :
scl()
{
local CMD
if [ "$CMD"
eval "module [email protected]";
else
/usr/bin/scl "[email protected]";
fi
}
단지 ansible 깰 것 :
failed: [localhost] (item=[u"'", u"'"]) => {"changed": false, "failed": true, "item": ["'", "'"], "msg": "The variable name ''' is not valid. Variables must start with a letter or underscore character, and contain only letters, numbers and underscores."}
콘텐츠를 필터링해야합니다.
FOO=bar
그리고 내 작전에 내가있는 경우, 위의 후 :
- name: Source Env Properties
shell: . ./myvars.sh && (set -a posix; set| sed -n '/^[A-Z]/ s,=.*,,p')
register: variable_keys
- shell: . ./myvars.sh && (set -a posix; set| sed -n '/^[A-Z]/ s,^.*=,,p')
register: variable_values
- name: set variables
set_fact:
"{{item.0}}": "{{item.1}}"
with_together:
- "{{ variable_keys.stdout_lines }}"
- "{{ variable_values.stdout_lines }}"
내가 가지고있는 경우, myvars.sh
에서 :
- debug:
var: FOO
내가 출력으로 볼 수 나는 이것을 사용 :
ok: [localhost] => {
"FOO": "bar"
}
인디 치과로, 나는이 모든 것을 sed
와 함께 약해 버릴 것이고, 길 아래의 다른 문제를 일으킬지도 모른다라고 생각한다. 아마 이런 짓을 할 것이다 :
는
- name: Source Env Properties
shell: |
set -a
. ./myvars.sh
jq -n env
register: vars_raw
- set_fact:
shellvars: "{{ vars_raw.stdout|from_json }}"
- debug:
var: shellvars.FOO
이 JSON으로 사용할 수있는 모든 환경 변수를 내보낼 jq
를 사용하고 shellvars
변수에 결과를 할당합니다. set -a
은 myvars.sh
에 설정된 모든 변수가 환경으로 내보내 지도록 보장합니다.당신이 편리 jq
이없는 경우에는 python
을 사용할 수
- name: Source Env Properties
shell: |
set -a
. ./myvars.sh
python -c 'import json; import os; print(json.dumps(dict(os.environ)))'
register: vars_raw
- set_fact:
shellvars: "{{ vars_raw.stdout|from_json }}"
- debug:
var: shellvars.FOO
난 당신이 너무 많은 당신의'set_fact' 블록에서 인용 한 것 같아요. "{{item.0}}"시도 : "{{item.1}}"'? – larsks
@larsks 검색 결과가 없습니다. 내가 사실을 변수로 사용하려고 할 때까지 오류가 없습니다. –