我在 ansible 中为 Windows 服务做了一个简单的服务停止:
- name: stop service
win_service:
name: "{{ tomcat_srv_name }}"
state: stopped
Run Code Online (Sandbox Code Playgroud)
由于远程服务器出现问题,停止失败。如果我在远程服务器上尝试此操作,则会超时。但上面的 ansible 语句永远挂起。有办法抓住这个吗?像 wait_for ... 之类的东西?
似乎有几种解决方案都在多个步骤中起作用,例如 * 复制和删除 * 使用本机 wincommand 或 pwoershell
但是不是只是重命名为 win_module 吗?或者复制后删除源的选项?
用例:用户可以提供一个主机名,并会触发一本剧本的运行。如果主机名有错字,当“没有主机匹配”时,我想使完整剧本无法运行。我想使它失败,因为我想检测出Bamboo失败(我用于CD / CI)来运行剧本。
我已经做了相当广泛的研究。当没有主机匹配时,存在退出代码= 0的剧本似乎是一种需要的行为。这是我发现的一种迹象。我同意一般行为应该是这样的。
因此,对于我的用例,需要额外检查。我尝试了以下方法:
- name: Deploy product
hosts: "{{ target_hosts }}"
gather_facts: no
any_errors_fatal: true
pre_tasks:
- name: Check for a valid target host
fail:
msg: "The provided host is not knwon"
when: target_hosts not in groups.tomcat_servers
Run Code Online (Sandbox Code Playgroud)
但是由于没有主机匹配,因此剧本不会运行,这没关系,但它也以退出代码0结尾。这样,我就不会在自动化系统(Bamboo)中使运行失败。
因此,我正在寻找一种解决方案,以在没有主机匹配时抛出退出代码!= 0。
根据 YUIdoc 的文档(在本例中似乎相当于 jsdoc),有一个 @throws 标签来记录可能抛出的错误。
指定方法抛出的错误。@throws 标签具有结构@throws {type} 描述。{type} 是可选的。
就我而言,函数中有多个检查可能会引发错误,因此我想用 @throws 列出它们。但您不能拥有多个 @throws 标签。那么如何将可能引发的错误列表放入此标记中呢?
我想将 ansible 运行限制为所有不在 windows 组中的网络服务器。我在创建新组时完成了这项工作:
[test]
webservers:!windows
Run Code Online (Sandbox Code Playgroud)
并像这样运行它:
ansible-playbook -i inventories/staging/ site.yml --limit test
Run Code Online (Sandbox Code Playgroud)
但是当我试图避免组定义并将所有内容放入限制语句时,它失败了!windows 事件未找到
ansible-playbook -i inventories/staging/ site.yml --limit "webservers:!windows"
Run Code Online (Sandbox Code Playgroud)
这是不支持还是我有什么问题?
我有一个我执行的剧本:
ansible-playbook -i inventories/staging/ myPlaybook.yml -e "srv_mode=restart"
Run Code Online (Sandbox Code Playgroud)
该变量srv_mode用于游戏中.现在我只想允许"重启"和"启动"作为其值.
srv_mode如果不支持该值,是否有可能首先评估内容并优雅地结束一个好的警告?