使用 ansible 的 expect 变量进行验证
Using validation with ansible's expect variables
我正在使用 ansible 在机器上自动部署项目。在一种情况下,我使用的是 ansible 的 expect
选项。
我有:
# initdb.yml
- hosts: all
vars_prompt:
- name: "username"
prompt: "Username"
private: no
- name: "email"
prompt: "Email"
private: no
- name: "password"
prompt: "Password"
private: yes
roles:
- initdb
并在:
# roles/.../main.yml
- expect:
echo: yes
command: 'env/bin/python manage.py createsuperuser'
timeout: 5
responses:
'Username .*': '{{ username }}'
'Email .*': '{{ email }}'
'Password': '{{ password }}'
'Password (again)': '{{ password }}'
args:
chdir: '{{ repo.path }}'
tags:
- superuser
用于在应用 django init 迁移后创建超级用户。
现在进入正题:
当我运行这个并且有人会输入例如太短的密码时,整个过程挂断,我必须使用tags
选项再次运行它。
问题:
有没有办法将验证附加到 ansible 的期望上,它只会在控制台中提示它是不正确的值并强制用户输入正确的值?
不,expect
模块无法为您进行验证。
您应该避免在您的剧本中进行任何互动。
如果您需要验证参数,请在剧本的开头使用 assert
:
手动执行
- hosts: all
vars_prompt:
- name: "password"
prompt: "Password"
private: yes
pre_tasks:
- assert:
that: password | length > 6
roles:
- initdb
我正在使用 ansible 在机器上自动部署项目。在一种情况下,我使用的是 ansible 的 expect
选项。
我有:
# initdb.yml
- hosts: all
vars_prompt:
- name: "username"
prompt: "Username"
private: no
- name: "email"
prompt: "Email"
private: no
- name: "password"
prompt: "Password"
private: yes
roles:
- initdb
并在:
# roles/.../main.yml
- expect:
echo: yes
command: 'env/bin/python manage.py createsuperuser'
timeout: 5
responses:
'Username .*': '{{ username }}'
'Email .*': '{{ email }}'
'Password': '{{ password }}'
'Password (again)': '{{ password }}'
args:
chdir: '{{ repo.path }}'
tags:
- superuser
用于在应用 django init 迁移后创建超级用户。
现在进入正题:
当我运行这个并且有人会输入例如太短的密码时,整个过程挂断,我必须使用tags
选项再次运行它。
问题:
有没有办法将验证附加到 ansible 的期望上,它只会在控制台中提示它是不正确的值并强制用户输入正确的值?
不,expect
模块无法为您进行验证。
您应该避免在您的剧本中进行任何互动。
如果您需要验证参数,请在剧本的开头使用 assert
:
- hosts: all
vars_prompt:
- name: "password"
prompt: "Password"
private: yes
pre_tasks:
- assert:
that: password | length > 6
roles:
- initdb