ansible安装与应用
复制的代码运行错误仔细检查参数信息,作者也么有每一个命令都进行过测试
1. 选择ansible批量管理的意义
为什么选择ansible?
1.提高工作的效率
2.提高工作的准确率
3.减少维护的成本
4.减少重复性的操作
ansible的功能:
1.批量的系统操作配置
2.批量的软件部署
3.批量文件的分发
4.批量系统信息的收集
2. ansible的安装
1.首先要优化yum源:yum优化3,点击
yum -y install ansible
ansible的一些配置文件
/etc/ansible/ansible.cfg 配置文件
/etc/ansible/hosts 主机清单文件,定义管理主机信息
/etc/ansible/roles 角色目录
2.配置管理主机的清单文件
vim /etc/ansible/hosts
添加要管理的主机IP
172.16.1.31
172.16.1.41
3.测试
ansible all -a "hostname"
ansible 172.16.1.41 -a "hostname"
3. ansible的模块的应用
官网:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html
ansible的语法格式
ansible 主机名称/主机地址/all -m 模块 -a “执行什么动作”
3.1 command模块
第一个模块command
参数 | 作用 |
---|---|
chdir | 执行命令之前切换目录 |
creates | 如果文件存在不会执行后边的操作 |
removes | 如果文件存在,执行后边的操作 |
ansible 172..16.1.41 -m command -a "hostname"
扩展应用(参数)
1)chdir 执行命令之前切换目录(默认在家目录)
ansible 172..16.1.41 -m command -a "chdir=/tmp touch oldboy.txt"
2)creates 如果文件存在,不会执行后边的操作
ansible 172..16.1.41 -m command -a "creates=/yang/yq02.txt chdir=/yang touch ya01.txt"
3)removes 如果文件存在,会执行后边的操作
ansible 172..16.1.41 -m command -a "removes=/yang/yq02.txt chdir=/yang touch ya01.txt"
3.2 shell模块
参数 | 作用 |
---|---|
chdir | 执行命令之前切换目录 |
creates | 如果文件存在不会执行后边的操作 |
removes | 如果文件存在,执行后边的操作 |
利用shell执行脚本
编写脚本
#!/bin/bash
yum inatall -y hotp
发送脚本到远程主机
scp -rp yum.sh 172.16.1.41:/server/scripts
修改脚本权限
chmod a+x yum.sh
运行ansible命令
ansible 172.16.41 -m shell -a "sh /server/scripts/yum.sh"
3.3 script 脚本模块
参数 | 作用 |
---|---|
chdir | 执行命令之前切换目录 |
creates | 如果文件存在不会执行后边的操作 |
removes | 如果文件存在,执行后边的操作 |
不分发脚本进行执行
ansible 172.16.1.41 -m script -a "/server/scripts/yum.sh"
3.4 copy 模块
参数 | 作用 |
---|---|
src | 需要复制的文件地址 |
dest | 复制到的地址 |
owner | 文件到的属主信息 |
group | 文件的属组 |
groups | 文件除了自身,还属于那个属组 |
backup | 对文件进行备份,默认no |
mode | 文件的权限chmod |
content | 对传输的文件进行编辑,建议文件内容少的时候使用 |
remote_src | 是否对要进行管理的主机进行查找,默认no,从当前主机找 |
用法例子
ansible 172.1.16.41 -m copy -a "src=/etc/hosts dest=/etc/"
#ansible软件输出信息说明:
颜色:
绿色:查看主机信息/对主机信息未做改动
黄色:对主机信息进行了修改
红色:命令执行出错了 粉色:警告信息,忠告信息
蓝色:显示ansible执行的过程
扩展用法
1)传输文件的时候修改文件的属主属组信息 owner group
ansible 172.1.16.41 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ owner=oldboy group=oldboy"
2)传输文件修改权限 mode
ansible 172.1.16.41 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ owner=oldboy group=oldboy mode=666"
3)传输文件的时候进行源文件的备份 backup
ansible 172.1.16.41 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ backup=yes"
4)传输一个文件,直接编辑文件信息(一行简单的内容) content
ansible 172.1.16.41 -m copy -a "content='oldboy123' dest=/etc/rsync.password"
3.5 file模块
参数 | 作用 |
---|---|
owner | 文件的属主 |
gorup | 文件的属组 |
mode | 文件的权限chmod |
src | 创建软硬连接的源文件 |
path | 要创建的文件,dest/name |
recurse | 递归设置指定目录的文件属性 默认为no |
state | 表明你要进行的操作(见下表) |
state的参数 | 作用 |
---|---|
absent | 对目录或文件进行删除 |
directory | 创建目录 |
file | 检查文件是否存在,不存在红色,存在绿色 |
hard | 硬链接 |
link | 软连接 |
touch | 创建文件 |
1)创建一个目录 directory
ansible 172.16.1.41 -m file -a "path=/oldboy/ state=directory"
2)多级目录
ansible 172.16.41 -m file -a "path=/oldboy/oldboy02/oldboy03/ state=directory"
3)创建文件信息
ansible 172.16.1.41 -m file -a "path=/oldboy/oldboy.txt state=touch"
4)软链接文件
ansible 172.16.1.41 -m file -a "src=/oldboy/oldboy.txt dest=oldboy/oldboy_link.txt state=link"
5)硬链接文件,与源文件的inode相同(ls -i)
ansible 172.16.1.41 -m file -a "src=/oldboy/oldboy.txt dest=oldboy/oldboy_hard.txt state=hard"
6)删除数据信息
ansible 172.16.1.41 -m file -a "dest=/oldboy/oldboy_link.txt state=absent"
ansible 172.16.1.41 -m file -a "dest=/oldboy/ state=absent"
3.6 yum 模块
参数 | 作用 |
---|---|
name | 指定安装软件的名称 |
state | 指定是否安装软件 |
state参数 | 作用 |
---|---|
present latest absent | 卸载软件 |
removed | 卸载 |
installed | 安装软件 |
模块的应用
1)安装
ansible 172.16.1.41 -m yum -a "name=iotop state=installed"
2)卸载
ansible 172.16.1.41 -m yum -a "name=iotop state=absent"
3.7 service模块
参数 | 作用 |
---|---|
name | 服务的名称 |
state | 服务的状态 |
enabled | 开机自启yes或no |
state参数 | 作用 |
---|---|
reloaded | 重启 |
restarted | 重启 |
started | 启动 |
stooped | 停止 |
开机自启
ansible 172.16.1.41 -m service -a "name=rsync state=restart enabled=yes"
3.8 cron 模块
参数信息
参数 | 作用 |
---|---|
minute | 分钟,0-59 |
hour | 小时,0-23, *, */2 |
day | 1-31 |
month | 月份,1-12 |
weekday | 周几,0-6,周日0 |
job | 定时任务需要干的事 |
name | 给定时任务取名字 |
state=absent | 删除定时任务,只能删除ansible设置的 |
disabled | 注释定时任务,yes |
ansible 172.16.1.41 -m cron -a "minute=0 hour=2 job='/usr/bin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"
扩展用法
1)给定时任务设置注释信息 name=’’
ansible 172.16.1.31 -m cron -a "name='time sync' minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1'"
2)删除指定的任务(只能是ansible设置好的定时任务)
ansible 172.16.1.31 -m cron -a "name='time sync' state=absent"
3)批量的注释定时任务disabled=yes
ansible 172.16.1.31 -m cron -a "name='time sync' minute=0 hour=2 job='/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1' disabled=yes"
3.9 mount模块
参数 | 作用 |
---|---|
src | 需要挂载的存储设备的或文件信息 |
path | 指定目标挂载点目录 |
fstype | 指定挂载时的文件系统类型 |
state参数 | 作用 |
---|---|
mounted | 实现立即挂载,会修改/etc/fstab文件,实现开机自动挂载 |
unmounted | 卸载,不会改变/etc/fatab |
absent | 卸载所有 |
ansible 172.16.1.7 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted"
ansible 172.16.1.7 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=absent"
3.10 user 模块
参数 | 作用 |
---|---|
name | 创建的用户名称 |
uid | 指定uid |
gorup | 用户组 |
groups | 用户组 |
shell | 用户的登录方式,shell=/sbin/nologin虚拟用户 |
create_home | 有没有家目录,参数no ,yes |
password | 用户密码 |
实现批量创建用户
ansible 172.16.1.41 -m user -a "name=oldboy01"
扩展用法:
1.指定uid
ansible 172.16.1.41 -m user -a "name=oldboy01 uid=6666"
2.指定用户组
ansible 172.16.1.41 -m user -a "name=oldboy02 group=oldboy01"
groups
ansible 172.16.1.41 -m user -a "name=oldboy03 groups=oldboy01"
3.批量创建虚拟用户
ansible 172.16.1.31 -m user -a "name=rsync create_home=no shell=/sbin/nologin"
4.给指定用户创建密码
生成密文信息的方法
ansible all -i localhost, -m debug -a "msg={{ '密码信息123456' | password_hash('sha512', 'oldboy') }}"
“msg”:
“ 6 6 6oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1”
}
ansible 172.16.1.31 -m user -a 'name=oldboy08 password=$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1'
4.剧本的简单介绍
4.1 创建编写剧本的目录
mkdir /etc/ansible/ansible-playbook
4.2 剧本的编写注意事项
1.合理的信息缩进,空两格
2.冒号的使用,:号使用空格,结尾和注释的时候不用
3.- 表示列表,写对会出现黄色的杠
4.3编写剧本的简单测试
剧本的文件命名.yaml 或者.yml
vim rsync_server.yaml
- hosts: 172.16.1.41
tasks:
- name: 01-yum-iptop
yum: name=rsync state=installed
运行前可以检查剧本 --syntax-check
ansible-playbook --syntax-check rsync_server.yaml
在本地进行运行测试 -C
ansible-playbook -C rsync_server.yaml
正式运行
ansible-playbook rsync_server.yaml