Python中的Ansible库

liftword4个月前 (03-19)技术文章19

在Python中集成Ansible功能,主要通过以下两种方式实现,结合官方库和核心API可满足不同场景的自动化需求:


一、Ansible Runner库

Ansible官方提供的标准化交互工具,适合需要封装Ansible执行流程的场景(如集成到Web系统或CI/CD工具)
核心特性

  1. 目录结构规范/env:存放环境变量、SSH密钥、额外变量(extravars)、命令行参数(cmdline)/inventory:主机清单文件或动态脚本/project:Playbook和角色存放目录/artifacts:自动生成运行日志(含状态码、输出日志、事件详情)
  2. Python调用示例
  3. import ansible_runner result = ansible_runner.run( private_data_dir='./project', playbook='deploy.yml', inventory='hosts.ini' ) print(result.status) # 输出执行状态(success/failed/timeout)

二、原生Ansible Python模块

直接调用Ansible底层API,适合深度定制执行逻辑
典型应用场景

  1. 执行Ad-Hoc命令
  2. from ansible import context from ansible.cli import AdHocCLI from ansible.module_utils.common.collections import ImmutableDict context.CLIARGS = ImmutableDict( connection='ssh', module_path=[''], forks=10, become=True, check=False, diff=False, verbosity=0 ) cli = AdHocCLI(args=['all', '-m', 'shell', '-a', 'uptime']) cli.run()
  3. 运行Playbook
  4. from ansible.executor.playbook_executor import PlaybookExecutor from ansible.inventory.manager import InventoryManager inventory = InventoryManager(loader=DataLoader(), sources='hosts.ini') playbook = PlaybookExecutor( playbooks=['deploy.yml'], inventory=inventory, loader=DataLoader(), passwords={} ) result = playbook.run()

三、关键组件集成

  1. 动态Inventory管理
    通过Python动态生成主机清单(支持JSON/YAML格式):
  2. from ansible.parsing.dataloader import DataLoader loader = DataLoader() inventory = InventoryManager(loader=loader, sources='dynamic_inventory.py')
  3. 变量加密处理
    使用Ansible Vault保护敏感数据:
  4. from ansible_vault import Vault vault = Vault('my_secret_password') encrypted_data = vault.dump({'db_password': 's3cret'})

四、最佳实践建议

  1. 权限控制:SSH密钥文件权限设为600,避免安全风险
  2. 错误处理:通过result.rc 获取返回码,结合stdout分析执行日志
  3. 模块扩展:用Python开发自定义模块,通过library/目录加载

完整实现案例可参考官方文档或Github示例库。

相关文章

「Python教程」第4篇 Python开发环境介绍

目录集成开发环境——IDEPython自带的开发环境——Python IDLE开始编写第一个程序——Hello WorldPython IDLE的两种编辑模式Python IDLE的快捷方式Pytho...

使用IDEA写Python之pytest环境搭建及...

一、准备篇Python环境:3.8.3开发工具:IDEA,对你没有看错二、IDEA下安装开发环境1. python的下载https://www.python.org/downloads/PS:关于Py...

Python第二课:开发环境的使用与代码首次书写

书接上回,安装好Python后,我们就可以使用Python自带的集成开发环境IDLE进行代码的编写。由于此时我们尚未深入学习Python,所以Python自带的IDLE这种使用简单的开发环境成了我们的...

Python多环境管理神器(pyenv)

下面我们来介绍一个python多环境管理神器pyenvpyenvpyenv 主要用来对 Python 解释器进行管理,可以管理系统上的多个版本的 Python 解释器。它的主要原理就是将新的解释器路径...