如何在Ansible Playbook中同步动态库存?适配服务器登录任务需求
实现动态库存同步与服务器登录任务的Ansible方案
1. 确保动态库存提供完整的登录参数
动态库存脚本(Python/JSON格式)必须返回目标节点的核心连接信息,让Ansible明确登录方式:
ansible_host:节点IP或域名(主机名无法直接解析时必填)ansible_user:登录用户名ansible_ssh_private_key_file:私有密钥路径(密钥登录场景)ansible_port:SSH端口(非默认22时指定)
示例动态库存JSON片段:
{ "prod_servers": { "hosts": ["prod01", "prod02"], "vars": { "ansible_user": "ops", "ansible_ssh_private_key_file": "/home/ops/.ssh/prod_key" } } }
2. 安全管理登录凭据
绝对禁止明文存储密码,采用以下方式处理:
- 密钥登录:提前通过
ssh-copy-id ops@prod01将控制节点公钥推送到目标节点,实现无密码登录。 - 密码登录:用
ansible-vault加密密码文件:- 创建加密文件:
ansible-vault create prod_pass.yml - 写入加密内容:
ansible_password: YourSecurePass123! - 在Playbook中引用:
- hosts: prod_servers vars_files: - prod_pass.yml tasks: - name: 查看系统版本 command: cat /etc/os-release
--ask-vault-pass输入解密密码,或用--vault-password-file指定密码文件。 - 创建加密文件:
3. 拆分Playbook任务:区分本地同步与远程登录执行
- 动态库存同步任务:在
localhost执行,无需登录远程节点:- name: 刷新动态库存缓存 hosts: localhost connection: local tasks: - name: 运行库存脚本更新主机列表 command: /opt/ansible/inventory/dynamic_prod.py --refresh-cache - 需要登录的远程任务:直接指定动态库存中的主机组,Ansible会自动使用库存内的连接参数登录执行:
- name: 在生产节点执行配置任务 hosts: prod_servers tasks: - name: 检查内存使用 shell: free -h register: mem_info - name: 输出内存状态 debug: var: mem_info.stdout_lines
4. 处理特殊登录场景
- sudo权限需求:添加
become: yes开启sudo,可通过vault管理sudo密码:- hosts: prod_servers become: yes vars_files: - prod_pass.yml tasks: - name: 安装Redis yum: name: redis state: present - 单节点自定义登录配置:针对特殊节点,在动态库存中单独设置参数:
{ "prod_servers": { "hosts": { "prod03": { "ansible_user": "root", "ansible_port": 2200 } } } }
5. 验证登录连通性
执行Playbook前,先用ping模块测试节点可达性:
ansible prod_servers -m ping -i /opt/ansible/inventory/dynamic_prod.py
返回pong说明登录配置正常。
内容的提问来源于stack exchange,提问作者Gaurav Kumar
相关产品推荐
相关产品推荐

