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.