自动化运维工具ansible 1基础
文章目录
介绍
简介
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
核心组件
1.Ansible:核心程序
2.Modules:包括Ansible自带的核心模块及自定义模块
3.Plugins:完成模块功能的补充,包括连接插件、邮箱插件、
4.Playbooks:剧本;定义Ansible多任务配置文件,由Ansible自动执行
5.Inventory:定义Ansible管理主机的清单、host被管控的节点。
6.Connection Plugins:负责和被监控端实现通信
特性
1.与传统的sc结构不同,不需要安装客户端和服务端,在主控主机上直接运行命令。
2.基于模块工作,可以使用任意语言开发模块,高度自定义。
3.基于SSH工作,好像在主控主机上ssh登陆了所有的控制的主机上。
4.使用yaml语言定制剧本playbook。
5.可以实现多级指挥。
6.幂等性,一种操作重复多次结果相同。
安装与配置
安装
可以使用pip,yum或者二进制源码安装
我们这里使用最简单的yum安装
[[email protected] ~]# yum install ansible
查看
常用命令
ansible:临时命令执行工具,常用于临时命令的执行
ansible-doc:Ansible模块功能查看工具
ansible-playbook:Ansible定制自动化的任务集编排工具
查看版本,查看可用命令集
[[email protected] ~]# rpm -ql ansible | grep bin
/usr/bin/ansible
/usr/bin/ansible-config
/usr/bin/ansible-connection
/usr/bin/ansible-console
/usr/bin/ansible-doc
/usr/bin/ansible-galaxy
/usr/bin/ansible-inventory
/usr/bin/ansible-playbook
/usr/bin/ansible-pull
/usr/bin/ansible-vault
查看配置文件
[[email protected] ~]# rpm -ql ansible | grep etc
/etc/ansible
/etc/ansible/ansible.cfg#主配置文件
/etc/ansible/hosts#主机清单
/etc/ansible/roles
配置文件
主配置文件,用来指定ansible的全局配置。
一般不需要改编/etc/ansible/ansible.cfg
[[email protected] ~]# cat /etc/ansible/ansible.cfg
主机配置文件,用来指定哪些主机要被我操控,并且免**登陆。
我的主机(node1)192.168.225.101
被控制的机器(node2)192.168.225.102
被控制的机器(node3)192.168.225.103为被操控的主机分组。可以指定ip地址和主机名。
[[email protected] ~]# vim /etc/ansible/hosts
[node2]
192.168.225.102
[node3]
192.168.225.103
2.node1生成**对,把其中公钥放到node2,3。使得node1可以远程ssh这主机node2,3.
[[email protected] ~]#
[[email protected] ~]# ssh-copy-id -i ./.ssh/id_rsa.pub [email protected]
ansible命令
命令的基本格式
ansible [options]
1.ansible基本命令
2.host-pattern,指定host文件里的全部主机:all。指定一个主机组如:node2。
3.选项
命令的选项
参数 | 作用 |
---|---|
-a | MODULE_ARGS, --args=MODULE_ARGS指定命令 |
-C | , --check 预演一下,并不是真正调用 |
–list-hosts | 所匹配出的所有可用主机 |
-m | MODULE_NAME 选择模块的名称 |
-M | MODULE_PATH, --module-path=MODULE_PATH指定自定义的模块的路径 |
–syntax-check | 检查给出的命令是否有语法错误 |
简单命令
为node2节点设置主机名
[[email protected] ~]# ansible node2 -a "hostnamectl set-hostname node2"
192.168.225.102 | SUCCESS | rc=0 >>
ansible的返回状态
绿色:执行成功并且不需要做改变的操作
黄色:执行成功并且对目标主机做变更
红色:执行失败
ansible-doc命令
命令的基本格式
1.ansible-doc -s 模块名。查看使用这些模块的时候可以指定哪些参数。
2.ansible-doc -l 查看所有可用的模块。
简单实例
(下面的例子看似没有实际意义,但是帮助我们使用模块时查看和指定参数,下一章节常用模块学习就是这样做的)
1.默认情况下,测试是否能够ping通,直接调用ping模块就能够检测
[[email protected] ~]# ansible node2 -m ping
192.168.225.102 | SUCCESS => {
"changed": false,
"ping": "pong"
}
2.但是我们发现如果是成功的话返回pong。这个单词我看的不爽,我们想要换个单词。利用ansible-doc查看ping模块可以怎么设置。
[[email protected] ~]# ansible-doc -s ping
- name: Try to connect to host, verify a usable python and return `pong' on success
ping:
data: # Data to return for the `ping' return value. If this parameter is set to `crash',
the module will cause an exception.
3.原来使用ping模块时只要指定data就可以的到想要的返回值
[[email protected] ~]# ansible node2 -m ping -a data=hell0
192.168.225.102 | SUCCESS => {
"changed": false,
"ping": "hell0"
}
ansible执行步骤
1 .加载自己的配置文件 默认/etc/ansible/ansible.cfg
2.加载自己对应的模块文件,如command
3.通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的
4.对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件。
5.给文件+x执行
6.执行并返回结果 删除临时py文件,sleep 0 退出