首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ansible编写json文件

如何使用ansible编写json文件
EN

Stack Overflow用户
提问于 2020-08-14 16:33:31
回答 1查看 6.7K关注 0票数 5

我需要使用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

代码语言:javascript
复制
---
- 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                               

有人能告诉我这个错误是什么以及它发生的原因吗?

EN

回答 1

Stack Overflow用户

发布于 2020-08-17 12:02:58

所以,如果您真的想将数据保存在剧本本身中,那么您可以做的就是在YAML词典中转换JSON数据。

实际JSON的等效表示形式是:

代码语言:javascript
复制
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

因此,考虑到这个剧本:

代码语言:javascript
复制
- 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 }}" 

最后我们要做的是:

代码语言:javascript
复制
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文件

代码语言:javascript
复制
{"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"}]}

一些额外的注释:

  • 在这里,JSON并不是真正的人类可读的(所有都在一行中)。如果这导致了问题,您可以从使用to_json筛选器切换到使用过滤器
  • YAML是一个自然的JSON超集,这意味着您实际上可以使用一个JSON结构作为一个有效的YAML变量。 不过,我不会这么做,因为我觉得在YAML文件中混合两种语言是很奇怪的,但是如果您个人没有看到反对它,这个甚至不使用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内容:"{{证书}“
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63416703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档