python调用ansible远程执行命令

1. 概述

    需要通过页面进行远程启停程序,目前通过ansible部署应用,调用部署机器的ansible命令来实现,ansible api 2.0后比较复杂且不好用,所以采用了这种简单方式,记录下。页面部分未加入,后续需要可以添加。

2. 代码实现

  前端页面调用可以使用django或flask等等,只要把下面方法加入进去就能完成通过页面启动和停止应用。

#!/usr/bin/python
# _*_coding:utf-8_*_
# @Time     : 2019/5/29 上午9:36
# @Author   : blackysy
# @File     : RemoteExec.py
# @Software : PyCharm

import sys
import paramiko


# 连接构建服务器
def ssh_connect():
    hostname = '192.168.250.2'
    username = 'jenkins'
    password = '123456'
    try:
        ssh_fd = paramiko.SSHClient()
        ssh_fd.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh_fd.connect(hostname, username=username, password=password)
        return ssh_fd
    except Exception as e:
        print('ssh %s@%s: %s' % (username, hostname, e))
        exit()


# 远程执行命令方法
def ssh_exec_cmd(ssh_fd, cmd):
    return ssh_fd.exec_command(cmd)


# 关闭ssh连接
def ssh_close(ssh_fd):
    ssh_fd.close()


# 启动应用
def app_start(ip, user, app_type, exec_cmd):
    if app_type == 'jdk':
        cmd = "ansible %s -u %s -m shell -a 'source ~/.bash_profile && cd $BIN_HOME && sh %s'" \
              % (ip, user, exec_cmd)
    elif app_type == 'tomcat':
        cmd = "ansible %s -u %s -m shell -a 'source ~/.bash_profile && cd $BIN_HOME/.. && nohup ./bin/startup.sh'" \
              % (ip, user)
    else:
        sys.exit(0)

    sshd = ssh_connect()
    stdin, stdout, stderr = ssh_exec_cmd(sshd, cmd)
    err_list = stderr.readlines()

    if len(err_list) > 0:
        print('Start failed:' + err_list[0])
        sys.exit(0)
    else:
        print('Start success.')

    for item in stdout.readlines():
        print item

    ssh_close(sshd)


# 停止应用
def app_stop(ip, user):
    cmd = """ansible %s -u %s -m shell -a 'ps x|grep java|grep -v grep|cut -d " " -f 1|xargs kill -9'""" \
          % (ip, user)
    sshd = ssh_connect()
    stdin, stdout, stderr = ssh_exec_cmd(sshd, cmd)
    err_list = stderr.readlines()

    if len(err_list) > 0:
        print('Stop failed: ' + err_list[0])
        sys.exit(0)
    else:
        print('Stop success.')

    for item in stdout.readlines():
        print item

    ssh_close(sshd)


# 测试1 netty或者spring非tomcat的应用启动方法
# app_start(ip='192.168.250.103', user='pay_str', app_type='jdk', exec_cmd='start.sh 172.28.250.242 172.28.250.142')

# 测试2 tomcat的应用启动方法
# app_start(ip='192.168.250.103', user='client_str', app_type='tomcat', exec_cmd='')

# 测试3 停止应用的方法
# app_stop(ip='192.168.250.103', user='client_str')

 

转载于:https://www.cnblogs.com/blackysy/p/10945211.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ansible 是一种自动化运维工具,可以用于管理和配置多个计算机系统。它使用 Python 编写,并且提供了一个简单易用的 DSL(Domain Specific Language)来描述系统配置和部署任务。使用 Ansible,可以通过编写 Playbooks 来定义系统配置和任务,然后通过 SSH 协议远程执行这些任务。 在 Python 中使用 Ansible,可以使用 AnsiblePython API 来编写自动化脚本。这个 API 提供了一系列的模块和方法,可以用于远程执行命令、复制文件、安装软件等操作。你可以通过在 Python 脚本中导入 Ansible 的相关模块,然后调用相应的方法来完成自动化运维任务。 以下是一个简单的示例代码,演示了如何使用 AnsiblePython API 来执行远程命令: ```python from ansible import context from ansible.playbook import Playbook from ansible.executor.playbook_executor import PlaybookExecutor # 设置 Ansible 的上下文 context.CLIARGS = { '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': None, 'become_method': None, 'become_user': None, 'verbosity': None, 'check': False, 'start_at_task': None, } # 定义 Playbook 的路径和主机列表 playbook_path = '/path/to/playbook.yaml' host_list = '/path/to/hosts' # 创建 Playbook 对象和执行器 playbook = Playbook.load(playbook_path) executor = PlaybookExecutor( playbooks=[playbook], inventory=host_list, variable_manager=playbook._variable_manager, loader=playbook._loader, ) # 执行 Playbook executor.run() ``` 上面的代码中,我们首先设置了 Ansible 的上下文,然后定义了 Playbook 的路径和主机列表。接着创建了 Playbook 对象和执行器,并最终执行了 Playbook。 需要注意的是,上述示例代码中的相关路径和参数需要根据实际情况进行修改。另外,为了运行该示例代码,你需要安装 ansible-python 包。可以使用 pip 命令进行安装: ``` pip install ansible ``` 希望这个示例能帮助到你开始使用 Ansible 进行自动化运维的 Python 编程。如果有更多问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值