python3 rid1.7.4.2 控制台中文乱码_python3 ansible api 命令和playbook

#coding: utf-8

importosimportsysfrom collections importnamedtuplefrom ansible.parsing.dataloader importDataLoaderfrom ansible.vars.manager importVariableManagerfrom ansible.inventory.manager importInventoryManagerfrom ansible.executor.playbook_executor importPlaybookExecutorfrom ansible.playbook.play importPlayfrom ansible.executor.task_queue_manager importTaskQueueManagerfrom ansible.plugins.callback importCallbackBase#存放yml的目录

YML_DIR = ''

classansible_Runner(object):"""This is a General object for parallel execute modules."""

def __init__(self, resource, *args, **kwargs):

self.resource=resource

self.inventory=None

self.variable_manager=None

self.loader=None

self.options=None

self.passwords=None

self.callback=None

self.__initializeData()

self.results_raw={}def __initializeData(self):"""初始化ansible配置"""Options= namedtuple('Options',

['listtags', 'listtasks', 'listhosts', 'syntax', 'connection', 'module_path', 'forks','remote_user', 'private_key_file', 'ssh_common_args', 'ssh_extra_args', 'sftp_extra_args','scp_extra_args', 'become', 'become_method', 'become_user', 'verbosity', 'check', 'diff'])

self.loader=DataLoader()

self.options= Options(listtags=False, listtasks=False, listhosts=False, syntax=False, connection='ssh',

module_path=None, forks=100, remote_user='root', private_key_file=None,

ssh_common_args=None, ssh_extra_args=None, sftp_extra_args=None, scp_extra_args=None,

become=True, become_method='sudo', become_user='root', verbosity=None, check=False,

diff=False)

self.passwords= dict(vault_pass='secret')

self.inventory= InventoryManager(loader=self.loader, sources=self.resource)

self.variable_manager= VariableManager(loader=self.loader, inventory=self.inventory)defrun(self, host_list, module_name, module_args, ):"""run module from andible ad-hoc.

module_name: ansible module_name

module_args: ansible module args"""play_source=dict(

name="Ansible Ad-hoc Command",

hosts=host_list,

gather_facts='no',

tasks=[dict(action=dict(module=module_name, args=module_args))]

)

play= Play().load(play_source, variable_manager=self.variable_manager, loader=self.loader)

tqm=None

self.callback=ResultsCollector()try:

tqm=TaskQueueManager(

inventory=self.inventory,

variable_manager=self.variable_manager,

loader=self.loader,

options=self.options,

passwords=self.passwords,

stdout_callback='default',

)

tqm._stdout_callback=self.callback

result=tqm.run(play)#print self.callback

finally:if tqm is notNone:

tqm.cleanup()defrun_playbook(self, playbook_name):try:

self.callback=ResultsCollector()

playbook_file= [YML_DIR +playbook_name]print(playbook_file)#template_file = BASE_DIR + "roles/"+ role_name + "/templates"

if notos.path.exists(playbook_name):print('%s 路径不存在' %playbook_file)

sys.exit()

executor=PlaybookExecutor(

playbooks=playbook_file, inventory=self.inventory, variable_manager=self.variable_manager,

loader=self.loader,options=self.options, passwords=self.passwords

)

executor._tqm._stdout_callback=self.callback

executor.run()exceptException as e:print("Failure in run_playbook:%s"%e)pass

defget_result(self):

self.results_raw= {'success': {}, 'failed': {}, 'unreachable': {}}for host, result inself.callback.host_ok.items():

self.results_raw['success'][host] =result._resultfor host, result inself.callback.host_failed.items():

self.results_raw['failed'][host] =result._resultfor host, result inself.callback.host_unreachable.items():

self.results_raw['unreachable'][host] = result._result['msg']returnself.results_rawclassResultsCollector(CallbackBase):def __init__(self, *args, **kwargs):

super(ResultsCollector, self).__init__(*args, **kwargs)

self.host_ok={}

self.host_unreachable={}

self.host_failed={}defv2_runner_on_unreachable(self, result):

self.host_unreachable[result._host.get_name()]=resultdef v2_runner_on_ok(self, result, *args, **kwargs):

self.host_ok[result._host.get_name()]=resultdef v2_runner_on_failed(self, result, *args, **kwargs):

self.host_failed[result._host.get_name()]= result

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值