title: Ansible 清单与命令解析(2)
date: 2018-12-01 10:54:14
tags:
- Ansible
categories: Ansible
copyright: true
---
Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.
在大规模的配置管理工作中我们需要管理不同业务的不同机器,这些机器的信息都存放在 Ansible 的 Inventory 组件里面,在我们工作中配置部署针对的主机必须先存放在 Invento 组里面,这样才能使用 Ansible 对它进行操作,默认 Ansible 的 Inventory 是一个静态的 INI 格式的文件/etc/ansible/hosts 当然,还可以通过 ANSIBLE_HOSTS 环境变量指定或者运行 ansible 和 ansible-playbook 的时候用 -i 参数临时设置.
主机和组
我们可以通过配置/etc/ansible/hosts
这个文件来定义主机和主机组,例如下面的代码.
[[email protected] ~]# cat -n /etc/ansible/hosts 1 192.168.1.10 ansible_ssh_pass='123123' 2 192.168.1.20 ansible_ssh_pass='123123' 3 4 [docker] 5 172.168.1.10[1:9] 6 [docker:vars] 7 ansible_ssh_pass='123123' 8 [web_server] 9 192.168.10.10 10 192.168.10.20 11 192.168.10.30
上图的参数解析:
● 第1-2行:定义了两台主机,并且使用内置变量给予了SSH登陆密码.
● 第4-5行:定义了一个docker组,且组内有101-109这9台机器的定义.
● 第6-7行:定义为上面的docker组统一赋值一个密码.
● 第8-11行:定义了一个web_server组,其中有三台主机.
这就是,常用的组的定义与声明部分啦.
端口与别名
ssh默认的端口是22 (此时的Ansible主机配置文件可以省略),但是如果某些主机的ssh运行在自定义的端口上,Ansible使用Paramiko进行ssh连接时不会使用你ssh配置文件中列出的端口,但是如果修改ansible使用openssh进行ssh连接时将会使用:
1.在Client客户端上ssh开启2个端口连接,下面一段话随意加入到指定配置文件里即可.
[[email protected] ~]# vim /etc/ssh/sshd_config Port 10086 Port 22 [[email protected] ~]# systemctl restart sshd
2.在Ansible服务端的配置,配置主机清单列表同时指定一个主机端口即可.
[[email protected] ~]# vim /etc/ansible/hosts [web_server] 192.168.10.10:10086 192.168.10.20:10086 [web_server:vars] ansible_ssh_pass='123123'
使用主机变量
这里介绍 Ansible Invento 的内置的一些参数,这些参数我们在实际工作中也会经常使用到.
上面的实例也可以配置直接使用用户名和密码进行连接
[[email protected] ~]# vim /etc/ansible/hosts [web_server] 192.168.10.10 ansible_ssh_port=10086 ansible_ssh_user=root ansible_ssh_pass='123123' [docker_server] 192.168.10.10 192.168.10.20 [docker_server:vars] ansible_ssh_port=10086 ansible_ssh_user=root ansible_ssh_pass='123123'
Ansible配置文件解析
Ansible 配置文件是以 ini 格式存储配置数据的,在 Ansible 中,几乎所有的配置项都可以通过 Ansible 的 playbook 或环境变量来重新赋值,在运行 Ansible 命令时,命令将会按照预先设定的顺序查找配置文件,具体的ansible配置文件包括以下两个部分:
/etc/ansible/ansible.cfg 和 /etc/ansible/hosts
● /etc/ansible/ansible.cfg 主要配置Ansible的一些参数信息
● /etc/ansible/hosts 主机清单(被控主机文件),或分组管理
● /usr/bin/ansible* 记录了Ansible的命令
如果你通过操作系统软件包管理工具或 pip 安装,那么你在/etc/ansiblc目录下应该已经有了 ansible.cfg 配置文件.如果你是通过 GitHub 仓库安装的,在你复制的仓库中 examples 目录下可以找到 ansible.cfg 你可以把它拷贝到/etc/ansible目录下.
接下来看一下Ansible的主配置文件 /etc/ansible/ansible.cfg
里面的参数解析,并说明每个参数代表的含义.
就介绍这些,这是最常用的,其他的文本请参考
http://www.ansible.com.cn/docs/intro_configuration.html#environmental-configuration
Ansible命令参数解析
看完了上面的配置文件的解析,我们再来看一下,Ansible命令的常用语法格式依旧常用命令参数吧.
[[email protected] ~]# ansible --help 命令语法:[ ansible [选项] [模块] [参数] [主机列表] ] -m #要执行的模块,默认为command -a #指定模块的参数 -u #ssh连接的用户名,默认是root -k #提示输入ssh登录密码,当使用密码验证的时候用 -s #sudo权限运行 -U #sudo到哪个用户,默认为root -K #提示输入sudo密码,当不是NOPASSWD模式时使用 -C #只是测试一下会改变什么内容,不会真正去执行 -c #指定连接类型(default=smart) -f #fork指定进程并发数,默认为5个 -i #指定hosts文件路径,默认default=/etc/ansible/hosts -I #指定pattern对已匹配的主机中再过滤一次 --list-host #打印主机列表 -M #要执行的模块路径,默认为/usr/share/ansible -o #压缩输出摘要输出 --private-key #指定一个私钥路径 -T #ssh连接超时时间,默认是10秒 -t #日志输出到该目录,日志文件名以主机命名 -v #显示详细日志
PlayBook命令参数解析
该指令对于需反复执行的、较为复杂的任务,我们可以通过定义 Playbook 来搞定,它允许使用变量、条件、循环、以及模板,也能通过角色及包含指令来重用既有内容,其通过读取playbook 文件后执行相应的动作.
[[email protected] ~]# ansible-playbook -h 命令语法:[ ansible-playbook [选项] [参数] .yml ] -m #要执行的模块,默认为command -C #测试运行效果 --flush-cache #清除fact缓存 --syntax-check #语法检查 --force-handlers #如果任务失败,也要运行handlers --list-tags #列出所有可用的标签 --list-tasks #列出将要执行的所有任务 --skip-tags=SKIP_TAGS #跳过运行标记此标签的任务 --start-at-task=START_AT_TASK #在此任务处开始运行 --step #一步一步在运行之前确认每个任务 -t TAGS,--tags=TAGS #只运行标记此标签的任务