complex-args 양식을 사용하여 자유 양식 명령을 Ansible에 전달


9

프로그래밍 방식으로 생성 된 Ansible 플레이 북을 사용하고 있습니다. 일반적으로 플레이 북은 YAML이므로 간단합니다. 그러나 "간단한" key=value양식을 사용할 때 플레이 북 순수한 YAML 이 아니며shlex 구문 분석 가능한 양식이 포함 된 컨텐츠를 포함합니다 .

이 형식의 모호성을 피하기 위해 ( key=value명령에 대한 인수 또는 ansible에 대한 인수를 결합합니까?) 단일 형식으로 구문 분석 및 생성 해야합니다. -examples 저장소 .

이것은 다음 종류의 구문을 사용합니다.

action: module-name
args:
  key1: value1
  key2: value2

... 좋아요. 그러나, shell또는 command모듈 에이 양식을 사용하려고 할 때 ( 문서에 이름 free_form이 지정된 인수로 전달 된 실제 명령을 설명하는 )이 기능이 제대로 작동하지 않습니다.

action: shell
args:
  free_form: echo hello_world >/tmp/something
  creates: /tmp/something

호출되면 다음이 실행됩니다.

/bin/sh -c " free_form='echo hello_world >/tmp/something'  "

... 나는 달성하려는 것이 아닙니다.

순수한 YAML 구문을 사용하여 "자유 형식"명령을 수행하는 Ansible 모듈을 사용하는 올바른 방법은 무엇입니까?

답변:


5

짧은 답변 : 할 일이 사용하지 command, raw, script, 또는 shell모듈을. 명령을 "정상"인수로 받아들이는 자체 모듈을 작성하십시오.

긴 대답 :

대부분의 경우 다음을 수행 할 수 있습니다.

- shell: echo hello_world > /tmp/something
  args:
    creates: /tmp/something

그러나 일부 경우에는 실패합니다.

- shell: echo hello_world > creates=something
  args:
    creates: creates=something  # The file is named "creates=something"

나는 이것을 처리하는 일반적인 방법을 모르지만 bash 특정 솔루션은 다음과 같습니다.

- shell: echo hello_world > "creates=something"
  args:
    creates: creates=something

호환되는 YAML 생성기로 전달하여 데이터를 방출 할 수있는 데이터 구조가 - shell: ...있습니까? 이 구조가 손으로 만 안정적으로 생성 할 수있는 것이라면 문제의 요점을 다소 잃습니다.
Charles Duffy

@CharlesDuffy : 나는 당신이 ...일반적으로 부분을 벗어날 수 있다고 생각하지 않습니다 . 를 보면 library/commands/command꽤 관대 한 정규 표현식 creates=,, removes=등을 찾을 chdir=수 있습니다. 당신은 보장해야하는 경우 어떤 명령이 통과 할 수있다, 당신은 당신의 자신의 모듈을 작성해야합니다.
눈덩이

페어 넛 이것은 제 생각에는 중요한 디자인 오해입니다 ... 그러나, 그것이 바로 그 것입니다.
Charles Duffy

0

이것은 지금 Ansible 문서 에서 다루어 졌습니다.

# You can also use the 'args' form to provide the options. This command
# will change the working directory to somedir/ and will only run when
# /path/to/database doesn't exist.
- command: /usr/bin/make_database.sh arg1 arg2
  args:
    chdir: somedir/
    creates: /path/to/database

'free_form'이라는 매개 변수가 없습니다.


존재 args하면 k=v쌍이 구문 분석되는 것을 막을 수 command있습니까? (그렇다면 모호성을 명확하게 해결하고 그렇지 않으면 여전히 존재하는 것 같습니다).
Charles Duffy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.