返回顶部
首页 > 资讯 > 后端开发 > Python >通过 Python 以 playbook
  • 136
分享到

通过 Python 以 playbook

Pythonplaybook 2023-01-31 06:01:29 136人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

因为小弟毕设做一个简单的自动化运维系统,所以入了ansible的坑,现在想把毕设过程中一些关键技术的核心代码做下记录,也希望通过此平台与大家相互交流学习,共同进步。 //一共有4个文件[root@localhost playbook]# t

因为小弟毕设做一个简单的自动化运维系统,所以入了ansible的坑,现在想把毕设过程中一些关键技术的核心代码做下记录,也希望通过此平台与大家相互交流学习,共同进步。

 

//一共有4个文件

[root@localhost playbook]# tree

.

├── config.yml

├── exec.py

├── hosts

└── secrets.yml


// 1)放置Inventory的文件

[root@localhost playbook]# cat hosts

[iOS_device]

192.168.60.121


// 2)一些在playbook要用到的凭证参数变量

[root@localhost playbook]# cat secrets.yml

---

creds:

  username: cisco

  passWord: cisco

  auth_pass: cisco


// 3) 在python代码中要引用的playbook

[root@localhost playbook]# cat config.yml

---

- hosts: ios_device

  gather_facts: no

  connection: local


  tasks:

  - name: OBTaiN LOGIN CREDENTIALS

    include_vars: secrets.yml


  - name: DEFINE PROVIDER

    set_fact:

      provider:

        host: "{{ inventory_hostname }}"

        username: "{{ creds['username'] }}"

        password: "{{ creds['password'] }}"

        auth_pass: "{{ creds['auth_pass'] }}"


  - name: show run

    ios_config:

      provider: "{{ provider }}"

      authorize: yes

      commands:

        - hostname cisco

        - ip access-list extended test

        - permit ip host 192.1.1.1 any log

        - exit

        - int f1/0

        - ip address 1.1.1.2 255.255.255.0

        - no shutdown

        - ip route 0.0.0.0 0.0.0.0 192.168.60.2

        - do write


// 4) 需要执行的Python 代码

[root@localhost playbook]# cat exec.py

#!/usr/bin/env python
# coding=utf-8

import JSON
import shutil
from collections import namedtuple
from ansible.parsing.dataloader import DataLoader
from ansible.vars.manager import VariableManager
from ansible.inventory.manager import InventoryManager
from ansible.executor.playbook_executor import PlaybookExecutor
from ansible.executor.task_queue_manager import TaskQueueManager
from ansible.plugins.callback import CallbackBase
import ansible.constants as C

class ResultCallback(CallbackBase):
    def __init__(self, *args, **kwargs):
        super(ResultCallback, self).__init__(*args, **kwargs)
        self.task_ok={}

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


results_callback = ResultCallback()

#InventoryManager类
loader = DataLoader()     #读取yaml文件
inventory = InventoryManager(loader=loader, sources=['./hosts'])#这里的路径要正确
#variableManager类
variable_manager = VariableManager(loader=loader,inventory=inventory)

#option 执行选项
Options = namedtuple('Optoins',
                     ['connection',
                      'remote_user',
                      'ask_sudo_pass',
                      'verbosity',
                      'ack_pass',
                      'module_path',
                      'forks',
                      'become',
                      'become_method',
                      'become_user',
                      'check',
                      'listhosts',
                      'syntax',
                      'listtags',
                      'listtasks',
                      'sudo_user',
                      'sudo',
                      'diff'])

options = Options(connection='smart',
                   remote_user=None,
                   ack_pass=None,
                   sudo_user=None,
                   forks=5,
                   sudo=None,
                   ask_sudo_pass=False,
                   verbosity=5,
                   module_path=None,
                   become=None,
                   become_method=None,
                   become_user=None,
                   check=False,
                   diff=False,
                   listhosts=None,
                   listtasks=None,
                   listtags=None,
                   syntax=None)


passwords=dict()

#playbook的路径要正确
playbook=PlaybookExecutor(playbooks=['config.yml'],
                          inventory=inventory,
                          variable_manager=variable_manager,
                          loader=loader,
                          options=options,
                          passwords=passwords)

#playbook.run()

playbook._tqm._stdout_callback=results_callback
playbook.run()

results_raw={'ok':{}}

for host,result in results_callback.task_ok.items():
    results_raw['ok'][host]=result._result

print results_raw

——————————————————————

如果在命令行模式使用过ansible-playbook命令的话,可以很清楚的了解上诉代码编写过程 1.设置Inventory -> 2.设置选项参数 -> 3.设置引用剧本

class ResultCallback(CallbackBase) 是为了返回的结果是json格式,方便前端调用。


运行结果:
//记得给.py文件于可执行权限:chmod +x exec.py
[root@localhost playbook]# ./exec.py
{
	'ok': {
		u '192.168.60.121': {
			'_ansible_parsed': True,
			u 'src': u '/root/.ansible/tmp/ansible-tmp-1547048002.11-60187723412487/source',
			u 'md5sum': u '28e89502d2362427b660aaf7ce762c37',
			u 'group': u 'root',
			u 'uid': 0,
			'_ansible_delegated_vars': {
				'ansible_delegated_host': u 'localhost',
				'ansible_host': u 'localhost'
			},
			u 'dest': u './192.168.60.121.txt',
			u 'checksum': u '2006c7082ad427e6ebb0d61c2aefd2859fa51b35',
			u 'changed': True,
			'_ansible_no_log': False,
			'failed': False,
			u 'state': u 'file',
			u 'gid': 0,
			u 'mode': u '0644',
			u 'invocation': {
				u 'module_args': {
					u 'directory_mode': None,
					u 'force': True,
					u 'remote_src': None,
					u 'owner': None,
					u 'follow': False,
					u 'local_follow': None,
					u 'group': None,
					u 'unsafe_writes': None,
					u 'setype': None,
					u 'content': None,
					u 'serole': None,
					u 'dest': u './192.168.60.121.txt',
					u 'selevel': None,
					u 'original_basename': u 'tmpoMsJHe',
					u 'regexp': None,
					u 'validate': None,
					u 'src': u '/root/.ansible/tmp/ansible-tmp-1547048002.11-60187723412487/source',
					u 'seuser': None,
					u 'delimiter': None,
					u 'mode': None,
					u 'attributes': None,
					u 'backup': False
				}
			},
			u 'owner': u 'root',
			'diff': [],
			u 'size': 378
		}
	}
}

-------------结束-------------

--结束END--

本文标题: 通过 Python 以 playbook

本文链接: https://lsjlt.com/news/189678.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 通过 Python 以 playbook
    因为小弟毕设做一个简单的自动化运维系统,所以入了ansible的坑,现在想把毕设过程中一些关键技术的核心代码做下记录,也希望通过此平台与大家相互交流学习,共同进步。 //一共有4个文件[root@localhost playbook]# t...
    99+
    2023-01-31
    Python playbook
  • python通过python-gitla
    我的gitlab API版本是Gitlab API  V4,运行的界面如下代码如下:#/usr/bin/python#coding=utf-8import gitlabplist = ''def allprojects():    ####...
    99+
    2023-01-31
    python gitla
  • PHP 可以通过 NPM 安装吗?
    PHP 可以通过 NPM 安装吗? 在日常的开发中,我们会使用到各种不同的编程语言和工具。其中,PHP 是一种非常流行的服务器端编程语言,而 NPM 则是一个非常强大的 Node.js 包管理器。那么,PHP 是否可以通过 NPM 来进行安...
    99+
    2023-09-29
    npm leetcode 重定向
  • 如何在 Python 中优化算法以通过 leetcode 测试?
    如何在 Python 中优化算法以通过 LeetCode 测试? LeetCode 是一个相当流行的在线编程平台,许多人使用它来提高编程技能和解决算法问题。然而,在 LeetCode 上编写的算法可能会遇到一些挑战,例如运行时间过长或者内存...
    99+
    2023-07-23
    编程算法 leetcode 文件
  • 通过Python使用MySQL
    本篇内容主要讲解“通过Python使用MySQL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“通过Python使用MySQL”吧!前提:这里默认大家已经安装好mysql。01Mysql简介mys...
    99+
    2023-06-15
  • 通过 ChatGPT 学习 Python
    先决条件 您需要一个 OpenAI 帐户才能开始与 ChatGPT 交互。如果您还没有这样做,请在 OpenAI 网站上注册一个帐户。  什么是 ChatGPT? GPT(Generative Pre-training Transfor...
    99+
    2023-09-01
    chatgpt 学习 python
  • python 通过threading多线
    #!/usr/bin/env python#coding=utf-8import paramikoimport time,datetime,threadingdef ssh(ip,user,passwd,command):    ssh =...
    99+
    2023-01-31
    python threading 多线
  • 通过vs2017使用python
     最开始接触的就是vs,但是当时搞不懂怎么用vs使用python,最近百度到了知乎的这篇文章,发现2017简化了不少设置,具体内容我就不搬过来了,有兴趣的可以查看原网页。 知乎的原始地址:https://www.zhihu.com/que...
    99+
    2023-01-31
    python
  • python练习之通过python pe
    #!/usr/bin/evn python import re,sys,os,pexpect from pexpect import * #coding=utf-8 #create environment if os.path.exists...
    99+
    2023-01-31
    python pe
  • Ansible最佳实践之Playbook使用过滤器处理网络地址
    写在前面 使用过滤器检查、验证和操作包含网络信息的变量理解不足小伙伴帮忙指正 傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活...
    99+
    2023-09-03
    ansible php 开发语言
  • 如何在 Python 中正确地使用索引以通过面试?
    当你准备面试 Python 开发岗位时,掌握正确的索引技巧是非常重要的。在 Python 中,索引是一种非常常见的操作,因此在面试中,你可能会被问到一些与索引有关的问题。本文将介绍如何在 Python 中正确地使用索引以通过面试。 一、什么...
    99+
    2023-10-31
    索引 面试 laravel
  • python通过ElementTree操作XML
    1.引入库 需要用到3个类,ElementTree,Element以及建立子类的包装类SubElement from xml.etree.ElementTree import Ele...
    99+
    2024-04-02
  • python脚本 通过rsa priva
    说明:蓝色=命令名称    浅绿=命令参数    浅蓝=选项    紫色=目录    系统环境:CentOS  5.5 x86_64    python版本:Python 2.7.3参考paramiko和pycrypto官方文档写了一个通过...
    99+
    2023-01-31
    脚本 python priva
  • python使用urllib2通过htt
    # -*- coding: utf-8 -*- import urllib2 # http发送报文 def httpsend(url, bw): req = urllib2.Request(url, bw) res_d...
    99+
    2023-01-31
    python htt
  • 通过python爬取数据
    目标地址:xxxx技术选型:python软件包管理工具:pipenv编辑器:jupyter分析目标地址:gplId表示项目ID,可变参数结果收集方式:数据库代码实现导入相关模块from urllib.parse import urlenco...
    99+
    2023-01-31
    数据 python
  • nagios通过python获取ESXi
    ESXi可以在相关面板上看见smart信息, 我这边公司用的是组装的服务器,然后不支持,只好用SSH的办法去获取了。Nagios监控是按退出的状态代码来显示相关信息的。退出代码如下:0 ok; 1 warning; 2 critical; ...
    99+
    2023-01-31
    nagios python ESXi
  • C# 通过 HttpWebRequest发送数据以及服务器通过Request请求获取数据
    C# 通过 HttpWebRequest发送数据以及服务器通过Request请求获取数据, 后台请求的三种类型"application/x-www-form-urlencoded"和"multipar...
    99+
    2023-09-24
    c# 服务器 开发语言
  • Spider-Python实战之通过Py
    1.1 开发工具 Python 3.6 Pycharm Pro 2017.3.2 Text文本 1.2 Python库 requests re urllib 如果没有这些Python库,使用以下方法 pip install 需...
    99+
    2023-01-30
    实战 Spider Python
  • Python 通过telnet 备份网络
    本实验使用了telnetlib 库一、拓扑 二、环境    Python 2、Cisco-Router、Kali-Linux 三、配置       !!脚本和IP地址文件都在同一个目录下       3.1、IP 地址           ...
    99+
    2023-01-31
    备份 网络 Python
  • Python通过paramiko模块备份
    1.过程思路 备份配置前,先保存交换机running config到starup config 交换机通过tftp备份配置文件 批量备份交换机配置(通过excel文件保存交换机IP) name ip SUZ-SW-101 ...
    99+
    2023-01-31
    备份 模块 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作