如何使用Python将Ansible std_outlines输出JSON插入MongoDB中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Python将Ansible std_outlines输出JSON插入MongoDB中相关的知识,希望对你有一定的参考价值。

我正在我的剧本中运行以下任务

- name: get system info  
shell: uname -r  
register: uname_out  
- debug: var=uname_out  
when: conn_out is success  
- name: copy   
copy:  
  content={{ uname_out.stdout_lines }} dest={{inventory_hostname}}.json  

我得到这样的JSON输出

["rhel", "linux", "7", "basevesrion"]

要将这些数据插入MongoDB,我正在编写脚本,如下所示

import json
from pymongo import MongoClient
fileName = "data.json"
print(fileName)

client = MongoClient('10.*.*.*',27017)
db = client['test']
collection_cmdbFact = db['facts']
with open(fileName,'r') as data_file:
  data_json = json.loads(data_file.read())
collection.insert_one(data_json)
client.close()

我收到此错误

TypeError:文档必须是dict,bson.son.SON,bson.raw_bson.RawBSONDocument的实例,或者是从collections.MutableMapping继承的类型的实例

有人可以告诉我如何插入此数据吗?

答案
我进行了快速测试。效果很好:

collection.insert_one(json.loads("{"a":1}"))

虽然这将返回您指出的确切错误:

collection.insert_one(json.loads("[{"a":1},{"a":2}]"))

如果您的文件包含一系列文档,则可能需要使用insert_many

collection.insert_many(json.loads("[{"a":1},{"a":2}]"))

以上是关于如何使用Python将Ansible std_outlines输出JSON插入MongoDB中的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ansible 管理 MySQL 复制

Ansible作为python模块库使用

ansible安装

如何将ansible与两因素身份验证一起使用?

如何快速学习Ansible使用

python中Ansible模块的Playbook理解