1.ansible基本概述
2.ansible的实现
3.ansible ad-hoc 单模块的操作
一、Ansible基础概述
1.什么是Ansible
Ansible是一个自动化的配置管理工具,通过一个命令完成一系列的操作,进而减少重复行的工作,提高工作的效率
2.功能
①批量执行远程命令
②批量配置软件服务
③实现软件开发功能
④编程高级的IT任务,playbook用来描绘一套IT架构(剧本)
3.特点
易学、操作灵活、简单应用、安全可靠、移植性高
4.架构
控制端、被控端、ssh、inventory、ad-hoc、playbook
二、ansible的实现
1.安装配置环境
1.安装
[root@manager ~]# yum install ansible -y
2.配置ansible.cfg,指定,主机清单的目录
[root@manager ansible_adhoc]# cat ansible.cfg
[defaults]
inventory = ./hosts
3.定义主机清单
[root@manager ~]# cat /etc/ansible/hosts
[webservers]
172.16.1.7
172.16.1.8
4.推送公钥给各个节点
5.执行ansible ad-hoc 测试是否能与该清单节点通讯
[root@manager ~]# ansible webservers -m ping
2.配置文件查找顺序
1.$ANSIBLE_CONFIG
2.当前目录下的ansible.cfg
3.当前用户家目录下的ansible.cfg
4.查找/etc/ansible/ansible.cfg
总结:一般我们会创建一个目录,然后切换到该目录下,创建ansible.cfg和hosts文件,然后进行ansible ad-hoc操作
3..主机清单的写法
1.基于密码的方式
[webservers]
172.16.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='密码'
2.基于秘钥的方式
[webservers]
172.16.1.31
#172.16.1.31 hostname=nfs
#nfs ansible_ssh_host=172.16.1.31 #显示主机名
三、ansible ad-hoc单个模块的操作
临时命令,执行完即结束,不会保存
语法:
ansible [主机或主机组名] -m [模块] -a ['动作']
提示:
绿色(未更改)
黄色(发生了更改)
红色(报错)
主要模块
模块名称 | 具体 |
---|---|
命令 | command、shell |
安装 | yum、yum_repository |
配置 | copy、file |
启动 | systemd、service |
挂载 | mount |
定时 | cron |
用户 | user、group |
防火墙 | selinux、firewalld |
1.command 和 shell 模块
区别:shell支持通道,而command不支持
[root@manager ansible_adhoc]# ansible webserver -m command -a 'df -h'
[root@manager ansible_adhoc]# ansible webservers -m shell -a 'ps -ef |grep nginx'
2.yum 模块
[root@manager ansible_adhoc]# ansible webserver -m yum -a 'name=nginx state=present'
name 软件包名称,或下载地址
state:
present 安装(默认)
absent 卸载
latest 更新
enablerepo 指定哪个仓库下载
disablerepo 禁止哪个仓库下载
3.copy 模块
[root@manager ansible_adhoc]# ansible webservers -m copy -a 'src=./exports.j2 dest=/etc/exports owner=root group=root mode=644'
src 源文件
dest 目标位置
owner 设定文件属主
group 设定文件属组
mode 设定文件权限
backup 备份(只在文件有变化时执行)
content 往目标主机文件中增加内容(覆盖重定向)
4.group 和 user 模块
[root@manager ansible_adhoc]# ansible webservers -m group -a 'name=www gid=666'
[root@manager ansible_adhoc]# ansible webservers -m user -a 'name=www uid=666 group=www create_home=no shell=/sbin/nologin'
groups 指定附加组
create_home 创不创建家目录
shell 指定登录shell
state:
present 创建(默认)
absent 删除
remove=yes 移除用户相关的文件(例如家目录)
#创建jsm用户,为其添加123作为登录密码,并且创建家目录
[root@manager ansible_adhoc]# ansible localhost -m debug -a "msg={{ '123' | password_hash('sha512', 'salt') }}"
[root@manager ansible_adhoc]# ansible webservers -m user -a 'name=jsm password="$6$salt$jkHSO0tOjmLW0S1NFlw5veSIDRAVsiQQMTrkOKy4xdCCLPNIsHhZkIRlzfzIvKyXeGdOfCBoW1wJZPLyQ9Qx/1" create_home=yes'
5file 模块
[root@manager ansible_adhoc]# ansible webservers -m file -a 'path=/data state=directory owner=www group=www mode=755 recurse=yes'
path 指定被控端的路径
state:
directory 创建目录
touch 创建文件
recurse 递归授权
6.systemd 和 service 模块(一模一样)
[root@manager ansible_adhoc]# ansible webservers -m systemd -a 'name=nginx state=started enabled=yes'
state:
started 启动
restarted 重启
reloaded 重载
stopped 停止
enabled=yes 开机自启
7.mount 模块
[root@manager ansible_adhoc]# ansible client -m mount -a 'src=172.16.1.7:/data path=/opt fstype=nfs opts=defaults state=mounted'
src 设备、nfs、磁盘、光盘等
path 被控端要挂载的目录
fstype:文件系统类型
iso9660 光盘
nfs
xfs
opts 挂载参数
state:
mounted 挂载设备,并加入开机自启
present 写入fstab,不挂载
absent 取消挂载,并清除fstab中记录
unmounted 取消挂载,不清楚fstab记录
remounted 重新挂载
8.get_url 模块
[root@manager ansible_adhoc]# ansible webservers -m get_url -a 'url=https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.0-1.el7.x86_64.rpm dest=/tmp'
url 指定下载地址
dest 指定下载目录
9.cron 模块
[root@manager ansible_adhoc]# ansible webservers -m cron -a 'name=backup minute=0 hour=5 job=/server/script/client_data_server.sh &>/dev/null'
name 定时任务描述
job 具体的任务
minute 分
hour 时
day 日
month 月
weekday 周
disabled=no 关闭定时任务
disabled=yes 重新启动定时任务
10.selinux 和 firewalld 模块
[root@manager ansible_adhoc]# ansible webservers -m selinux -a 'state=disabled'
state=disabled 关闭防火墙