Ansible
三苦
这个作者很懒,什么都没留下…
展开
-
为Ansible配置WinRM的简便方法
Ansible提供了WinRM的配置脚本,在examples/scripts下的ConfigureRemotingForAnsible.ps1,内容几百行,看下面github链接ConfigureRemotingForAnsible.ps1依赖项是不变的,WMF4.0以上。脚本内容还是比较全面的,自签名证书、防火墙的配置,脚本都给办了。缺点是没把Listener的Transport和Port作为选项,是按默认的http 5985和https 5986去配置的。安全要求高的可能要用非默认端口,还得自己改原创 2021-03-11 17:03:13 · 814 阅读 · 0 评论 -
Ansible源码解析: Failed to change ownership of the temporary files错误
[本文基于Ansible 2.7]设置切换用户执行后,某任务报出以下错误:Failed to change ownership of the temporary files Ansible needs to create despite connecting as a privileged user. Unprivileged become user would be unable to read the file.看起来是说无法修改远程临时目录的属主。直接在源码中搜索错误信息,找到如下代码:an原创 2020-07-13 17:40:02 · 2114 阅读 · 0 评论 -
解决Ansible远程执行无法加载环境变量的问题
在18年冬天的一篇关于编些Action Plugin的文章中讨论过关于Ansible远程执行无法加载环境变量的问题(Ansible开发实战: 基于command模块的Oracle Listener控制模块(附趟雷过程及样例))其中引用了 huangwjwork的一篇文章关于ansible远程执行的环境变量问题(login shell & nonlogin shelll)。这篇文章讨论了lo...原创 2020-03-14 14:19:10 · 3750 阅读 · 2 评论 -
Ansible 开发实战:多个TaskQueueManager并行运行时本地临时目录丢失的问题
(本文基于Ansible 2.7)TaskQueueManager是Ansible调度play的基本执行单元,如果有多个TaskQueueManager并行运行,并且按照ansible官方给出的API示例清理本地的临时目录:shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)可能会造成FileNotFoundErrorFileNotFoundError: [...原创 2020-02-21 17:30:56 · 1457 阅读 · 2 评论 -
使用Ansible管理Windows:WMF安装、WinRM配置说明及Ansible调用举例
环境准备Ansible通过WinRM(Windows Remote Management)和PowerShell管理Windows服务器:WinRM is a management protocol used by Windows to remotely communicatewith another server. It is a SOAP-based protocol that com...原创 2020-02-14 11:42:24 · 2753 阅读 · 0 评论 -
Ansible 2.9.0 新增的 throttle 关键字
Ansible 2.9的CHANGELOG里是这么描述的:- Added new `throttle` keyword, which can be used at the task, block, or play level to limit the number of workers (up to the specified forks or serial setting) allowed....原创 2019-11-01 17:45:52 · 1651 阅读 · 0 评论 -
Ansible 性能优化(二):调整DEFAULT_INTERNAL_POLL_INTERVAL参数,降低结果处理轮询的频率
(本文基于Ansible 2.7)在base.yml中对DEFAULT_INTERNAL_POLL_INTERVAL参数是如下定义的:DEFAULT_INTERNAL_POLL_INTERVAL: name: Internal poll interval default: 0.001 env: [] ini: - {key: internal_poll_interval, ...原创 2019-11-01 16:42:52 · 2413 阅读 · 0 评论 -
Ansible 性能优化(一):降低工作进程(Worker Process)列表检查频率
(本文基于Ansible 2.7)在Ansible 源码解析:forks并发机制的实现一文中,我们分析了Ansible工作进程的启动和并发机制,本文不再赘述。本文主要探讨StrategyBase._queue_task方法中检查TaskQueueManager._workers是否有空闲槽位来容纳新的工作进程的轮询过程。 while True: worke...原创 2019-11-01 16:17:05 · 1157 阅读 · 0 评论 -
【讨论】Ansible登录凭证的选择:是预分发公钥免密登录,还是使用用户名+口令?
本文将从安全性、便捷性和可维护性三个方面探讨Ansible登录凭证的选择问题:安全性预分发公钥到目标服务器优点和缺点都是一样的,即目标环境的安全性取决于ansible所在宿主机的安全性。宿主机一旦被攻破,则全环境都沦陷。但假设我们可以保证宿主机的安全,则目标环境的口令设置上就可以有相当高的自由度,甚至可以完全随机获得极高强度的口令,而不用考虑口令记录和存储的问题。宿主机的安全加固目标...原创 2019-06-18 01:50:15 · 369 阅读 · 0 评论 -
Ansible 源码解析:动态清单(Inventory)中添加Host不能被all分组识别的问题分析
(本文基于Ansible 2.7)在Ansible API: 动态清单(Inventory)的使用一文中,我们讨论了纯动态清单的使用,其中提到,简单的添加Host到Inventory中,这些Host并不能通过在playsource中指定hosts=‘all’取到#假设我们有一个IP地址的列表(这个列表可以通过合适的其他服务获得,或者从数据库直接查询) host_list = ['192.16...原创 2019-06-18 00:17:00 · 2062 阅读 · 3 评论 -
Ansible源码解析:在动态清单中使用Host Variable存储ssh登录凭证
(本文基于Ansible 2.7)前两天有位朋友问到是否可以使用用户名+口令的登录方式来代替预先分发RSA公钥到目标主机以实现免密登录的方式,这无疑是可以的,而且很简单。只需要在Inventory中给host增加两个variable,它们分别是:ansible_ssh_useransible_ssh_pass并安装sshpass包,以便使用非交互的方式提供登录口令。在lib/ansi...原创 2019-06-14 00:15:07 · 656 阅读 · 0 评论 -
Ansible开发实战:加入Task执行过程超时机制
(本文基于Ansible 2.7)在使用ansible执行运维作业的过程中经常会遇到某些目标服务器由于种种五花八门的原因失去响应,尤其是在作业在远端主机执行过程中失去响应的情况,由于本地的子进程无法收到运行结果,可能卡上几天都不退出。例如我们曾经遇到过的,需要在大约15000+虚拟机上执行批量任务,其中两台虚拟机在建立ssh连接时还正常,但随后内存耗尽,远端任务失去响应,这个批量作业最后只能通过...原创 2020-11-11 09:34:42 · 6029 阅读 · 6 评论 -
Ansible API: Play中variable(变量)的使用
测试代码如下:(基于Ansible 2.7 , 脚本test.sh的内容即输出$1 $2 $3)play_source = dict( name = "Ansible Play", hosts = '192.168.1.1', gather_facts = 'no', vars=dict(ccc='play variable c...原创 2018-11-19 11:02:42 · 1643 阅读 · 0 评论 -
Ansible 源码解析: shell模块的实现方式
Ansible的Shell模块(lib/ansible/modules/commands/shell.py)中几乎不包含python代码,注释表明其实际上运行的是command模块:# # There is no actual shell module source, when you use 'shell' in ansible,# it runs the 'command' module ...原创 2018-11-27 17:51:05 · 1747 阅读 · 0 评论 -
Ansible开发实战: 基于command模块的Oracle Listener控制模块(附趟雷过程及样例)
在进行Ansible模块开发的过程中我们可能会遇到这样的问题,比如我们要开发一个(批)控制Oracle的模块,除去sql相关的功能有cx_Oracle为我们提供驱动之外,像rman,listener,crsctl,srvctl等等功能的实现,还是需要通过shell。但从功能上来划分,它们又是跟oracle数据库关系十分紧密的。所以我们提出这样的需求(以listener的控制为例):要写新的,单独的...原创 2018-11-29 19:03:48 · 3216 阅读 · 2 评论 -
Ansible 源码解析: Ansible的运行过程
(本文基于Ansible 2.7)Ansible的程序入口在bin目录下,此目录下共有ansibleansible-configansible-connectionansible-consoleansible-docansible-galaxyansible-inventoryansible-playbookansible-pullansible-testansible-...原创 2019-04-11 18:58:42 · 2007 阅读 · 0 评论 -
Ansible 源码解析:forks并发机制的实现
(本文基于Ansible 2.7)forks选项是Ansible原生支持的一种支持并发执行的方式,可以通过配置文件指定默认值,可以在运行ansible时指定,也可以在调用ansble API做开发时赋值。forks选项的接收和处理在lib/ansible/cli/__init__.py 的442-444行: if fork_opts: parser.ad...原创 2019-04-11 19:50:33 · 3461 阅读 · 0 评论 -
Ansible源码解析:配置的读取和使用
其中C是lib/ansible/constants.py,在:lib/ansible/cli/__init__.py 的第36行有声明。from ansible import constants as C但constants中并没有显式声明DEFAULT_FORKS常量。我们通过阅读文档,或查看ansible的帮助,可以知道默认的并发进程数是5,这个默认值可以通过编辑lib/ansible/...原创 2019-04-12 11:27:41 · 1525 阅读 · 0 评论 -
Ansible开发实战:解决callback中只能识别原生模块名称的问题
(本文基于Ansible 2.7)近来在开发过程中遇到一个问题:所有基于command模块编写的action plugin在callback中取result._task_fields[‘action’],均被识别为command模块。这个问题虽然并不影响任务执行,但对后期的数据收集、统计和分析造成了麻烦,无法进行更细致的分类查询。在Ansible 源码解析: shell模块的实现方式和Ans...原创 2019-04-22 11:39:29 · 545 阅读 · 0 评论 -
Ansible开发实战:在结果输出Action Plugin的名称
(本文基于Ansible 2.7)在Ansible开发实战:解决callback中只能识别原生模块名称的问题一文中,我们讨论了如何向Ansible的Callback中传递Action Plugin的名字。当时的做法是通过修改Plugin的源代码显式地修改任务运行结果,增加一个新的字段并赋值。这样做的缺陷是每个新编写的Plugin都需要重复以上操作,十分麻烦。当然,在有明确要求不得修改Ansib...原创 2019-05-13 20:57:13 · 1223 阅读 · 0 评论 -
Ansible API: 动态清单(Inventory)的使用
Ansible官方文档提供的示例如下:#!/usr/bin/env pythonimport jsonimport shutilfrom collections import namedtuplefrom ansible.parsing.dataloader import DataLoaderfrom ansible.vars.manager import VariableManag...原创 2018-11-14 17:59:36 · 5762 阅读 · 5 评论