首页 > 其他分享 >Ansible快速入门(下)

Ansible快速入门(下)

时间:2023-05-08 21:57:38浏览次数:49  
标签:manger 范例 入门 webservers 快速 ansible state Ansible root

6. Ansible常用模块

ansible 有着诸多的模块,虽然模块众多,但最为常用的模块也就 20-30 个左右;

6.1 command模块

功能:在远程主机执行 Shell 命令;此为默认模块,可忽略 -m 选项;
注意:不支持管道命令 |

参数 选项 含义
chdir chdir /opt 执行ansible时,切换到指定的目录
creates creates /data/file 如果文件存在,则跳过执行
removes removes /data/file 如果文件存在,则执行

范例1:chdir ,切换目录执行 Shell 命令;

[root@manger ~]# ansible localhost -m command -a 'chdir=/root echo $PWD'
localhost | CHANGED | rc=0 >>
/root

范例2:creates ,如果 /data/file 文件存在,则跳过执行;

[root@manger ~]# ansible localhost -m command -a 'creates=/data/file ifconfig eth0'
localhost | SUCCESS | rc=0 >>
skipped, since /data/file exists

范例3:removes ,如果 /data/file 文件存在,则执行;

[root@manger ~]# ansible localhost -m command -a 'removes=/data/file ifconfig eth0'
localhost | CHANGED | rc=0 >>
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
mtu 1500
	inet 10.0.0.6 netmask 255.255.255.0 broadcast 10.0.0.255
	inet6 fe80:20c:29ff:fe2a:348 prefixlen 64 scopeid 0x20<link>
	ether 00:0c:29:2a:03:48 txqueuelen 1000 (Ethernet)
	RX packets 76534 bytes 99611397 (96.9 MiB)
	RX errors 0 dropped 0 overruns 0 frame 0
	TX packets 17274 bytes 1957911 (1.8 MiB)
	TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

6.2 shell模块

功能:在远程主机执行 Shell 命令,执行管道等特殊符号的操作;

参数 选项 含义
chdir chdir /opt 执行ansible时,切换到指定的目录
creates creates /data/file 如果文件存在,则跳过执行
removes removes /data/file 如果文件存在,则执行

范例1:使用 Shell 命令过滤被控端主机的 IP 地址;

[root@manger ~]# ansible localhost -m shell -a "ifconfig eth0|awk 'NR==2' "
[WARNING]: No inventory was parsed, only implicit
localhost is available
localhost | CHANGED | rc=0 >>
	inet 10.0.0.6 netmask 255.255.255.0 broadcast 10.0.0.255

6.3 script模块

功能:在被控节点,运行 Ansible 主机的脚本;

范例1:在 Ansible 主机上编写脚本,然后推送至被控端运行;

#在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行
[root@manger ~]# ansible webservers -m script -a "/data/yum.sh"

6.4 yum模块

功能:管理各个操作系统的软件包;

参数 选项 含义
name httpd、nginx ... 指定安装软件包名或软件包URL
state present(Defaults)、absent、latest 指定yum对应的方法
enablerepo epel、base ... 允许从哪些仓库获取软件
disablerepo epel、base ... 禁止从哪些仓库获取软件
exclude kernel ... 排除某些软件包
download_only yes、no 仅下载软件包,不安装

范例1:安装当前最新的 Apache 软件,如果存在则不安装

[root@manger ~]# ansible webservers -m yum -a "name=httpd state=present"

范例2:安装当前最新的Apache软件,通过epel仓库安装

[root@manger ~]# ansible webservers -m yum -a "name=httpd state=present enablerepo=epel"

范例3:通过公网 URL 安装 rpm 软件

[root@manger ~]# ansible webservers -m yum -a "name=https://xx.rpm state=present"

范例4:安装最新版本的 Apache 软件,如果存在则更新 Apache

[root@manger ~]# ansible webservers -m yum -a "name=httpd state=latest"

范例5:更新所有的软件包,但排除和 kernel 相关的

[root@manger ~]# ansible webservers -m yum -a "name=* state=latest exclude=kernel"

范例6:删除 Apache 软件

[root@manger ~]# ansible webservers -m yum -a "name=httpd state=absent"

6.5 copy模块

功能:从 ansible 服务端主控端复制文件到远程主机;

参数 选项 含义
src 复制本地目录下的文件至远程服务器
dest 文件复制到远程的绝对路径
owner root(Defaults) 文件复制到远程并设定属主
group root(Defaults) 文件复制到远程并设定属组
mode file=644,directory=755 文件复制到远程并设定权限
backup yes 备份被修改前的配置文件
content 新建文件并给文件添加内容

范例1:将本地的 httpd.conf 文件 Listen 端口修改为 8080 ,推送至远程服务器

[root@manger ~]# ansible webservers -m copy -a "src=./httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644"

范例2:将本地的 httpd.conf 文件 Listen 端口修改为 9090 ,推送至远程服务器,然后检查远端是否存在上一次的备份文件

[root@manger ~]# ansible webservers -m copy -a "src=./httpd.conf dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644 backup=yes"

范例3:往远程的主机文件中写入内容,如果文件不存在则创建

[root@manger ~]# ansible webservers -m copy -a "content="Http_Server" dest=/var/www/html/index.html"

6.6 file模块

功能:为被控端创建文件或目录,设定权限属性;

参数 选项 含义
path 指定远程服务器的路径
recurse 递归方式(可以是递归授权)
state touch、directory、link、absent 文件复制到远程的状态
owner root(Defaults) 文件复制到远程并设定属组
group root(Defaults) 备份被修改前的配置文件
mode file=644,directory=755 文件复制到远程并设定权限

范例1:创建文件,并设定属主、属组、权限

[root@manger ~]# ansible webservers -m file -a "path=/tmp/foo.conf state=touch mode=666"

范例2:创建目录,并设定属主、属组、权限

[root@manger ~]# ansible webservers -m file -a "path=/tmp/foo state=directory mode=777"

范例3:递归授权目录

[root@manger ~]# ansible webservers -m file -a "path=/tmp/foo state=directory owner=root group=root mode=777 recurse=yes"

6.7 lineinfile模块

功能:修改或删除文件内容,与系统中的 sed 命令类似;

参数 选项 含义
path 指定要操作的文件
regexp 使用正则表达式匹配对应的行
line 修改为新的内容
insertafter 将文本插入到“指定的行”之后
insertbefore 将文本插入到“指定的行”之前
state absent、present(Defaults) 删除对应的文本时,需要state=absent
backrefs yes、no 1.支持后向引用 2.当未匹配到内容则不操作文件
backup 是否在修改文件之前对文件进行备份
create 当要操作的文件并不存在时,是否创建对应的文件

范例1:将 SELINUX 修改为 disabled 状态;

[root@manger ~]# ansible localhost -m lineinfile -a 'path=/etc/selinux/config regexp='^SELINUX=' line=SELINUX=disabled'

范例2:删除 /etc/sudoers 文件中 %wheel 开头的行;

[root@manger ~]# ansible localhost -m lineinfile -a 'path=/etc/sudoers regexp='^%wheel' state=absent'

范例3:替换 /etc/hosts 文件中以 12.0.0.1 的行为 127.0.0.1 ansible.oldxu.com

[root@manger ~]# ansible localhost -m lineinfile -a 'path=/etc/hosts regex='^127\.0\.0\.1' line="127.0.0.1 ansible.oldxu.com"'

范例4:修改默认 Apache 的端口为 8080 ,使用 insertafter

[root@manger ~]# ansible localhost -m lineinfile -a 'path=/etc/httpd/conf/httpd.conf regexp='^Listen' line="Listen 8080" insertafter='^#Listen''

6.8 get_url模块

功能:通过互联网下载软件至被控端本地;

参数 选项 含义
url HTTP, HTTPS ... 资源文件在互联网上的具体位置
dest 文件下载位置的绝对路径
mode 文件下载后的权限
checksum md5、sha256 对下载的资源进行校验
timeout 10(Default) URL请求超时时间

范例1:下载互联网的软件至本地

[root@manger ~]# ansible webservers -m get_url -a "url=https://mirrors.aliyun.com/xx.rpm dest=/tmp"

范例2:下载互联网文件并进行 md5 校验

[root@manger ~]# ansible webservers -m get_url -a "url=http,https dest=/opt checksum=md5:76eb3af80ffd"

6.9 systemd模块

功能:管理服务启动与停止,与 service 模块用法一致;

参数 选项 含义
name httpd、nginx ... 定义要启动服务的名称
state started、stopped、restarted、reloaded 指定服务状态
enabled yes、no 允许服务开机自启或禁止服务开机自启

范例1:启动 Httpd 服务

[root@manger ~]# ansible webservers -m service -a "name=httpd state=started"

范例2:重载 Httpd 服务

[root@manger ~]# ansible webservers -m service -a "name=httpd state=reloaded"

范例3:重启 Httpd 服务

[root@manger ~]# ansible webservers -m service -a "name=httpd state=restarted"

范例4:停止 Httpd 服务

[root@manger ~]# ansible webservers -m service -a "name=httpd state=stopped"

范例5:启动 Httpd 服务,并加入开机自启

[root@manger ~]# ansible webservers -m service -a "name=httpd state=started enabled=yes"

6.10 group模块

功能:管理被控端用户组;

参数 选项 含义
name 指定创建的组名
gid 为组设置可选gid
state present(Default)、absent 是否将组创建在远程主机上
system yes、no(Default) 是否创建系统组

范例1:创建 news 基本组,指定uid为9999

[root@manger ~]# ansible webservers -m group -a "name=news gid=9999 state=present"

范例2:创建 http 系统组,指定uid为8888

[root@manger ~]# ansible webservers -m group -a "name=http gid=8888 system=true state=present"

范例3:删除 news 基本组

[root@manger ~]# ansible webservers -m group -a "name=news state=absent"

6.11 user模块

功能:管理被控端用户;

参数 选项 含义
name 创建或删除的用户名
uid 为用户设置可选uid
group 为用户设置主要的组
groups 为用户设置附加的组
shell present(Default)、absent 为用户设置登陆时的Shell
create_home yes(Default)、no 为用户创建主目录
state present(Default)、absent 用户是否应该存在
remove yes、no(Default) 删除与用户关联的目录,只有当state=absent时生效
generate_ssh_key yes、no(Default) 为相关用户生成ssh密钥。不会覆盖现有的ssh密钥
ssh_key_bits 2048 创建用户ssh密钥中位数
ssh_key_file .ssh/id_rsa(Default) 可以实现ssh密钥改名,或变更存放ssh密钥位置

范例1:创建 joh 用户, uid1040 ,主要的组是 adm

[root@manger ~]# ansible webservers -m user -a "name=joh uid=1040 group=adm"

范例2:创建 joh 用户,登录 shell/sbin/nologin ,追加bin、sys 两个组

[root@manger ~]# ansible webservers -m user -a "name=joh shell=/sbin/nologin groups=bin,sys"

范例3:创建 jsm 用户,为其添加 123 作为登录密码,并且创建家目录

[root@manger ~]# ansible localhost -m debug -a "msg={{ '123' | password_hash('sha512', 'salt') }}"
$6$salt$jkH
[root@manger ~]# ansible webservers -m user -a 'name=jsm password='$6$salt$jkH' create_home=yes'

范例4:示例四、移除 joh 用户

[root@manger ~]# ansible webservers -m user -a "name=joh remove=yes state=absent"

范例5:创建 http 用户,并为该用户创建 2048 字节的私钥,存放在 ~/http/.ssh/id_rsa

[root@manger ~]# ansible webservers -m user -a "name=http uid=8888 group=8888 generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa"

6.12 cron模块

功能:管理被控端计划任务;

参数 选项 含义
name 定时任务基本描述
job 定时任务要执行的命令
minute (Default)、0-59
hour (Default)、0-23
day (Default)、1-31
month (Default)、1-12
weekday (Default)、0-6

范例1:添加定时任务,每分钟执行一次ls,* * * * * ls >/dev/null

[root@manger ~]# ansible webservers -m cron -a "name='cron01' job='ls >/dev/null'"

范例2:添加定时任务,每天的凌晨2点和凌晨5点执行一次ls, 0 5,2 * * * ls >/dev/null

[root@manger ~]# ansible webserver -m cron -a "name='cron02' minute=0 hour=2,5 job='ls >/dev/null'"

范例3:关闭定时任务,使定时任务失效

[root@manger ~]# ansible webservers -m cron -a "name='cron02' minute=0 hour=2,5 job='ls >/dev/null' disabled=yes"

6.13 mount模块

功能:管理被控端设备挂载;

参数 选项 含义
src 本地或远程设备的路径
path 设备挂载至本地的路径
fstype xfs、nfs... 文件系统类型
opts defaults、ro... 挂载的参数
state present、absent、mounted、unmounted 挂载的状态

环境准备:将 ansible 作为 nfs 服务端, 172.16.1.7、172.16.1.8 作为 nfs 客户端挂载;

# ansible localhost -m yum -a 'name=nfs-utils state=present'
# ansible localhost -m file -a 'path=/ops state=directory'
# ansible localhost -m copy -a 'content="/ops 172.16.1.0/24(rw,sync)" dest=/etc/exports'
# ansible localhost -m service -a "name=nfs state=restarted"

范例1:挂载 nfs 至本地的 /opt 目录,并实现开机自动挂载

[root@manger ~]# ansible webservers -m mount -a "src=172.16.1.61:/ops path=/opt fstype=nfs opts=defaults state=mounted"

范例2:临时卸载 nfs 的挂载,但不清理 /etc/fstab

[root@manger ~]# ansible webservers -m mount -a "src=172.16.1.61:/ops path=/opt fstype=nfs opts=defaults state=unmounted"

范例3:永久卸载 nfs 挂载,同时清理 /etc/fstab

[root@manger ~]# ansible webservers -m mount -a "src=172.16.1.61:/ops path=/opt fstype=nfs opts=defaults state=absent"

6.14 hostname模块

功能:管理被控端主机名称;

范例:设置主机名称为 ansible-hostname

[root@manger ~]# ansible localhost -m hostname -a 'name=ansible-hostname'

6.15 archive模块

功能:打包与压缩;

参数 选项 含义
path 要压缩的文件或目录
dest 压缩后的文件
format bz2、gz、tar、xz、zip 指定打包压缩的类型

范例:将 /var/log 目录压缩为 tar 格式,并存储至 /opt 目录下;

[root@manger ~]# ansible localhost -m archive -a 'path=/var/log dest=/opt/log.tar.gz format=gz'

6.16 unarchive模块

功能:解包与解压缩;

参数 选项 含义
src 要解压的软件包路径
dest 解压到目标位置
remote_src yes、no(default) yes:要解压的包在被控端、no:要解压的包在控制端

范例1:解压控制端的包至被控端;

[root@manger ~]# ansible localhost -m unarchive -a 'src=/root/php.zip dest=/tmp/'

范例2:解压被制端的包至被控端;

[root@manger ~]# ansible localhost -m unarchive -a 'src=/log.tar.gz dest=/tmp/ remote_src=yes'

6.17 selinux模块

功能:管理 SELINUX 防火墙;

参数 选项 含义
state enforcing、permissive、disabled Selinux模式

范例1:设置 selinuxenforcing

[root@manger ~]# ansible webservers -m selinux -a "state=enforcing"

范例2:设置 selinuxdisabled

[root@manger ~]# ansible webservers -m selinux -a "state=disabled"

6.18 firewalld模块

功能:管理 firewalld 防火墙;

参数 选项 含义
service http、https... 添加或删除firewalld中的服务名称
port 80、443... 添加或删除firewalld中的端口范围
masquerade yes、no 启用或禁止防火墙的地址伪装
immediate yes、no(Default) 防火墙规则当前是否立即生效
permanent yes、no 防火墙规则当前是否重启后也生效
state enabled、disabled 启用或禁用当前配置的规则
rich_rule 在防火墙中添加或删除富规则
source 添加或删除防火墙源IP网络
zone public(Default)、home... 指定防火墙区域

范例1:放行 http 服务流量,设定临时与永久生效;

[root@manger ~]# ansible webservers -m firewalld -a "service=http immediate=yes permanent=yes state=enabled"

范例2:放行 tcp/8080-8090 端口,设定临时与永久生效;

[root@manger ~]# ansible webservers -m firewalld -a "port=8080-8090/tcp immediate=yes permanent=yes state=enabled"

6.19 iptables模块

功能:管理 iptables 代理包过滤防火墙;

iptables常用参数:

参数 含义
table
chain
source 来源IP
destination 目标IP
destination_port 目标端口
protocol 协议
jump:DROP 动作
action 如何添加规则
insert 插入
append 追加

范例1:来源IP是192.168.1.1 目标地址 1.1.1.1 目标端口 80 协议 tcp 则拒绝;规则要写入第一行;

[root@manger ~]# ansible webservers -m iptables -a 'table=filter chain=INPUT source=192.168.1.1/32 destination=1.1.1.1 destination_port=80 protocol=tcp jump=DROP action=insert'

范例2:NAT:DNAT和SNAT:

DNAT:
	如果请求1.1.1:80端口,则DNAT到2.2.2.2:8800
	ansible webservers -m iptables -a 'table=nat chain=PREROUTING protocol=tcp destination=1.1.1.1 destination_port=80 jump=DNAT to_destination="2.2.2.2:8800"'

	如果请求1.1.1:81端口,则DNAT到3.3.3.3:8800
	ansible webservers -m iptables -a 'table=nat chain=PREROUTING protocol=tcp destination=1.1.1.1 destination_port=81 jump=DNAT to_destination="3.3.3.3:8800"'

SNAT:
	POSTROUTING
	iptables -t nat -I POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 5.5.5.5

	ansible webservers -m iptables -a 'table=nat chain=POSTROUTING source=172.16.2.0/24 jump=SNAT to_source=6.6.6.6'
	ansible webservers -m iptables -a 'table=nat chain=POSTROUTING source=172.16.3.0/24 jump=SNAT to_source=7.7.7.7 action=insert'

参数很多,具体参见官方文档

https://docs.ansible.com/ansible/2.9/modules/iptables_module.html#iptables-module

标签:manger,范例,入门,webservers,快速,ansible,state,Ansible,root
From: https://www.cnblogs.com/jpSpaceX/p/17366076.html

相关文章

  • CodeForces - 618A Slime Combining (快速幂)
    CodeForces-618ASlimeCombiningTimeLimit: 2000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uSubmit StatusDescriptionYourfriendrecentlygaveyousomeslimesforyourbirthday.Youhave n slimesallinitiallywithvalue 1.Youare......
  • Java 中的机器学习正在加速图像处理 Java 开发人员可以使用预训练的机器学习模型快速
    来源: https://www.infoworld.com/article/3601711/machine-learning-in-java-is-speeding-image-processing.html 近年来,人们对机器学习的兴趣稳步增长。具体来说,企业现在在各种用例中使用机器学习进行图像识别。在 汽车行业、 医疗保健、 安全、 零售、 仓库中的自动化......
  • Windows、Linux快速排查系统是否被黑
    一、Windows1.存在隐藏用户或异常用户以Windows为例,右键计算机->管理->查看本地用户和组,如果用户或用户组带有$符号,说明该用户/用户组被隐藏,很有可能被黑了。如下截图    2.异常进程通过任务管理器查看是否存在异常进程,比如phpstudy被黑后可能存在12345.exe这......
  • python快速直白入门(半新手向,老手复习向)
    主用python做项目有一段时间,这次简单总结学习下。为后面的项目编写,进行一次基础知识的查缺补漏、1、变量名和数据类型"""变量名,只能由"数字、大小写字母、_"组成,且不能以数字开头"""#整数int#hashable,不可变对象a=5#浮点数float#hashable,不可变对象a1=3......
  • JAVA快速开发框架 一键生成表单模板代码
    从计算机诞生开始,虽然编程的形式随着硬件及软件的不断进步而不停迭代,但是从事计算机技术行业的人员始终与编写代码的任务紧密联系在一起。因此如何提高软件开发的效率和质量,一直是软件工程领域的重要问题之一。这一方面是由于在不同软件开发过程中存在大量相似代码复用的情况,多次......
  • JAVA快速开发框架 一键生成表单模板代码
    从计算机诞生开始,虽然编程的形式随着硬件及软件的不断进步而不停迭代,但是从事计算机技术行业的人员始终与编写代码的任务紧密联系在一起。因此如何提高软件开发的效率和质量,一直是软件工程领域的重要问题之一。这一方面是由于在不同软件开发过程中存在大量相似代码复用的情况,多次编......
  • 【编程入门】应用市场(NodeJS版)
    背景前面已输出多个系列:《十余种编程语言做个计算器》《十余种编程语言写2048小游戏》《17种编程语言+10种排序算法》《十余种编程语言写博客系统》《十余种编程语言写云笔记》《N种编程语言做个记事本》目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。让想学......
  • 一分钟学会、三分钟上手、五分钟应用,快速上手责任链框架详解 | 京东云技术团队
    作者:京东物流覃玉杰1.pie简介责任链模式是开发过程中常用的一种设计模式,在SpringMVC、Netty等许多框架中均有实现。我们日常的开发中如果要使用责任链模式,通常需要自己来实现,但自己临时实现的责任链既不通用,也很容易产生框架与业务代码耦合不清的问题,增加CodeReview的成本......
  • AI 在 API 设计中的应用:如何利用 Al 快速实现 API 开发和测试
    一、引言在当今互联网技术的快速发展中,API成为了越来越多的软件和系统之间交互的核心方式,而API的质量和效率对于软件的开发和运维都至关重要。为了提高API的设计、开发、测试和运维的效率和质量,越来越多的公司开始使用智能API协作平台,EolinkApiKit就是代表之一。Eolink......
  • Excel正确使用VLOOKUP函数,快速查询匹配数据!
    #vlookup函数#在Excel当中我们如何正确地使用vlookup函数快速解决数据查询匹配的问题。 比如在下面的表格的当中,我们需要查询香蕉、桂圆、桃子这三种水果在武汉的销量 此时我们就需要在空白单元格里输入一个等于号和vlookup函数,接着可以看到此函数共有四个参数......