Validation 使用ansible'进行验证;s期望变量

Validation 使用ansible'进行验证;s期望变量,validation,ansible,expect,Validation,Ansible,Expect,我正在使用ansible在计算机上自动化项目部署。在一个例子中,我使用ansible的expect选项 我有: # initdb.yml - hosts: all vars_prompt: - name: "username" prompt: "Username" private: no - name: "email" prompt: "Email" private: no - name: "password"

我正在使用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迁移后创建超级用户

现在让我们进入正题

当我运行此程序时,有人会输入例如太短的密码,整个过程将挂起,我必须使用
标记
选项再次运行它

问题


是否有一种方法可以将验证附加到ansible的expect,它只会在控制台中提示它的值不正确,并强制用户键入正确的值?

否,
expect
模块无法为您执行验证。
你应该避免在剧本中出现任何互动。
如果您需要验证参数,请在手册的开头使用
assert
手动验证:

- hosts: all
  vars_prompt:
    - name: "password"
      prompt: "Password"
      private: yes
  pre_tasks:
    - assert:
        that: password | length > 6
  roles:
    - initdb

你应该避免剧本中的任何互动。
。你能给我举个例子说明预期用法吗?@turkus我的意思是避免用户交互(强制用户输入正确的值)。您的
expect
示例还可以,只需在一开始就验证您的VAR,这样您就可以立即重新运行playbook。