mcpField
A
ansible

ansible

github.com/alphaonedev云与 DevOps46 次安装
代码仓库

关于 ansible

Ansible 是用于配置基础设施、部署应用和编排任务的开源自动化工具,通过无需在目标机安装 Agent 的 YAML playbook 执行。它适合 DevOps 团队管理跨主机的重复任务,支持 SSH 或 WinRM,并提供幂等操作。

主要功能

  1. 01通过 SSH 或 WinRM 无 Agent 执行
  2. 02幂等 YAML playbook
  3. 03可复用模块与角色
  4. 04变量和 Jinja2 模板
  5. 05跨主机按序执行任务

适用场景

  1. 01配置和管理多台服务器
  2. 02通过可重复的 playbook 部署应用
  3. 03在 CI/CD 中运行基础设施任务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill ansible

安装后在 Claude Code 中输入/ansible确认已加载。

详细介绍

ansible

用途

Ansible 是一款开源自动化工具,可使用无 Agent 的 YAML playbook 配置 IT 基础设施、部署应用并编排任务。它确保操作具有幂等性,也就是说,无论初始状态如何,每次运行都会产生相同的结果;它通过 SSH 运行,无需在目标主机上安装 Agent。

适用场景

在 DevOps 流水线中执行可重复的基础设施任务时,可使用 Ansible,例如配置服务器、管理整个服务器群的配置,或在动态环境中部署应用。当你需要无 Agent 自动化时,例如更新远程机器上的软件、编排多步骤工作流,或与 CI/CD 工具集成时,可使用 Ansible;但对于实时监控,应避免使用它,因为 Prometheus 等工具更适合此类场景。

主要功能

  • 无 Agent 执行:通过 SSH 或 WinRM 连接;在清单文件(例如 /etc/ansible/hosts)中指定主机,并使用 [web:children] 等格式进行分组。
  • 幂等 Playbook:编写定义任务的 YAML 文件;例如,仅在软件包尚未安装时才安装它的任务。
  • 模块和角色:使用 apt 等内置模块管理软件包;将代码整理为角色以便复用,并存储在 roles/webserver/tasks/main.yml 等目录中。
  • 变量和模板:在 YAML 中定义变量(例如 { "http_port": 80 }),并使用 Jinja2 模板生成动态配置,例如从模板生成 nginx.conf。
  • 编排:通过按顺序在多个主机上执行任务的 play 处理依赖关系,确保按顺序执行。

使用模式

要自动执行任务,请创建一个 playbook(例如 site.yml),定义其中的 play,包括主机、任务和变量。使用 ansible-playbook 命令运行它。对于动态清单,可使用输出 JSON 的脚本,例如从 AWS EC2 获取数据。项目结构可包含清单文件、用于定义主机特定变量的 group_vars,以及用于模块化代码的角色。请始终先使用 --check 标志测试 playbook,以模拟更改而不实际应用。

常用命令/API

  • 运行 Playbook:使用 ansible-playbook site.yml --check --diff 模拟并显示更改;添加 -l web 可将范围限制为某个主机组。
  • 临时命令:使用 ansible web -m ping 测试连接;使用 -a "uptime" 执行任意命令。
  • 管理角色:使用 ansible-galaxy install geerlingguy.apache 获取角色;使用 ansible-galaxy init role_name 创建自定义角色。
  • 清单和变量:使用 -e "var1=value1" 设置变量,或使用 export ANSIBLE_HOST_KEY_CHECKING=False 等环境变量绕过主机密钥验证。
  • API 集成:通过 ansible_runner 库使用 Ansible 的 Python API;例如,导入 ansible_runner 并运行 interface.run(playbook='site.yml', extravars={'key': 'value'}) 以通过编程方式执行。 进行身份验证时,可使用 $ANSIBLE_PRIVATE_KEY_FILE=/path/to/key.pem 等环境变量指定 SSH 密钥,或使用 $ANSIBLE_BECOME_PASS 指定 sudo 密码。

集成说明

可通过脚本触发 playbook,将 Ansible 与 Jenkins 等 CI/CD 工具集成;例如,在 Jenkinsfile 中使用:sh 'ansible-playbook deploy.yml -e "env=prod"'。对于云服务提供商,可使用动态清单;例如,通过 export AWS_ACCESS_KEY_ID=$AWS_KEY 配置 AWS,然后运行 ansible-playbook -i ec2.py site.yml。还可在 Terraform 完成资源配置后运行 Ansible;确保通过文件或环境变量传递变量。请使用版本控制:将 playbook 存储在 Git 中,并在流水线中拉取。

错误处理

在 playbook 中,使用包含 rescue 和 always 子句的 block;例如:

- block:
    - debug: msg="Task succeeded"
  rescue:
    - debug: msg="Error occurred"
  always:
    - debug: msg="Cleanup step"

检查命令的退出码;例如,在脚本中使用:ansible-playbook site.yml && echo "Success" || echo "Failed"。对于常见问题,可使用 -vvv 启用详细输出,以调试 SSH 连接或模块故障。使用事实收集处理变量错误,并为非关键任务设置 ignore_errors: yes,但仅在适当时使用,以免掩盖问题。

具体使用示例

  1. 在 Ubuntu 主机上部署 Web 服务器:创建一个包含 Apache 安装任务的 playbook(webserver.yml):

    - hosts: webservers
      tasks:
        - name: Install Apache
          apt:
            name: apache2
            state: present
    

    使用以下命令运行:ansible-playbook webserver.yml -i inventory.txt --become,以提升权限。

  2. 为多台主机配置 NTP:编写一个用于同步时间的 playbook(ntp_config.yml):

    - hosts: all
      tasks:
        - name: Install NTP
          yum:
            name: ntp
            state: latest
        - name: Start NTP service
          service:
            name: ntpd
            state: started
    

    执行:ansible-playbook ntp_config.yml -l ntp_hosts,以针对特定组。

图关系

  • 相关工具:terraform(用于基础设施即代码)、kubernetes(用于容器编排)、jenkins(用于 CI/CD 集成),均属于 devops-sre 集群。
  • 依赖项:通常与 vault 搭配使用,以管理机密。
  • 冲突项:如果更倾向于基于 Agent 的管理,请避免使用 Puppet 等工具。

评论

支持 Markdown