Ansible: 인벤토리 소스를 구문 분석하는 방법

Ansible: 인벤토리 소스를 구문 분석하는 방법

저는 Packt의 Ansible 튜토리얼을 따르고 있으며 3개의 Ubuntu 컨테이너(lxc)를 생성하여 실행하고 있습니다. 각각에 로그인할 수도 있습니다.

다음을 통해 Ansible을 다운로드 git clone ansible-git-url한 후 얻었습니다.

내 작업 설정은 다음과 같습니다. 여기에 2개의 폴더( 전체 git 저장소) /home/myuser/code가 있고 2개의 파일이 있습니다: 및 .ansibleansible_courseansible.cfginventory

inventory다음 콘텐츠가 포함되어 있습니다:

[allservers]
192.168.122.117 
192.168.122.146
192.168.122.14

[web]
192.168.122.146
192.168.122.14

[database]
192.168.122.117

다음 ansible.cfg을 포함합니다:

[root@localhost ansible_course]# cat ansible.cfg
[defaults]
host_key_checking = False

그런 다음 이 경로에서 /home/myuser/code/ansible_course다음 명령을 실행해 보았습니다.

$ ansible 192.168.122.117 -m ping -u root

튜토리얼에 나온 사람이 정확히 그렇게 했고 성공적인 응답을 받았지만 ping다음과 같은 오류 메시지를 받았습니다.

[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.122.117

튜토리얼에서 그는 소스를 제공하기 위해 특별한 조치를 취해야 한다고 말한 적이 없으며 단지 우리가 가지고 있는 Linux 컨테이너의 IP 주소로 파일을 생성 inventory해야 한다고 말했습니다 .inventory

내 말은, 그는 그것을 설정하기 위해 명령을 실행해야 한다고 말하지 않았다는 것입니다.

답변1

호스트 파일이 어디에 있는지 ansible에 알려줄 수 있습니다 ansible.cfg.

[defaults]
inventory=inventory

inventory실제로 재고 파일이라고 가정합니다 .

답변2

배경

파일을 기반으로 파일 이름을 지정 하거나 ansible다음 과 같이 수동으로 지정할 수 있습니다.ansible.cfginventory

명확하게 알려짐
$ ansible -i inventory -m ping -u root 192.168.122.117
ansible.cfg를 통해 암시적으로 정보 제공
$ ansible -m ping -u root 192.168.122.117

명백한

사용할 매니페스트 파일을 명시적으로 알려주는 메서드의 경우 ansible사용법은 다음과 같습니다.

ansible사용법의 관점 에서 :

 -i INVENTORY, --inventory=INVENTORY
          specify inventory host path or comma separated host list.

절대적인

암시적 방법의 경우 이것이 작동하는 방식을 이해하려면 Ansible에 더 능숙해야 합니다. 자세한 정보 표시 모드를 사용하여 ansible기본적으로 수행되는 작업을 더 자세히 확인할 수 있습니다.

$ ansible -vvv -m ping -u root box-101
...
...
config file = /Users/user1/somedir/ansible.cfg
...
...
Using /Users/user1/somedir/ansible.cfg as config file
Parsed /Users/user1/somedir/inventory inventory source with ini plugin
META: ran handlers
Using module file /Users/user1/projects/git_repos/ansible/lib/ansible/modules/system/ping.py
...
...
box-101 | SUCCESS => {
    "changed": false,
    "invocation": {
        "module_args": {
            "data": "pong"
        }
    },
    "ping": "pong"
}
...
...

위에서는 box-101에 핑을 보내고 있습니다. ansible.cfg어떤 파일이 사용되고 있는지 보여주는 다음 줄을 볼 수 있습니다 .

config file = /Users/user1/somedir/ansible.cfg
Using /Users/user1/ansible.cfg as config file

그리고 이 ansible.cfg파일을 통해 최종적으로 목록이 만들어집니다.

Parsed /Users/user1/somedir/inventory inventory source with ini plugin

inventory이 파일 에 직접적으로 접근할 수 있는 옵션은 다음과 같습니다 .

$ cat ansible.cfg
...
[defaults]
inventory      = inventory
...

관련 정보