我需要使用 Ansible 使用该shell
模块编写一个 JSON 文件。
但它给出了这个错误:
任务 [生成证书] ************************************************* ************* 致命:[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 : 确定=2 更改=1 无法访问=0 失败=1 已跳过=0 已获救=0 已忽略=0
这是这个的剧本:
---
- 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
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我更多有关此错误及其发生原因的信息吗?
β.ε*_*.βε 11
因此,如果您确实想将数据保留在 playbook 本身中,您可以做的是将 JSON 数据转换为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
Run Code Online (Sandbox Code Playgroud)
然后,基于此,您可以简单地在其之上应用一个to_json
过滤器copy
,然后再使用带有content
参数的模块。
所以给出这个任务:
- copy:
dest: kube-controller-manager-csr.json
content: "{{ certificate | to_json }}"
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
Run Code Online (Sandbox Code Playgroud)
我们最终得到这个kube-controller-manager-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"}]}
Run Code Online (Sandbox Code Playgroud)
一些额外的注意事项:
to_json
过滤器切换为使用to_nice_json
过滤器to_json
也是一个有效的剧本:
- copy:
dest: kube-controller-manager-csr.json
content: "{{ certificate }}"
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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14010 次 |
最近记录: |