【发布时间】:2020-08-14 16:33:31
【问题描述】:
我需要使用ansible写一个json文件
所以我使用了ansible shell 模块。
但它给出了这个错误:
任务 [生成证书] ****************************************** ****************** 致命:[xxx.xxx.xx.xxx]:失败! => {“更改”:true,“cmd”:“cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-controller-manager- csr.json | cfssljson -bare kube-controller-manager \n", "delta": "0:00:00.015363", "end": "2020-08-14 16:26:35.643003", "msg": "非零返回码”,“rc”:1,“start”:“2020-08-14 16:26:35.627640”,“stderr”:“加载配置文件失败:{“code”:5200,“message ":"无法读取配置文件"}解析输入失败:JSON 输入意外结束", "stderr_lines": ["加载配置文件失败:{"code":5200,"message":"无法读取配置文件“}无法解析输入:JSON输入意外结束”],“stdout”:“”,“stdout_lines”:[]} 播放回顾 ****************************************************** ************************ 35.246.9.221 : ok=2 changed=1 unreachable=0 failed=1 skipped=0 已获救=0ignore=0
这是playbook:
---
- hosts: kube_master
tasks:
- name: Create kube-controller-manager.pem &kube-controller-manager-key.pem
# become: true
shell: |
cat > kube-controller-manager-csr.json << EOF
{
"CN": "system:kube-controller-manager",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "US",
"L": "Portland",
"O": "system:kube-controller-manager",
"OU": "Kubernetes The Hard Way",
"ST": "Oregon"
}
]
}
EOF
- name: Generate certs
shell: |
cfssl gencert \
-ca=ca.pem \
-ca-key=ca-key.pem \
-config=ca-config.json \
-profile=kubernetes \
kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager
谁能告诉我这个错误是什么以及为什么会发生?
【问题讨论】:
-
(a) 你有
ca-config.json并且你确保它 是理智的吗? (b) 你在滥用shell:命令,而你真正想要的是copy:withcontent:- copy: dest: kube-controller-manager-csr.json content: "put your JSON here"(很抱歉 cmets 不支持换行符) -
就像@mdaniel 说的那样,或者如果你真的想在剧本中使用你的json,请将其设为a dictionary in YAML,然后在使用
copy和content: "{{ my_var | to_json }}"时应用to_jsonfilter to it -
@β.εηοιτ.βε 你能给我一个小例子吗?我是
ansible的新手@ -
@β.εηοιτ.βε
my_var是什么意思?我应该把它放在哪里?