一、基础介绍
1.简介
ansible 自动化运维工具,基于Python开发,主要为批量配置、部署等。ansible基于模块工作,本身没有批量部署的能力。真正批量部署的是ansible所运行的模块,ansible只是提供了一种框架。主要包括
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务,非必需可以让节点一次性运行多个任务。
2.ansible安装
# pip install ansible
3.ansible 常用模块使用
(1).set
## 用来查看远程主机的一些基本信息
#ansibleall -m setup
(1).ping
## 测试远程主机运行状态
#ansibleall -mping
(2).file
##设置文件的属性
相关选项如下:
force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归设置文件的属性,只对目录有效
src:被链接的源文件路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,就创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
#ansible all -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"
#ansible all -m file -a "path=/tmp/resolv.conf state=absent"
(3) .copy
##复制文件到远程主机
相关选项如下:
backup:再覆盖之前,将源文件备份,备份文件包含时间信息,有两个选项:yes|no
content: 用以替代“src”,可以直接设定文件的值
dest:必选项。要将源文件复制到远程主机的绝对路径,如果原文件是一个目录,那么该路径也必须是一个目录。
directory_mode: 递归设定目录的权限,默认系统默认权限。
force:如果目录主机包含该文件,但是内容不同,如果设为yes,则强制覆盖;如果设置为no,则只有目标主机定位该文件不存在时,才会复制。默认为yes
others: 所有的file模块里的选项都可以在这里使用
src: 被复制到远程主机的本地文件,可以使绝对路径,也可以是相对路径。如果路径是一个目录,她将递归复制。在这种情况下,如果路径使用“/”结果,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录里的全部内容,类似于rsync
#ansible all -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"
初始常见报错:
# "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
非控制端错误,而是客户端缺少 libselinux-python软件。
安装该程序即可 yum -y install libselinux-python
(4).command
##在远程主机上执行命令
相关选项如下:
creates: 一个文件名,当该文件存在时,则该命令不执行
free_form: 要执行的Linux命令
chdir:在执行指令之前,先切换到该目录
removes: 一个文件名,当该文件不存在,则该选项不执行
executable: 切换shell来执行指令, 该执行路径必须是一个绝对路径
例:
#ansibleall -m command -a "ls –al /tmp/resolv.conf"
(6)、shell
## 切换到某个shell执行指定的指令,参数与command相同。
与command不同的是,此模块可以支持命令管道,同时还有另一个模块也具备此功能:raw
示例:
## 先在本地创建一个SHELL脚本
# vim /tmp/rocketzhang_test.sh
#!/bin/sh
date +%F_%H:%M:%S
#chmod +x /tmp/rocketzhang_test.sh
## 将创建的脚本文件分发到远程
# ansible storm_cluster -m copy -a "src=/tmp/rocketzhang_test.sh dest=/tmp/rocketzhang_test.sh owner=root group=root mode=0755"
## 远程执行
# ansible storm_cluster -m shell -a "/tmp/rocketzhang_test.sh"
(7)、更多模块
其他常用模块,比如:service、cron、yum、synchronize就不一一例举,可以结合自身的系统环境进行测试。
service:系统服务管理
cron:计划任务管理
yum:yum软件包安装管理
synchronize:使用rsync同步文件
user:系统用户管理
group:系统用户组管理
更多模块可以参考:
#ansible-doc –l
三、ansible其他参数
ansible命令参数:
Usage: ansible <host-pattern> [option]
Options:
-m MODULE_NAME, --module-name=MODULE_NAME 要执行的模块,默认为command
-a MODULE_AGES, --args=MODULE_ARGS 模块的参数
-u REMOTE_USER, --user=REMOTE_USER ssh连接的用户名,默认用root,ansible.cfg可以配置
-k, --ask-pass 提示输入ssh登录密码,当使用密码验证登陆的时候用
-s, --sudo sudo运行
-U SUDO_USER, --sudo-user=SUDO_USER sudo到哪个用户,默认为root
-K, --ask-sudo-pass 提示输入sudo密码,当不是NOPASSWD模式时使用
-B SECONDS, --background=SECONDS run asynchronously,failing after X seconds(default=N/A)
-P POLL_INTERVAL, --poll=POLL_INTERVAL set the poll interval if using -B(default=15)
-C, --check 只是测试一下会改变什么内容,不会真正执行
-c CONNECTION 连接类型(default=smart)
-f FORKS, --forks=FORKS fork多少个进程并发处理,默认5
-i INVENTORY, --inventory-file=INVENTORY 指定hosts文件路径,默认default=/etc/ansible/hosts
-I SUBSET, --limit=SUBSET 指定一个pattern,对<host_pattern>已经匹配的主机再次过滤
--list-hosts 只打印有哪些主机会执行这个playbook文件,不是实际执行该playbook
-M MODULE_PATH, --module-path=MODULE_PATH 要执行模块的路径,默认为/usr/share/ansible/
-o, --one-line 压缩输出,摘要输出
--private-key=PRIVATE_KEY_FILE 私钥路径
-T TIMEOUT, --timeout=TIMEOUT ssh连接超时时间,默认10秒。
-t TREE, --tree=TREE 日志输出到该目录,日志文件会以主机名命名
-v, --verbose verbose mode(-vvv for more, -vvvv to enable connection debugging)