自动化工具ansible,以及playbook剧本
这篇博客主要说的是,ansible,以及playbook 和常用的模块
首先先介绍ansible
- ansible是一个自动化的运维工具,基于python开发
- 主要的功能,可以实现批量的部署程序,批量的执行命令
- ansible默认通过的是ssh的协议管理机器,无需配置任何服务,管理端部署好后就可以使用。
- 应用的环境
- 应用代码的自动化部署
- 系统管路配置自动化
- 支持持续交付自动化
- 支持云计算,大数据平台环境
- 还有很重要的一点是
因为是python开发
可以用python写的脚本编写,维护更加的简单
ansible的安装使用
# 安装我们这里就简单安装
yum install ansible -y
ansible命令套件
我们这里就只介绍3个常用的
- ansible
- ansible是指令的核心部分,主要是用于ad-hoc命令,就是单条的命令默认不指定模块,使用的是commond模块
- ansible的语法检测工具----ansible-lint
- ansible-lint是对于playbook的语法检测工具,用的是ansible-lint, playbook.yml.
- ansible-playbook
- 这个是使用最多的指令,通过playbook文件后,执行相应的动作,这个是一个重点哦。
ansible的核心架构
核心模块
- ansible自带的模块,ansible模块的资源的分发到远程的节点上执行特定的任务和匹配一个特定的状态。
剧本(playbook)
- ansible的配置文件,将多个配置任务在剧本中,由ansible自动的执行,
- 即,可以理解为写了一个脚本分发到各个节点机器上执行。
ansible执行自动化任务分为两种模式
- 命令模式
- 单个模块,单条语句的执行。(这个常用于测试环境)
- playbook
- 可以理解为一个脚本,把多个任务放到playbook中,通过多个任务完成一个总体的目标,这个就是playbook,(这个常用于线上的生产环境)
ansble主机和组的配置
- ansible的配置文件在/etc/ansible/hosts
/etc/ansible/hosts最简单的格式如下:
www.ixdba.net
[webservers]
ixdba1.net
ixdba2.net
[dbservers]
db.ixdba1.net
db.ixdba2.net
#中括号的名字代表是组的名称
# 下面代表的成员主机
以下是Hosts部分常用到的部分变量
- ansible_ssh_hosts
- 常用于指定被管理的主机真实ip
- ansible_ssh_port
- 用于指定到被链接被管理的主机ssh端口号,默认是22端口
- ansible_ssh_user
- ssh连接时默认使用的用户名
- ansible_ssh_pass
- ssh连接时的密码
主机变量
[webhost]
host1
host2
[dbhost]
host2
host3
[allhosts:children]
webhost
Dbhost
主机组可以包含主机组,主机的变量可以通过继承关系,继承到最高等级的组的变量。定义主机组之间的继承关
系我们使用”:children”来表示
命令行模式使用ansible
- 命令是指ansible临时执行命令,所有的命令都是基于自带的模块去实现
absible命令的常用选项
- -m 用指定执行模块的名称
- -a 是指定执行模块对应的参数
- -i 指定主机清单文件的路径
命令ansible执行
ansible 主机或者组 -m 模块名称 -a "模块参数" ansible参数
命令行使用ansible格式
如:
ansible ip或者组名称 -m 指定模块名称 -a 执行什么的参数
ansible-playbook的使用
- playbook文件的格式yaml语言汇编,yaml是一个类似,json的标志语言,yaml强调以为中心为。
3、playbook的构成
playbook是由一个或多个“play”组成的列表。play的主要功能在于,将事先合并为一组的主机装扮成事先
通过ansible定义好的角色。将多个play组织在一个playbook中就可以让它们联同起来按事先编排的机制完成
一系列复杂的任务。
其主要有以下四部分构成
target部分: 定义将要执行 playbook 的远程主机组
variable部分: 定义playbook运行时需要使用的变量
task部分: 定义将要在远程主机上执行的任务列表
handler部分: 定义task 执行完成以后需要调用的任务
3、playbook的构成
(1)、Hosts和Users
playbook中的每一个play的目的都是为了让某个或某些主机以某个指定的用户身份执行任务。
hosts:用于指定要执行指定任务的主机,每个playbook都必须指定hosts,hosts也可以使用通配符格式。主机或主机组在
inventory清单中指定,可以使用系统默认的/etc/ansible/hosts,也可以自己编辑,在运行的时候加上-i选项,可指定自定
义主机清单的位置。在运行清单文件的时候,–list-hosts选项会显示那些主机将会参与执行任务的过程中。
remote_user:用于指定在远程主机上执行任务的用户。可以指定任意用户,也可以使用sudo,但是用户必须要有执行相应
任务的权限。
3、playbook的构成
(2)、任务列表(tasks list)
play的主体部分是task list。
task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。在运行自上而下某
playbook时,如果中途发生错误,则所有已执行任务都将回滚,因此在更正playbook后需要重新执行一次。
task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的(幂等性; 即一个命令,即使执行一次或多次, 其结
果也一样),这意味着多次执行是安全的,因为其结果均一致。tasks包含name和要执行的模块,name是可选的,只是为了便于用户阅读,
建议加上去,模块是必须的,同时也要给予模块相应的参数。
定义tasks推荐使用module: options”的格式,例如:
service: name=httpd state=running
playbook执行结果的解析
绿色代表成功
黄色 - 代表系统状态发生变化,也是执行结果执行的操作生效
红色 - 代表执行失败,会显示错误的信息
以下是要求
- shell 模块
在远程节点执行命令,用法和commond的模块一样,不过shell执行命令模块,所以shell可以执行任何的命令
- hosts: 172.16.213.231
remote_user: root
tasks:
- name: ansible shell
shell: ps -ef|grep sshd&&mkdir /opt/hdp
- name: ansible command
command: touch /opt/hdp/hadoop.txt
- raw模块
与commond,shell能过完成的操作,不同的是raw模块不需要远程主机上的python的环境。
- hosts: 172.16.213.231
remote_user: root
tasks:
- name: ansible raw1
raw: ps -ef|grep sshd|awk '{print $2}'>/tmp/ssh.log
- name: ansible raw2
raw: dnf -y install python36-devel
file模块
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要
先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的目标路径,只应用于state=link的情况
state: 有如下几个选项:
directory:表示目录,如果目录不存在,则创建目录。
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件。
主要用于远程主机上的文件操作
- hosts: 172.16.213.231
remote_user: root
tasks:
- name: mkdir cdh directory
file: path=/opt/cdh state=directory mode=0755
- name: chmod bin
file: dest=/opt/bigdata/jdk/bin mode=0755 recurse=yes
- name: link files
file: src=/etc/ssh/sshd_config dest=/mnt/sshd_config owner=sshd state=link
- name: delete files
file: path=/tmp/hadoop.tar.gz state=absent
- name: chown files
file: path=/mnt/syncfile.txt owner=nobody group=nobody mode=0644
- copy模块
- service模块
用于远程管理主机上的服务管理远程主机上的服务
- cron — 相当于机器上的定时器
- yum 模块