1、 ansible软件介绍
1). ansible是一个基于python开发的自动化运维工具!(saltstack)
2). 其功能的实现是基础SSH远程连接服务的
3). ansible可以实现批量系统配置、批量软件部署、批量文件拷贝、批量运行命令等功能
2、 ansible软件特点
1). 不需要单独安装客户端,基于ssh服务
2). 不需要安装服务端
3). 需要依靠大量的模块实现批量部署
4). 配置文件/etc/ansible/ansible.cfg
3、 ansible软件安装部署和配置
PS:为了安全,尽量不要配置外网
首先保证:可以免秘钥登录被管理端
1). 管理端安装软件:
yum install ansible -y
2). 被管理端安装软件:
yum install libselinux-python -y
PS:如果关闭selinux,那么被管理端可以不安装(建议安装)
3). ansible软件管理配置文件
vim /etc/ansible/hosts #定义ansible可管理的主机
[wangyun]
172.16.1.7
172.16.1.8
172.16.1.31
172.16.1.41
4). 进行ansible软件批量管理:
ansible wangyun -m command -a "/server/scripts/p1.yml"
PS: 查看的是wangyun主机组,模块为command,的主机负载信息
wangyun #主机组
-m #指定模块参数(command为默认模块,不写也可以)
command #模块名称
-a #指定利用模块执行的动作参数,
-a后面的是要执行的命令
/server/scripts/p1.yml #批量执行的命令
4、 ansible软件命令常用参数
-k :以交互方式输入密码,进行远程管理
-a :指定应用模块的相应参数信息
-m :指定应该什么模块(默认为command模块)
5、ansible执行命令后输出信息中:
绿色——表示查询,或者没有发生任何改变
红色——表示命令操作出现异常
屎黄色——对远程主机做了相应改动
粉色——对操作提出建议或忠告
6、ansible系统命令帮助文档查看方法:
ansible-doc -l --- 列出所有可用的模块信息
ansible-doc -s cron --- 查看指定模块的参数信息
1. command模块实践:(默认模块)
ansible wangyun -m command -a "ifconfig"
#批量显示远程主机的网卡信息
ansible wangyun -m commadn -a "chair=/tmp touch kai.txt"
#批量切换到远程主机的/tmp目录下,创建kai.txt这个文件
ansible wangyun -m command -a "creates=/tmp/kai touch /tmp/kai"
#批量判断远程主机/tmp下有没有kai这个文件,如果有就skip,没有就执行后面的命令
ansible wangyun -m command -a "removes=/tmp/kai.txt touch /tmp/123.txt"
#批量判断远程主机/tmp下有没有kai这个文件,如果有就执行后面的命令, 没有就skip
ansible wangyun -m command -a "ls -l"
#free_from(默认参数)可以输入任何系统命令信息,但是不包含一些特殊环境变量和特殊符号信息,如:<>,|;&
2.ping模块实践:(测试连通性)
[root@m01 ~]# ansible wangyun -m ping
172.16.1.8 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.16.1.31 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.16.1.41 | SUCCESS => {
"changed": false,
"ping": "pong"
}
172.16.1.7 | SUCCESS => {
"changed": false,
"ping": "pong"
}
#返回pong,说明可以登录SSH连接,这里ping但不是测试网络连通性的,用于验证能否登录SSH连接,在查 看是否满足python的支持, 属于system模块
3.copy模块实践:(把本地文件发送到远端)
1)copy参数src
例: ansible wangyun -m copy -a "src=/etc/hosts dest=/tmp/"
src ----本机的路径
dest----要远端的路径
#将本机/etc/hosts文件复制到远程主机的/tmp目录下(如果/tmp下已有同名hosts,那么会被覆盖)
例: ansible wangyun -m copy -a "src=/etc/hosts dest=/tmp/dir/"
#如果远程主机没有dir目录,那么会创建dir目录
例: ansible wangyun -m copy -a "src=/etc/hosts dest=/tmp/1/2/3/4/"
#但传输文件时,如果上级目录不存在,则不会创 建,传输就无法成功
例: ansible wangyun -m copy -a "src=/tmp dest=/tmp/1/2/3/4"
#传输目录时,如果远程主机目录不存在,传输时可以创建多层目录,
#如果传输的是目录本身及下面内容,后面不要加/
例: ansible wangyun -m copy -a "src=/tmp dest=/tmp/1/2/3/4"
#如果传输的是目录下面的内容,后面必须加/
例: ansible wangyun -m copy -a "remote_src=true src=/etc/hosts dest=/tmp/1/2/"
#批量操作远程主机,对他们本机上的文件进行本地操作
#设置为true时(默认为flase),不支持递归复制
2)copy参数backup=yes
ansible wangyun -m copy -a "src=/etc/hosts dest=/etc/ backup=yes"
backup----备份
# 分发文件时,如果与远程主机下hosts文件内容不一致,那么会备份源文件为"hosts.5714...以时间戳命名 ", 在修改hosts源文件的内容
#不输入默认backup=no,就是不备份,会覆盖源文件
3)copy参数mode、owner、group
ansible wangyun -m copy -a "src=/etc/hosts dest=/tmp/ mode=0600 owner=wangyun group=wangyun"
#改变文件的权限为0600,所有者和属组为wangyun
owner=属主
mode=属性权限
group=属组
4) copy参数force
ansible wangyun -m copy -a "src=/etc/hosts dest=/tmp/ force=yes"
#默认为forec=yes,如果和远程主机信息不一致,会覆盖
#如果force=no,那么远程主机同名文件不会做改变
5)copy参数content
ansible wangyun -m copy -a "content=123123 dest=/tmp/hosts"
#写入信息到/tmp/ hosts中会把源内容覆盖掉,谨慎操作,只能添加少量的信息
#添加多量的,可以用template模块
4.shell模块实践:(万能模块)
ansible wangyun -m shell -a "hostname;hostname -i"
# 支持特殊符号,-a里面可接多个名,用分号分割
说明: shell 模块在远程执行脚本时,远程主机上一定要有相应的脚本
测试:
用shell执行一个脚本很麻烦的,用script执行
1)推送脚本过去,并授权
ansible wangyun -m copy -a "src=/tmp/test.sh dest=/tmp mode=+x"
2)运行脚本
ansible wangyun -m shell -a "/tmp/test.sh"
5.script模块实践:(执行脚本模块)
ansible wangyun -m script -a "/server/scritps/keepalived.sh"
#将本地脚本中的信息,在远程主机上执行
6. yum模块实践
ansible wangyun -m yum -a "name=iotop state=installed"
#批量使用yum安装软件iotop
7.service模块实践
ansible wangyun -m service -a "name=crond state=stopped enable=no" #stopped是2个p
#临时停止crond服务,取消开机自启动(相反:state=started enable=yes)
8.file模块实践:(设置文件属性) #修改文件或目录属性信息,用于创建文件或目录,也可以用mode、owner、group定义文件或目录的权限信息
1)path参数
ansible wangyun -m file "path=/tmp/ state=directory mode=0644"
#指定路径,是dest,name的别名,作用一样
–force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;
另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
– group:定义文件/目录的属组
– mode:定义文件/目录的权限
– owner:定义文件/目录的属主
– path:必选项,定义文件/目录的路径
– recurse:递归的设置文件的属性,只对目录有效
– src:要被链接的源文件的路径,只应用于state=link的情况
– dest:被链接到的路径,只应用于state=link的情况
2)state参数
directory 创建目录
file 创建文件
link 创建软连接
hard 创建出硬链接
absent 目录将被递归删除及文件,而连接将被取消连接
touch 创建文件;如果路径不存在将创建一个空文件
注意:重命名和创建多级目录不能同时实现
ansible wangyun -m file -a "dest=/opt/dir_01/ state=directory"
#创建目录为dir_01
ansible wangyun -m f
ile -a "dest=/opt/file_01 state=touch"
#创建文件为file_01
ansible wangyun -m file -a "dest=/opt/file_01 state=absent"
#删除文件file_01
ansible wangyun -m file -a "src=/opt/hosts dest=/opt/hosts_link state=link"
#创建符号链接,基于本机有源文件
9.cron模块实践:(定时任务模块)
* * * * * /bin/sh /server/scripts/test.sh &>/dev/null
minute # Minute when the job should run ( 0-59, *, */2, etc )
hour # Hour when the job should run ( 0-23, *, */2, etc )
day # Day of the month the job should run ( 1-31, *, */2, etc )
month # Month of the year the job should run ( 1-12, *, */2, etc )
weekday # Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )
job # 定义定时任务与要做什么事
name # 给定时任务加一个备注,避免创建出多个重复的定时任务(根据定时任务备份判断 是否生成一个新的定时任务)
stat #若设置为present,表示创建定时任务,若设置为absent,表示删除指定定时任务
只能管理自己创建的定时任务,本来有的管理不了
disabled #disable=yes注释掉定时任务(不生效),disable=no解除注释定时任务(生效)
ansible wangyun -m cron -a "name='backup servcie' minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'"
#创建定时任务
ansible wangyun -m cron -a "name=`backup service` state=absent"
#删除定时任务
ansible wangyun -m cron -a "name=dancy01 minute=*/5 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' disabled=yes"
#注释掉定时任务,反之取消注释
minute 分
hour 时
day 日
month 月
weekday周
job 工作;要做的事
name 定义定时任务的描述信息
disabled 注释定时任务
absent 删除定时任务
state状态参数 present 创建定时任务
默认为present
10.mount模块实践:(配置挂载点模块)
ansible wangyun -m mount -a "state=mounted src=172.16.1.31:/data path=/data fstype=nfs"
src #要被挂载的目录或文件
path #指定挂载点的路径
fstype #指定挂载时的文件系统类型
opts #在挂载时,指定挂载参数信息
state #state=mounted,在fstab文件中的备份将被激活挂载或适当配置,如果指定mounted的挂载挂载点不存在,会创建
#state=unmounted,设备将被卸载不会改变fstab文件中的信息
#state=absent和state=present,只处理fatab,但不影响目录的挂载
挂载:
ansible 172.16.1.8 -m mount -a "fstype=nfs opts=rw path=/mnt/ src=172.16.1.31:/data/ state=mounted"
卸载:
ansible 172.16.1.8 -m mount -a "fstype=nfs opts=rw path=/mnt/ src=172.16.1.31:/data/ state=unmounted"
11.user 模块与group模块
user模块是请求的是useradd, userdel, usermod三个指令,
goup模块请求的是groupadd, groupdel, groupmod 三个指令。
1).user模块:
– home:指定用户的家目录,需要与createhome配合使用。
– groups:指定用户的属组。
– uid:指定用的uid。
– password:指定用户的密码。
注意:指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。
– name:指定用户名。
– createhome:是否创建家目录 yes|no。
– system:是否为系统用户。
–remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r。
– state:是创建还是删除。(present,absent)
– shell:指定用户的shell环境。
– generate_ssh_key:是否为相关用户生成SSH密钥。
这不会覆盖现有的SSH密钥。
– ssh_key_bits:可选择指定要创建的SSH密钥中的位数。
– ssh_key_passphrase:设置SSH密钥的密码。
如果没有提供密码,SSH密钥将默认没有密码。
– ssh_key_file:指定SSH密钥文件名(可选)。
如果这是一个相对的文件名,那么它将是相对于用户的主目录。
– ssh_key_type:指定要生成的SSH密钥的类型(可选)。
可用的SSH密钥类型将取决于目标主机上的实现。
2).group模块
– gid:指定用的gid。
– name:指定用户名。
– state:是创建还是删除。(present,absent)
– system:如果是,则表示创建的组是系统组。
12. fetch 模块:拉取文件 (从远程拉取出来文件)
ansible wangyun -m fetch -a "dest=/tmp/backup src=/etc/hosts"
13.flat 参数,拉取的时候不创建目录(同名文件会覆盖)
ansible wangyun -m fetch -a "dest=/tmp/backup/ src=/etc/hosts flat=yes"
14.service模块:服务管理
参数:
name=service name 服务的名字
state=参数 停止服务 服务状态为过去式stared/stoped/restartde/reloaded
enable=yes 设置开机自启动
说明 :service 管理的服务必须存在在/etc/init.d/下有的服务脚本
重启定时任务:
[root@m01 ~]# ansible wangyun -m service -a "name=crond state=restarted"