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

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

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

둘 다 Amazon Linux 서버입니다.

ServerA및 는 모두 ServerB중앙 Ansible 서버에 의해 작동되는 원격 서버입니다.

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

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.

관련 정보