使用ansible期望变量的验证

tur*_*kus 2 validation expect ansible

我正在使用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
Run Code Online (Sandbox Code Playgroud)

并在:

# 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
Run Code Online (Sandbox Code Playgroud)

它是在应用django init迁移后创建超级用户的.

现在让我们谈谈:

当我运行这个并且有人会输入例如太短的密码时,整个过程会挂断,我必须使用tags选项再次运行它.

问题:

有没有办法将验证附加到ansible,期望它只会在控制台中提示它的值不正确并强制用户键入正确的值?

Kon*_*rov 7

不,expect模块无法为您进行验证.
你应该避免在你的剧本中进行任何互动.
如果您需要验证参数,请在Playbook的最开始手动执行assert:

- hosts: all
  vars_prompt:
    - name: "password"
      prompt: "Password"
      private: yes
  pre_tasks:
    - assert:
        that: password | length > 6
  roles:
    - initdb
Run Code Online (Sandbox Code Playgroud)