mirror of https://github.com/jumpserver/jumpserver
update ansible_api.py
parent
9e0d1a7285
commit
b88c4211b2
|
@ -8,9 +8,32 @@ from ansible.runner import Runner
|
||||||
from ansible.playbook import PlayBook
|
from ansible.playbook import PlayBook
|
||||||
|
|
||||||
|
|
||||||
class MyAnsible(object):
|
class AnsibleError(StandardError):
|
||||||
"""
|
"""
|
||||||
this is my ansible object
|
the base AnsibleError which contains error(required),
|
||||||
|
data(optional) and message(optional).
|
||||||
|
存储所有Ansible 异常对象
|
||||||
|
"""
|
||||||
|
def __init__(self, error, data='', message=''):
|
||||||
|
super(AnsibleError, self).__init__(message)
|
||||||
|
self.error = error
|
||||||
|
self.data = data
|
||||||
|
self.message = message
|
||||||
|
|
||||||
|
|
||||||
|
class CommandValueError(AnsibleError):
|
||||||
|
"""
|
||||||
|
indicate the input value has error or invalid.
|
||||||
|
the data specifies the error field of input form.
|
||||||
|
输入不合法 异常对象
|
||||||
|
"""
|
||||||
|
def __init__(self, field, message=''):
|
||||||
|
super(CommandValueError, self).__init__('value:invalid', field, message)
|
||||||
|
|
||||||
|
|
||||||
|
class MyInventory(object):
|
||||||
|
"""
|
||||||
|
this is my ansible inventory object.
|
||||||
"""
|
"""
|
||||||
def __init__(self, resource):
|
def __init__(self, resource):
|
||||||
"""
|
"""
|
||||||
|
@ -25,7 +48,7 @@ class MyAnsible(object):
|
||||||
|
|
||||||
def _gen_inventory(self):
|
def _gen_inventory(self):
|
||||||
"""
|
"""
|
||||||
add hosts to inventory
|
add hosts to inventory.
|
||||||
"""
|
"""
|
||||||
my_group = Group(name='my_group')
|
my_group = Group(name='my_group')
|
||||||
|
|
||||||
|
@ -48,12 +71,23 @@ class MyAnsible(object):
|
||||||
self.inventory = my_inventory
|
self.inventory = my_inventory
|
||||||
|
|
||||||
|
|
||||||
def run_command(self, command, module_name="command", timeout=5, forks=10):
|
class Command(MyInventory):
|
||||||
"""
|
"""
|
||||||
run command from andible ad-hoc
|
this is a command object for parallel execute command.
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(Command, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def run(self, command, module_name="command", timeout=5, forks=10):
|
||||||
|
"""
|
||||||
|
run command from andible ad-hoc.
|
||||||
command : 必须是一个需要执行的命令字符串, 比如
|
command : 必须是一个需要执行的命令字符串, 比如
|
||||||
'uname -a'
|
'uname -a'
|
||||||
"""
|
"""
|
||||||
|
if module_name not in ["raw", "command", "shell"]:
|
||||||
|
raise CommandValueError("module_name",
|
||||||
|
"module_name must be of the 'raw, command, shell'")
|
||||||
hoc = Runner(module_name=module_name,
|
hoc = Runner(module_name=module_name,
|
||||||
module_args=command,
|
module_args=command,
|
||||||
timeout=timeout,
|
timeout=timeout,
|
||||||
|
@ -68,7 +102,7 @@ class MyAnsible(object):
|
||||||
@property
|
@property
|
||||||
def raw_results(self):
|
def raw_results(self):
|
||||||
"""
|
"""
|
||||||
get the ansible raw results
|
get the ansible raw results.
|
||||||
"""
|
"""
|
||||||
return self.results
|
return self.results
|
||||||
|
|
||||||
|
@ -76,7 +110,7 @@ class MyAnsible(object):
|
||||||
@property
|
@property
|
||||||
def exec_time(self):
|
def exec_time(self):
|
||||||
"""
|
"""
|
||||||
get the command execute time
|
get the command execute time.
|
||||||
"""
|
"""
|
||||||
result = {}
|
result = {}
|
||||||
all = self.results.get("contacted")
|
all = self.results.get("contacted")
|
||||||
|
@ -91,7 +125,7 @@ class MyAnsible(object):
|
||||||
@property
|
@property
|
||||||
def stdout(self):
|
def stdout(self):
|
||||||
"""
|
"""
|
||||||
get the comamnd standard output
|
get the comamnd standard output.
|
||||||
"""
|
"""
|
||||||
result = {}
|
result = {}
|
||||||
all = self.results.get("contacted")
|
all = self.results.get("contacted")
|
||||||
|
@ -103,7 +137,7 @@ class MyAnsible(object):
|
||||||
@property
|
@property
|
||||||
def stderr(self):
|
def stderr(self):
|
||||||
"""
|
"""
|
||||||
get the command standard error
|
get the command standard error.
|
||||||
"""
|
"""
|
||||||
result = {}
|
result = {}
|
||||||
all = self.results.get("contacted")
|
all = self.results.get("contacted")
|
||||||
|
@ -116,18 +150,52 @@ class MyAnsible(object):
|
||||||
@property
|
@property
|
||||||
def dark(self):
|
def dark(self):
|
||||||
"""
|
"""
|
||||||
get the dark results
|
get the dark results.
|
||||||
"""
|
"""
|
||||||
return self.results.get("dark")
|
return self.results.get("dark")
|
||||||
|
|
||||||
|
|
||||||
|
class Tasks(Command):
|
||||||
|
"""
|
||||||
|
this is a tasks object for include the common command.
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(Tasks, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class MyPlaybook(MyInventory):
|
||||||
|
"""
|
||||||
|
this is my playbook object for execute playbook.
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(MyPlaybook, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def deploy(self):
|
||||||
|
"""
|
||||||
|
use ansible playbook to deploy a application.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class App(MyPlaybook):
|
||||||
|
"""
|
||||||
|
this is a app object for inclue the common playbook.
|
||||||
|
"""
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(App, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
resource = [{"hostname": "127.0.0.1", "port": "22", "username": "root", "password": "xxx"},
|
resource = [{"hostname": "127.0.0.1", "port": "22", "username": "root", "password": "xxx"},
|
||||||
{"hostname": "192.168.10.128", "port": "22", "username": "root", "password": "xxx"}]
|
{"hostname": "192.168.10.128", "port": "22", "username": "root", "password": "xxx"}]
|
||||||
myansible = MyAnsible(resource)
|
command = Command(resource)
|
||||||
myansible.run_command("uname -a")
|
command.run("uname -a", "copy")
|
||||||
print myansible.stdout
|
print command.stdout
|
||||||
|
print command.stderr
|
||||||
|
print command.dark
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue