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
92f39676
Commit
92f39676
authored
Nov 01, 2016
by
Administrator
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[future] 完成获取硬件和链接测试的第一版v1
1. 完成数据结果的封装, 添加数据结构样列 2. 完成硬件和链接测试接口v1版
parent
97b8bcd5
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
78 additions
and
26 deletions
+78
-26
ansible_api.py
apps/ops/ansible_api.py
+3
-4
models.py
apps/ops/models.py
+4
-3
taskers.py
apps/ops/taskers.py
+71
-19
No files found.
apps/ops/ansible_api.py
View file @
92f39676
...
...
@@ -21,7 +21,6 @@ from ansible.plugins.callback import CallbackBase
from
models
import
Tasker
,
AnsiblePlay
,
AnsibleTask
,
AnsibleHostResult
logger
=
logging
.
getLogger
(
__name__
)
...
...
@@ -30,13 +29,13 @@ class AnsibleError(StandardError):
class
Config
(
object
):
"""Ansible运行时配置类, 用于初始化Ansible.
"""Ansible运行时配置类, 用于初始化Ansible
的一些默认配置
.
"""
def
__init__
(
self
,
verbosity
=
None
,
inventory
=
None
,
listhosts
=
None
,
subset
=
None
,
module_paths
=
None
,
extra_vars
=
None
,
forks
=
None
,
ask_vault_pass
=
False
,
vault_password_files
=
None
,
new_vault_password_file
=
None
,
forks
=
10
,
ask_vault_pass
=
False
,
vault_password_files
=
None
,
new_vault_password_file
=
None
,
output_file
=
None
,
tags
=
None
,
skip_tags
=
None
,
one_line
=
None
,
tree
=
None
,
ask_sudo_pass
=
False
,
ask_su_pass
=
False
,
sudo
=
None
,
sudo_user
=
None
,
become
=
None
,
become_method
=
None
,
become_user
=
None
,
become_ask_pass
=
False
,
ask_pass
=
False
,
private_key_file
=
None
,
remote_user
=
None
,
connection
=
"smart"
,
timeout
=
None
,
ssh_common_args
=
None
,
ask_pass
=
False
,
private_key_file
=
None
,
remote_user
=
None
,
connection
=
"smart"
,
timeout
=
10
,
ssh_common_args
=
None
,
sftp_extra_args
=
None
,
scp_extra_args
=
None
,
ssh_extra_args
=
None
,
poll_interval
=
None
,
seconds
=
None
,
check
=
False
,
syntax
=
None
,
diff
=
None
,
force_handlers
=
None
,
flush_cache
=
None
,
listtasks
=
None
,
listtags
=
None
,
module_path
=
None
):
self
.
verbosity
=
verbosity
...
...
apps/ops/models.py
View file @
92f39676
...
...
@@ -142,8 +142,9 @@ class AnsibleHostResult(models.Model):
"""
result
=
{}
for
key
in
interfaces
:
if
"ansible_"
+
key
in
facts
.
keys
():
result
[
key
]
=
facts
.
get
(
key
)
gather_key
=
"ansible_"
+
key
if
gather_key
in
facts
.
keys
():
result
[
key
]
=
facts
.
get
(
gather_key
)
return
result
def
__deal_setup
(
self
):
...
...
@@ -175,7 +176,7 @@ class AnsibleHostResult(models.Model):
data
[
'interface'
]
=
self
.
__gather_interface
(
facts
,
interfaces
)
return
{
"msg"
:
None
,
"data"
:
data
}
else
:
return
{
"msg"
:
"there
isn't module_name field
! can't process this data format"
,
"data"
:
None
}
return
{
"msg"
:
"there
result isn't ansible setup module result
! can't process this data format"
,
"data"
:
None
}
@property
def
deal_setup
(
self
):
...
...
apps/ops/taskers.py
View file @
92f39676
# ~*~ coding: utf-8 ~*~
from
__future__
import
unicode_literals
from
.tasks
import
*
from
.models
import
Tasker
,
AnsiblePlay
,
AnsibleTask
,
AnsibleHostResult
from
.models
import
Tasker
from
uuid
import
uuid1
from
celery.result
import
AsyncResult
...
...
@@ -15,26 +16,71 @@ def get_result(task_id):
return
{
"Completed"
:
False
,
"data"
:
None
}
def
start_get_hardware_info
(
*
assets
):
name
=
"Get host hardware information"
uuid
=
"tasker-"
+
uuid1
()
.
hex
get_asset_hardware_info
.
delay
(
name
,
uuid
,
*
assets
)
return
uuid
def
__get_hardware_info
(
tasker_uuid
):
def
__get_result_by_tasker_id
(
tasker_uuid
,
deal_method
):
tasker
=
Tasker
.
objects
.
get
(
uuid
=
tasker_uuid
)
total
=
tasker
.
total_hosts
total_len
=
len
(
total
)
host_results
=
[]
# 存储数据
for
play
in
tasker
.
plays
.
all
():
for
t
in
play
.
tasks
.
all
():
task
=
{
'name'
:
t
.
name
,
'uuid'
:
t
.
uuid
,
'percentage'
:
0
,
'completed'
:
{
'success'
:
{},
'failed'
:
{}}}
completed
=
[]
count
=
0
for
h
in
t
.
host_results
.
all
():
host_results
.
append
(
h
)
completed
.
append
(
h
.
name
)
count
+=
1
if
h
.
is_success
:
result
=
getattr
(
h
,
deal_method
)
if
result
.
get
(
'msg'
)
is
None
:
task
[
'completed'
][
'success'
][
h
.
name
]
=
result
.
get
(
'data'
)
else
:
task
[
'completed'
][
'failed'
][
h
.
name
]
=
result
.
get
(
'msg'
)
else
:
task
[
'completed'
][
'failed'
][
h
.
name
]
=
h
.
failed_msg
# 计算进度
task
[
'percentage'
]
=
float
(
count
*
100
/
total_len
)
task
[
'waited'
]
=
list
(
set
(
total
)
-
set
(
completed
))
host_results
.
append
(
task
)
return
host_results
def
start_get_hardware_info
(
*
assets
):
name
=
"Get host hardware information"
uuid
=
"tasker-"
+
uuid1
()
.
hex
get_asset_hardware_info
.
delay
(
name
,
uuid
,
*
assets
)
return
uuid
def
__get_hardware_info
(
tasker_uuid
):
return
__get_result_by_tasker_id
(
tasker_uuid
,
'deal_setup'
)
def
get_hardware_info
(
tasker_uuid
):
"""
:param assets: 资产列表
:return: 返回数据结构样列
{u'data': [{u'completed': {
u'failed': {u'192.168.232.135': u'Authentication failure.'},
u'success': {u'192.168.1.119': {u'cpu': u'GenuineIntel Intel Xeon E312xx (Sandy Bridge) 6
\u6838
',
u'disk': {<device_name>: <device_detail_dict>},
u'env': {<env_name>: <env_value>},
u'interface': {<interface_name>: <interface_detail_dict>},
u'mem': 3951,
u'os': u'Ubuntu 16.04(xenial)',
u'sn': u'NA'}}},
u'name': u'',
u'percentage': 100.0,
u'uuid': u'87cfedfe-ba55-44ff-bc43-e7e73b869ca1',
u'waited': []}
],
u'msg': None}
"""
try
:
return
{
"msg"
:
None
,
"data"
:
__get_hardware_info
(
tasker_uuid
)}
except
Exception
as
e
:
...
...
@@ -49,18 +95,24 @@ def start_ping_test(*assets):
def
__get_ping_test
(
tasker_uuid
):
tasker
=
Tasker
.
objects
.
get
(
uuid
=
tasker_uuid
)
host_results
=
[]
for
play
in
tasker
.
plays
.
all
():
for
t
in
play
.
tasks
.
all
():
for
h
in
t
.
host_results
.
all
():
host_results
.
append
(
h
)
return
host_results
return
__get_result_by_tasker_id
(
tasker_uuid
,
'deal_ping'
)
def
get_ping_test
(
tasker_uuid
):
"""
:param assets: 资产列表
:return: 返回数据结构样列
{u'data': [{u'completed': {
u'failed': {u'192.168.232.135': u'Authentication failure.'},
u'success': {u'192.168.1.119': {u'success': True}}},
u'name': u'',
u'percentage': 100.0,
u'uuid': u'3e6e0d3b-bee0-4383-b19e-bec6ba55d346',
u'waited': []}
],
u'msg': None}
"""
try
:
return
{
"msg"
:
None
,
"data"
:
__get_ping_test
(
tasker_uuid
)}
except
Exception
as
e
:
...
...
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