원격 서버에서 Ansible 인벤토리 정의

원격 서버에서 Ansible 인벤토리 정의

testFile.txtAnsible 플레이북이 에서 로 ServerB가져오는 방법을 알 수 있도록 아래 코드에서 구체적으로 어떤 변경이 필요합니까 ServerA?

이들은 Amazon Linux 서버입니다.

ServerA및 둘 다 중앙 ServerBAnsible 서버에서 운영되는 원격 서버입니다.

중앙 Ansible 서버에서 생성된 플레이북 파일은 Ansible 서버로 다시 돌아가는 대신 런타임 ServerB에 직접 복사/가져와야 합니다 .ServerAServerB

ServerA또한 및(IP당 하나)에 대한 매니페스트는 원격 서버 나 원격 서버 ServerB가 아닌 중앙 Ansible 서버에 정의되어 있습니다 . ServerAServerB

따라서 런타임 시 플레이북은 다음 줄에 도달하면 다음 오류를 발생시킵니다.

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.

관련 정보