Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gjl2004yn
jumpserver
提交
e8d8f7c4
J
jumpserver
项目概览
gjl2004yn
/
jumpserver
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jumpserver
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e8d8f7c4
编写于
8月 30, 2016
作者:
Y
yumaojun03
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ops: ansible_api add ansible api 2.0 adhoc runner
上级
f6b2abb1
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
42 addition
and
10 deletion
+42
-10
apps/ops/ansible_api.py
apps/ops/ansible_api.py
+42
-10
未找到文件。
apps/ops/ansible_api.py
浏览文件 @
e8d8f7c4
...
...
@@ -2,6 +2,7 @@
from
__future__
import
unicode_literals
import
os
import
json
from
ansible.executor.task_queue_manager
import
TaskQueueManager
from
ansible.inventory
import
Inventory
,
Host
,
Group
from
ansible.vars
import
VariableManager
...
...
@@ -10,6 +11,7 @@ from ansible.executor import playbook_executor
from
ansible.utils.display
import
Display
from
ansible.playbook.play
import
Play
import
ansible.constants
as
default_config
from
ansible.plugins.callback
import
CallbackBase
class
AnsibleError
(
StandardError
):
...
...
@@ -142,7 +144,7 @@ class MyInventory(object):
if
key
not
in
[
"name"
,
"port"
,
"ip"
,
"username"
,
"password"
,
"key"
]:
host
.
set_variable
(
key
,
value
)
for
g
in
self
.
groups
:
if
g
.
name
==
asset
[
'group'
]
:
if
g
.
name
==
asset
.
get
(
'group'
,
'default'
)
:
g
.
add_host
(
host
)
def
validate
(
self
):
...
...
@@ -151,6 +153,7 @@ class MyInventory(object):
def
gen_inventory
(
self
):
self
.
validate
()
i
=
Inventory
(
loader
=
self
.
loader
,
variable_manager
=
self
.
variable_manager
,
host_list
=
[])
self
.
__gen_group
()
for
g
in
self
.
groups
:
i
.
add_group
(
g
)
self
.
variable_manager
.
set_inventory
(
i
)
...
...
@@ -223,7 +226,7 @@ class PlayBookRunner(object):
class
ADHocRunner
(
object
):
"""ADHoc接口
"""
def
__init__
(
self
,
inventory
,
config
,
play_data
,
become_pass
,
verbosity
=
0
):
def
__init__
(
self
,
inventory
,
config
,
become_pass
=
None
,
verbosity
=
0
):
"""
:param inventory: myinventory实例
:param config: Config实例
...
...
@@ -251,22 +254,34 @@ class ADHocRunner(object):
self
.
options
.
become_user
=
'root'
self
.
passwords
=
{
'become_pass'
:
become_pass
}
# 初始化
Play
self
.
play
=
Play
().
load
(
play_data
,
variable_manager
=
inventory
.
variable_manager
,
loader
=
inventory
.
loader
)
# 初始化
callback插件
# self.results_callback = ResultCallback(
)
self
.
inventory
=
inventory
.
inventory
# 初始化Play
play_source
=
{
"name"
:
"Ansible Play"
,
"hosts"
:
"*"
,
"gather_facts"
:
"no"
,
"tasks"
:
[
dict
(
action
=
dict
(
module
=
'shell'
,
args
=
'id'
),
register
=
'shell_out'
),
dict
(
action
=
dict
(
module
=
'debug'
,
args
=
dict
(
msg
=
'{{shell_out.stdout}}'
)))
]
}
self
.
play
=
Play
().
load
(
play_source
,
variable_manager
=
inventory
.
variable_manager
,
loader
=
inventory
.
loader
)
self
.
inventory
=
inventory
def
run
(
self
,
play_data
):
def
run
(
self
):
"""执行ADHoc 记录日志, 处理结果
"""
tqm
=
None
# TODO:日志和结果分析
try
:
# TODO: 日志和结果分析
tqm
=
TaskQueueManager
(
inventory
=
self
.
inventory
,
inventory
=
self
.
inventory
.
inventory
,
variable_manager
=
self
.
inventory
.
variable_manager
,
loader
=
self
.
inventory
.
loader
,
stdout_callback
=
default_config
.
DEFAULT_STDOUT_CALLBACK
,
options
=
self
.
options
,
passwords
=
self
.
passwords
)
...
...
@@ -275,4 +290,21 @@ class ADHocRunner(object):
return
result
finally
:
if
tqm
:
tqm
.
cleanup
()
\ No newline at end of file
tqm
.
cleanup
()
if
__name__
==
"__main__"
:
conf
=
Config
()
assets
=
[{
"name"
:
"localhost"
,
"ip"
:
"localhost"
,
"port"
:
"22"
,
"username"
:
"yumaojun"
,
"password"
:
"xxx"
,
"key"
:
"asset_private_key"
,
}]
inv
=
MyInventory
(
*
assets
)
print
inv
.
inventory
.
get_group
(
'default'
).
get_hosts
()
hoc
=
ADHocRunner
(
inv
,
conf
,
'xxx'
)
hoc
.
run
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录