ansible是基于python语言所开发出的一款轻量级的自动化运维软件。python
ansible的优势:基于ssh通讯,不须要在客户端安装任何插件,因此易于部署。 注:搞个密钥对,而后将公钥传到各个奴隶节点上就OK了。docker
具备丰富的操做模块,也能够本身用python编写第三方模块,因此他的扩展性高。shell
可编写playbook来定制强大的需求,其实就是将多个命令写到一个脚本内。运维
ansbile执行命令流程:1.加载本身的配置文件 2.查找主机清单中的主机或组 3. 加载使用的模块文件 ssh
4.生成python临时脚本并传送到各个奴隶节点上 5.文件加执行权限 6.执行脚本返回结果并删除临时脚本。 异步
ansible配置文件介绍:工具
inventory = /etc/ansible/hosts 指定清单文件目录fetch
library = /usr/share/my_modules/ 指定模块的自定义目录ui
module_utils = /usr/share/my_module_utils/ 模块的公用目录spa
remote_tmp = ~./ansible/tmp 指定目标主机存放临时脚本的地方
local_tmp = ~./ansible/tmp 指定本主机存放临时脚本的地方
plugin_filters_cfg = /etc/ansible/plugin_filters.yml 过滤没有的插件的配置文件
forks = 5 指定ansible执行时启动多少个进程并行执行
poll_interval = 15 指定ansible异步执行的轮训时间
sudo_user = root 指定sudo的用户
remote_port = 22 默认的链接端口
ansible命令选项:
ansible-config dump 查看配置文件加载的环境变量。
ansible-doc -l:查看全部的模块
ansible-doc -s 模块名:获取指定模块的使用信息。
-m 模块名:指定使用模块。
-a:模块的参数
-B:异步的超时时间
-e:添加变量
-k:输入ssh密码
-K:输入sudo的用户
-u:指定远程的用户
-i:指定清单文件路径
-l:只运行那些主机
-C:检测命令运行结果。
-f:指定并行执行任务的数量 注:默认为5。
-T:指定ssh链接超时时间 注:默认为10s
-o:将执行结果以一行来显示。
-v -vv -vvv -vvvv:查看命令执行的详细信息,v越多越详细。
--list-hosts:查看主机组下的内容。
--version:显示版本信息
--syntax-check:检测playbook运行是否正常
ansible 清单变量搞一搞:
[test]
localhost ansible_connection=local 指定链接主机类型 local为本主机 也能够指定docker等等。
[play]
192.168.100.202 ansible_ssh_pass=123123 zcl=zcl 此变量权限最大。
[test2:children]
test
play
[test2:vars]
zcl=nb 此变量权限第二大。
[all:vars]
zcl=hehe 此变量权限最小。
ansible经常使用模块:
1.command模块
ansible play -m command -a 'chdir /etc/ ls':切换到/etc/下执行命令。
ansible play -m command -a 'creates=/root/zcl.text ls':判断文件若是存在则不执行命令。
ansible play -m command -a 'removet=/root/zcl.text ls':判断文件若是不存在则不执行命令。
2.ping模块
ansible play -m ping:检测通讯
3.shell模块
ansible play -m shell -a 'cat /etc/passwd |grep zcl':支持"|","<",">","&"
4.copy模块
ansible play -m copy -a 'src=/root/zcl date=/data/': src指定本地文件 date指定copy到的路径
ansible play -m copy -a 'content="zcl wudi1234\n" dest=/data/name mode=666':content指定文件内容 mode指定文件权限。
ansible play -m copy -a 'content="zcl 呵呵" backup=yes mode=666':backup修改文件并备份原有文件。
5.file模块
ansible play -m file -a 'gruop=zcl mode=655 owne=zcl path=/data/ycq state=directory':group指定属组 mode指定权限后能够跟mode owner指定属主后必须跟path
注:state=directory:建立目录 touch:建立文件 link:建立软链接 hard:建立硬连接 absent:删除目录,文件,取消连接。
ansible play -m file -a 'path=/data/lfy state=directory':state状态=directory:若是目录不存在则建立目录
ansible play -m file -a 'path=/data/aaa.text src=/data/xzj.text state=link':path指定建立的链接文件 src指定源文件 state=link:软链接。
ansible play -m file -a 'path=/data/zcl state=absent':删除zcl文件。absent:删除
6.fetch模块
ansible play -m fetch -a 'dest=/root/ src=/root/wudi.text':dest:指定文件拉取到的目录 src:指定被拉取的文件。 fetch只能够拉取文件不能够拉取目录。
7.cron模块
(minute:分钟)(hour:小时)(day:日)(month:月)(weekday:周)
name:计划任务的描述 job:指定运行的命令 user:以哪一个用户运行 state:指定状态默认present添加计划任务 absent删除计划任务
ansible play -m cron -a 'name="查看负载状况" minute=*/5 job="uptime"' ####添加计划任务
ansible play -m cron -a 'name="查看负载状况" minute=*/5 job="uptime" state=absent' ####删除计划任务
ansible play -m shell -a 'crontab -l' ####查看计划任务
8.yum模块
(name:安装包的名字)(state:present安装 latest安装最新 absent卸载)
ansible play -m yum -a 'name=elinks state=present':安装elinks工具
9.service模块
ansible play -m service -a 'name=httpd state=started enabled=true' (state:started启动 restarted重启 stopped 关闭 reloaded重载) enabled=true:开机自启动
10.user模块
comment:指定用户描述信息 uid:指定用户uid号 password:指定用户密码 name:指定建立用户 state=absent 删除用户 home:指定用户家目录
ansible play -m user -a 'comment="ansible用户" name=ansible uid=666 password=123123'
11.group模块
gid:指定组gid号 name:指定组的名字 system=yes:表示建立为系统组
ansible play -m group -a 'name=zcl gid=111 system=yes'
12.script模块
ansible play -m script -a '/jiaobeng/a.sh' 将本地脚本推送到被管理主机执行脚本。
13.setup模块
facts组件是Ansible用于采集被管机器设备信息的一个功能
facts就是变量,内建变量 。每一个主机的各类信息,cpu颗数、内存大小等。会存在facts中的某个变量中
ansible play -m setup -a 'filter="*mem*"' :查看内存
ansible play -m setup -a 'filter="*mem*"' --tree /root/facts
14.debug模块
ansible play -m debug -a 'msg={{test}}' 输出play内test变量的值。
ansible清单文件中直接指定IP和密码进行链接。无需建立秘钥对
应为第一次链接要输入yes因此在ansible.cfg文件将
#host_key_checking = False 将#号去掉便可
[play]
play1 ansible_ssh_host=192.168.100.203 ansible_ssh_pass=123123
play2 ansible_ssh_host=192.168.100.204 ansible_ssh_pass=123123