ansible小结(十 二)磁盘使用率筛选

年底了虽然有各种告警,不过还是需要做一下全网巡检,这里以磁盘使用率为例。由于目前平台上使用的是商业版的自动化工具bmc,其在执行分发都方面非常不存,不过在取值返回上做的不好---当然也和其是商业化工具有关,很多东西不开源,用shell 的语法概念写nsh时又执行不通过,NND总是要问原厂支撑 。刚好在测试环境上有之前安装的ansible环境,也测试下用ansible 来实现该功能。 一、实现目标 将所有主机的磁盘大于75%的主机获取到,并输出为下面的格式: 主机IP 主机名 磁盘挂载点信息 磁盘使用率 假如 host1上有多个分区都大于75% ,则写多条。当主机上没有一台符合时,则什么都不输出。 注:现网主机上有两个 bond 网卡,其中一个配置的是10段的IP,另一个配置的是192段的IP。这里要获取的是10段的IP。 二、 ansible + awk 简单输出 该问题我处理的结果是使用ansible api 写的一个python脚本实现的。先看下我在一个技术群和一个大牛的讨论的结果(点击图片看大图)。 如上图,大牛的做法用的是awk 的next方法进行的处理,awk 的next功能我也做过记录,具体参看awk next多行合并 。 这里有几个注意点需要说明下:…

Continue Readingansible小结(十 二)磁盘使用率筛选

ansible小结(十一)ansible普通用户su切换问题

在之前我曾总结了一点ansible系列博文,本篇还承接之前的篇幅吧。在现网应用中,安全加固后的主机是不允许直接以root用户登陆的,而很多命令又需要root用户来执行,在不改造现网的情况下。希望通过一个普通用户先登陆,再su切到root执行。而且每台主机的普通用户和root用户的密码又不同。希望在通过ansible执行的时候不需要交互输入密码,而是直接执行后输出结果。 一、ansible hosts配置文件 在之前的系列文章中我们提到,可以把密码写到hosts配置文件,通过查询官网的相关信息了解了,其除了ansible_ssh_user、ansible_ssh_pass变量外,还为su切换提供了ansible_su_pass变量,通过该变量我们可以把root密码直接写到配置文件中。具体如下: [root@361way.com ~]# cat /etc/ansible/hosts [test01] 10.212.52.14 ansible_ssh_user=test ansible_ssh_pass=111111 ansible_su_pass=*I2145 10.212.52.16 ansible_ssh_user=test ansible_ssh_pass=xyz123 ansible_su_pass=mn1Pokm 10.212.52.252 ansible_ssh_user=amos ansible_ssh_pass=asdf ansible_su_pass=xyzp)okm 注:我测试使用的ansible版本是1.9版的,在新的2.0版本中,变量也做了变化ansible_become_pass替换了之前的ansible_sudo_pass or ansible_su_pass ,具体可以参看官方文档。 二、ansible命令参数 在执行ansible -h查看时,会看到如下条目: -S, --su…

Continue Readingansible小结(十一)ansible普通用户su切换问题

ansible小结(十)ansible api

ansible api 与ansible-playbook api 本应该是后面放在 ansible条件与循环、ansible变量篇之后讲的,不过使用过后实在按捺不住提前写的冲动,这个插个队先讲讲API 部分。 一、ansible api ansible api 的使用非常强大,也非常简单,只不过把模块需要使用的参数写到了脚本中,这里先来看下官方给的示例,不过同于官方的是,我这里增我将结果进行了json美化输出。 [root@361way api]# cat test_api.py #!/usr/bin/env python # coding=utf-8 import ansible.runner import json runner = ansible.runner.Runner( module_name='ping', module_args='', pattern='all',…

Continue Readingansible小结(十)ansible api

ansible小结(九)playbook进阶

并发运行 ansible默认只会创建5个进程,所以一次任务只能同时控制5台机器执行.那如果你有大量的机器需要控制,或者你希望减少进程数,那你可以采取异步执行.ansible的模块可以把task放进后台,然后轮询它.这使得在一定进程数下能让大量需要的机器同时运作起来. 使用async和poll这两个关键字便可以并行运行一个任务. async这个关键字触发ansible并行运作任务,而async的值是ansible等待运行这个任务的最大超时值,而poll就是ansible检查这个任务是否完成的频率时间. 如果你希望在整个集群里面平行的执行一下updatedb这个命令.使用下面的配置 - hosts: all tasks: - name: Install mlocate yum: name=mlocate state=installed - name: Run updatedb command: /usr/bin/updatedb async: 300 poll: 10 你会发现当你使用上面的例子控制超过5台机器的时候,command.在上面yum模块会先在5台机器上跑,完成后再继续下面的机器.而上面command模块的任务会一次性在所有机器上都执行了,然后监听它的回调结果 如果你的command是控制机器开启一个进程放到后台,那就不需要检查这个任务是否完成了.你只需要继续其他的动作,最后再使用wait_for这个模块去检查之前的进程是否按预期中开启了便可.只需要把poll这个值设置为0,便可以按上面的要求配置ansible不等待job的完成. 最后,或者你还有一种需求是有一个task它是需要运行很长的时间,那你需要设置一直等待这个job完成.这个时候你把async的值设成0便可. 总结来说,大概有以下的一些场景你是需要使用到ansible的polling特性的…

Continue Readingansible小结(九)playbook进阶

ansible小结(八)ansible-playbook简单使用

ansbile-playbook是一系统ansible命令的集合,其利用yaml 语言编写,运行过程,ansbile-playbook命令根据自上而下的顺序依次执行。同时,playbook开创了很多特性,它可以允许你传输某个命令的状态到后面的指令,如你可以从一台机器的文件中抓取内容并附为变量,然后在另一台机器中使用,这使得你可以实现一些复杂的部署机制,这是ansible命令无法实现的。 playbook通过ansible-playbook命令使用,它的参数和ansible命令类似,如参数-k(–ask-pass) 和 -K (–ask-sudo) 来询问ssh密码和sudo密码,-u指定用户,这些指令也可以通过规定的单元写在playbook 。ansible-playbook的简单使用方法: ansible-playbook example-play.yml 。 一、一个简单的示例 下面给出一个简单的ansible-playbook示例,了解下其构成。 # cat user.yml - name: create user hosts: all user: root gather_facts: false vars: - user: "test"…

Continue Readingansible小结(八)ansible-playbook简单使用

ansible小结(七)常用模块

在上一篇中介绍了commands部分模块,本篇承接上篇介绍下常用的模块。根据官方的分类,将模块按功能分类为:云模块、命令模块、数据库模块、文件模块、资产模块、消息模块、监控模块、网络模块、通知模块、包管理模块、源码控制模块、系统模块、单元模块、web设施模块、windows模块 ,具体可以参看官方页面。 这里从官方分类的模块里选择最常用的一些模块进行介绍(commands模块上一篇已经介绍,这里不再提)。 一、ping模块 测试主机是否是通的,用法很简单,不涉及参数: [root@361way ~]# ansible 10.212.52.252 -m ping 10.212.52.252 | success >> { "changed": false, "ping": "pong" } 二、setup模块 setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数,具体使用示例如下(由于输出结果较多,这里只列命令不写结果): [root@361way ~]# ansible 10.212.52.252 -m setup -a…

Continue Readingansible小结(七)常用模块

ansible小结(六)Ad-hoc与commands模块

Ad-Hoc 是指ansible下临时执行的一条命令,并且不需要保存的命令,对于复杂的命令后面会说playbook。讲到Ad-hoc 就要提到模块,所有的命令执行都要依赖于事先写好的模块,默认安装好的ansible 里面已经自带了很多模块,如:command、raw、shell、file、cron等,具体可以通过ansible-doc -l 进行查看 。 一、Ad-hoc 1、直接执行 这里还是先来一个上几篇幅经常用到的一个例子: [root@361way ~]# ansible 10.212.52.252 -a 'uptime' -k SSH password: 10.212.52.252 | success | rc=0 >> 10:10am up 27 days 19:33,…

Continue Readingansible小结(六)Ad-hoc与commands模块

ansible小结(五)Dynamic Inventory

Ansible Inventory实际上是包含静态Inventory和动态Inventory两部分,静态Inventory指的是在文件/etc/ansible/hosts中指定的主机和组,Dynamic Inventory指通过外部脚本获取主机列表,并按照ansible 所要求的格式返回给ansilbe命令的。这部分一般会结合CMDB资管系统、zabbix 监控系统、crobble安装系统、云计算平台等获取主机信息。由于主机资源一般会动态的进行增减,而这些系统一般会智能更新。我们可以通过这些工具提供的API 或者接入库查询等方式返回主机列表。 一、最简单示例 由于Ansible在接受脚本动态获取主机信息时支持的是json格式,这里我也不从其他系统中取了,向通过一段代码打印一个段json格式的主机信息: #!/usr/bin/env python # coding=utf-8 import json host1ip = ['10.212.52.252','10.212.52.14'] host2ip = ['10.212.52.16'] group = 'test1' group2 = 'test2' hostdata = {group:{"hosts":host1ip},group2:{"hosts":host2ip}} print…

Continue Readingansible小结(五)Dynamic Inventory

ansible小结(三)Inventory与Patterns

Ansible的Inventory文件,可以理解为saltstack中的salt-key中的所有minion的列表以及用户自定义的nodegroup的概念,默认情况下这个文件是/etc/ansible/hosts ,后面还会讲到Dynamic Inventory,本节主要讲静态主机群部分。Patterns(模式)部分我们可以理解为正则表达式,通过Patterns我们可以匹配Inventory分组中的部分主机。 一、Hosts and Groups(主机与组) 对于/etc/ansible/hosts最简单的定义格式像下面: 1、简单的主机和组 mail.361way.com [webservers] web1.361way.com web2.361way.com [dbservers] db1.361way.com db2.361way.com a、中括号中的名字代表组名,你可以根据你自己的需求将庞大的主机分成具有标识的组,如上面我分了两个组webservers和dbservers组; b、主机(hosts)部分可以使用域名、主机名、IP地址表示;当然使用前两者时,也需要主机能反解析到相应的IP地址,一般此类配置中多使用IP地址; 2、端口与别名 如果某些主机的SSH运行在自定义的端口上,ansible使用Paramiko进行ssh连接时,不会使用你SSH配置文件中列出的端口,但是如果修改ansible使用openssh进行ssh连接时将会使用: 192.168.0.10:5309 假如你想要为某些静态IP设置一些别名,类似于SaltStack中minion配置文件中id的参数配置。你可以这样做: jumper ansible_ssh_port = 5555 ansible_ssh_host = 192.168.1.50 上面的 jumper…

Continue Readingansible小结(三)Inventory与Patterns

ansible小结(二)ansible架构

Ansible 是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用 SSH 进行远程连接。无需在被管理节点上安装附加软件,可使用各种编程语言进行扩展。 一、Ansible基本架构 上图为ansible的基本架构,从上图可以了解到其由以下部分组成: 核心:ansible 核心模块(Core Modules):这些都是ansible自带的模块 扩展模块(Custom Modules):如果核心模块不足以完成某种功能,可以添加扩展模块 插件(Plugins):完成模块功能的补充 剧本(Playbooks):ansible的任务配置文件,将多个任务定义在剧本中,由ansible自动执行 连接插件(Connectior Plugins):ansible基于连接插件连接到各个主机上,虽然ansible是使用ssh连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件 主机群(Host Inventory):定义ansible管理的主机 二、ansible工作原理 以上是从网上找到的两张ansible工作原理图,两张图基本都是在架构图的基本上进行的拓展。从上面的图上可以了解到: 1、管理端支持local 、ssh、zeromq 三种方式连接被管理端,默认使用基于ssh的连接---这部分对应基本架构图中的连接模块; 2、可以按应用类型等方式进行Host Inventory(主机群)分类,管理节点通过各类模块实现相应的操作---单个模块,单条命令的批量执行,我们可以称之为ad-hoc; 3、管理节点可以通过playbooks 实现多个task的集合实现一类功能,如web服务的安装部署、数据库服务器的批量备份等。playbooks我们可以简单的理解为,系统通过组合多条ad-hoc操作的配置文件 。 三、ansible的七个命令 安装完ansible后,发现ansible一共为我们提供了七个指令:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault 。这里我们只查看usage部分,详细部分可以通过…

Continue Readingansible小结(二)ansible架构