我如何在ansible中使用前置任务模块来验证输入参数?
How do i use pre task module in ansible to validate input parameters?
在我 运行 我在 Ansible 中的主要表现之前,我想验证一些事情。例如下面的命令从用户那里获取 2 个输入参数,所以我想在执行主要任务之前验证它们。
ansible-playbook -i my-inventory my-main.yml --tags=repodownload -e release_version=5.0.0-07 -e target_env=dev/prod/preprod
在上述情况下,release_version 不应为空,target_env 必须是这些类型的值 -
5.0.0.34
我想向用户显示有关问题的消息。我如何实现它?
感谢任何帮助。
如果您绝对需要用户提供变量,我会首先使用 vars_prompt
以便在用户忘记将它们作为额外变量提供时以交互方式询问变量值。这也是一个很好的内联文档。
然后您可以使用 pre_tasks
以交互方式或作为额外变量验证提供的输入。对于验证,我通常使用 fail
module。这里的重点是使用 run_once: true
强制测试 运行 一次,即使您的游戏中有多个主机也是如此。
这是一个基于您的输入的示例。适应您的确切需求
---
- name: Prompt and validation demo
hosts: all
gather_facts: false
vars:
_allowed_envs:
- dev
- preprod
- prod
vars_prompt:
- name: release_version
prompt: "What is the release version ? [w.x.y-z]"
private: no
- name: target_env
prompt: "What is the target environment ? [{{ _allowed_envs | join(', ') }}]"
private: no
pre_tasks:
- name: Make sure version is ok
fail:
msg: >-
Release version is not formatted correctly. Please make sure
it is of the form w.x.y-zz
when: not release_version is regex('\d*(\.\d*){2}-\d\d')
run_once: true
- name: Make sure target_env is allowed
fail:
msg: >-
Environment "{{ target_env }}" is not allowed.
Please choose a target environment in {{ _allowed_envs | join(', ') }}
when: not target_env in _allowed_envs
run_once: true
tasks:
- name: "Dummy task just to have a complete playbook for the example"
debug:
var: ansible_hostname
在我 运行 我在 Ansible 中的主要表现之前,我想验证一些事情。例如下面的命令从用户那里获取 2 个输入参数,所以我想在执行主要任务之前验证它们。
ansible-playbook -i my-inventory my-main.yml --tags=repodownload -e release_version=5.0.0-07 -e target_env=dev/prod/preprod
在上述情况下,release_version 不应为空,target_env 必须是这些类型的值 -
5.0.0.34
我想向用户显示有关问题的消息。我如何实现它?
感谢任何帮助。
如果您绝对需要用户提供变量,我会首先使用 vars_prompt
以便在用户忘记将它们作为额外变量提供时以交互方式询问变量值。这也是一个很好的内联文档。
然后您可以使用 pre_tasks
以交互方式或作为额外变量验证提供的输入。对于验证,我通常使用 fail
module。这里的重点是使用 run_once: true
强制测试 运行 一次,即使您的游戏中有多个主机也是如此。
这是一个基于您的输入的示例。适应您的确切需求
---
- name: Prompt and validation demo
hosts: all
gather_facts: false
vars:
_allowed_envs:
- dev
- preprod
- prod
vars_prompt:
- name: release_version
prompt: "What is the release version ? [w.x.y-z]"
private: no
- name: target_env
prompt: "What is the target environment ? [{{ _allowed_envs | join(', ') }}]"
private: no
pre_tasks:
- name: Make sure version is ok
fail:
msg: >-
Release version is not formatted correctly. Please make sure
it is of the form w.x.y-zz
when: not release_version is regex('\d*(\.\d*){2}-\d\d')
run_once: true
- name: Make sure target_env is allowed
fail:
msg: >-
Environment "{{ target_env }}" is not allowed.
Please choose a target environment in {{ _allowed_envs | join(', ') }}
when: not target_env in _allowed_envs
run_once: true
tasks:
- name: "Dummy task just to have a complete playbook for the example"
debug:
var: ansible_hostname