我需要使用ansible编写一个json文件
所以我使用了ansible shell模块。
但是它给出了这样的错误:
任务生成证书**********************************************************致命: xxx.xxx.xx.xxx:失败!=> {“已更改”:真,"cmd":"cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-控制器-csr.json cfssljson -bare kube-控制器-manager \n",“增量”:"0:00:00.015363","end":"2020-08-14 16:26:35.643003",“g”:“非零返回码”,"rc":1,“启动”:"2020-08-14 16:26:35.627640“、"stderr":”未能加载配置文件:{“代码”:5200、“消息”:“无法读取配置文件”}}无法解析输入:意外结束的JSON输入、"stderr_lines":“未能加载配置文件:{”代码“:5200、”消息“}解析输入失败:无法解析输入:"stdout":”"stdout_lines":[]}播放RECAP ********************************************************************* 35.246.9.221 : ok=2 changed=1 unreachable=0 failed=1 skipped=0 rescued=0 ignored=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 有人能告诉我这个错误是什么以及它发生的原因吗?
发布于 2020-08-17 12:02:58
所以,如果您真的想将数据保存在剧本本身中,那么您可以做的就是在YAML词典中转换JSON数据。
实际JSON的等效表示形式是:
certificate:
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然后,在此基础上,在使用带有过滤器参数的copy模块之前,只需在上面应用一个content。
因此,考虑到这个剧本:
- hosts: all
gather_facts: no
vars:
certificate:
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
tasks:
- copy:
dest: kube-controller-manager-csr.json
content: "{{ certificate | to_json }}" 最后我们要做的是:
PLAY [all] **********************************************************************************************************
TASK [copy] *********************************************************************************************************
changed: [localhost]
PLAY RECAP **********************************************************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 和这个kube控制器管理器csr.json文件
{"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"}]}一些额外的注释:
to_json筛选器切换到使用过滤器。to_json过滤器的剧本也是一个工作的:- gather_facts: all gather_facts: no vars:证书:{ "CN":“system:kube-控制器-manager”,"key":{ "algo":"rsa","size":2048 },“名称”:{ "C":"US","L":“波特兰”,"O":“系统:kube-控制器-manager”,"OU":"Kubernetes The Hard Way",任务:- copy: dest: kube-controller-manager-csr.json内容:"{{证书}“https://stackoverflow.com/questions/63416703
复制相似问题