Ansible 플레이북이 에서
testFile.txt
으로 가져오는 방법을 알 수 있도록 아래 코드에서 구체적으로 어떤 변경이 필요합니까 ?ServerB
ServerA
둘 다 Amazon Linux 서버입니다.
ServerA
및 는 모두 ServerB
중앙 Ansible 서버에 의해 작동되는 원격 서버입니다.
중앙 Ansible 서버의 플레이북 에 의해 생성된 파일은 Ansible 서버로 돌아오는 대신 런타임 에 ServerB
직접 복사/가져와야 합니다 .ServerA
ServerB
ServerA
또한 및 (각각 하나의 IP) 에 대한 인벤토리는 ServerB
중앙 Ansible 서버에 정의되지만 원격 ServerA
또는 원격 서버 에는 정의되지 않습니다 ServerB
.
따라서 런타임 시 플레이북에서 아래 `` 줄에 도달하면 다음 오류가 발생합니다.
fatal: [ip.of.server.b]: FAILED! => {
"msg": "'ServerA' is undefined"
}
ServerA
그렇다면 런타임에 정의하려면 아래 코드에 어떤 구체적인 변경이 필요합니까 ?
플레이북은 다음과 같습니다.
# Then create a file on ServerB and copy/pull that file into ServerA
- name: File transfer example
hosts: ServerB
remote_user: server-b-user
become: true
become_method: sudo
become_user: root
tasks:
- name: Create a test file to copy
shell:
cmd: |
cat <<EOF > /path/on/ServerB/testFile.txt
this is a test file.
EOF
sudo: true
sudo_user: server-b-user
- name: Transfer conf file from master to admin
synchronize:
src: /path/on/ServerB/testFile.txt
dest: /path/on/ServerA/
mode: pull
delegate_to: "{{ ServerA }}"
답변1
그렇다면 런타임에 ServerA를 정의하려면 아래 코드에서 구체적으로 어떤 변경이 필요합니까?
- hosts: ServerB
vars:
ServerA: 192.168.0.0
변수가 ServerA
정의되지 않았음을 나타내는 오류 메시지를 해결해야 합니다.
코드가 변수를 호출하고 있습니다.서버A. 변수를 정의하지 않았으며 Ansible에 해당 이름에 등록된 '사실'이 없습니다. 따라서 이는 정의되지 않았으며 컨트롤러는 사용자가 무엇을 참조하고 있는지 알 수 없습니다.
앤서블 문서delegate_to:
IP 주소를 직접 호출하는 기능을 지원함을 보여줍니다 . 당신이 원한다면변수를 사용하다그렇게 하려면 다음을 수행해야 합니다.코드에서 직접 선언하세요., 또는 동적 재고 사실 중 하나를 사용하십시오.
이는 다음을 사용하여 수행할 수도 있습니다.매직 변수 inventory_hostname
사실을 끌어내기 위해. YMMV.