Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
6015f242
Commit
6015f242
authored
Mar 05, 2017
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Fixture] 添加PlaybookRunner
parent
01e50d59
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
93 additions
and
0 deletions
+93
-0
ansible_api.py
apps/ops/utils/ansible_api.py
+0
-0
inventory.py
apps/ops/utils/inventory.py
+91
-0
runner.py
apps/ops/utils/runner.py
+2
-0
No files found.
apps/ops/utils/ansible_api.py
View file @
6015f242
This diff is collapsed.
Click to expand it.
apps/ops/utils/inventory.py
0 → 100644
View file @
6015f242
# ~*~ coding: utf-8 ~*~
from
ansible.inventory
import
Inventory
,
Host
,
Group
from
ansible.vars
import
VariableManager
from
ansible.parsing.dataloader
import
DataLoader
class
JMSHost
(
Host
):
def
__init__
(
self
,
asset
):
self
.
asset
=
asset
self
.
name
=
name
=
asset
.
get
(
'hostname'
)
or
asset
.
get
(
'ip'
)
self
.
port
=
port
=
asset
.
get
(
'port'
)
or
22
super
(
JMSHost
,
self
)
.
__init__
(
name
,
port
)
self
.
set_all_variable
()
def
set_all_variable
(
self
):
asset
=
self
.
asset
self
.
set_variable
(
'ansible_host'
,
asset
[
'ip'
])
self
.
set_variable
(
'ansible_port'
,
asset
[
'port'
])
self
.
set_variable
(
'ansible_user'
,
asset
[
'username'
])
# 添加密码和秘钥
if
asset
.
get
(
'password'
):
self
.
set_variable
(
'ansible_ssh_pass'
,
asset
[
'password'
])
if
asset
.
get
(
'key'
):
self
.
set_variable
(
'ansible_ssh_private_key_file'
,
asset
[
'private_key'
])
# 添加become支持
become
=
asset
.
get
(
"become"
,
None
)
if
become
is
not
None
:
self
.
set_variable
(
"ansible_become"
,
True
)
self
.
set_variable
(
"ansible_become_method"
,
become
.
get
(
'method'
))
self
.
set_variable
(
"ansible_become_user"
,
become
.
get
(
'user'
))
self
.
set_variable
(
"ansible_become_pass"
,
become
.
get
(
'pass'
))
else
:
self
.
set_variable
(
"ansible_become"
,
False
)
class
JMSInventory
(
Inventory
):
"""
提供生成Ansible inventory对象的方法
"""
def
__init__
(
self
,
host_list
=
None
):
if
host_list
is
None
:
host_list
=
[]
assert
isinstance
(
host_list
,
list
)
self
.
host_list
=
host_list
self
.
loader
=
DataLoader
()
self
.
variable_manager
=
VariableManager
()
super
(
JMSInventory
,
self
)
.
__init__
(
self
.
loader
,
self
.
variable_manager
,
host_list
=
host_list
)
def
parse_inventory
(
self
,
host_list
):
"""用于生成动态构建Ansible Inventory.
self.host_list: [
{"name": "asset_name",
"ip": <ip>,
"port": <port>,
"user": <user>,
"pass": <pass>,
"key": <sshKey>,
"groups": ['group1', 'group2'],
"other_host_var": <other>},
{...},
]
:return: 返回一个Ansible的inventory对象
"""
# TODO: 验证输入
# 创建Ansible Group,如果没有则创建default组
ungrouped
=
Group
(
'ungrouped'
)
all
=
Group
(
'all'
)
all
.
add_child_group
(
ungrouped
)
self
.
groups
=
dict
(
all
=
all
,
ungrouped
=
ungrouped
)
for
asset
in
host_list
:
host
=
JMSHost
(
asset
=
asset
)
asset_groups
=
asset
.
get
(
'groups'
)
if
asset_groups
:
for
group_name
in
asset_groups
:
if
group_name
not
in
self
.
groups
:
group
=
Group
(
group_name
)
self
.
groups
[
group_name
]
=
group
else
:
group
=
self
.
groups
[
group_name
]
group
.
add_host
(
host
)
else
:
ungrouped
.
add_host
(
host
)
all
.
add_host
(
host
)
apps/ops/utils/runner.py
0 → 100644
View file @
6015f242
# ~*~ coding: utf-8 ~*~
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment