自动化运维工具-Ansible ad-hoc(模块)

Ansible ad-hoc

一、ad-hoc概述

1.什么ad-hoc

ad-hoc简而言之就是"临时命令",执行完即结束,并不会保存

2.使用场景

比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地,等等
临时使用的命令,一次使用

3.ad-hoc模式的命令使用

#批量查看磁盘信息
[root@m01 ~]# ansible web_group -m command -a 'df -h' -i ./hosts
web02 | CHANGED | rc=0 >>
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        18G  1.1G   17G    6% /
devtmpfs        981M     0  981M    0% /dev
tmpfs           992M     0  992M    0% /dev/shm
tmpfs           992M  9.5M  982M    1% /run
tmpfs           992M     0  992M    0% /sys/fs/cgroup
/dev/sda1      1014M  124M  891M   13% /boot
tmpfs           199M     0  199M    0% /run/user/0
 
web01 | CHANGED | rc=0 >>
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        18G  1.1G   17G    6% /
devtmpfs        981M     0  981M    0% /dev
tmpfs           992M     0  992M    0% /dev/shm
tmpfs           992M  9.5M  982M    1% /run
tmpfs           992M     0  992M    0% /sys/fs/cgroup
/dev/sda1      1014M  124M  891M   13% /boot
tmpfs           199M     0  199M    0% /run/user/0
 
#批量查看内存信息
[root@m01 ~]# ansible web_group -m command -a 'free -m' -i ./hosts
web01 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           1982         143        1688           9         150        1668
Swap:          1023           0        1023
 
web02 | CHANGED | rc=0 >>
              total        used        free      shared  buff/cache   available
Mem:           1982         142        1684           9         155        1666
Swap:          1023           0        1023

4.ad-hoc结果返回颜色

绿色: 代表被管理端主机没有被修改
黄色: 代表被管理端主机发现变更
红色: 代表出现了故障,注意查看提示

5.ad-hoc常用模块

command             # 执行shell命令(不支持管道等特殊字符)
shell               # 执行shell命令
scripts             # 执行shell脚本
yum_repository      # 配置yum仓库
yum                 # 安装软件
copy                # 变更配置文件
file                # 建立目录或文件
service             # 启动与停止服务
systemd             # 启动与停止服务
mount               # 挂载设备
cron                # 定时任务
get_url             #下载软件
firewalld           #防火墙
selinux             #selinux
setup               #获取主机信息

6.ansible帮助

#1.查看所有模块
[root@m01 ~]# ansible-doc -l
 
#2.查看指定模块的用法
[root@m01 ~]# ansible-doc yum
 
#3.查看模块参数
[root@m01 ~]# ansible-doc -s yum

二、Ansible 命令模块

Ansible常用模块

command模块(Ansible默认模块)

command 模块可以帮助我们在远程主机上执行命令。
注意:使用 command 模块在远程主机中执行命令时,不会经过远程主机的 shell 处理,在使用 command 模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效,比如”<”, “>”, “|”, “;” 和 “&” 这些符号,如果你需要这些功能,可以参考后面介绍的 shell 模块。

参数

  • Chdir:执行命令前,切换到目录。
  • Creates:当该文件存在时,则不执行该步骤。
  • Removes:当该文件存在时,则执行该步骤。

案例

[root@localhost ~]# ansible web01 -m command -a "chdir=/opt ls"
172.16.1.101 | CHANGED | rc=0 >>
phpMyAdmin-5.1.1-all-languages
[root@localhost ~]# ansible web01 -m command -a "chdir=/opt creates=/opt/phpMyAdmin-5.1.1-all-languages ls"
172.16.1.101 | SUCCESS | rc=0 >>
skipped, since /opt/phpMyAdmin-5.1.1-all-languages exists
[root@localhost ~]# ansible web01 -m command -a "chdir=/opt creates=/opt/phpMyAdmin-5.1.1-all-languages   mkdir test"
172.16.1.101 | SUCCESS | rc=0 >>
skipped, since /opt/phpMyAdmin-5.1.1-all-languages exists

缺点

不支持特殊字符。

shell模块

shell 模块可以帮助我们在远程主机上执行命令。与 command 模块不同的是,shell 模块在远程主机中执行命令时,会经过远程主机上的 /bin/sh 程序处理。

参数

  • Chdir:执行命令前,切换到目录。
  • Creates:当该文件存在时,则不执行该步骤。
  • Removes:当该文件不存在时,则不执行该步骤。
  • executable参数:默认情况下,shell 模块会调用远程主机中的 /bin/sh 去执行对应的命令,通常情况下,远程主机中的默认 shell 都是 bash。如果你想要使用其他类型的 shell 执行命令,则可以使用此参数指定某种类型的 shell 去执行对应的命令。指定 shell 文件时,需要使用绝对路径。

案例

[root@localhost ~]# ansible web01 -m shell -a "chdir=/opt   ls"
172.16.1.101 | CHANGED | rc=0 >>
phpMyAdmin-5.1.1-all-languages
test
[root@master ~]# ansible web -m shell -a "executable=/bin/sh   ps -ef | awk '{print \$1}'"

script模块

script 模块可以帮助我们在远程主机上执行 ansible 管理主机上的脚本,也就是说,脚本一直存在于 ansible 管理主机本地,不需要手动拷贝到远程主机后再执行。

参数

  • Chdir:执行命令前,切换到目录。
  • Creates:当该文件存在时,则不执行该步骤。
  • Removes:当该文件存在时,则执行该步骤。

案例

[root@localhost ~]# ansible web01 -m script -a "chdir=/opt ./test.sh"
172.16.1.101 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 172.16.1.101 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 172.16.1.101 closed."
    ], 
    "stdout": "total 4\r\ndrwxr-xr-x.  4 root  root    56 Aug 26 23:37 .\r\ndr-xr-xr-x. 17 root  root   224 Aug 21 19:09 ..\r\ndrwxrwxrwx. 13 nginx nginx 4096 Aug 22 20:17 phpMyAdmin-5.1.1-all-languages\r\ndrwxr-xr-x.  2 root  root     6 Aug 26 23:37 test\r\n", 
    "stdout_lines": [
        "total 4", 
        "drwxr-xr-x.  4 root  root    56 Aug 26 23:37 .", 
        "dr-xr-xr-x. 17 root  root   224 Aug 21 19:09 ..", 
        "drwxrwxrwx. 13 nginx nginx 4096 Aug 22 20:17 phpMyAdmin-5.1.1-all-languages", 
        "drwxr-xr-x.  2 root  root     6 Aug 26 23:37 test"
    ]
}

yum模块

yum 模块可以帮助我们在远程主机上通过 yum 源管理软件包。

参数

  • name参数:必须参数,用于指定需要管理的软件包,比如 nginx。
  • state参数:用于指定软件包的状态 ,默认值为present。
    • present:表示确保软件包已经安装。
    • installed 与present 等效
    • latest 表示安装 yum 中最新的版本
    • absent 和 removed 等效,表示删除对应的软件包。
  • disable_gpg_check参数:用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。
  • enablerepo参数:用于指定安装软件包时临时启用的 yum 源。
  • disablerepo参数:用于指定安装软件包时临时禁用的 yum 源。

案例

ansible ansible-demo3 -m yum -a 'name=nginx disable_gpg_check=yes'
ansible ansible-demo3 -m yum -a 'name=nginx state=present disable_gpg_check=yes'
ansible ansible-demo3 -m yum -a 'name=nginx state=installed disable_gpg_check=yes'

ansible ansible-demo3 -m yum -a 'name=nginx state=latest disable_gpg_check=yes'

ansible ansible-demo3 -m yum -a 'name=nginx state=absent'
ansible ansible-demo3 -m yum -a 'name=nginx state=removed'

ansible ansible-demo3 -m yum -a 'name=telnet disable_gpg_check=yes enablerepo=epel'

ansible ansible-demo3 -m yum -a 'name=telnet disable_gpg_check=yes disablerepo=ngins-statle'

yum_repository 模块

yum_repository 模块可以帮助我们管理远程主机上的 yum 仓库。

参数

  • name参数:必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID。
  • baseurl参数:此参数用于设置 yum 仓库的 baseurl。
  • description参数:此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。
  • file参数:此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中可以存在多个 yum 源。
  • enabled参数:此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。
  • gpgcheck参数:此参数用于设置是否开启rpm包验证功能,默认值为no,表示不启用包验证,设置为 yes 表示开启包验证功能。
  • state参数:默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。

案例

[root@ansible-manager ~]# ansible ansible-demo3 -m yum_repository -a 'name=aliEpel description="alibaba EPEL" baseurl=https://mirrors.aliyun.com/epel/$releasever\Server/$basearch/'
ansible-demo3 | SUCCESS => {
    "changed": true, 
    "repo": "aliEpel", 
    "state": "present"
}
ansible db -m yum_repository -a "name=local baseurl=https://mirrors.aliyun.com/pypi/simple/ description=简介 file=local enabled=no gpgcheck=no state=absent"

copy模块

copy 模块的作用就是拷贝文件(拷贝到远程主机)。

常用参数

  • src参数 :用于指定需要copy的文件或目录。
  • dest参数 :用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数。
  • content参数 :当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
  • force参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
  • backup参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
  • owner参数 : 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
  • group参数 : 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
  • mode参数 : 指定文件拷贝到远程主机后的权限,如果你想将权限设置为”rw-r--r--“,则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。

案例

root@master ~]# ansible db -m copy -a "src=nginx_upstream_check_module-master.zip dest=/opt"

[root@master ~]# ansible db -m copy -a "content=Holle_World dest=/opt/index.html"

[root@master ~]# ansible db -m copy -a "src=nginx_upstream_check_module-master.zip dest=/opt  backup=yes owner=nginx group=mysql mode=600"

[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ mode=0640"
ansible-demo3 | SUCCESS => {
    "changed": true, 
    "checksum": "a8d207d098d939cb0dc9df1f3a2b986d6d4499b2", 
    "dest": "/testdir/copytest", 
    "gid": 1000, 
    "group": "ding", 
    "mode": "0640", 
    "owner": "ding", 
    "path": "/testdir/copytest", 
    "secontext": "system_u:object_r:default_t:s0", 
    "size": 12, 
    "state": "file", 
    "uid": 1000
}

fetch模块

此模块可以将远程主机的文件拉取到本地主机的某一个目录下。

参数

  • dest:指定拉取文件到本地以后,文件存放的位置
  • src:指定从受管主机中拉取哪个文件

案例

ansible web01 -m fetch -a 'src=/opt/test/test dest=/opt/'

file模块

file 模块可以帮助我们完成一些对文件的基本操作。比如,创建文件或目录、删除文件或目录、修改文件权限等。

参数

  • force:强制创建,需要在两种情况下强制创建软连接,一种是源文件不存在但之后会建立的情况,另一种是目标软连接已存在,需要先取消之前的软连接,然后在创建软连接,两种选项yes|no
  • group: 定义文件目录属性
  • mode:定义文件目录的权限
  • owner:定义文件目录的属性
  • path:必选项,定义文件目录的路径
  • recurse: 递归的设置文件的属性,只对目录有效
  • src:要被软连接的源文件的路径,只适用于state=link的情况
  • dest:被连接到的路径,,只适用于state=link的情况
  • state:状态
    • directory:如果目录不存在,创建目录
    • file:即使文件不存在,也不会被创建
    • link:创建软连接
    • hard:创建硬链接
    • touch:如果文件不存在时候,则则会创建一个新文件,如存在文件目录,则更新最后修改时间
    • absent:删除目录文件或者取消连接文件

案例

# 创建目录
[root@master ~]# ansible db -m file -a "path=/opt/test state=directory"
# 创建软连接
[root@master ~]# ansible db -m file -a "src=/opt/test dest=/opt/ttt state=link "

[root@master ~]# ansible db -m file -a "path=/opt/1.txt state=touch"
[root@master ~]# ansible db -m file -a "path=/opt/1.txt state=absent"
[root@master ~]# ansible db -m file -a "path=/opt/ttt state=absent"

root@master ~]# ansible db -m file -a "path=/opt/1.txt state=touch group=nginx owner=mysql mode=600"

# 强制创建软链接
[root@master ~]# ansible db -m file -a "src=/opt/2.txt dest=/opt/txt state=link force=yes"

# 递归设置权限
[root@master ~]# ansible db -m file -a "path=/opt/test group=mysql owner=nginx mode=700 recurse=yes"

文件做软连接 ansible -i ansiblepy.py test22 -m file -a "src=/root/aa dest=/root/ansTest/ttt state=link"
创建文件  ansible -i ansiblepy.py test22 -m file -a "path=/root/kk directory=touch"
创建目录 ansible -i ansiblepy.py test22 -m file -a "path=/root/kkk state=directory"
删除目录文件或者软连接(state=absent | directory)   ansible -i ansiblepy.py test22 -m file -a "path=/root/kk state=absent"

get_url模块

用于将文件或软件从http、https或ftp下载到本地节点上或被管理机节点上

参数

  • dest : 下载到哪里(绝对路径),如果目标是一个目录,就用服务器上面文件的名称,如果目标设置了名称就用目标设置的名称。
  • owner:指定属主
  • group:指定属组
  • mode:指定权限、
  • force : 如果yes,dest不是目录,将每次下载文件,如果内容改变,替换文件。如果no,则只有在目标不存在时才会下载该文件。
  • sha256sum : 如果将SHA-256校验和传递给此参数,目标文件的摘要将在下载后计算,以确保其完整性
  • url : HTTP,HTTPS或FTP URL(http | https | ftp)
  • url_password : 用于HTTP基本认证的密码。 如果未指定url_username参数,则不会使用url_password参数。
  • url_username : 用于HTTP基本认证的用户名。 对于允许空密码的站点,此参数可以不使用`url_password'使用。
  • validate_certs :如果“no”,SSL证书将不会被验证。 这只能使用自签名证书在个人控制的网站上使用。

案例

# 下载promertheus
[root@master ~]# ansible db -m get_url -a "dest=/opt/ owner=mysql group=nginx mode=600 url=http://106.13.81.75/prometheus-2.25.0.linux-amd64.tar.gz"

# 增加sha256sum验证
[root@master ~]# ansible db -m get_url -a "dest=/opt/ owner=mysql group=nginx mode=600 url=http://106.13.81.75/prometheus-2.25.0.linux-amd64.tar.gz sha256sum=d163e41c56197425405e836222721ace8def3f120689fe352725fe5e3ba1a69d"

service模块

service 模块可以帮助我们管理远程主机上的服务。比如,启动或停止远程主机中的 nginx 服务。

参数

  • name参数:此参数用于指定需要操作的服务名称,比如 nginx。
  • state参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted、reloaded。
  • enabled参数:此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动。

案例

[root@master ~]# ansible db -m service -a "name=nginx state=started enabled=yes"

[root@ansible-manager ~]# ansible ansible-demo3 -m service -a "name=nginx state=started"
ansible-demo3 | SUCCESS => {
    "changed": true, 
    "name": "nginx", 
    "state": "started", 
    "status": {
        "ActiveEnterTimestampMonotonic": "0", 
      ......
        "WatchdogUSec": "0"
    }
}

systemd模块

systemd模块用于控制远程主机的systemd服务,说白了,就是Linux下的systemd命令。需要远程主机支持systemd

用法和service模块基本相同。

参数

名称 必选 可选值 备注
daemon_reload no yes/no 在执行任何其他操作之前运行守护进程重新加载,以确保systemd已经读取其他更改
enabled no yes/no 服务是否开机自动启动。enabledstate至少要有一个被定义
masked no yes/no 是否将服务设置为masked状态,被mask的服务是无法启动的
name yes 服务名称
state no started,stopped,restarted,reloaded service最终操作后的状态

ansible剧本循环 (连续开启几个软件)

- name: "{{ item }}"   ( 循环后的值,必须使用item )
- state: started    (开启软件)
with_items :    ( 循环体 )
	- nginx   
	- php-fpm 

案例

[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=started"
192.168.31.66 | SUCCESS => {
    "changed": true, 
    "name": "httpd", 
    "state": "started", 
    "status": {
。。。

[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=stopped"
192.168.31.66 | SUCCESS => {
    "changed": true, 
    "name": "httpd", 
    "state": "stopped", 
    "status": {
。。。

[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=restarted"
192.168.31.66 | SUCCESS => {
    "changed": true, 
    "name": "httpd", 
    "state": "started", 
    "status": {
。。。

[root@centos7 ~]# ansible test -m systemd -a "name=httpd state=reloaded"
192.168.31.66 | SUCCESS => {
    "changed": true, 
    "name": "httpd", 
    "state": "started",

mount模块

挂载。

参数

  • src : 挂载路径(NFS)
  • path : 挂载的路径(挂载主机的路径)
  • fstype : 挂载的类型
  • opts:挂载权限 (defsults默认权限)
  • state : 状态
    • present --- 开机挂载,仅将挂载配置写入/etc/fstab
    • mounted --- 挂载设备,并将配置写入/etc/fstab
    • unmounted --- 卸载设备,不会清除/etc/fstab写入的配置
    • absent --- 卸载设备,会清理/etc/fstab写入的配置(会删除目录,但是目录必须为空)

案例

# 挂载192.168.5.80:/data目录到test组中的主机
# ansible test -m mount -a "src=192.168.5.80:/data path=/data fstype=nfs opts=defaults state=mounted"

# 卸载,会直接删除/data目录,挂载的时候也不需要创建目标的/data目录
# ansible test -m mount -a "src=192.168.5.80:/data path=/data fstype=nfs opts=defaults state=absent"

unarchive 解压模块

解压复制远程主机上的压缩文件

参数

  • copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
  • src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
  • dest:远程主机上的目标路径
  • mode:设置解压缩后的文件权限

案例

ansible db -m unarchive -a "src=node_exporter-1.1.2.linux-amd64.tar.gz dest=/opt/ mode=600 "
ansible db -m unarchive -a "src=/opt/prometheus-2.25.0.linux-amd64.tar.gz copy=no  dest=/opt/ mode=600 "

# 在远程主机上解压文件并设置权限
ansible all -m unarchive -a 'src=/srv/tomcat8/apache-tomcat-8.0.29.tar.gz dest=/usr/local copy=no mode=0755'

# 解压ansible管理机上的压缩文件到远程主机并设置权限
ansible all -m unarchive -a "src=/tmp/install/zabbix-3.0.4.tar.gz dest=/tmp/ mode=0755 copy=yes"

cron模块

cron 模块可以帮助我们管理远程主机中的计划任务,功能相当于 crontab 命令。

参数

  • minute参数:此参数用于设置计划任务中分钟设定位的值,比如,上述示例1中分钟设定位的值为5,即 minute=5,当不使用此参数时,分钟设定位的值默认为””。
  • hour参数:此参数用于设置计划任务中小时设定位的值,比如,上述示例1中小时设定位的值为1,即 hour=1,当不使用此参数时,小时设定位的值默认为””。
  • day参数:此参数用于设置计划任务中日设定位的值,当不使用此参数时,日设定位的值默认为””。
  • month参数:此参数用于设置计划任务中月设定位的值,当不使用此参数时,月设定位的值默认为””。
  • weekday参数:此参数用于设置计划任务中周几设定位的值,当不使用此参数时,周几设定位的值默认为”*”。
  • user参数:此参数用于设置当前计划任务属于哪个用户,当不使用此参数时,默认为管理员用户。
  • job参数:此参数用于指定计划的任务中需要实际执行的命令或者脚本,比如上例中的 “echo test” 命令。
  • name参数:此参数用于设置计划任务的名称,计划任务的名称会在注释中显示,当不指定计划任务的名称时,ansible 会默认为计划任务加入注释,注释的内容为 #Ansible: None,假设指定计划任务的名称为 test,那么注释的内容为#Ansible: test,在一台机器中,计划任务的名称应该具有唯一性,方便我们以后根据名称修改或删除计划任务。
  • special_time参数:在上述示例3与示例4中,计划任务的时间设定格式为 @reboot 或者@hourly。@reboot 表示重启时执行,@hourly 表示每小时执行一次,相当于设置成”0 0 * * *” ,这种@开头的时间设定格式则需要使用 special_time 参数进行设置,special_time 参数的可用值有 reboot(重启后)、yearly(每年)、annually(每年,与yearly相同)、monthly(每月)、weekly(每周)、daily(每天)、hourly(每时)。
  • state参数:当计划任务有名称时,我们可以根据名称修改或删除对应的任务,当删除计划任务时,需要将 state 的值设置为 absent。
  • backup参数:如果此参数的值设置为 yes,那么当修改或者删除对应的计划任务时,会先对计划任务进行备份,然后再对计划任务进行修改或者删除,cron 模块会在远程主机的 /tmp 目录下创建备份文件,以 crontab 开头并且随机加入一些字符,具体的备份文件名称会在返回信息的 backup_file 字段中看到,推荐将此此参数设置为 yes。

案例

[root@master ~]# ansible db -m cron -a "minute=5 hour=3 day=3 month=5 user=root job='echo Hello' name=job_test state=present "

[root@master ~]# ansible db -m cron -a "minute=5 hour=3 day=3 month=5 user=root job='echo World' name=job_test state=present backup=yes"
[root@master ~]# ansible db -m cron -a "minute=5 hour=*/2 day=3 month=5 user=root job='echo World' name=job_test state=present backup=yes"

[root@master ~]# ansible db -m cron -a "special_time=reboot user=root job='echo World' name=job_test state=present backup=yes"

[root@ansible-manager ~]# ansible ansible-demo3 -m cron -a " name='special time test' state=absent backup=yes "
ansible-demo3 | SUCCESS => {
    "backup_file": "/tmp/crontabiaObgL", 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "crontab test", 
        "crontab day test"
    ]
}
[root@ansible-manager ~]# ansible ansible-demo3 -m cron -a " name='special time test' special_time=reboot job='echo test' "
ansible-demo3 | SUCCESS => {
    "changed": true, 
    "envs": [], 
    "jobs": [
        "crontab test", 
        "crontab day test", 
        "special time test"
    ]
}

selinux模块

配置 SELINUX 的策略, 需要重启机器

参数

  • state :状态
    • enforcing : 启用
    • permissive : 临时关闭
    • disabled : 禁用

案例

ansible all -m selinux -a 'state=disabled'
192.168.179.99 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "configfile": "/etc/selinux/config", 
    "msg": "", 
    "policy": "targeted", 
    "reboot_required": false, 
    "state": "disabled"
}

setup模块

参数

ansible_all_ipv4_addresses:仅显示ipv4的信息。
ansible_devices:仅显示磁盘设备信息。
ansible_distribution:显示是什么系统,例:centos,suse等。
ansible_distribution_major_version:显示是系统主版本。
ansible_distribution_version:仅显示系统版本。
ansible_machine:显示系统类型,例:32位,还是64位。
ansible_eth0:仅显示eth0的信息。
ansible_hostname:仅显示主机名(不准确)
ansible_fqdn:仅显示主机名。
ansible_kernel:仅显示内核版本。
ansible_lvm:显示lvm相关信息。
ansible_memtotal_mb:显示系统总内存。
ansible_memfree_mb:显示可用系统内存。
ansible_memory_mb:详细显示内存情况。
ansible_swaptotal_mb:显示总的swap内存。
ansible_swapfree_mb:显示swap内存的可用内存。
ansible_mounts:显示系统磁盘挂载情况。
ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus:显示cpu个数(只显示总的个数)。

案例

#1.获取web01主机所有信息
[root@m01 ~]# ansible web01 -m setup
 
#2.获取主机IP
[root@m01 ~]# ansible web01 -m setup -a 'filter=ansible_default_ipv4'
 
#3.获取主机名
[root@m01 ~]# ansible web01 -m setup -a 'filter=ansible_fqdn'
web01 | SUCCESS => {
    "ansible_facts": {
        "ansible_fqdn": "www.baidu.com", 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}
 
#4.获取内存信息
[root@m01 ~]# ansible web01 -m setup -a 'filter=ansible_memory_mb'
web01 | SUCCESS => {
    "ansible_facts": {
        "ansible_memory_mb": {
            "nocache": {
                "free": 720, 
                "used": 252
            }, 
            "real": {
                "free": 276, 
                "total": 972, 
                "used": 696
            }, 
            "swap": {
                "cached": 0, 
                "free": 1023, 
                "total": 1023, 
                "used": 0
            }
        }, 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}

mysql_db 模块

#名称:创建一个名为“bobdata”的新数据库
name: Create a new database with name 'bobdata'

mysql_db:
  name: bobdata           #库的名字
  state: 
      present             #创建库
      import              #导入数据库
      dump                #导出数据库
  target: /tmp/dump.sql     #导入或导出的数据库文件
  
#使用mysql_db的前提:需要安装MySQL-python(在DB端安装, yum install MySQL-python),安装的pymysql模块最主要的功能是让ansible能够操作mysql

mysql_user 模块

# name:创建名为“bob”、密码为“12345”的数据库用户,拥有所有数据库权限
name: Create database user with name 'bob' and password '12345' with all database privileges

mysql_user:
  name: bob           #用户名
  host: 172.16.1.%    #用户连接的主机
  password: 12345     #用户密码
  priv: '*.*:ALL'       #用户权限
  state: 
      present         #创建用户
      absent          #删除用户

练习1:创建一个名为wordpress的数据库

ansible db -m mysql_db -a "name=wordpress state=present target=/root/discuz.sql login_host=172.16.1.51 login_user=root login_password=123456 login_port=3306"

GRANT ALL PRIVILEGES ON *.* TO 'root'@'db01' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

练习2:导出discuz数据库中所有的数据

# 导出(导出的内容在DB端)
ansible db -m mysql_db -a "name=discuz state=dump  login_host=172.16.1.51 login_user=root login_password=123456 login_port=3306"

# 导入
ansible db -m mysql_db -a "name=discuz state=import target=/root/discuz.sql login_host=172.16.1.51 login_user=root login_password=123456 login_port=3306"

练习3:创建一个数据远程连接用户

ansible db -m mysql_user a "name=discuz host=% password=123456 priv=*.*:ALL state=present login_host=172.16.1.51 login_user=root login_password=123456 login_port=3306"
posted @ 2021-08-27 18:34  小丶凡  阅读(553)  评论(0编辑  收藏  举报
1