Ansible 自定义工具,重试和重新部署
Ansible custom tool ,retry and redeploy
我正在尝试使用 Ansible 作为一组主机的部署工具,但我找不到正确的方法。
我想要 运行 一个在主机中安装 rpm 的自定义工具。
现在我可以做
ansible dev -i hosts.txt -m shell -a "rpmdeployer --install package_v2.rpm"
但这并没有给出重试文件(失败的主机)
我制作了一个剧本来获取重试文件
我尝试了一个简单的剧本
---
- hosts: dev
tasks:
- name: deployer
command: rpmdeployer --install package_v2.rpm
我知道这不符合 ansible 执行自定义命令和脚本的精神。有更好的方法吗?另外有没有办法一直尝试直到所有主机都成功?
Is there a better way of doing this?
你可以write a custom module。自定义模块甚至可以 成为 工具,因此您无需安装该依赖项。模块可以用任何语言编写,但建议使用 Python 因为:
- Python 无论如何都是 Ansible 的要求
- 使用Python时可以使用Ansible提供的API
如果您的工具有自定义模块,您的任务可能如下所示:
- name: deployer
deployer: package_v2.rpm
Also is there a way to keep trying till all hosts succeeds?
Ansible 可以自动 retry 任务。
- name: deployer
command: rpmdeployer --install package_v2.rpm
register: result
until: result | success
retries: 42
delay: 1
只要您的工具 returns 正确的退出代码(0 表示成功,>0 表示失败),此方法有效。如果不是,您可以应用任何自定义条件,例如在 stdout
中搜索内容等
我不知道有什么工具可以在 playbook 实际失败时自动重试。但是创建一个小的包装脚本来检查重试文件和 运行 带有 --limit @foo.retry
的剧本应该不会太难,直到它不再被重新创建。
但我不确定这是否有意义。如果使用您的工具安装 rpm 失败,我想它肯定会在任何重试时失败,除非游戏中有未知组件,例如首先下载 rpm。所以当然下载可能会失败,重试可能会成功。
我正在尝试使用 Ansible 作为一组主机的部署工具,但我找不到正确的方法。
我想要 运行 一个在主机中安装 rpm 的自定义工具。
现在我可以做
ansible dev -i hosts.txt -m shell -a "rpmdeployer --install package_v2.rpm"
但这并没有给出重试文件(失败的主机) 我制作了一个剧本来获取重试文件
我尝试了一个简单的剧本
---
- hosts: dev
tasks:
- name: deployer
command: rpmdeployer --install package_v2.rpm
我知道这不符合 ansible 执行自定义命令和脚本的精神。有更好的方法吗?另外有没有办法一直尝试直到所有主机都成功?
Is there a better way of doing this?
你可以write a custom module。自定义模块甚至可以 成为 工具,因此您无需安装该依赖项。模块可以用任何语言编写,但建议使用 Python 因为:
- Python 无论如何都是 Ansible 的要求
- 使用Python时可以使用Ansible提供的API
如果您的工具有自定义模块,您的任务可能如下所示:
- name: deployer
deployer: package_v2.rpm
Also is there a way to keep trying till all hosts succeeds?
Ansible 可以自动 retry 任务。
- name: deployer
command: rpmdeployer --install package_v2.rpm
register: result
until: result | success
retries: 42
delay: 1
只要您的工具 returns 正确的退出代码(0 表示成功,>0 表示失败),此方法有效。如果不是,您可以应用任何自定义条件,例如在 stdout
中搜索内容等
我不知道有什么工具可以在 playbook 实际失败时自动重试。但是创建一个小的包装脚本来检查重试文件和 运行 带有 --limit @foo.retry
的剧本应该不会太难,直到它不再被重新创建。
但我不确定这是否有意义。如果使用您的工具安装 rpm 失败,我想它肯定会在任何重试时失败,除非游戏中有未知组件,例如首先下载 rpm。所以当然下载可能会失败,重试可能会成功。