我有JSON作为查询到CMDB的输出,其中包含有关本地用户的信息,如UID,GID等。我想在ansible playbook中替换它们来创建这些帐户。我知道如何将它用作一个变量。但我想将它用于更多的变量作为参数-一个来自UID,GID,ssh公钥等的键的值。有什么建议或帮助吗?
JSON答案
$ 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的开始
---
- 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}') }}"
...我想对下一步使用它来创建帐户有任何建议:
- name : Create local users
user:
name : {{ ??? }}
uid : {{ ??? }}
comment : {{ ??? }} 我知道授权密钥文件必须通过其他方式创建,但我认为,它可以创建为shell“回显”到特定文件到由变量组成的特定路径。
发布于 2019-08-15 06:12:12
下面的循环应该可以完成此工作
- name: Create local users
user:
name: "{{ item.login }}"
uid: "{{ item.uid|int }}"
comment: "{{ item.description }}"
loop: "{{ users }}"下一个循环将把文件的公钥存储在pub_key_dir中
- name: Store public keys to files
copy:
dest: "{{ pub_key_dir }}/{{ item.login }}.sshpubkey"
content: |
{{ item.sshpubkey }}
loop: "{{ users }}"
备注
1)模块的正确名称为user
2)在剧本中,注册变量为cmdb_users。正确的列表可能是
loop: "{{ cmdb_users.json.users }}"https://stackoverflow.com/questions/57501688
复制相似问题