首页 > 其他分享 >Ansible 常用模块

Ansible 常用模块

时间:2024-03-12 14:13:33浏览次数:27  
标签:常用 name websrvs 主机 ansible Ansible 模块 root

3.4)Ansible 常用模块

Ansible 默认提供了很多模块来供我们使用。

我们可以通过 ansible-doc -l 命令查看到当前 ansible 都支持哪些模块
通过 ansible-doc -s 模块名 可以查看该模块有哪些参数可以使用。

目前 2023 为止:模块总量基本保存在 3387 个。
虽然模块众多,但最常用的模块也就 2 - 30 个而已,针对特定业务只用 10 几个模块。

[root@ansible ~] ansible-doc -l | wc -l
3387

常用模块帮助文档参考:
https://docs.ansible.com/ansible/2.9/modules/modules_by_category.html
https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html

img

img

3.4.1)Command 模块

Comand 模块不会通过 Shell 处理命令,因此不支持像 $HOME 这样的变量。
以及 < > | ; 和 & 等都是无效的。

功能: 在远程主机执行系统命令,此为默认模块,可忽略 -m 选项
注意: 此命令不支持 $VARNAME < > | ; & 等,建议用 Shell 模块实现
注意: 此模块不具有幂等性
范例:

# command 模块不支持重定向
ansible websrvs -m command -a 'echo hello > /root/hello.log'
ansible websrvs -m command -a 'cat /root/hello.log'
 
# command 模块不支持变量引用  
ansible websrvs -m command -a "echo $HOSTNAME"

# command 模块不支持管道符
ansible websrvs -m command -a 'echo 123456 | passwd --stdin wangj'

image.png

# 仅支持简单的 Shell 命令, 且不具备幂等性
# 首行 WARNING 是告知我们所执行的操作可以使用其他模块代替
ansible websrvs -m command -a 'mkdir /data'
ansible websrvs -m command -a 'touch /data/1.log'
ansible websrvs -m command -a 'ls /data'

command 模块的部分参数演示

名称 必选 备注
chdir no 运行 command 命令前先 cd 到这个目录
creates no 如果这个参数对应的文件存在,就不运行 command
# chdir 参数
# 先切换到 /data 目录, 然后执行 ls -l 命令
ansible websrvs -m command -a 'chdir=/data ls -l'

# creates 参数
# 如果 /data/mysql 目录存在, 则跳过创建.
# 如果 /data/mysql 目录不存在, 则创建 /data/mysql 目录.
ansible websrvs -m command -a 'creates=/data/mysql mkdir /data/mysql'
ansible websrvs -m command -a 'creates=/data/mysql mkdir /data/mysql'

总结:

  • command 模块的命令不支持启动 Shell,直接通过 SSH 执行命令
  • command 不支持 Bash 的特性,如管道和重定向等功能
  • 若需要通过 Shell 运行一个命令,比如 < > | 等,你实际上需要使用 Shell 模块。
  • command 模块更安全,因为它不受用户环境的影响

3.4.2)Shell 模块

让远程主机在 Shell 进程下执行命令,从而支持 Shell 的特性,如管道等。
与 command 模块几乎相同,但在执行命令的时候使用的是 /bin/sh。
注意: Command 和 Shell 模块都只能去执行一些非交互式的命令,不能去执行一些交互式的命令,比如 vim 或 top。

功能: 和 command 相似,用 Shell 执行命令,支持各种符号,比如:*,$, >
注意: 此模块不具有幂等性
范例:

# Shell 模块支持变量引用
[root@ansible ~] ansible websrvs -m shell -a 'echo $HOSTNAME'

# Shell 模块支持管道符
[root@ansible ~] ansible websrvs -m shell -a 'useradd wangj'
[root@ansible ~] ansible websrvs -m shell -a 'echo 123456 | passwd --stdin wangj'
[root@ansible ~] ansible websrvs -m shell -a 'ls -l /etc/shadow'

image.png

# Shell 模块支持重定向
[root@ansible ~] ansible websrvs -m shell -a 'echo hello > /data/hello.log'
[root@ansible ~] ansible websrvs -m shell -a 'cat /data/hello.log'

注意: 即使是调用 bash 执行命令
类似 cat /tmp/test.md | awk -F'|' '{print $1,$2}' &> /tmp/example.txt 这些复杂命令
使用 Shell 模块也可能会失败。
解决办法: 建议写到脚本中,copy 到远程,执行,再把需要的结果拉回执行命令的机器

小技巧: 使用 Shell 模块替代 command,设为默认模块

[root@ansible ~] vim /etc/ansible/ansible.cfg
# 修改下面一行
module_name = shell
# 验证
ansible websrvs -a 'echo 123456 > /data/1.log'    # 默认是 shell 模块
ansible websrvs -m command -a 'echo 123456 > /data/1.log'    # 指定 command 模块 ( 不支持重定向等操作 )

3.4.3)Script 模块

功能: 在远程主机上运行 ansible 服务器上的脚本
注意: 此模块不具有幂等性

ansible websrvs -m script -a '/root/test.sh'

3.4.4)Copy 模块

功能: 从 ansible 服务器 主控端复制文件到远程主机
注意: src=file 如果没指明绝对路径,则为当前目录或当前目录下的 files 目录下的 file 文件

参数解析

  • src:推送数据的源文件信息
  • dest:推送数据的目标路径
  • backup:对推送传输过去的文件,进行备份
  • content:直接批量在被管理端文件中添加内容
  • group:将本地文件推送到远端,指定文件属组信息
  • owner:将本地文件推送到远端,指定文件属主信息
  • mode:将本地文件推送到远端,指定文件权限信息
# backup 参数
# 如目标存在, 默认覆盖, 此处指定先备份
# ansible websrvs -m shell -a 'useradd wangj'
ansible websrvs -m copy -a 'src=/root/test.sh dest=/root/test01.sh owner=wangj group=bin mode=600 backup=yes'

# content 参数
# 指定内容, 直接生成目标文件    
ansible websrvs -m copy -a "content='test line1\ntest line2\n' dest=/tmp/test.txt"

copy 模块 小细节

# 复制 /etc 目录自身. ( 注意: /etc 后面没有 / )
# ansible websrvs -m shell -a "mkdir /backup"
ansible websrvs -m copy -a "src=/etc dest=/backup"

# 复制 /etc/ 下的文件, 不包括 /etc 目录自身. ( 注意: /etc/ 后面有 / )
ansible websrvs -m copy -a "src=/etc/ dest=/backup"

3.4.5)Get_url 模块

功能: 用于将文件从 http、https 或 ftp 下载到被管理机节点上。
注意: 被管理机节点必须要能够直接访问对应的远程资源。

常用参数如下:
url:下载文件的 URL,支持 HTTP, HTTPS 或 FTP 协议
dest:下载到目标路径(绝对路径),如果目标是一个目录,就用服务器上面文件的名称,如果目标设置了名称就用目标设置的名称
owner:指定属主
group:指定属组
mode:指定权限
force:如果 yes, dest 不是目录,将每次下载文件, 如果内容改变, 替换文件. 如果否, 则只有在目标不存在时才会下载该文件.
checksum:对目标文件在下载后计算摘要,以确保其完整性
    示例: checksum="sha256:D98291AC[...]B6DC7B97",
    checksum="sha256:http://example.com/path/sha256sum.txt"
url_username:用于 HTTP 基本认证的用户名。对于允许空密码的站点,可以不使用 url_password 参数
url_password:用于 HTTP 基本认证的密码。如果未指定 url_username 参数,则不会使用  url_password 参数
validate_certs:如果 no, SSL 证书将不会被验证. 适用于自签名证书在私有网站上使用
timeout:URL 请求的超时时间, 秒为单位
参数 说明
url 下载资源的URL(支持http、https、ftp协议)
dest 下载的资源在目标主机上的保存路径(绝对路径)
owner 指定属主
group 指定属组
mode 指定权限
force =yes|no,是否强制下载;默认为no。
设为yes,即强制下载,如果同名文件存在,则覆盖;设为no,则只有在文件不存在时才下载。
url_username 基于http basic认证的用户名(如果访问的URL需要的话);
url_password 基于http basic认证的密码,和url_username一起使用(如果URL允许使用空密码,则仅需提供url_username即可);
在没有指定url_username时,单独指定url_password也没有意义。
validate_certs yes|no,是否校验 SSL 证书,默认为yes;
当设为no时,SSL证书将不会被校验(建议仅在URL访问的站点使用可被信任的自签名证书的情况下使用validate_certs=no)
timeout URL 请求的超时时间,单位为 s
checksum 对下载后的文件计算校验和,与 checksum 指定的校验和进行比对,确保下载文件的完好性

范例:

# 提前下载好软件包验证哈希值
[root@ansible ~] wget http://nginx.org/download/nginx-1.18.0.tar.gz
# 使用如下两条命令验证哈希值
[root@ansible ~] openssl md5 nginx-1.18.0.tar.gz
[root@ansible ~] md5sum nginx-1.18.0.tar.gz 
b2d33d24d89b8b1f87ff5d251aa27eb8  nginx-1.18.0.tar.gz
# ansible get_url 模块使用
[root@ansible ~] ansible websrvs -m get_url -a 'url=http://nginx.org/download/nginx-1.18.0.tar.gz dest=/usr/local/src/nginx.tar.gz checksum="md5:b2d33d24d89b8b1f87ff5d251aa27eb8"'

3.4.6)Fetch 模块

功能: 从远程主机提取文件至 Ansible 的主控端
与 copy 模块相反,目前不支持目录( 建议:可以将目录打包,然后将压缩包拷贝至 ansible 主控端 )
常用于: 复制客户端的日志文件至 ansible 主控端

[root@ansible ~] ansible websrvs -m fetch -a 'src=/var/log/messages dest=/root/logs'
[root@ansible ~] tree

3.4.7)File 模块

功能: 文件管理模块,用于对文件或文件夹相关的操作
主要用来设置文件、链接、目录的属性,或者移除文件、链接、目录。
比如: 创建文件或目录,删除文件或目录,设置文件目录属性,创建目录软链接等等
幂等性: 任意次执行所产生的影响均与一次执行的影响相同

参数 说明
path 指定远程主机目录或文件信息
state directory:在远端创建目录
touch:在远端创建文件
link:link 或 hard 表示创建链接文件
absent:表示删除文件或目录
owner 设置所有者
group 设置所属的组
mode 权限 0000
recurse 递归 yes or no
# 创建空文件
ansible all -m file -a 'path=/data/test.txt state=touch'
ansible all -m file -a "path=/root/test.txt state=touch owner=wangj mode=755"

案例

# 创建目录 state=directory
ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql"

# 创建软链接 state=link
ansible all -m file -a 'src=/data/testfile dest=/data/testfile-link state=link'

# 递归修改目录属性, 但不递归至子目录
ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql"

# recurse 参数
# 递归修改目录及子目录的属性
ansible all -m file -a "path=/data/mysql state=directory owner=mysql group=mysql recurse=yes"

# 删除文件或目录 state=absent
ansible all -m file -a "path=/data/mysql state=absent"

3.4.8)stat 模块

stat 模块将获取指定文件或目录的信息,并使用 register 参数将其保存。

功能: 检查文件或文件系统的状态
注意: 对于 Windows 目标,请改用 win_stat 模块
选项:
path: 文件/对象的完整路径 (必须)

常用的返回值判断:
exists:判断是否存在
isuid:调用用户的 ID 与所有者 ID 是否匹配

范例:

[root@ansible ~] ansible 127.0.0.1 -m stat -a 'path=/etc/passwd'

image.png

案例:

- name: install | Check if file is already configured.
    stat: path={{ nginx_file_path }}
    connection: local
    register: nginx_file_result
    
- name: install | Download nginx file
    get_url: url={{ nginx_file_url }} dest={{ software_files_path }} validate_certs=no
    connection: local
    when:, not. nginx_file_result.stat.exists

范例: 使用 stat 模块验证文件状态,通过文件状态推进下一步实施动作

# 检查 websrvs 主机组中的所有主机上的 /data/mysql 路径是否存在
# 如果路径不存在, 它将在每个主机上输出一条调试信息, 说明该路径不存在
[root@ansible ansible] cat stat.yml
---
- hosts: websrvs
  tasks:
    - name: Check file
      stat: path=/data/mysql
      register: st
    - name: debug
      debug:
        msg: "/data/mysql is not exist"
      when: not st.stat.exists

 [root@ansible ansible] ansible-playbook stat.yml

3.4.9)unarchive 模块

功能: 解包解压缩
实现有两种用法:
1)将 ansible 主机上的压缩包传到远程主机后解压缩至特定目录,设置 copy=yes,此为默认值,可省略
2)将远程主机上的某个压缩包解压缩到指定路径下,设置 copy=no

常见参数:
copy:默认为 yes,当 copy=yes,拷贝的文件是从 ansible 主机复制到远程主机上.
如果设置为 copy=no,会在远程主机上寻找 src 源文件
remote_src:和 copy 功能一样且互斥
yes 表示在远程主机,不在 ansible 主机
no 表示文件在 ansible 主机上
src:源路径,可以是 ansible 主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,
如果是远程主机上的路径,则需要设置 copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限

范例:

# copy=yes ( 默认值 )
# 拷贝的文件是从 ansible 控制主机复制到远程主机上
ansible all -m unarchive -a 'src=/root/nginx-1.18.0.tar.gz dest=/usr/local/src owner=wangj group=bin'

# copy=no ( 在远程被控主机上寻找 src 源文件 )
# ansible websrvs -m get_url -a 'url=http://nginx.org/download/nginx-1.18.0.tar.gz dest=/root/nginx-1.18.0.tar.gz'
ansible all -m unarchive -a 'src=/root/nginx-1.18.0.tar.gz dest=/usr/local/src copy=no mode=0777'

# 下载压缩包并解压缩至指定目录 ( 需要添加参数 copy=no )
ansible websrvs -m unarchive -a 'src=http://nginx.org/download/nginx-1.18.0.tar.gz dest=/usr/local/src/ copy=no'

# remote_src=yes ( 表示内容在远程主机上 )
ansible websrvs -m unarchive -a 'src=https://releases.ansible.com/ansible/ansible-2.1.6.0-0.1.rc1.tar.gz dest=/usr/local/src owner=root remote_src=yes'

3.14.10)Archive 模块

功能: 打包压缩 保存在被管理节点
范例:

ansible websrvs -m archive  -a 'path=/var/log/ dest=/data/log.tar.bz2 format=bz2 owner=wangj mode=0600'

3.4.11)Hostname 模块

功能: 管理主机名
范例:

# 使用
ansible 192.168.80.18 -m hostname -a 'name=node18.wuhanjiayou.cn' 

# 验证
ansible 192.168.80.18 -m shell -a 'hostname'

image.png

# 注意:
# 千万别以分组来修改主机名 ( 不然整个组的主机名都是同一个 ) 
# 除非你确实有这个需求 
ansible websrvs -m hostname -a 'name=node.wuhanjiayou.cn'
ansible websrvs -m shell -a 'hostname'

image.png

3.4.12)Cron 模块

功能: Cron 模块可以 帮助我们批量管理远程主机中的计划任务
支持时间: minute,hour,day,month,weekday
分,时,日,月,周
范例:

# 创建任务
ansible 10.0.0.8 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate ntp.aliyun.com &>/dev/null' name=Synctime"

# 禁用计划任务
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &>/dev/null' name=Synctime disabled=yes"

# 启用计划任务
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &>/dev/null' name=Synctime disabled=no"

# 删除任务
ansible websrvs -m cron -a "name='backup mysql' state=absent"
ansible websrvs -m cron -a 'state=absent name=Synctime'

演示

ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate ntp.aliyun.com &>/dev/null' name=Synctime"

image.png

3.4.13)Yum 和 Apt 模块

功能:
Yum 模块:管理软件包,支持 RHEL,CentOS,fedora,不支持 Ubuntu 其它版本
Apt 模块:管理 Debian 相关版本的软件包
后续:我们可以通过判断 Linux 系统版本来决定使用哪个模块。
范例:

// 安装: present
ansible websrvs -m yum -a 'name=httpd state=present'

// 卸载: absent
ansible websrvs -m yum -a 'name=httpd state=absent'

// 启用 epel 源进行安装
ansible websrvs -m yum -a 'name=nginx state=present enablerepo=epel'

// 升级除 kernel 和 foo 开头以外的所有包 ( 安装多个软件包 )
ansible websrvs -m yum -a 'name=* state=lastest exclude=kernel*,foo*'

// 一次安装多个软件包
[root@ansible ~] ansible websrvs -m yum -a 'name=sl,cowsay'

image.png

范例:

# 直接基于远程主机上的软件包安装
[root@ansible ~] ansible websrvs -m yum -a "name=https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/5.2/rhel/7/x86_64/zabbix-agent-5.2.5-1.el7.x86_64.rpm state=present"

image.png

范例:

# 安装软件包
# 注意: RadHat 使用 yum 模块, Ubuntu 使用 apt 模块
[root@centos8 ~] ansible 192.168.80.18 -m apt -a 'name=bb,sl,cowsay,cmatrix,oneko,hollywood,boxes,libaa-bin,x11-apps state=present'

# 卸载软件包
# 注意: RadHat 使用 yum 模块, Ubuntu 使用 apt 模块
[root@centos8 ~] ansible websrvs -m apt -a 'name=sl,cowsay state=absent'

image.png

范例: 查看包

[root@ansible ~] ansible localhost -m yum -a "list=tree"

image.png

3.4.14)yum_repository 模块

功能: 可以帮助我们批量管理远程主机上的 Yum 仓库
image.png

- name: Add multiple repositories into the same file (1/2)
  yum_repository:
    name: epel
    description: EPEL YUM repo
    file: external_repos
    baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
    gpgcheck: no
    
- name: Add multiple repositories into the same file (2/2)
  yum_repository:
    name: rpmforge
    description: RPMforge YUM repo
    file: external_repos
    baseurl: http://apt.sw.be/redhat/el7/en/$basearch/rpmforge
    mirrorlist: http://mirrorlist.repoforge.org/el7/mirrors-rpmforge
    enabled: no
    
- name: Remove repository from a specific repo file
    yum_repository:
      name: epel
      file: external_repos
      state: absent                           

范例: 创建和删除仓库

[root@ansible ~] cat yum_repo.yml
- hosts: websrvs
  tasks:
    - name: Add multiple repositories into the same file 
      yum_repository:
      name: test
      description: EPEL YUM repo
      file: external_repos
      baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
      gpgcheck: no

[root@ansible ~] ansible-playbook yum_repo.yml
[root@web1 ~] cat /etc/yum.repos.d/external_repos.repo
[test]
baseurl = https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
gpgcheck = 0
name = EPEL YUM repo

[root@ansible ~] cat remove_yum_repo.yml
- hosts: websrvs
  tasks:
    - name: remove repo 
      yum_repository:
        name: test
        file: external_repos
        state: absent
        
[root@ansible ~] ansible-playbook remove_yum_repo.yml        

3.4.15)Service 模块

功能: 可以帮助我们 批量管理远程主机上的服务
image.png
范例:

# 启动远程主机的 httpd 服务,并实现开机自启
ansible 192.168.80.18 -m service -a 'name=httpd state=started enabled=yes'

# 停止服务   
ansible websrvs -m service -a 'name=httpd state=stopped'

# 生效服务
ansible websrvs -m service -a 'name=httpd state=reloaded'

# 重启服务
ansible websrvs -m shell -a "sed -i 's/^Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf"
ansible websrvs -m service -a 'name=httpd state=restarted'

image.png

3.4.16)User 模块

功能: 管理用户
可以帮助我们 批量管理远程主机上的用户
比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。
范例:

// 创建用户
ansible all -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
ansible all -m user -a 'name=nginx comment=nginx uid=88 group=nginx groups="root,daemon" shell=/sbin/nologin system=yes create_home=no home=/data/nginx non_unique=yes'

// remove=yes 表示删除用户及家目录等数据, 默认 remove=no
ansible all -m user -a 'name=nginx state=absent remove=yes'

// 生成 123456 加密的密码
ansible localhost -m debug -a "msg={{ '123456'| password_hash('sha512','salt')}}"
localhost | SUCCESS => {
    "msg": "$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w."
}

// 用上面创建的密码创建用户
ansible websrvs -m user -a 'name=test password="$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w."'

// 创建用户 test, 并生成 4096bit 的私钥
ansible websrvs -m user -a 'name=test generate_ssh_key=yes ssh_key_bits=4096 ssh_key_file=.ssh/id_rsa'

3.4.17)Group 模块

功能: 管理组
image.png
范例:

// 创建组
ansible websrvs -m group  -a 'name=nginx gid=88 system=yes'

// 删除组
ansible websrvs -m group  -a 'name=nginx state=absent'

3.4.18)Lineinfile 模块

参考:
https://www.cnblogs.com/breezey/p/9297252.html

info
功能: 相当于 sed,可以修改文件内容
ansible 在使用 sed 进行替换时,经常会遇到需要转义的问题,而且 ansible 在遇到特殊符号进行替换时,存在问题,无法正常进行替换 。
其实在 ansible 自身提供了两个模块:lineinfile 模块和 replace 模块,可以方便的进行替换
一般在 ansible 当中去修改某个文件的单行进行替换的时候需要使用 lineinfile 模块
幂等性:重复执行不会创建多行内容,多次执行,依然只增加有最后一行。

范例:
regexp 参数:使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。如果想进行多行匹配进行替换需要使用 replace 模块。( 重点 )

# 将 Listen 开头的行,修改为 Listen 8080 ( regexp 参数 )
ansible 192.168.80.18 -m lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' line='Listen 8080'"

# 批量禁用远程主机的 SELinux 功能
ansible all -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SELINUX=disabled'"

# 将 # 开头的行都删除
ansible 192.168.80.18 -m lineinfile -a 'dest=/etc/fstab state=absent regexp="^#"'

image.png

3.4.19)Replace 模块

知识点:
Lineinfile 模块 与 replace 模块 区别

  1. Lineinfile 模块 regexp 参数:使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
  2. Replace 模块:可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换。

info
范例:

# 查找所有以 UUID 开头的行, 并将这些行注释掉
ansible all -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"

# 查找所有以 # 开头, 紧接着是 UUID 的 行 (这些行是被注释掉的)
# 并移除行首的 # 符号, 从而取消这些行的注释.
ansible all -m replace -a "path=/etc/fstab regexp='^#(UUID.*)' replace='\1'"

image.png

3.4.20)SELinux 模块

批量管理远端主机的 SELINUX 策略

info
范例:

# 启用
[root@ansible ~] ansible 192.168.80.18 -m selinux -a 'state=enforcing policy=targeted'

# 禁用
[root@ansible ~] ansible 192.168.80.18 -m selinux -a 'state=disabled'

# 验证
[root@centos8 ~] grep -v '#' /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted

[root@centos8 ~] getenforce 
Permissive

image.png

3.4.21)reboot 模块

注意: 对于 Windows 目标,请使用 win_reboot 模块

[root@ansible ~] ansible websrvs -m reboot

3.4.22)mount 模块

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

参数 说明
src 本地或远程设备的路径
path 设备挂载至本地的路径
fstype 挂载的文件系统类型,xfs、nfs...
opts 挂载的参数,defaults、ro...
state 挂载的状态,absent、mounted、unmounted
// 临时挂载
mount websrvs -m mount -a 'src="UUID=b3e48f45-f933-4c8e-a700-22a159ec9077" path=/home fstype=xfs opts=noatime state=present'

// 临时取消挂载
mount websrvs -m mount -a 'path=/home fstype=xfs opts=noatime state=unmounted'

// 永久挂载
ansible websrvs -m mount -a 'src=10.0.0.8:/data/wordpress path=/var/www/html/wp-content/uploads opts="_netdev" state=mounted'

// 永久卸载
ansible websrvs -m mount -a 'src=10.0.0.8:/data/wordpress path=/var/www/html/wp￾content/uploads state=absent'

3.4.23)Setup 模块( 重要 )

功能: setup 模块 用于收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用
但是如果主机较多,会影响执行速度。我们可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息

info
范例:
filter 参数:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息。

// 这条命令会收集 inventory 中 websrvs 组下所有主机的所有 facts
// 并将这些信息打印出来
ansible websrvs -m setup

# 主机的节点名
ansible websrvs -m setup -a "filter=ansible_nodename"

# 主机的主机名
ansible websrvs -m setup -a "filter=ansible_hostname"

# 主机所属的域名 
ansible websrvs -m setup -a "filter=ansible_domain"

# 主机的总内存量
ansible websrvs -m setup -a "filter=ansible_memtotal_mb"

# 主机的物理内存量
ansible websrvs -m setup -a "filter=ansible_memory_mb"

# 主机当前空闲的内存量
ansible websrvs -m setup -a "filter=ansible_memfree_mb"

# 主机操作系统的家族 // 例如 RedHat、Debian 等
ansible websrvs -m setup -a "filter=ansible_os_family"

# 主机操作系统的主版本号
ansible websrvs -m setup -a "filter=ansible_distribution_major_version"

# 主机操作系统的完整版本号
ansible websrvs -m setup -a "filter=ansible_distribution_version"

# 主机的虚拟 CPU 数量
ansible websrvs -m setup -a "filter=ansible_processor_vcpus"

# 主机的所有 IPv4 地址列表
ansible websrvs -m setup -a "filter=ansible_all_ipv4_addresses"

# 主机的架构类型
ansible websrvs -m setup -a "filter=ansible_architecture"

# 主机已运行的时间
ansible websrvs -m setup -a "filter=ansible_uptime_seconds"

# 以 ansible_processor 开头的所有 facts
ansible websrvs -m setup -a "filter=ansible_processor*"

# 主机的环境变量 
ansible websrvs -m setup -a 'filter=ansible_env'

范例:

[root@ansible ~] ansible all -m setup -a 'filter=ansible_python_version'

image.png

范例: 取 IP 地址

// 取所有 IP
ansible 192.168.80.18 -m setup -a 'filter=ansible_all_ipv4_addresses'

// 取默认 IP
ansible all -m setup -a 'filter="ansible_default_ipv4"'

image.png

3.4.24)debug 模块

此模块可以用于输出信息,并且通过 msg 定制输出的信息内容
注意: msg 后面跟变量时,需要加 " " 引起来
范例: debug 模块 默认输出 Hello world

# 默认输出 Hello world ( 默认没有指定 msg, 默认输出 "Hello world!" )
[root@ansible ~] ansible 192.168.80.18 -m debug

image.png

范例: 利用 debug 模块输出变量

[root@centos8 ~] vim debug.yaml
---
- hosts: websrvs
  tasks:
  - name: output variables
    debug:
      msg: Host "{{ ansible_nodename }}" Ip "{{ ansible_default_ipv4.address }}"
      
[root@centos8 ~] ansible-playbook debug.yaml

image.png

范例: 显示字符串特定字符

# cat debug.yml
- hosts: all
  gather_facts: n
  vars:
    a: "12345"
  tasks:
  - debug:
    msg: "{{a[2]}}"
    
// 定义了一个字符串变量 a, 如果想要获取 a 字符串的第 3 个字符
// 则可以使用 "a[2]" 获取, 索引从 0 开始, 执行上例 playbook, debug 的输出信息如下:
TASK [debug] *************************
ok: [test71] => {
    "msg": "3"
}    

标签:常用,name,websrvs,主机,ansible,Ansible,模块,root
From: https://www.cnblogs.com/wuhanjiayou/p/18068168/Ansible-Modules

相关文章

  • 不同请求方式参数常用写法
    1.get请求(参数为对象)请求地址是,参数用&拼接:例如:参数格式为一个对象:请求地址:请求写法:exportfunctionapprovalList(data){returnrequest({url:'/approval/list',method:'get',params:data,//关键词params});}2.get请......
  • ipdb常用命令总结
    在Python中,ipdb是一个基于pdb的增强型交互式调试器,它结合了IPython的强大功能。以下是ipdb常用的调试命令:启动调试会话:在代码中插入importipdb;ipdb.set_trace()来启动调试器。执行控制命令:n(ext)或Enter:执行下一行代码。s(tep):进入函数或方法内部。c(o......
  • BOSHIDA DC电源模块与稳压技术的结合优势
    BOSHIDADC电源模块与稳压技术的结合优势结合DC电源模块和稳压技术有以下优势: 1.稳定性:DC电源模块可以将交流电转换为直流电,并通过稳压技术保持输出电压稳定。这可以确保电子设备在不同负载和环境条件下都能获得稳定的电源供应,避免因电压波动而引起的设备故障或性能下降。2......
  • Ingress 注释常用功能总结
    ingress注释常用功能总结--annotations-prefix #特定于NGINX控制器的入口注释的前缀。(默认“nginx.ingress.kubernetes.io”)1、域名重定向这个配置会把www.kailinhr.com跳转到www.zhuoliehr.com。#主要配置nginx.ingress/permanent-redirect-code:"301"nginx.ingres......
  • PHPSTORM2019--【安装】【永久激活】【常用插件】
    一、【安装】安装前准备工作:1.关闭电脑网络,使其电脑无法联网状态2.hosts文件中添加0.0.0.0account.jetbrains.com0.0.0.0www.jetbrains.com 3.点击phpstorm2019.exe安装,我的安装目录:d:/software/phpstorm2019  二、【激活】1.jetbrains-agent.jar位于压缩包内,拷......
  • FineReport学习(一)——常用操作介绍
    FineReport传统报表的开发流程1)新建数据连接:比如说,你要连接数据库,连接数据库的哪一张表。2)新建模板数据集:模板数据集只对当前文件生效,常用的。3)设置表的模板样式:自定义模板样式,并绑定数据。  数据库连接(默认FRDemo.db)连接默认FRDemo.db数据库,可以点击测试连接进行测......
  • HTML常用字体标签:揭秘HTML字体标签,让你的网页“字”得其乐!
    在数字世界的构建中,字体不仅仅是文字的外衣,更是情感和风格的传递者。作为网页设计师和前端开发者,掌握HTML中的字体标签,能够让我们创造出更加丰富和吸引人的用户体验。今天,就让我们一起走进HTML字体标签的世界,探索它们如何让网页变得生动有趣。一、认识基本字体标签语法结构:<标......
  • 常用的Docker命令及其用途简述
    记录常用的Docker命令及其用途在日常的开发和运维工作中,Docker和docker-compose已经成为了不可或缺的工具。它们帮助我们轻松地构建、运行和管理容器化的应用程序。在这篇随笔中,我将记录下一些我常用的Docker和docker-compose命令,并简述它们的用途,并在每一个命令后面加上一条示例......
  • Java线上诊断神器Arthas:常用命令详解!
    有关Arthas基本介绍、安装部署、arthasidea插件在上篇文章已经介绍过,这里就不在重述。文章地址:Java诊断工具Arthas:开篇之watch实战上篇重点讲了watch命令。这篇把剩余一些重要命令讲解演示下。一、trace命令作用:展示方法内部调用路径,并输出方法路径上的每个节点上耗时......
  • 常用表函数
    表函数的意义在dax基本知识里面,我们列举了9种函数,表函数就是其中一类在写度量值的时候,只能有两种变量,一个是值,一个是表。PBI中展示的只能是一个值,但是在生成值的过程中经常伴随使用表比如:SUM(Sales[Quantity])可以把Sales[Quantity]看作一个单列表,在把一个一行......