저는 Packt의 Ansible 튜토리얼을 따르고 있으며 3개의 Ubuntu 컨테이너(lxc)를 생성하여 실행하고 있습니다. 각각에 로그인할 수도 있습니다.
다음을 통해 Ansible을 다운로드 git clone ansible-git-url
한 후 얻었습니다.
내 작업 설정은 다음과 같습니다. 여기에 2개의 폴더( 전체 git 저장소) /home/myuser/code
가 있고 2개의 파일이 있습니다: 및 .ansible
ansible_course
ansible.cfg
inventory
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.cfg
inventory
$ 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
...