You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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加密密码文件:
    1. 创建加密文件:
      ansible-vault create prod_pass.yml
      
    2. 写入加密内容:
      ansible_password: YourSecurePass123!
      
    3. 在Playbook中引用:
      - hosts: prod_servers
        vars_files:
          - prod_pass.yml
        tasks:
          - name: 查看系统版本
            command: cat /etc/os-release
      
    运行Playbook时加--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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:30:07