我有一系列的剧本突然全部失效了。除了运行系统更新之外,我没有对 Ansible 服务器进行任何重大修改,并且所有设备都是通常使用自签名证书的防火墙/交换机。
我查看了 URI 模块here,发现所有 playbook 中都已经设置了 validate_certs: no。我将其更改为“假”、“假”和“否”的各种迭代,但没有效果。
我看到的错误是:
fatal: [sampleFirewall]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"}, "changed": false, "field": {}, "msg": "Request failed: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: certificate has expired (_ssl.c:1007)>"}
这似乎模块在游戏中没有看到该选项。我讨厌默认“这是一个错误吗?”但我想不出任何其他明显的原因,除非某些模块的更高版本需要证书签名或其他东西。
这是在 Ubuntu 22.04 上,使用:
ansible [core 2.15.2]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/username/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/username/.local/lib/python3.10/site-packages/ansible
ansible collection location = /home/username/.ansible/collections:/usr/share/ansible/collections
executable location = /home/username/.local/bin/ansible
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
jinja version = 3.1.2
libyaml = True
问题的原因是播放顺序混淆。
失败的播放不是 URI 播放,而是另一个连接到我们的密码管理器的播放。该模块检测到该设备上的证书存在问题(证书已过期)并触发了该模块。
因为该剧的名称命名相似,所以我认为它是在抱怨远程设备而不是密码管理器。经验教训明确说明每个游戏的作用。