自动化运维之ansible入门

ansible介绍

Ansible 是一个简单的自动化引擎,可完成配置管理、应用部署、服务编排以及其他各种IT需求。Ansible也是一款使用Python 语言开发实现的开源软件,其依赖Jinja2、paramiko 和PyYAML这几个Python 库。Ansible的作者是Michael DeHaan,Michael DeHaan于2012 年创建了AnsibleWorks 公司,之后改名为Ansible 公司。Ansible 公司于2015年10月被红帽公司(Red Hat)收购。

ansible安装

Ansible不需要安装客户端,依赖Python与SSH ,服务器需要安装SSH和Python2.5或2.5 以上版本的Python 。
在控制端( ansible 命令运行的那台机器)需要安装Python2.6或更高版本的Python程序, Ansible的控制端只能运行在Linux下。
可以直接使用pip进行安装,也可以使用Linux下的包管理工具(如yum 、apt-get )进行安装ansible :
pip install ansible

架构和使用场景

在这里插入图片描述
在Ansible 中,用户通过Ansible引擎操作主机。其中主机可以通过配置文件配置,调用云计算的接口,或者访问CMDB来获取。Ansible 的引擎由Inventory 、API 、Modules (模块)和Plugins 组成。
Ansible的典型用法是,工程师将需要在远程服务器执行的操作写在Ansible Playbook中,然后使用Ansible执行Playbook。

Inventory(服务器集合)管理

在Ansible 中,将可管理的服务器集合称为Inventory 。
服务器集合默认配置文件是/etc/ansible/hosts。
hosts文件写法:https://yq.aliyun.com/articles/661106
在Ansible 中,有三种方式指定hosts 文件,分别是:
1 )默认读取/etc/ansible/hosts 文件;

ansible test --list-hosts#获取配置文件/etc/ansible/hosts中test分组的主机

2 )通过命令行参数的-i 指定hosts 文件;

ansible test -i ~/hosts --list-hosts#获取配置文件~/hosts中test分组的主机

3 )通过ansible.cfg 文件中的inventory 选项指定hosts 文件。

$ vi /etc/ansible/ansible.cfg
#inventory      = /etc/ansible/hosts

YAML语法

通过前面使用场景的介绍,我们知道ansible有俩种执行模式:
1、前面通过ansible 命令执行操作的方式(ansible test -i ~/hosts --list-hosts),官方称为ad-hoc 。
2、在实际生产环境,将远程服务器需要做的事情写在YAML配置文件中,这个YAML文件称为Ansible Playbook。

Playbook示例:

$ cat test_playbook .yml
---
- hosts: test
  become: yes
  become method: sudo
  tasks:
  - name: copy file
	copy: src=/temp/test.py dest=/temp/test.py
  - name: change mode
	file: dest=/temp/test.py mode=500 owner=root group=root
  - name: ensure packages installed
	apt: pkg={{ item }} state=present
	with items:
	  - tmux
	  - git

我们来了解下Playbook。Playbook中包含一些声明信息,如hosts关键字声明该Playbook应用的服务器列表, become和become_ method表示在远程服务器通过sudo执行操作。Playbook 最后包含了若干个task , 每一个task 对应于前面的一条ad-hoc 命令。具体执行时,多个task 按序执行。

YAML 的语法规则如下:

YAML文件的第一行为"—",表示这是一个YAML文件
YAML中的字段大小写敏感
YAML与Python一样,使用缩进表示层级关系
YAML的缩进不允许使用Tab键,只允许使用空格,且空格的数目不重要,只要相同层级的元素左侧对齐即可
“#” 表示注释,从这个字符一直到行尾都会被解析器忽略。
YAML 支持三种格式的数据,分别是:
对象:键值对的集合,又称为映射,类似于Python 中的字典
数组: 一组按次序排列的值,又称为序列(sequence),类似于Python 中的列表
纯量(scalars):单个的、不可再分的值,如字符串、布尔值与数字。

通过PyYAML来解析yaml文件来帮助理解,这里看到YAML对象相当于python的列表:

$ more ./test/data.yaml
---
#动物列表
- Monky
- bird
- cat
- dog
$ ipython
In [1]: import yaml                                                                                                                              
In [2]: with open('./test/data.yaml') as f: 
   ...:     print(yaml.load(f)) 
   ...:                                                                                                                                          
  # -*- coding: utf-8 -*-
['Monky', 'bird', 'cat', 'dog']

Ansible命令(ad-hoc)和模块

Ansible对远程服务器操作首先确定对哪些服务器进行操作, 其次要确定对服务器执行哪些操作。在Inventory管理,介绍了如何指定远程服务器。
这里介绍如何对远程服务器进行操作。模块(也被称为 “task plugins” 或 “library plugins”)是在 Ansible中实际在执行的,它们可以放playbook tasks中执行,也可以通过 ‘ansible’ 命令(ad-noc模式)来执行。

Ansible命令(ad-hoc)

示例:

$ ansible test -m ping
n127.0.0.1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
n192.168.0.105 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

ping模块是Ansible中最简单的模块,测试远程服务器是否在线。在Ansible中,通过-m参数指定模块名称,通过-a参数指定模块的参数。
ansible命令的详细参数如下:

参数作用
-m要执行的模块,默认为command
-a模块的参数
-ussh连接的用户名,默认用root,ansible.cfg中可以配置
-k提示输入ssh登录密码,当使用密码验证的时候用
-ssudo运行
-Usudo到哪个用户,默认为root
-K提示输入sudo密码,当不是NOPASSWD模式时使用
-C只是测试一下会改变什么内容,不会真正去执行
-c连接类型(default=smart)
-ffork多少进程并发处理,默认为5个
-i指定hosts文件路径,默认default=/etc/ansible/hosts
-I指定pattern,对已匹配的主机中再过滤一次
–list-host只打印有哪些主机会执行这个命令,不会实际执行
-M要执行的模块路径,默认为/usr/share/ansible
-o压缩输出,摘要输出
–private-key私钥路径
-Tssh连接超时时间,默认是10秒
-t日志输出到该目录,日志文件名以主机命名
-v显示详细日志
Ansible模块

Ansible 通过模块来执行具体的操作,比如上面用到的ping模块。我们执行操作后,会返回一个信息,他是什么意思呢?这里列出了Ansible中常见的模块返回值。

$ ansible test -m ping
n127.0.0.1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
n192.168.0.105 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

常见的模块返回值:

返回值名称返回值含义
changed几乎所有的Ansible 模块都会返回该变量,表示模块是否对远程主机执行了修改操作
failed如果模块未能执行完成,将返回failed为true
msg模块执行失败的原因,常见的错误如ssh 连接失败,没有权限执行模块等
re与命令行工具相关的模块会返回rc,表示执行Linux命令的返回码
stdout与rc类似,返回的是标准输出的结果
stderr与rc类似,返回的是错误输出的结果
backup_file所有存在backup选项的模块,用来返回备份文件的路径
results应用在Playbook中存在循环的情况,返回多个结果

我们已经了解了模块的返回值的含义,Ansible的模块非常多,可以通过ansible-doc查看模块的完整帮助信息或基本使用方法。例如,下面的命令用以获取file模块的帮助信息:ansible-doc file
ansible-doc -l file

常用模块介绍篇幅较长,请移步本人另一文章:ansible常用模块详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值