Ansible自动化运维

比较流行的自动化运维工具有Ansible、Puppet、SaltStack、Chef等,其中Ansible是我在工作中用到的工具。由于工作中有大量的远程机并且并没有安装任何自动化运维工具,所以我最迫切的自动化运维工具是不需要安装任何客户端的,Ansible满足了这一点,所以我使用了它。当然SaltStack也有无客户端模式,但这是我后来才知道的。

Ansible安装

Ansible提供了多种安装方式,由于是python开发的软件,建议以python库的方式安装:

pip install ansible

安装完成之后可以在命令行执行以下常用的命令

  • ansible:执行任务
  • ansible-doc: 获取ansible相关的文档信息
  • ansible-playbook:读取并运行playbook中定义的任务

概念

  • Ansible核心:是指执行任务的程序,主要有ansible命令和ansible-playbook命令,前者执行一些临时性的命令,后者根据编排好的剧本可以执行非常复杂的任务
  • Inventory: 主机清单,里面包含了要执行任务的服务器ip,执行任务时需要制定主机清单,不指定时使用默认配置,命令行中使用-i参数指定
  • Modules: 模块,ansible提供了相当多的内置模块,比如command模块可以支持在远程服务器上执行命令行,copy模块可以拷贝本地文件到远程服务器等。模块也分为三类:核心模块、扩展模块、自定义模块
  • Playbook: 剧本,将所需要执行的任务通过配置文件的方式保存下来,我们称该配置文件为剧本。ansible使用yaml格式编写剧本。ansible-playbook是专门执行剧本的命令

部分命令行参数

  • -i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY
    该参数指定执行任务的主机清单
  • -m MODULE_NAME, --module-name=MODULE_NAME
    该参数执行要执行的模块
  • -a MODULE_ARGS, --args=MODULE_ARGS
    执行模块时的参数,比如 -m command -a 'ls -l'
  • -f FORKS, --forks=FORKS
    确认fork子进程的个数,也就是任务的并发数
  • -B SECONDS, --background=SECONDS
    任务切换成后台执行模式,该参数指定了任务最长执行时间,也就是超时时间
  • -P POLL_INTERVAL, --poll=POLL_INTERVAL
    使用了-B参数之后可使用该参数确定多少秒检查一次是否有结果返回,如果为0则立即返回,例如使用'-B 10 -P 0'可以实现任务在远程机上后台执行,并且ansible不会等待任务的结束,在某些场景下非常好用

Inventory格式

[dbservers]                       // 定义一个主机组
db.example.com              // 服务器域名
192.168.1.100                 // 服务器ip
192.168.1.101 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=password   // 定义了主机的一些特定参数如连接方式、用户名、密码
[dbservers:vars]             //为一组主机定义相同的变量参数
ansible_connection=ssh
ansible_ssh_user=root
ansible_ssh_pass=password

Windows主机相关

连接

可以使用如下inventory配置与windows进行连接,不过python环境下需安装pywinrm,远程主机上有开启winrm服务(该服务一般在windows server上默认开启)

192.168.0.1 ansible_user=Administrator ansible_password=password ansible_port=5985 ansible_connection=winrm ansible_winrm_transport=ntlm ansible_winrm_server_cert_validation=ignore
常用模块
  • win_copy: 拷贝文件到windows主机
  • win_file: 操作windows远程主机文件
  • win_command: 在windows远程主机执行命令行
  • win_shell: 在windows远程主机执行shell命令
  • win_unzip: 文件解压缩
执行后台程序

如下命令可以实现,all表示对主机清单中的所有主机执行任务,win_command表示在远程主机上执行命令行程序,background.exe要执行的后台程序,target主机清单文件。另外backgroup.exe可以通过win_copy模块拷贝到远程主机上

ansible all -m win_command -a 'background.exe' -i target -B 10 -P 0 -f 5

Ansible Playbook

playbook提供非常强大的功能,远不止把多个ansbile命令写到一个文件中来执行那么简单。在playbook中不仅可以定义任务的执行顺序,还能定义不同的变量,定义任务之间的关联关系,定义基于环境和角色的差异化配置推送,具有很多非常灵活的特性
playbook的编写使用yaml语言格式,有兴趣的同学可以深入了解一下。

自定义变量

ansible有很多自动变量的方式,包括但不仅限于以下几种

  1. 在inventory中自定义变量
    定义如下
192.168.0.100  var_a=1 var_b=1

运行以下命令行即可在远程机上打印出1,参数var通过{{}}格式引用

ansible 192.168.0.100 -m command -a 'echo {{var_a}}' -i inventory

2.在ansible的hosts和groups中定义变量
在ansible特定的目录中可以定义对hosts和groups定义的变量,/etc/ansible/group_vars/目录中定义groups的变量,变量文件是.yml文件,注意定义时文件名必须和group名字相同,同样在/etc/ansible/host_vars/目录中可以定义host的变量,文件名和host名也必须一致,内容遵循yml格式。引用时用{{}}符号将变量括起来

cat /etc/ansible/group_vars/test.yml
---
var_test: 1
cat /etc/ansible/host_vars/192.168.0.100.yml
---
var_test:2

3.在playbook中直接定义和使用变量

---
- host: AnsibleClientIn
  vars:
     - filename: config.txt
  tasks:
     - name: copy file
     copy: src=server.txt dest=/root/{{filename}}

4.在独立的文件中自定义变量
playbook中提供了一个var_files关键字,用于引用一个独立文件中的变量

---
- host: AnsibleClientIn
  var_files:
     - /root/ansible_playbook/my_vars.yml
  tasks:
     - name: copy file
     copy: src=server.txt dest=/root/{{var}}

部分linux模块

  • command模块:用于在目的主机中执行命令
  • shell模块:与command类似,还支持变量管道等高级特性
  • file模块:对目的主机的文件进行操作
  • copy模块:将本地某个文件推送到目的主机上
  • template木块:模板管理模块
  • git模块:使用git来发布程序或者版本
  • yum或apt模块:软件管理模块
  • service模块:管理服务状态的模块
  • setup模块:数据采集模块,用于从目的主机收集系统信息

后记

在工作过程中我使用到了ansible,它帮助我解决了一些问题,还是挺nice的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,657评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,889评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,057评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,509评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,562评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,443评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,251评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,129评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,561评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,779评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,902评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,621评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,220评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,838评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,971评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,025评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,843评论 2 354

推荐阅读更多精彩内容