Ansible-Inventory

什么是 Ansible Inventory?

  • Inventory 是 Ansible 用来定义和管理目标主机的文件或脚本。
  • 它列出了 Ansible 需要管理的所有主机,并将这些主机分组,以便于任务分配。
  • Inventory 可以是静态文件(如 INI 或 YAML 格式),也可以是动态生成的。

创建静态 Inventory

INI 格式

基本格式

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com
  • [webservers][dbservers] 是主机组的名称。
  • 组名下的每一行列出了属于该组的主机。

添加变量

[webservers]
web1.example.com ansible_port=2222 ansible_user=admin
web2.example.com ansible_port=2200 ansible_user=root

[dbservers]
db1.example.com
db2.example.com

[all:vars]
ansible_ssh_private_key_file=/path/to/private_key
  • 为特定主机定义变量,如 SSH 端口 (ansible_port) 和用户名 (ansible_user)。
  • [all:vars] 定义全局变量,适用于所有主机。

YAML 格式

基本格式

all:
  children:
    webservers:
      hosts:
        web1.example.com:
        web2.example.com:
    dbservers:
      hosts:
        db1.example.com:
        db2.example.com:
  • 使用 children 定义子组,hosts 列出每个组中的主机。

添加变量

all:
  vars:
    ansible_ssh_private_key_file: /path/to/private_key

  children:
    webservers:
      hosts:
        web1.example.com:
          ansible_port: 2222
          ansible_user: admin
        web2.example.com:
          ansible_port: 2200
          ansible_user: root
    dbservers:
      hosts:
        db1.example.com:
  • 在 YAML 中也可以为主机和组定义变量。

动态 Inventory

基本概念

  • 动态 Inventory 通过脚本或程序生成主机列表,适用于云环境或动态变化的基础设施。
  • 常见的动态 Inventory 如 AWS、GCP、Azure 等。

使用 AWS 动态 Inventory 的示例

  1. 安装依赖

    pip install boto3 botocore
    
  2. 下载和配置 AWS 动态 Inventory 脚本

    wget https://raw.githubusercontent.com/ansible/ansible/stable-2.9/contrib/inventory/ec2.py
    chmod +x ec2.py
    
  3. 运行 Playbook

    ansible-playbook -i ec2.py your_playbook.yml
    

动态 Inventory 的变量配置

  • 动态 Inventory 通常通过环境变量或配置文件传递访问凭证(如 AWS 的 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY)。

Inventory 的高级功能

主机组嵌套和继承

[databases:children]
dbservers

[databases:vars]
ansible_user=dbadmin
  • 主机组可以嵌套,子组继承父组的变量。

分组的变量优先级

  • 变量优先级:全局变量 < 组变量 < 主机变量 < 命令行指定的变量。

动态变量与主机变量

  • 在 Inventory 文件或动态 Inventory 脚本中定义变量。
  • 这些变量可在 Playbook 中通过 Jinja2 模板进行引用。

测试和验证 Inventory

使用 ping 模块测试连接

ansible all -m ping -i /path/to/your/inventory/hosts
  • 测试所有主机的连接性。

运行 Playbook

ansible-playbook -i /path/to/your/inventory/hosts your_playbook.yml
  • 指定 Inventory 文件运行 Playbook。

Inventory 最佳实践

使用分层 Inventory

[development]
dev1.example.com
dev2.example.com

[production]
prod1.example.com
prod2.example.com

[webservers:children]
development
production
  • 在大型环境中,分层管理 Inventory 更易维护。

动态与静态 Inventory 混合使用

  • 静态 Inventory 管理核心基础设施,动态 Inventory 管理云实例。

使用分组变量

  • 避免重复配置,例如统一设置组内所有主机的 SSH 用户名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟生啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值