ansible
可实现:
1)自动化部署APP
2)自动化管理配置项
3)自动化持续交付
4)自动化云服务管理
ansible的优点:
1)需要ssh和Python即可
2)无客户端
3)功能强大,模块丰富
4)上手太容易,门槛低
5)基于Python的开发
6)使用公司比较多,社区活跃
ansible基于ssh协议来管理机器,被管理主机需要开启ssh服务
ansible执行时配置文件的查找顺序 :
1、首先检测ANSIBLE_CONFIGd变量定义的配置文件
2、其次检测当前目录下的./ansible.cfg文件
3、再次检测当前用户的家目录下~/ansible.cfg文件
4、最后检测/etc/ansible/ansible.cfg文件
/etc/ansible/ansible.cfg是ansible默认的配置文件路径
ansible.cfg配置文件主要的参数
1、inventory :用来指定主机清单路径
2、remote_user = alice //连接受管机的远程用户名(root情况可以省略)
3、roles_path = roles //角色目录(当用到角色时指定的路径)
【app:children】 a1
代表a1组是app组的子组
ansible命令基础
ansible 主机集合 -m 模块名 -a 模块参数
主机集合:多个用逗号分隔
-m: 模块名 默认是command
-a or --args 模块参数:
其他的参数
-i: inventory文件路径,或者可执行的脚本
-k: 使用交互式的登陆密码
-e:定义变量
-v: 显示详细信息
- 列出要执行的主机
ansible all --list-hosts - 批量检测主机
ansible all -m ping -k
ansible模块的使用
- ansible-doc
相当于shell中的man帮助手册
ansible-doc -l #列出所有的模块 - ping模块
用于测试网络连通性,没有参数 - command模块(不支持特殊字符的使用【<、>、|、&】)
ansible默认的模块,用于远程执行命令
ansible all -m command -a ‘uptime’ #查看所有主机的负载
- shell模块
用法和 command类似,他是通过/bin/bash来执行指令,支持特殊字符,支持任何的命令,无法执行交互式的命令【vim、top】
ansible all -m shell -a 'uptime' #查看所有机器的负载
切换目录一般用chdir来 代替cd命令
-
script模块
在本地写一个脚本,使用script模块批量执行 -
yum模块
用来远程安装软件包
-name:软件名 -state:动作
-install===installed-remove===removed
-
service模块
-name: 服务名
-enabled: 开机是否启动 yes、no
-sleep:执行了restarted会在stop和start之间睡眠几秒
-state:当前服务执行(started、stopped、restarted、reloaded) -
copy模块
用于复制文件到远程主机
-src:源文件路径(当前服务器的文件路径,当后面有/时复制目录下的内容,当没有/时连同目录一起复制)
-dest: 目标文件路径(远程服务器的文件路径)
-force: yes/no 是否强制执行(目标服务器有该文件会覆盖)
~]# ansible all -m copy -a 'src=/etc/hostname dest=/etc/hostname'
- lineinfile模块
类似于sed的行编辑替换的模块
-path:目标文件
-regexp:正则,要修改的行
-line:最终修改的结果
**例:**修改my.cnf中,bin-log格式,mixed–>row
~]# ansible db -m lineinfile -a '
path="/etc/my.cnf"
regexp="^binlog-format"
line="binlog-format = row "
'
- replace模块
类似于sed的行编辑替换的模块
-path:目标文件
-regexp:正则,要修改的行
-replace:替换后的结果
**例:**替换指定字符row–>mixed
~]# ansible db -m replace -a '
path="/etc/my.cnf"
regexp="row"
replace="mixed"
'
- setup模块
用于获取主机信息,playbook中常用
-filter: 过滤所需信息
~]# ansible cache -m setup -a 'filter=ansible_distribution'
- file模块
文件模块,用于创建文件或者目录
-path:指定路径
-state:指定类型(directory、touch【不存在创建】、file【不存在跳过】、link、hard、absent【取消文件、目录、软连接】)
~]# ansible host1 -m file -a "path=/test owner=test group=test mode=0644"
~]# ansible host1 -m file -a "src=/test dest=/testlink owner=root group=root state=link"