Linux自动化运维工程师
实验所用系统为Redhat
目录
Linux自动化运维工程师–Ansible中的常用模块
一、ansible实现管理的方式
Ansible 系统由控制主机对被管节点的操作方式可分为两类,即adhoc
和playbook
:
- ad-hoc模式(点对点模式)
使用单个模块,支持批量执行单条命令。ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell。 - playbook模式(剧本模式)
是Ansible主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task集合完成一类功能,如Web服务的安装部署、数据库服务器的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件。
二、Ad-Hoc执行方式中如何获得帮助
ansible-doc ##显示模块帮助的指令
格式
ansible-doc [参数] [模块...]
常用参数
-l ##列出可用模块
-s ##显示指定模块的playbook片段,简要用法
ansible-doc -l | wc -l ##列出并统计
三、ansible命令运行方式及常用参数
格式:
ansible 清单 -m 模块 -a 模块参数
常用参数
#--version ##显示版本
#-m module ##指定模块,默认为command模块
#-v ##详细过程 -vv -vvv更详细过程
#--list ##显示主机列表,也可以用--list-hosts
#-k ##提示输入ssh连接密码,默认key认证
#-C ##预执行检测
#-T ##执行命令的超时时间,默认10s
#-u ##指定远程执行的用户
#-b ##执行sudo切换身份操作
#-become-user=USERNAME ##指定sudo的用户
#-K ##提示输入sudo密码
实验:
ansible --version ##ansible的版本信息
ansible all -m shell -a 'hostname' ##-m 指定模块为shell,-a 模块参数为显示主机名
ansible all -m shell -a 'hostname' -v ##显示详细信息,v越多越详细
ansible all -m shell -a 'hostname' -k ##提示输入ssh连接密码,默认key认证
ansible all -m shell -a 'hostname' -u root ##指定远程执行的用户
ansible all -m shell -a 'hostname' -C ##预执行,不会真正执行,所以并不能检测命令是否正确
ansible all -m shell -a 'hostname' -k --become-user=root -K
##-K 提示输入sudo密码 --become-user指定远程主机执行命令时会用sudo调用的用户身份
ansible all -m shell -a 'hostname' -T 2 ##指定执行命令的超时时间,并不能看到效果
四、ansible的基本颜色代表信
颜色 | 意义 |
---|---|
绿色 | 执行成功但未对远程主机做任何改变 |
黄色 | 执行成功并对远程主机做改变 |
红色 | 执行失败 |
五、ansible中的常用模块
1、command
功能: 在远程主机执行命令,此模块为默认模块
常用参数:
chdir ##执行命令前先进入到指定目录
cmd ##运行命令指定
creates ##如果文件存在将不运行
removes ##如果文件存在在将运行
free_form ##在远程主机中执行的命令,此参数不需要加
[注意] Linux中的很多通配符在command模块中不支持
实验:
ansible all -m command -a 'chdir=/mnt touch file1 file2' ##先切换目录,载建立文件
ansible all -m command -a 'chdir=/mnt rm -rf file1 file2' ##切换目录,删除文件
ansible all -m command -a 'removes=/mnt/file1 chdir=/mnt rm -rf file1 file2'
##removes 如果文件存在将运行
ansible all -m command -a 'creates=/mnt/file1 chdir=/mnt rm -rf file1 file2'
##creates 如果文件存在将不运行
2、shell
功能:和command功能类似
常用参数:
chdir ##执行命令前先进入到指定目录
cmd ##运行命令指定
creates ##如果文件存在将不运行
removes ##如果文件存在在将运行
free_form ##在远程主机中执行的命令,此参数不需要加
executable ##指定执行环境,默认为sh
实验:
因为很多通配符command
是不能使用的,因此可以用shell
比如ansible all -m command -a 'rm -rf /mnt/*'
,此时*是不被识别的,因此命令不能执行成功。
但是用shell
就可以执行成功。
ansible all -m shell -a 'chdir=/mnt touch file1'
ansible all -m shell -a 'chdir=/mnt cmd="touch file1"' ##但如今不是用cmd命令也可以,因此已经很少使用
ansible all -m shell -a 'creates=/mnt/file1 chdir=/mnt touch file1' ##文件存在则不运行
ansible all -m shell -a 'removes=/mnt/file1 chdir=/mnt touch file1' ##文件存在则运行
ansible all -m shell -a 'ps ax | grep $$' ##过滤当前进程名称,默认环境使用/bin/sh
ansible all -m shell -a 'executable=/bin/bash ps ax | grep $$' ##指定执行环境为/bin/bash
3、script
功能:在ansible主机中写好的脚本在受控主机中执行
实验:
切入到yun用户的ansible目录中,编写一个脚本,通过script
命令使其在受控主机westosb中运行。
su - yun
cd /home/yun/ansible
///
#!/bin/bash
echo $HOSTNAME
///
ansible westos -m script -a "test.sh"
4、copy
功能:从ansible主机复制文件到受控主机
常用参数
src ##源文件
dest ##目的地文件
owner ##指定目的地文件所有人
group
mode ##指定目的地文件权限
backup=yes ##当受控主机中存在文件时备份原文件
content ##指定文本内容直接在受控主机中生成文件
实验:
删除受控主机westosb的/mnt的所有内容,在westosa主机中,切入到yun用户的ansible目录中,复制上一个实验的test.sh文件,以所有人westos,权限775,到被控主机的/mnt中,同时备份。
###westosb
rm -rf /mnt/*
###westosa
su - yun
cd /home/yun/ansible
ansible 172.25.254.214 -m copy -a "src=/home/yun/ansible/test.sh owner=westos mode=755 dest=/mnt/test.sh backup=yes"
###westosb
cd /mnt
ls ##test.sh
修改test.sh内容,重新拷贝并备份,会生成一个新的备份文件。
vim test.sh
///
#!/bin/bash
echo $HOSTNAME
echo $DATE
///
ansible 172.25.254.214 -m copy -a "src=/home/yun/ansible/test.sh mode=755 dest=/mnt/test.sh backup=yes"
拷贝一个指定内容的新文件。
ansible 172.25.254.214 -m copy -a 'content="hello westos" dest=/mnt/westos backup=yes'
5、fetch
功能:从受控主机把文件复制到ansible主机,但不支持目录
常用参数
src ##受控主机的源文件
dest ##本机目录
flat ##基本名称功能
实验:
在主控机westosa中复制受控主机的文件到本机中,此时,文件的目录格式也是被复制的。
###westosa
su - yun
cd /home/yun/ansible
ansible 172.25.254.214 -m fetch -a 'src=/etc/sysconfig/network-scripts/ifcfg-westosb dest=/home/yun/ansible'
ls ##文件所属目录也被复制
如果只复制文件的话,则需要在dest
后指定文件名称。
ansible 172.25.254.214 -m fetch -a 'src=/etc/sysconfig/network-scripts/ifcfg-westosb dest=/home/yun/ansible/ifcfg-westosb flat=yes'
##必须指定文件名称
ls
##只有文件被复制
[注意] yun用户要对
dest
后跟的目录可写
6、file
功能:设置文件的属性
常用参数:
path ##指定文件名称
state ##指定操作状态
##touch 建立
##absent 删除
##directory 递归
##link 建立软链接
#hard 硬链接
mode ##设定权限
owner ##设定文件用户
group ##设定文件组
src ##源文件
dest ##目标文件
recurse=yes ##递归更改
实验:
在主控机westosa中远程控制在受控主机westosb中新建文件。
ansible 172.25.254.214 -m file -a 'path=/mnt/westosfile state=touch' ##生成文件
在主控机westosa中远程控制在受控主机westosb中新建目录。
ansible 172.25.254.214 -m file -a 'path=/mnt/westosdir state=directory' ##生成目录
在主控机westosa中远程控制在受控主机westosb中修改文件的所有人。
ansible 172.25.254.214 -m file -a 'path=/mnt/westosfile owner=westos' ##修改文件的所有人
在主控机westosa中远程控制在受控主机westosb中修改目录的所有组,但目录中文件并未改变。
ansible 172.25.254.214 -m file -a 'path=/mnt/westosdir group=westos'
##修改目录的所属组,但目录中文件并未改变
在主控机westosa中远程控制在受控主机westosb中修改目录及目录中文件的所属组。
ansible 172.25.254.214 -m file -a 'path=/mnt/westosdir group=devops recurse=yes'
##修改目录及目录中文件的所属组
在主控机westosa中远程控制在受控主机westosb中生成软链接和硬链接。
ansible 172.25.254.214 -m file -a 'src=/mnt/westosfile dest=/mnt/linuxfile state=link'
##生成link软链接
ansible 172.25.254.214 -m file -a 'src=/mnt/westosfile dest=/mnt/linuxfile state=hard'
##生成硬链接
在主控机westosa中远程控制在受控主机westosb中删除文件和目录。
ansible 172.25.254.214 -m file -a 'path=/mnt/linuxfile state=absent'
##删除文件
ansible 172.25.254.214 -m file -a 'path=/mnt/westosdir state=absent'
##删除目录
[注意] 如果inventory中只有用户172.25.254.214,则可以不用输入ip,直接引用组。
vim inventory
///
[westos]
172.25.254.214
///
ansible westos -m file -a 'path=/mnt/westosdir state=absent' ##删除目录
7、archive
功能:在主控机中控制受控主机打包压缩文件。
常用参数:
path ##打包目录名称
dest ##声称打包文件名称
format ##打包格式
owner ##指定文件所属人
mode ##指定文件权限
实验:
在主控机中控制受控主机打包压缩文件。
ansible westos -m archive -a 'path=/etc dest=/mnt/etc.tar.gz format=gz' ##压缩
在主控机中控制受控主机打包指定权限与所属人组压缩文件。
ansible westos -m archive -a 'path=/etc dest=/mnt/etc.tar.bz2 format=bz2 mode=755 owner=westos group=westos'
##指定权限与所属人组压缩
8、unarchive
功能:解压缩,将包复制到受控主机再解压缩
常用参数:
copy ##默认为yes 从ansible主机复制文件到受控主机
##设定为no 从受控主机中寻找src源文件
remote_src ##功能同copy且相反
##设定为yes 表示包在受控主机
##设定为no表示包在ansible主机
src ##包路径,可以使ansible主机也可以使受控主机
dest ##受控主机目录
mode ##加压后文件权限 <copy=yes>
实验:
在主控机本机打包一个文件,将其复制到被控主机并指定目录中并指定所有人解压缩。
tar zcf etc.tar.gz /etc
ansible westos -m unarchive -a 'src=etc.tar.gz dest=/media owner=westos'
远程解压缩。当本地没有包,压缩包在受控主机中时,则需要使用命令copy=no
或者remote_src=yes
。
ansible westos -m unarchive -a 'src=/mnt/etc.tar.gz dest=/media owner=westos mode=755 copy=no'
ansible westos -m unarchive -a 'src=/mnt/etc.tar.gz dest=/media owner=westos mode=755 remote_src=yes'
###westosb
ls -l /media
9、hostname
功能:管理主机名称
ansible westos -m hostname -a 'name=westosbb.westos.org'
###westosb
hostname
10、cron
功能:计划任务
常用参数:
minute ##分钟
hour ##小时
day ##天
month ##月
weekday ##周
name ##任务名称
job ##任务脚本或命令
disabled ##yes 禁用计划任务
##no 启动计划任务
state ##absent 删除计划任务
实验:
在主控机中控制被控主机生成一个定时任务。
ansible westos -m cron -a 'job="echo hello westos" name=test minute=*/2'
###westosb
crontab -l
在主控机中控制被控主机禁止该定时任务。
ansible westos -m cron -a 'job="echo hello westos" name=test minute=*/2 disabled=yes' ##禁止任务
###westosb
crontab -l ##注释
在主控机中控制被控主机重新开启该定时任务。
ansible westos -m cron -a 'job="echo hello westos" name=test minute=*/2 disabled=no' ##重新开启
###westosb
crontab -l ##删除注释符
在主控机中控制被控主机删除该定时任务。
ansible westos -m cron -a 'job="echo hello westos" name=test minute=*/2 state=absent' ##删除任务
###westosb
crontab -l
11、yum_repositor
功能:配置系统软件仓库源文件
常用参数:
name ##指定仓库名称
baseurl ##指定源路径
description ##指定仓库描述
file ##指定仓库文件名称
enabled ##仓库是否启用
gpgcheck ##仓库是否检测gpgkey
state ##默认值present 建立
#absent 为删除
实验:
在主控机westosa控制受控机生成软件仓库源文件,前提是真机的网络软件可用,首先要删除westosb主机中的软件仓库配置文件westos.repo。
ansible westos -m yum_repository -a 'file=westos name=AppStream description=AppStream baseurl=http://172.25.254.14/westos/AppStream enabled=yes gpgcheck=no state=present'
##repo会自动补齐
ansible westos -m yum_repository -a 'file=westos name=BaseOS description=BaseOS baseurl=http://172.25.254.14/westos/BaseOS enabled=yes gpgcheck=no state=present'
##repo会自动补齐
12、dnf
功能:管理系统中的dnf仓库及管理软件
常用参数
name ##指定包
state ##指定动作
#present 安装
#latest 更新
#absent 删除
list ##列出指定信息
# httpd
# installed
# available
disable_gpg_check #禁用gpgkey检测
enablerepo ##指定安装包来源
disablerepo ##禁用安装包来源
实验:
在主控机westosa中控制受控主机westosb安装软件。如果同时安装多个,则使用“,”隔开。安装成功后可以在受控主机westosb上使用rpm
命令查看。
ansible westos -m dnf -a 'name="httpd,php" state=present' ##安装软件,多个用","隔开
###westosb
rpm -qa | grep httpd
rpm -qa | grep php
卸载软件只需将state
的值改变即可。
ansible westos -m dnf -a 'name="httpd,php" state=absent' ##卸载软件
ansible westos -m dnf -a 'name="httpd" state=absent autoremove=no' ##不卸载依赖性,只卸载软件
当受控主机westosb的软件仓库配置文件出现问题时,主控机则不能安装软件。模拟问题:设定gpgcheck=1,此时无法安装软件,需要跳过gpg授权检测。
###westosb
westos.repo
///
gpgcheck=1
///
ansible westos -m dnf -a 'name="httpd" state=present disable_gpg_check=yes' ##禁用grpcheck安装
模拟问题:如果软件在安装时报错AppStream安装包出问题,则禁用该安装包进行安装。但有些软件是必须使用该软件安装包的,那是只能对其进行修复或者重新安装该源。
ansible westos -m dnf -a 'name="httpd" state=present disablerepo="AppStream"' ##禁用该安装包来源
可以列出服务或者软件的信息。
13、service
常用参数:
name ##指定服务名称
state ##指定对服务的动作
#started
#stoped
#restarted
#reloaded
enabled ##设定服务开机是否启动
#yes开启启动
#no开机不启动
实验:
先通过主控机在受控主机上安装http,然后开启服务。
但此时在浏览器并不能访问到214主机,因为火墙不允许。
因此需要对火墙进行设定。
14、firewalld
常用参数;
zone ##火墙的域
service ##服务名称
permanent ##永久生效
state
enabled ##允许
disabled ##拒绝
immediate ##立即生效
实验:
在主控机远程对受控主机进行火墙策略的设定,此时可以在受控主机westosb中看到设定成功。
ansible westos -m firewalld -a 'zone=public service=http permanent=yes state=enabled immediate=yes'
##设定火墙策略
###westosb
firewall-cmd --list-all
此时可以通过浏览器访问214主机。
15、user
功能:模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作
常用参数
name ##必须参数,用于指定要操作的用户名称。
group ##指定用户所在的基本组。
gourps ##指定用户所在的附加组。
append ##指定添加附加组默认值为no
shell ##指定用户的默认 shell。
uid ##指定用户的 uid 号。
comment ##指定用户的注释信息。
state ##用于指定用户是否存在于远程主机
#present 建立
#absent 删除
remove ##当删除用户是删除用户家目录,默认值为no
password ##此参数用于指定用户的密码。但密码为明文,
##可以用openssl password -6 '密码'生成加密字符
实验:
另外打开一个shell,连接到214主机,并监控系统中的用户、组及密码。
watch -n 1 “tail -n 3 /etc/passwd /etc/group /etc/shadow; echo =====;ls -l /home/”
在主控机远程控制受控主机建立用户testuser。
ansible westos -m user -a 'name=testuser' ##建立用户
在主控机远程控制受控主机删除用户testuser,但此时没有删除用户信息。
ansible westos -m user -a 'name=testuser state=absent' ##删除用户,但没有删除用户信息
如果需要删除用户信息,则需要加上remove
参数。重新建立用户,并删除掉所有信息。
ansible westos -m user -a 'name=testuser state=absent remove=yes' ##删除用户并且删除用户信息
在主控机远程控制受控主机指定初始组。
ansible westos -m user -a 'name=testuser group=1002' ##指定初始组
在主控机远程控制受控主机更改附加组。
ansible westos -m user -a 'name=testuser group=1002 groups=48' ##更改附加组
在主控机远程控制受控主机添加附加组。
ansible westos -m user -a 'name=testuser group=1002 groups=48 append=yes' ##添加附加组
在主控机远程控制受控主机添加说明文字。
ansible westos -m user -a 'name=testuser group=1002 groups=48 append=yes comment="testuser westos"' ##说明文字
在主控机远程控制受控主机指定运行shell
。
ansible westos -
m user -a 'name=testuser group=1002 groups=48 append=yes comment="testuser westos" shell=/bin/sh' ##指定shell
在主控机远程控制受控主机指定指定uid
。
ansible westos -m user -a 'name=testuser group=1002 groups=48 append=yes comment="testuser westos" shell=/bin/sh uid=6666' ##指定uid
此时如果需要对该用户进行加密,则在westosa主机中生产加密字符,用生成的key指定用户密码。
openssl passwd -6
##生成加密字符
ansible westos -m user -a 'name=testuser group=1002 groups=48 append=yes comment="testuser westos" shell=/bin/sh uid=6666 password="加密字符"'
##指定用户密码
如果需要自动生成sshkey,则需要对应参数打开。
ansible westos -m user -a 'name=testuser group=1002 groups=48 append=yes comment="testuser westos" shell=/bin/sh uid=6666 password="加密字符" generate_ssh_key=yes' ##自动生成sshkey
16、group
功能:可以帮助我们管理远程主机上的组
ansible westos -m user -a 'name=testuser group=1002' ##指定初始组
常用参数
name ##用于指定要操作的组名称。
state ##用于指定组的状态
#present 建立
#absent 删除
gid ##用于指定组的gid
实验:
通过主控机远程在受控主机上建立组,更改组id和删除组。
ansible westos -m group -a 'name=testgroup gid=666 state=present' ##建立组
ansible westos -m group -a 'name=testgroup gid=888' ##更改组id
ansible westos -m group -a 'name=testgroup gid=888 state=absent' ##删除组
17、lineinfile
功能:确保某一行文本存在于或者不存在于指定的文件中
常用参数:
path ##指定要操作的文件。
line ##指定文本内容。 "|+" 表示格式化输入
regexp ##使用正则表达式匹配对应的行当替换文本时
##如果有多行文本都能被匹配
##则只有最后面被匹配到的那行文本才会被替换
##当删除文本时,如果有多行文本都能被匹配
##这么这些行都会被删除。
state ##当想要删除对应的文本时需要将state参数的值设置为absent
#state的默认值为present。
backrefs ##当内容无匹配规则时不对文件做任何更改,默认值为no
##向后引用regexp变量信息
insertafter ##借助insertafter参数可以将文本插入到“指定的行”之后
##insertafter参数的值可以设置为EOF或者正则表达式
insertbefore ##借助insertbefore参数可以将文本插入到“指定的行”之前
#insertbefore参数的值可以设置为BOF或者正则表达式
backup ##是否在修改文件之前对文件进行备份。
create ##当要操作的文件并不存在时,是否创建对应的文件。
实验:
要操作的文件并不存在时,创建对应的文件。
ansible all -m lineinfile -a 'path=/mnt/westosfile line="hello westos" create=yes'
修改文件之前将文件备份到一个新文件中,然后修改原文件。
ansible all -m lineinfile -a 'path=/mnt/westosfile line="hello hh" backup=yes' ##在修改文件之前对文件进行备份
在指定文件最后一行后再加一行内容。
ansible all -m lineinfile -a 'path=/mnt/westosfile line="hello linux"' ##在最后面加一行
替换文本,将以westos开头的文本替换为hello westos。先编辑原westosfile文件,加上一行以westos开头的内容。
ansible all -m lineinfile -a 'path=/mnt/westosfile regexp="^westos" line="hello westos" '
替换文本,将以linux结尾的文本替换为hi westos。
ansible all -m lineinfile -a 'path=/mnt/westosfile regexp="linux$" line="hi westos" '
当内容无匹配规则时不对文件做任何更改。
ansible all -m lineinfile -a 'path=/mnt/westosfile regexp='^test' line="westos test new" backrefs=yes'
将指定的文本插入到最后一行。
ansible all -m lineinfile -a 'path=/mnt/westosfile line="###### westos end #####" insertafter=EOF'
将指定的文本插入到指定行之后。
ansible all -m lineinfile -a 'path=/mnt/westosfile line="###### westos end lee #####" insertafter="hello hh"'
将指定的文本插入到第一行。
ansible all -m lineinfile -a 'path=/mnt/westosfile line="###### westos test #####" insertbefore=BOF'
将指定的文本插入到指定行之前。
ansible all -m lineinfile -a 'path=/mnt/westosfile line="###### westos test lee #####" insertbefore="hello hh"'
18、replace
功能:可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换
常用参数:
path ##指定要操作的文件
regexp ##指定一个正则表达式
#文件中与正则匹配的字符串将会被替换。
replace ##指定最终要替换成的字符串。
backup ##是否在修改文件之前对文件进行备份,最好设置为yes。
实验:
将指定文件中的指定字符替换,并且备份原文件。
ansible westos -m replace -a 'path=/mnt/westos regexp="westos" replace="WESTOS" backup=yes'
19、sut up
功能:用于收集远程主机的一些基本信息
常用参数:
filter ##用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。
实验:
列出受控主机westosb的IP。
ansible westos -m setup -a 'filter=ansible_all_ipv4_addresses'
ansible westos -m setup | less ##分页显示
列出westosb主机架构。
ansible westos -m setup -a 'filter=ansible_architecture'
20、debug
功能:调试模块,用于在调试中输出信息
常用参数:
msg: ##调试输出的消息
var: ##将某个任务执行的输出作为变量传递给debug模块
##debug会直接将其打印输出
verbosity: ##debug的级别(默认是0级,全部显示)
实验:
ansible westos -m debug -a 'msg="hello westos"'