Ansible의 파일에 변수 쓰기


101

URI 모듈을 통해 JSON을 가져오고 수신 된 콘텐츠를 파일에 쓰고 싶습니다. 콘텐츠를 가져 와서 디버거에 출력 할 수 있으므로 콘텐츠가 수신되었음을 알 수 있지만 파일 작성에 대한 모범 사례를 모릅니다.

답변:


200

매개 변수 copy와 함께 모듈을 사용할 수 있습니다 content.

- copy: content="{{ your_json_feed }}" dest=/path/to/destination/file

여기 문서 : 복사 모듈


5
content = "{{your_json_feed}}"는 공백과 줄 바꿈을 처리합니다. 따옴표는 중요합니다.
m.kocikowski

@RamondelaFuente 여러 vars 내용을 파일에 추가하려면 "복사"모듈을 여러 번 사용해야합니까? 아니면 다른 방법이 있습니까?
KishoreReddy

1
@KishoreReddy jinja2 구문을 사용하여 변수를 추가 할 수 있다고 생각합니다. "{{변수 ~ another_variable}}"과 같은 형식입니다. 예쁘지는 않지만 상황이 더 복잡해지면 template:모듈을 사용하여 런타임에 등록 된 변수로 채울 수 있습니다 .
라몬 데 라 푸 엔테

이는 sha256 sum 파일을 양식 shahash /path/to/file(사이에 2 개의 공백)으로 sha256sum -c shafile생성 한 다음 Ansible을 통해 생성 한 내용을 명령 줄에서 (를 통해 ) 검증 하려는 경우 더 잘 작동합니다 .
Daniel Andrei Mincă

11

아주 작은 파일을 작성하지 않는 한 템플릿 을 사용해야합니다 .

예:

- name: copy upstart script
  template: 
    src: myCompany-service.conf.j2 
    dest: "/etc/init/myCompany-service.conf"

2
Ramon의 답변은 요청 된 내용을 정확히 다루지 만이 답변은 일반적으로 가장 좋은 접근 방식입니다. 예를 들어 클라우드에 VM을 생성하는 플레이 북이 있고 다른 플레이 북에 대한 호스트 인벤토리를 생성하려는 경우 템플릿을 사용하면됩니다.
Luis Artola

이것이 더 나은 이유를 설명 할 수 있습니까?
Vorticity

@Vorticity가 무엇보다 낫습니까?
Janus Troelsen

@JanusTroelsen 죄송합니다. 대용량 파일을 작성할 때 이것이 허용되는 답변보다 나은 이유를 설명해 주시겠습니까?
Vorticity

1
@Vorticity는 파일이 다른 파일에 포함되면 다루기 어려워지기 때문입니다. 이스케이프가 필요하고 구문 강조가 작동하지 않습니다. 템플릿 메커니즘을 사용하면 필요한 경우 중간에 항목을 삽입 할 수 있습니다.
Janus Troelsen

9

Ramon의 답변에 따라 오류가 발생합니다. JSON의 공백이 작성하려고 시도한 문제는 플레이 북의 작업을 다음과 같이 변경하여 수정했습니다.

- copy:
    content: "{{ your_json_feed }}"
    dest: "/path/to/destination/file"

현재로서는 이것이 왜 필요한지 잘 모르겠습니다. 내 가장 좋은 추측은 Ansible에서 변수가 대체되고 결과 파일이 구문 분석되는 방식과 관련이 있다는 것입니다.


0

dest이제 옵션으로 대상 파일을 직접 지정할 수 있습니다 . 아래 예에서 출력 json은/tmp/repo_version_file

- name: Get repository file repo_version model to set ambari_managed_repositories=false
  uri:
    url: 'http://<server IP>:8080/api/v1/stacks/HDP/versions/3.1/repository_versions/1?fields=operating_systems/*'
    method: GET
    force_basic_auth: yes
    user: xxxxx
    password: xxxxx
    headers:
      "X-Requested-By": "ambari"
      "Content-type": "Application/json"
    status_code: 200
    dest: /tmp/repo_version_file
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.