Ansible 简单的说是一个配置管理系统(configuration management system)。你只需要可以使用 ssh 访问你的服务器或设备就行。它也不同于其他工具,因为它使用推送的方式,而不是像 puppet 等 那样使用拉取安装agent的方式。ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。
? 模块化:调用特定的模块,完成特定任务
? 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
? 支持自定义模块
? 基于Python语言实现
? 部署简单,基于python和SSH(默认已安装),agentless
? 安全,基于OpenSSH
? 支持playbook编排任务
? 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
? 无需代理不依赖PKI(无需ssl)
? 可使用任何编程语言写模块
? YAML格式,编排任务,支持丰富的数据结构
? 较强大的多层解决方案
工作原理
各个模块介绍
PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
INVENTORY:Ansible管理主机的清单/etc/anaible/hosts
MODULES:Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义,ansible-doc –l 可查看模块
PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
API:供第三方程序调用的应用程序编程接口
ANSIBLE: 组合INVENTORY、 API、 MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具
二.安装
1.环境
redhat6.5
server1 190.168.3.241
server2 190.168.3.242
server3 190.168.3.243
server1主控制模块
[[email protected] ansible]# yum install -y epel-relase
yum instll ansible -y
2.配置 vim hosts
可以写域名,需要dns解析
后面还可以加配置参数
举例:
[test]
190.168.3.242 ansible_ssh_port=2222 ansible_ssh_user=manager 被管理主机端口号和用户
190.168.3.243 ansible_ssh_private_key_file=/home/example/.ssh/aws.pem 指定key文件
host_key_check=False 跳过ssh连接过程中要输入的yes/no
3.简单命令练习
ansible <host-pattern> [-m module_name] [options]
指令 匹配规则的主机清单 -m 模块名 选项
--version 显示版本
-a 模块参数(如果有)
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
--list-hosts 显示主机列表,可简写--list
-k, --ask-pass 提示连接密码,默认Key验证
-K,--ask-become-pass 提示使用sudo密码
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户
-U, SUDO_USER, --sudo-user 指定sudu用户
-b, --become 代替旧版的sudo 切换
ansible-doc: 显示模块帮助
ansible-doc [options] [module...]
-a 显示所有模块的文档
-l, --list 列出可用模块
-s, --snippet 显示指定模块的简要说明
[[email protected] ansible]#ansible -i hosts server -u root -m command -a ‘ls /root‘ -k
190.168.3.242 | SUCCESS | rc=0 >>
anaconda-ks.cfg
install.log
install.log.syslog
190.168.3.243 | SUCCESS | rc=0 >>
anaconda-ks.cfg
install.log
install.log.syslog
-k要输入密码,所以要做免密
[[email protected] ansible]#ssh-keygen
[[email protected] ansible]#ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
[[email protected] ansible]#ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
免密完测试
简写命令
[[email protected] ansible]# ansible test -a ‘ls /root‘
190.168.3.243 | SUCCESS | rc=0 >>
anaconda-ks.cfg
install.log
install.log.syslog
190.168.3.242 | SUCCESS | rc=0 >>
anaconda-ks.cfg
install.log
install.log.syslog
[[email protected] ansible]# ansible test -m ping
190.168.3.243 | SUCCESS => {
"changed": false,
"ping": "pong"
}
190.168.3.242 | SUCCESS => {
"changed": false,
"ping": "pong"
}
4.分组写法
[[email protected] ansible]# vim hosts
[[email protected] ansible]# ansible web -m ping
190.168.3.243 | SUCCESS => {
"changed": false,
"ping": "pong"
}
190.168.3.242 | SUCCESS => {
"changed": false,
"ping": "pong"
}
[[email protected] ansible]# ansible web_nginx -m ping
190.168.3.242 | SUCCESS => {
"changed": false,
"ping": "pong"
}
三.简单模块介绍
[[email protected] ansible]# ansible-doc -l 显示所有安装模块
[[email protected] ansible]# ansible-doc -s user 显示其中的user模块
1.setup模块 查看远程主机的基本信息
[[email protected] ansible]# ansible web_nginx -m setup
2.ping 远程主机的运行情况
[[email protected] ansible]# ansible web_nginx -m ping
190.168.3.242 | SUCCESS => {
"changed": false,
"ping": "pong"
}
3.file 设置文件属性
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
例子:
做一个软连接
删除软连接
创建文件