首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ansible playbook中替换来自JSON响应(来自uri)的变量,以创建本地用户帐户

在ansible playbook中替换来自JSON响应(来自uri)的变量,以创建本地用户帐户
EN

Stack Overflow用户
提问于 2019-08-15 04:34:44
回答 1查看 191关注 0票数 1

我有JSON作为查询到CMDB的输出,其中包含有关本地用户的信息,如UID,GID等。我想在ansible playbook中替换它们来创建这些帐户。我知道如何将它用作一个变量。但我想将它用于更多的变量作为参数-一个来自UID,GID,ssh公钥等的键的值。有什么建议或帮助吗?

JSON答案

代码语言:javascript
复制
$ curl -s -k "https://cmdb.test.loc/api/getusers.php" | jq -r '.'
{
  "users": [
    {
      "login": "johnd",
      "description": "John Doe",
      "uid": "9004",
      "sshpubkey": "ssh-rsa AAsQxHUC4mshf+mXy3+Evtd1l9/x/DF5tR1AMI9i0CQoggxX6GbxRb+lYVySUmCgnMqT/dVcOlL3ETzSnubeoC3o4Yjv9Q1NLrw== johnd@lin.x"
    },
    {
      "login": "thomasm",
      "description": "Thomas Mann",
      "uid": "9003",
      "sshpubkey": "ssh-rsa AAAdUG4PPLzrJo/M5StBXsgUcUQAPuU4y1vXIJIw+o5mx/IkxpZVvbWTqx6HbLJD8CL5jp4wpXb1UGjyYorvumrGyArYWAXWOQZNdzsIeTp1Z9tZb0qoVkGX1aR1HGst36FbcYDTB3yEmliYHSNQ== thomasm@lin.x"
    },
    {
      "login": "trib",
      "description": "Three Be",
      "uid": "9002",
      "sshpubkey": "ssh-rsa AAAAB3NzpyNyRsdvthGYzkm0rvEug1RRwURWZ9d++TzJtoWZrCKw7Ec8PJGgNJvHRAvFdSJ8mKXAK3U0WIc46P2Ij7BJzCR4o900Sad/qeYSlY7xL+oW+nXWPUuxCVT25pHAeTJDjHeHJmpqDpHGg8sLmQMXtwCb5r6YxFUOUSlM1L2Q2iVedC/IXKMTFP+7Wp9YvPX75MVjMWc6L1xCZMsBk+dQ== 3be@lin.x"
    }
  ]
}

playbook.yml的开始

代码语言:javascript
复制
 ---
 - hosts: all
   tasks:
   - name: Take information about actual users from CMDB
     uri:
       url: "https://cmdb.test.loc/api/getusers.php"
       validate_certs: false
       method: GET
       status_code: 200,400
       body_format: json
       return_content: yes
     register: cmdb_users

   - name: Filter and rename variables from source list
     debug:
       msg: "{{ cmdb_users.json | json_query('users[*].{login: login, description: description, uid: uid, sshpubkey: sshpubkey}') }}"
   - set_fact:
       users: "{{ cmdb_users.json | json_query('users[*].{login: login, description: description, uid: uid, sshpubkey: sshpubkey}') }}"

...

我想对下一步使用它来创建帐户有任何建议:

代码语言:javascript
复制
- name : Create local users
  user: 
    name : {{ ??? }}
    uid : {{ ??? }}
    comment : {{ ??? }}   

我知道授权密钥文件必须通过其他方式创建,但我认为,它可以创建为shell“回显”到特定文件到由变量组成的特定路径。

EN

回答 1

Stack Overflow用户

发布于 2019-08-15 06:12:12

下面的循环应该可以完成此工作

代码语言:javascript
复制
- name: Create local users
  user:
    name: "{{ item.login }}"
    uid: "{{ item.uid|int }}"
    comment: "{{ item.description }}"
  loop: "{{ users }}"

下一个循环将把文件的公钥存储在pub_key_dir

代码语言:javascript
复制
- name: Store public keys to files
  copy:
    dest: "{{ pub_key_dir }}/{{ item.login }}.sshpubkey"
    content: |
      {{ item.sshpubkey }}
  loop: "{{ users }}"

备注

1)模块的正确名称为user

2)在剧本中,注册变量为cmdb_users。正确的列表可能是

代码语言:javascript
复制
loop: "{{ cmdb_users.json.users }}"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57501688

复制
相关文章

相似问题

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