完整的代码已经在github开源:github.com/CTC-maxiao/…python
前面的几节咱们已经完成了执行字典生成器和执行字典执行器,如今咱们只须要编写一个入口程序来接收外界输入而后自动生成执行字典列表,而后再经过task执行器来依次执行任务,就能够彻底整个程序的编写。git
import sys
import getopt
from task_executor import TaskExecutor
from get_tasklist import getTaskList
#getopt是一个很是好用的python库,设定的参数后加":"意味这个参数须要输入
opts,args = getopt.getopt(sys.argv[1:],'-u:-p:-y:-h-v',['user=','password=','yamlfile=','help','version'])
for opt_name,opt_value in opts:
if opt_name in ('-u','--user'):
ssh_user = opt_value
if opt_name in ('-p','--password'):
ssh_pwd = opt_value
if opt_name in ('-y','--yamlfile'):
yaml_file = opt_value
if opt_name in ('-h','--help'):
print "help you"
sys.exit()
if opt_name in ('-v','--version'):
print "version 1.0"
sys.exit()
task_list = getTaskList.get_final_task_list(ssh_user,ssh_pwd,yaml_file)
for task in task_list:
tmp=TaskExecutor.run_task(task)
print tmp
复制代码
这里咱们使用getopt库,这个库能够简洁的接收传入参数,而且支持长参数和短参数两种形式。github
程序至此就已经算是写好了,虽然还很不完善,但已经实现了基本的功能。咱们编写一个简单的playbook来测试一下最终的程序。shell
---
- name: test program on remote machine
host: 192.168.1.34
tasks:
- task_name: create test folder on remote machine
become: yes
become_user: root
action_type: shell
action: mkdir /opt/mstr/test
- task_name: create test folder on localhost
action_type: shell
action: mkdir /opt/mstr/test
delegate_to: localhost
复制代码
这个playbook很是简单,执行后会在本机和远程机器上生成一个文件夹。bash
如今咱们来执行这个playbook:ssh
python main.py -u test_user -p test_pwd -y /opt/mstr/test.yaml
复制代码
运行结束后能够看到,本机和远程机器上成功生成了相应的文件夹。测试
咱们的playbook的格式基本与ansible的一致,但也有一些不一样点须要注意:ui
若是你须要为这个程序编写playbook,请注意以上几点。另外,完整的程序我已经开源到github,欢迎试用和帮忙找bug。 github地址: github.com/CTC-maxiao/…spa