Как вставить Ansible вывод std_outlines JSON в MongoDB с помощью Python - PullRequest
0 голосов
/ 14 февраля 2020

Я выполняю следующую задачу в моей книге игр

- 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 или тип, который наследуется от коллекций. MutableMapping

Может кто-нибудь сказать мне, как мне вставить эти данные?

1 Ответ

0 голосов
/ 14 февраля 2020

Я провел быстрый тест. Это прекрасно работает:

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}]"))
...