ansible:促进对错误的警告

时间:2018-04-25 20:59:05

标签: ansible warnings

我有一些持续的集成检查,它运行一些ansible-playbook命令。每个剧本可能正在运行许多剧本,包括许多大型角色。

有时会有人介绍一些在ansible-playbook运行时会发出警告的更改,例如像这样的东西:

[WARNING]: when statements should not include jinja2 templating delimiters
such as {{ }} or {% %}. Found: "{{ some_variable}}" not in
some_result.stdout

或:

[WARNING]: Consider using unarchive module rather than running tar

或一些弃用警告,例如:

[DEPRECATION WARNING]: ec2_facts is kept for backwards compatibility but usage 
is discouraged. The module documentation details page may explain more about 
this rationale.. This feature will be removed in a future release. Deprecation 
warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

等等。有时,当我们升级ansible版本时会弹出这些警告。无论它们发生的原因如何,我都希望某种方式让ansible-playbook命令在导致其中一个警告时大声失败,而不是静静地继续进行并使我的CI检查成功。有没有办法做到这一点?我目前正在使用ansible 2.4.3。

我发现很多关于隐藏这些警告的方法的讨论,但没有找到任何关于将它们提升为硬错误的内容。

4 个答案:

答案 0 :(得分:0)

any_errors_fatal中有一个选项ansible.cfg,关于放置

any_errors_fatal = True

答案 1 :(得分:0)

为什么?它们会干扰剧本的实施吗?很有可能不是。只需修复剧本代码即可。

根据我的理解,删除这样的警告是不可能的或非常困难的(无论如何,当我尝试时,它对我没有用):

[WARNING]: when statements should not include jinja2 templating delimiters
such as {{ }} or {% %}. Found: "{{ some_variable}}" not in
some_result.stdout

只需使用:

some_variable not in some_result.stdout

在“何时”条件下,无需设置{{}}来获取变量值

我个人更喜欢搜索“查找”:

some_result.stdout.find(some_variable) == -1

此警告:

[DEPRECATION WARNING]: ec2_facts is kept for backwards compatibility but usage 
is discouraged. The module documentation details page may explain more about 
this rationale.. This feature will be removed in a future release. Deprecation 
warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
可以通过设置将

从输出中删除:

  

deprecation_warnings = false

在文件ansible.cfg

此警告:

[WARNING]: Consider using unarchive module rather than running tar

如果在“命令”中使用ansible模块而不是tar,则很容易删除:

unarchive: src=file.tgz dest=/opt/dest

答案 2 :(得分:0)

我有完全相同的问题。我的解决方法是:

  • 使用--check和“ tee”将其运行到临时文件
  • 使用grep-magic过滤掉“警告”:'
  • 做一些grep-sed-magic过滤掉不为零的结果(确定/跳过除外)

我知道这并不理想,因此,如果您提供了一个不错的解决方案,请分享:-)

答案 3 :(得分:-1)

要隐藏上述的[DEPRECATION WARNING],您可以 “通过在ansible.cfg中设置deprecation_warnings = False禁用。”

但这可能不是理想的,因为将来您无法看到可能会发生变化或折旧的事物。

如果您完全确定可以忽略此类警告,则可以使用::

args:
 warn: false

或按照警告消息中的建议修改代码。

其他::

如果您想对任何警告提出错误,可以

注册结果并应用failed_w,如下例所示。

- hosts: localhost gather_facts: false tasks: - name: Fail if there is any warnings shell: touch a.txt register: result failed_when: result.warnings is defined