我需要一个工具,用于在预先创建正确的数据库名称,集合,设置集合上限的环境之间快速重新创建MongoDB实例的正确"模式"(例如它),并为每个集合创建索引.不过,我不想复制实例之间的所有数据.我管理的每个env都有不同的数据,但DB/collection/caps/index都是相同的.有没有一种简单的方法可以做到这一点,最好是一个导出所有名称,大写和索引的JSON doc的工具,然后可以将其重新导入到新实例中?
我想创建一个Jenkins作业,我在那里备份并将某些数据库部署到远程MongoDB实例.我希望这个构建参数化,以便在构建时用户从有效的MongoDB主机名列表中选择,然后一旦用户选择了有效的DB主机名,第二个列表参数选择框将动态填充所有有效的数据库名称在那个主机名上.然后,一旦用户选择了DB名称,该名称将存储在参数"DB"中,该参数可以传递给Build Step"Execute Shell"脚本以执行实际工作.
我的问题是我需要一种方法来执行Jenkins动态参数(级联)插件中的脚本,该插件将运行一个shell(或理想情况下,python)脚本,该脚本将返回所选主机上的有效DB名称列表.我无法获得插件的groovy脚本部分来在本地操作系统上执行shell命令(就像"执行Shell"构建步骤那样).
理想情况下,我想运行这样的东西,其中"MONGOHOST"是用户选择的第一个参数:
#!/usr/bin/env python
from pymongo import MongoClient
client = MongoClient('mongodb://${MONGOHOST}:27017/')
choicelist = client.database_names()
client.close()
Run Code Online (Sandbox Code Playgroud)
然后,我会以"选择列表"的形式呈现,因为它们会被填充为"DB"参数的可用选项.
我怎样才能实现这一点,特别是因为Dynamic Choice参数只接受groovy脚本而不是本机python?
我正在尝试使用CentOS 6.5中的python建立与REST API的简单HTTPS连接。安装的是python-2.6.6-52.el6.x86_64和openssl-1.0.1e-16.el6_5.7.x86_64。
#!/usr/bin/env python
import httplib, json, urllib, urllib2
# Gets the session ID to host
c = httplib.HTTPSConnection("10.10.1.1")
c.request("GET", "/services/rest/V2/?method=authenticate&username=myusername&password=mypasswd&format=json")
response = c.getresponse()
data = json.loads(response.read())
session_id = data['session_id']
print "Session Created. Session ID: " + session_id
Run Code Online (Sandbox Code Playgroud)
但是,它给了我这个错误:
Traceback (most recent call last):
File "./test3.py", line 7, in <module>
c.request("GET", "/services/rest/V2/?method=authenticate&username=myusername&password=mypasswd&format=json")
File "/usr/lib64/python2.6/httplib.py", line 914, in request
self._send_request(method, url, body, headers)
File "/usr/lib64/python2.6/httplib.py", line 951, in _send_request
self.endheaders()
File "/usr/lib64/python2.6/httplib.py", line 908, in endheaders
self._send_output()
File "/usr/lib64/python2.6/httplib.py", line …Run Code Online (Sandbox Code Playgroud) 我希望在它们中有一组带有基本应用程序配置手册的git repos,这样我所需要处理的任何虚拟机,无论其名称或角色如何,或者它的存在时间,以便安装基本配置都是为了运行针对此repo的ansible-pull命令,我得到了一个准备好使用的实例.我遇到的问题是,如果我有一个像这样设置的playbook local.yml:
- hosts: localhost
connection: local
gather_facts: yes
user: root
[...]
Run Code Online (Sandbox Code Playgroud)
或者像这样:
- hosts: all
connection: local
gather_facts: yes
user: root
[...]
Run Code Online (Sandbox Code Playgroud)
我一直收到以下错误:
# ansible-pull -d /tmp/myrepo -U 'http://mygithost/myrepo'
Starting ansible-pull at 2015-06-09 15:04:05
localhost | success >> {
"after": "2e4d1c637170f95dfaa8d16ef56491b64a9f931b",
"before": "d7520ea15baa8ec2c45742d0fd8e209c293c3487",
"changed": true
}
**ERROR: Specified --limit does not match any hosts**
Run Code Online (Sandbox Code Playgroud)
我能够避免错误的唯一方法是创建一个带有显式组名和显式主机名的显式库存文件,然后使用'-i'标志引用它,如下所示:
# cat /tmp/myrepo/myinventory
[mygroup]
myhost1
myhost2
# cat /tmp/myrepo/local.yml
- hosts: mygroup
connection: local
gather_facts: yes
user: root
[...]
# ansible-pull -d /tmp/myrepo …Run Code Online (Sandbox Code Playgroud)