我在Ansible任务中获得用户输入密码。这个用户输入通过命令传递给"密码变量"。我想检查给定的密码是否符合以下条件:
- 长度大于8
- 密码应该只包含可打印的ASCII字符
我试过这样做:
- fail: msg="Password validation failed"
when: password | default('') | length <= 0 | chars = ascii_letters
这个不能用
如果我使用失败模块仅用于密码非空和长度检查,它正在工作。
- fail: msg="Password validation failed"
when: password | default('') | length <= 0 | chars = ascii_letters
要检查字符串是否只包含ASCII字符,最好是使用正则表达式,您可以使用regex
测试assert
。
由于regex非常强大,您还可以在其中添加字符限制。
下面是一个任务:
- name: Assert a string of 8+ ASCII char
assert:
that:
- password is string
- password is regex('^[x00-x7F]{8,}$')
和一些基于用例的结果:
- 错误,如果我们不发送任何
--extra-vars
fatal: [localhost]: FAILED! => changed=false assertion: password is string evaluated_to: false msg: Assertion failed
- 错误,如果我们传递一个太短的密码:
--extra-vars "password=1234567"
fatal: [localhost]: FAILED! => changed=false assertion: password is regex('^[x00-x7F]{8,}$') evaluated_to: false msg: Assertion failed
如果我们传递一个非ascii字符: - 也会在正则表达式中出错
fatal: [localhost]: FAILED! => changed=false assertion: password is regex('^[x00-x7F]{8,}$') evaluated_to: false msg: Assertion failed
- 通过
--extra-vars "password=12345678"
传递断言ok: [localhost] => changed=false msg: All assertions passed
--extra-vars "password=1234567é"
,