이것lxd_container
기준 치수Ansible 2.5에는 다음 예가 포함되어 있습니다.
# An example for creating a Ubuntu container and install python
- hosts: localhost
connection: local
tasks:
- name: Create a started container
lxd_container:
name: mycontainer
state: started
source:
type: image
mode: pull
server: https://images.linuxcontainers.org
protocol: lxd
alias: ubuntu/xenial/amd64
profiles: ["default"]
wait_for_ipv4_addresses: true
timeout: 600
- name: check python is installed in container
delegate_to: mycontainer
raw: dpkg -s python
register: python_install_check
failed_when: python_install_check.rc not in [0, 1]
changed_when: false
- name: install python in container
delegate_to: mycontainer
raw: apt-get install -y python
when: python_install_check.rc == 1
이 예제가 왜 사용되는지 설명해 줄 수 있는 사람이 있나요?raw
기준 치수대신에apt
기준 치수?
이것이 여기서 사용되는 일종의 내부 지식입니까? (조기?) for 또는 다른 것을 ansible_connection=lxd
사용하여 Ansible의 성능을 최적화합니까 ?ansible_connection=ssh
mycontainer
결국 마지막 두 작업을 처리하는 것이 훨씬 간단합니다.
- name: install python in container
delegate_to: mycontainer
apt: pkg=python state=latest
...물론 적절한 캐시 등을 업데이트하는 옵션도 있습니다.
그렇다면 raw
여기서 이 모듈을 사용하는 이유는 무엇입니까?
참고: 내가 이것을 묻는 이유는 문서가 일반적으로 작업을 수행하는 표준적인 방법을 보여주기 때문입니다. 하지만 제가 이해한 바에 따르면, 정식적 apt
으로는 호출 shell
이나 명령 대신 특정 모듈을 사용해야 합니다 raw
.
답변1
동시에 그 이유도 찾았습니다.
그래서 Ansible은대개특정 호스트에 대해 구성된 연결 방법을 통해 원격 시스템에서 실행할 Python(2.x) 스크립트를 생성합니다.
아쉽게도 이 모듈의 전제 조건은 Python입니다 apt
. 모듈 에는 이러한 제한이 없는 것으로 보이므로 원격 시스템에서 직접 및 명령을 raw
사용하여 (원격) 호스트에서 Ansible 작업을 실행하는 데 필요한 필수 구성 요소를 설치하는 데 사용할 수 있습니다 . 그런데 모듈에는 동일한 제한 사항이 있지만 모듈에는 그렇지 않습니다. 그러나 문서에서 이것이 더 명확하게 언급되었으면 좋겠습니다.dpkg
apt-get
shell
raw
이 경우 결과 사전에는 module_stderr
이름이 다음과 같은 키가 포함됩니다 module_stderr": "/bin/sh: 1: /usr/bin/python: not found\n
. 호출 시 자세한 정보를 늘려 표시되도록 합니다 ansible-playbook
.
이제 무슨 일이 일어나고 있는지 알았으니 raw
모듈 문서의 다음 문장이 더 의미가 있습니다.
이 모듈은 원격 시스템에 Python이 필요하지 않습니다.스크립트기준 치수.
이전에는 플레이북을 점진적으로 실행했기 때문에 이것을 발견하지 못했기 때문에 python
"이 모듈을 사용하지 않는 이유는 무엇일까?"라고 생각했을 때 apt
패키지는 이미 설치되어 있었습니다.