По умолчанию inventory хранится в /etc/ansible/hosts
, но вы можно указать другое расположение с помощью флага -i или конфигурационного файла ansible.cfg
Инвентарь может выглядеть по разному и в разных форматах, ini
или yml
Пример инвентаря ini:
[server]
host01 ansible_host=192.168.16.153 ansible_ssh_pass=Ваш_пароль ansible_user=root ansible_port=2222
Здесь:
Пример инвентаря yml:
all:
children:
web:
hosts:
web1.example.com:
web2.example.com:
ansible_port: 2222
vars:
ansible_user: admin
http_port: 80
db:
hosts:
db1.example.com:
db2.example.com:
vars:
ansible_user: postgres
После настройки инвентаря можно использовать команду ansible-inventory
для проверки и получения информации о инвентаре Ansible.
ansible-inventory -i inventory.ini --list
Ansible поддерживает динамические инвентари, которые генерируются скриптами (например, для AWS, Azure, Kubernetes).
Пример вызова динамического инвентаря для AWS:
ansible-inventory -i aws_ec2.yml --list
Файл aws_ec2.yml (плагин для AWS):
plugin: aws_ec2
regions:
- us-east-1
filters:
tag:Environment: production
Коннектиться можно не только по паролю но и по ключам, в таком случае вместо ansible_ssh_pass
используется ansible_ssh_private_key_file=/path/to/key
Инветарь можно "ПИЛИТЬ" на группы:
[debian_servers]
host1
host2
host3
[centos_servers]
host4
host5
host6
Также можно задавать для групп переменные:
[debian_servers]
host1
host2
host3
[debian_servers:vars]
ansible_user=root
ansible_ssh_pass=ваш_пароль
secret=12345
Ansible автоматически подтягивает переменные, определенные в инвентаре, если они имеют стандартные имена (как в вашем случае):
yaml
- name: Example playbook using inventory vars
hosts: debian_servers # Такое же имя группы как в инвентаре
become: yes
tasks:
- name: Test connection
ping:
Переменные ansible_user
и ansible_ssh_pass
будут использованы автоматически для подключения.
Если нужно использовать эти переменные в задачах:
yaml
- name: Example using inventory vars explicitly
hosts: debian_servers
vars:
remote_user: "{{ ansible_user }}"
ssh_password: "{{ ansible_ssh_pass }}"
tasks:
- name: Show connection vars
debug:
msg: "Connecting as {{ remote_user }} with password {{ secret }}"