我在ansible中写了一个角色,它将处理有关ssl证书的所有内容。当它试图用stat
中定义的变量来评估条件时,它失败了。
期待任何解释和任何黑客攻击。
我的部分任务
- stat: path={{ ssl_certs_privatekey_path }}
register: ssl_private_key
- name: Generate a RSA key
command:
openssl req -x509 -nodes -days {{ ssl_certs_days }} -subj '{{ ssl_certs_fields }}' -newkey rsa:{{ ssl_certs_key_size }} -out {{ ssl_certs_cert_path }} -keyout {{ ssl_certs_privatekey_path }}
when: ssl_private_key.stat.exists == false
tags: ssl-certs
如果我添加调试,我也看不到它的输出:
调试代码?!不工作
- debug: msg="Key exists"
when: ssl_private_key.stat.exists
错误:
TASK: [ssl_certs | Ensure ssl folder exist] ***********************************
ok: [domain.tld]
TASK: [ssl_certs | Generate a RSA key] ****************************************
fatal: [domain.tld] => error while evaluating conditional: ssl_private_key.stat.exists == false
FATAL: all hosts have already failed -- aborting
服务器正在运行debian stable并且我正在使用ansible 1.9.4运行OS X Yosemite
我已经在github nothing there上的ansible repo中检查了google并发布了页面。
谢谢!
更新
正在使用新的孤立的剧本:
---
- name: "Just for test"
hosts: my-hosts
tasks:
- stat: path=/etc/ssl/certs/cert.key
register: ssl_private_key
- debug: msg="Key exists"
when: ssl_private_key.stat.exists
$ ansible-playbook -i my.inventory --user=radu isolated.playbook
PLAY [Just for test] **********************************************************
GATHERING FACTS ***************************************************************
ok: [domain.tld]
TASK: [stat path=/etc/ssl/certs/cert.key] *************************************
ok: [domain.tld]
TASK: [debug msg="Key exists"] ************************************************
ok: [domain.tld] => {
"msg": "Key exists"
}
PLAY RECAP ********************************************************************
domain.tld : ok=3 changed=0 unreachable=0 failed=0
答案 0 :(得分:3)
我现在感到愚蠢,但我不会删除这个问题或答案。我认为这是一个常见的错误,每个人都应该从别人的错误中吸取教训:)
在我的问题中暗示,统计数据甚至没有登记。它没有用,因为我用--tags
运行了剧本,而且该任务没有:(
$ ansible-playbook -i production-servers.inventory --user=radu --ask-vault-pass --ask-become-pass playbooks/pre_setup_server.playbook --tags "ssl-certs" -v
任务:
- stat: path={{ ssl_certs_privatekey_path }}
register: ssl_private_key
Peter Lyons建议创建一个孤立的剧本让我意识到这个问题。
谢谢彼得!