ansible3:模块介绍

说明

  ansible模块分类详细见官方文档:https://docs.ansible.com/ansible/2.4/modules_by_category.html

System Modules

ping

  1. 介绍:这个模块前面我们已经介绍过了,就是利用ping去检测对应主机的连通性。

  2. 参数说明:无

  3. 使用:

      0 15:11:27 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m ping
    

hostname

  1. 介绍:设定主机名。

  2. 参数:

    • name:指定主机名。
  3. 使用:

      0 15:13:14 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m hostname -a 'name=ck-node1'
    

cron

  1. 介绍:可以帮我们管理远程主机的定时任务,相当于crontab命令,5个*代表分时日月周。

  2. 参数:

    • minute:设定分钟,不设默认为*。
    • hour:设定小时,不设默认为*。
    • day:设定日,不设默认为*。
    • month:设定月,不设默认为*。
    • weekday:设置周,不设默认为*。
    • special_time:可直接设定一些特殊定时任务:
      • reboot:重启后指定定时任务。
      • yearly:每年执行一次定时任务。
      • annually:也是每年,与yearly作用一致。
      • monthly:每月执行一次。
      • weekly:每周执行一次。
      • daily:每天执行一次。
      • hourly:每小时执行一次。
    • user:指定定时任务属于哪个用户,默认为root。
    • job:指定定时任务需要执行的命令或者脚本。
    • name:以注释的方式为定时任务添加名称。同一台机器中的计划任务名称应该具有唯一性,方便后续根据名称修改或删除计划任务。
    • state:默认值为present。当需要删除定时任务是需要将此参数的值设定为absent。
    • disable:是否禁用掉定时任务。注意,使用此参数时,不仅要指定任务的名称,还要指定任务的job以及任务的时间设定,否则在注释任务的同时,任务的信息会被修改。
    • backup:操作前是否备份。
  3. 使用:

    # ansible主机上执行。
      0 15:15:32 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m cron -a "name='cron test' minute=1 hour=1 day=*/3 job='echo test'"
    # 在远端主机上验证。
      0 15:15:53 root@ck-node1,172.16.15.21:~ # crontab -l
    #Ansible: cron test
    1 1 */3 * * echo test
    # 其它举例
      0 15:15:48 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m cron -a "name='cron test' special_time=hourly job='echo test'"
      0 15:17:16 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m cron -a "name='cron test' special_time=daily job='echo test' backup=yes"
      0 15:17:19 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m cron -a "name='cron test' special_time=daily job='echo test' disabled=yes backup=yes"
    

service

  1. 介绍:帮我们管理远程主机上的服务。服务必须能被 BSD init, OpenRC, SysV, Solaris SMF, systemd, upstart 中的任意一种所管理,可以理解为service命令。

  2. 参数:

    • name:指定服务名称
    • state:指定服务的状态。一般有:started、stopped、restarted、reloaded。
    • enabled:是否设置为开机启动。
  3. 使用:

      0 15:17:20 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m service -a 'name=postfix state=stopped enabled=no'
    

systemd

  1. 介绍:用法与service基本相同。
  2. 参数:name、state、enabled与上面解释一致。
    • daemon_reload:在执行其他操作前,运行daemon-reload,以确保systemd读取了所有更改,取值:yes/no。
    • masked:是否将服务设置为masked状态,被mask的服务是无法启动的。
  3. 使用也与service一致。

filesystem

  1. 介绍:在块设备上创建文件系统。

  2. 参数:

    • dev:目标块设备的名字。
    • force:是否在已有文件系统的设备上创建新的文件系统,默认为no。
    • fstype:指定文件系统的类型。
    • opts:传递给mkfs命令的参数
  3. 使用:

      0 15:18:53 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m filesystem -a 'fstype=ext4 dev=/dev/sdb'
    

mount

  1. 介绍:配置挂载点

  2. 参数:

    • fstype:必选项,指定挂载文件的类型。
    • opts:传递给mount命令的参数。
    • src:必选项,指定要挂载的文件。
    • path:必选项,指定挂载点。也可用以用name。
    • state:
      • present:只处理fstab中的配置。
      • absent:删除挂载点。
      • mounted:自动创建挂载点并挂载。
      • umounted:卸载。
  3. 使用:

      0 15:18:53 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m mount -a 'name=/mnt src=/dev/sr0 fstype=ext4 opts=ro state=present'
    

user

  1. 介绍:管理用户账户和用户属性。

  2. 参数:

    • name:必须参数,指定要操作的用户。
    • group:指定用户所在的用户组。
    • groups:指定用户所在的附加组。如果说用户已经存在附加组且还想要继续添加新的附加组时,需要结合append参数使用,否则在默认情况下,当再次使用groups参数设置附加组时,用户原来的附加组会被覆盖。
    • append:添加多个附件组时会用到此参数。
    • shell:指定用户的默认shell。
    • uid:指定用户uid
    • expires:指定用户的过期时间。比如要设置用户过期日为2018年12月31日,那首先要获取到2018年12月31日的unix时间戳,使用命令 ”date -d 2018-12-31 +%s“ 获取到的时间戳为1546185600,然后设置expires=1546185600,表示用户的过期时间为2018年12月31日0点0分,设置成功后,查看远程主机的/etc/shadow文件,对应用户的第八列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在Linux和FreeBSD系统中使用。
    • comment:指定用户的注释信息。
    • state:默认present,当指定为absent是表示删除用户。
    • remove:当state值设为absent时,表示要删除远程主机中的用户,但是不会删除用户家目录等信息,这是因为remove参数的默认值为no,所以想要同时删除家目录,需要将此参数设为yes,等同于:userdel -r
    • force:强制操作,默认为no。当state值设为absent时,将此参数设置为yes,表示强制删除用户,等同于:userdel -f
    • password:指定用户的密码(不能用明文密码)。
    • home:指定用户家目录。
    • createhome:是否创建家目录,默认为yes。
    • update_password:
      • always:update_password默认值为always,表示password指定的值与原用户密码不同时才更新密码。
      • on_create:设为此值表示只为新创建的用户设定密码。
    • generate_ssh_key:此参数默认值为no,如果设置为yes,表示为对应的用户生成ssh密钥对,如果密钥对已存在,则不做操作。
    • ssh_key_file:当generate_ssh_key参数的值为yes时,使用此参数自定义生成ssh私钥的路径和名称,对应公钥会在同路径下生成,公钥名以私钥名开头,以".pub"结尾。
    • ssh_key_comment:当generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置公钥中的注释信息,如果同名的密钥对已经存在,则不做任何操作;当不指定此参数时,默认的注释信息为"ansible-generated on 远程主机的主机名"
    • ssh_key_passphrase:当generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置私钥的密码,如果同名密钥对已经存在,则不做任何操作
    • ssh_key_type:当generate_ssh_key参数的值为yes时,在创建证书时,使用此参数设置密钥对的类型,默认密钥类型为rsa,如果同名的密钥对已经存在,则不做任何操作
  3. 使用:

    # 在ansible上操作。
      0 15:18:53 root@ck-ansible,172.16.2.9:~ # date -d 2021-12-31 +%s
    1640880000
      0 15:21:51 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m user -a 'name=ansibletest createhome=no shell=/sbin/nologin uid=888 comment="ansible test user" expires=1640880000'
    # 在远端主机上验证。
      0 15:22:41 root@ck-node1,172.16.15.21:~ # id ansibletest
    uid=888(ansibletest) gid=1001(ansibletest) 组=1001(ansibletest)
    # 其他操作。
    ## 删除ansibletest账号。
      0 15:22:30 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m user -a 'name=ansibletest state=absent'
    ## 创建ansibletest账号并生成rsa格式的密钥对。
      0 15:24:14 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m user -a 'name=ansibletest generate_ssh_key=yes ssh_key_type=rsa'
      0 15:22:48 root@ck-node1,172.16.15.21:~ # su - ansibletest 
    Attempting to create directory /home/ansibletest/perl5
      0 15:26:02 ansibletest@ck-node1,172.16.15.21:~ $ ll .ssh/
    总用量 8
    -rw------- 1 ansibletest ansibletest 1679 10月  9 15:25 id_rsa
    -rw-r--r-- 1 ansibletest ansibletest  411 10月  9 15:25 id_rsa.pub
    ## 删除用户包括其家目录。
      0 15:25:50 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m user -a 'name=ansibletest state=absent remove=yes force=yes'
    

group

  1. 介绍:管理远程主机上面的组
  2. 参数:
    • name:指定要操作组的名称。
    • state:遇上面解释一致。
    • gid:指定jid
  3. 使用:操作基本与user模块一致。

setup

  1. 介绍:用于收集远程主机的基本信息

  2. 参数:

    • filter:条件过滤
  3. 使用:

      0 15:28:15 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m setup -a 'filter=ansible_memory_mb'
    # 支持使用通配符。
      0 15:29:12 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m setup -a 'filter=*memory*'
    

Files Modules

fetch

  1. 介绍:将远端节点文件拉取至本地。

  2. 参数:

    • src:指定远程拉取的文件,不能是目录。
    • dest:指定本地的目标路径。
  3. 使用:

      0 16:42:29 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m fetch -a 'src=/etc/hosts dest=/tmp' 
      0 16:42:42 root@ck-ansible,172.16.2.9:~ # ll /tmp/ck-node1/etc/hosts
    

copy

  1. 介绍:将本地主机的文件拷贝至远程主机上。

  2. 参数:

    • src:指定本地要拷贝的文件或者目录。
    • dest:指定要拷贝到远程哪个目录下。
    • content:当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。类似于echo。
    • force:拷贝时是否强制覆盖,默认为yes。
    • backup:当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息,默认为no。
    • owner/group:指定文件拷贝到远程主机后的所属主或所属组,前提是用户和组需存在。
    • mode:指定文件拷贝到远程主机后的权限,如mode=0644。
  3. 使用:

    # 将ansible主机的hosts文件拷贝至远端主机。
      0 16:43:00 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m copy -a 'src=/etc/hosts dest=/tmp/ mode=0777'
      0 15:28:19 root@ck-node1,172.16.15.21:~ # cat /tmp/hosts
    172.16.15.21    ck-node1
    172.16.15.22    ck-node2
    172.16.15.23    ck-node3
    # 直接将内容写到远端主机的文件中,并做备份。
      0 16:46:29 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m copy -a "content='I am good boy\n' dest=/tmp/hosts backup=yes"
      0 16:45:09 root@ck-node1,172.16.15.21:~ # ll /tmp/hosts*
    -rwxrwxrwx 1 root root   14 10月  9 16:46 /tmp/hosts
    -rwxrwxrwx 1 root root 1433 10月  9 16:44 /tmp/hosts.23866.2021-10-09@16:46:38~
      0 16:46:43 root@ck-node1,172.16.15.21:~ # cat /tmp/hosts
    I am good boy
    

synchronize

  1. 介绍:用于目录、文件的同步,是rsync的高级封装。在同步大文件或者深层次的目录时比copy模块要快。
  2. 参数:
    • archive:是否开启归档模式,表示以递归方式传输文件,并保持所有文件属性。等同于rsync命令的-a参数。默认值为yes。
    • compress:是否开启压缩,默认为yes。
    • copy_links:同步时是否同步符号链接,默认为no。
    • delete:删除源src中没有但dest目标存在的文件,使两边内容一样,以推送方为主。
    • dest_port:目标主机端口号(配置清单中的ansible_ssh_port优先于此值)
    • src:源文件
    • dest:目标路径
    • exclude:指定排除的目录或者文件
    • dirs:传输目录不进行递归,默认为no。
    • rsync_opts:指定rsync参数。
  3. 使用:跟copy模块的使用大致一致,只是多了一些rsync本身的参数。

file

  1. 介绍:完成一些对文件的基本操作。比如:创建、删除文件或目录、修改文件权限等。

  2. 参数:

    • state:指定操作类型。

      • file:目标文件不存在时不会创建,默认为file。

      • directory:表明要操作的目标是目录。

      • touch:表明操作的目标是文件。

      • link/hard:表明要创建软链接或硬链接。

      • absent:表示删除文件。

    • src:当state为link/hard时,src参数用来指定链接源。

    • path:必须参数。用于指定要操作的文件或者目录,使用dest或者name都可以。

    • force:创建链接文件时,使用此参数强制操作,默认为no。

    • owner/group:指定文件拷贝到远程主机后的所属主或所属组,前提是用户和组需存在。

    • mode:指定文件拷贝到远程主机后的权限,如mode=0644。

    • recurse:当要操作的文件为目录时,此值设为yes表递归操作,默认为no<我自己测试不加recurse=yes也可以递归删除,不知道官网是不是写错了>。

  3. 使用:

    # 在远端主机上创建目录。
      0 16:51:26 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m file -a 'dest=/root/temp/testdir state=directory mode=777'
    # 在远端主机上创建文件。
      0 16:53:03 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m file -a 'dest=/root/info state=touch'
    # 在远端主机主机创建软链接。
      0 16:57:26 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m file -a 'src=/root/info dest=/root/temp/testdir/info state=link force=yes'
    # 递归删除远端目录。
      0 17:00:11 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m file -a 'dest=/root/temp/ state=absent'
    

blockinfile

  1. 介绍:在文件中插入一段文本,并做标记,后续可以根据标记对这段文本做修改、删除操作。

  2. 参数:

    • path:必须参数,指定要操作的目标文件。也可以用dest或者name。
    • block:指定要插入的那一段文本,也可以使用content
    • marker:向目标文件插入文本之后,会自动为这段文本添加一个开始和结束的标记。默认开始标记为:# BEGIN ANSIBLE MANAGED BLOCK;默认结束表示为:END ANSIBLE MANAGED BLOCK。我们可以使用marker自定义开始和结束的标记。
    • state:指定操作类型,默认为present
      • present:会判断指定的标记是否存在,存在则更新文本,不存在则新建文本。
      • absent:如果标记存在,则删除对应段落。
    • insertafter:插入文本时,默认是插入到文件结尾。如果想插入的某一行的后面,可是使用insertafter指定,支持python正则,如果多行文本匹配到正则,会插入到最后一个满足正则的行后面。
    • insertbefore:插入文本时,默认是插入到文件结尾。如果想插入的某一行的前面,可是使用insertbefore指定,支持python正则,如果多行文本匹配到正则,会插入到最后一个满足正则的行后面。
    • backup:修改前是否备份,默认值为no
    • create:当操作的文件不存在时,是否创建新文件。默认值为no。
    • owner/group:指定文件拷贝到远程主机后的所属主或所属组,前提是用户和组需存在。
    • mode:指定文件拷贝到远程主机后的权限,如mode=0644。
  3. 使用:

    # 插入一段文本到远端主机的/tmp/hosts的结尾。
      0 17:13:24 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m blockinfile -a 'dest=/tmp/hosts content="wula wula!!!" marker="#{mark}"'	#{mark}会自动生成begin和end的标记。
      0 17:14:09 root@ck-node1,172.16.15.21:~ # cat /tmp/hosts 
    I am good boy
    #BEGIN
    wula wula!!!
    #END
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------
    # 插入一段内容到远端主机/tmp/hosts文件内容“i am good boy”的前面,注意改变mark标记的名字,标记一样会覆盖。
      0 17:19:50 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m blockinfile -a 'dest=/tmp/hosts content="beng xia ka la ka!!!" insertbefore="^I am" marker="#{mark} 2"'
      0 17:19:52 root@ck-node1,172.16.15.21:~ # cat /tmp/hosts 
    #BEGIN 2
    beng xia ka la ka!!!
    #END 2
    I am good boy
    #BEGIN
    wula wula!!!
    #END
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------
    # 删除标记(根据标记名删除即可)。
      0 17:22:50 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m blockinfile -a 'dest=/tmp/hosts marker="#{mark}" state=absent'
      0 17:22:55 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m blockinfile -a 'dest=/tmp/hosts marker="#{mark} 2" state=absent'
    

  

lineinfile

  1. 介绍:针对目标文件的“行”操作。

  2. 参数:

    • path:必须参数,指定要操作的目标文件。也可以用dest或者name。
    • line:指定文本内容。
    • regexp:使用正则匹配对应的行,替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
    • state:指定操作类型,默认为present.
      • present:会判断目标是否存在,存在则更新文本,不存在则新建文本。
      • absent:如果目标存在,则删除对应段落。
    • backrefs:
    • insertafter:插入文本时,默认是插入到文件结尾。如果想插入的某一行的后面,可是使用insertafter指定,支持python正则,如果多行文本匹配到正则,会插入到最后一个满足正则的行后面。
    • insertbefore:插入文本时,默认是插入到文件结尾。如果想插入的某一行的前面,可是使用insertbefore指定,支持python正则,如果多行文本匹配到正则,会插入到最后一个满足正则的行后面。
    • backup:修改前是否备份,默认值为no
    • create:当操作的文件不存在时,是否创建新文件。默认值为no。
    • owner/group:指定文件拷贝到远程主机后的所属主或所属组,前提是用户和组需存在。
    • mode:指定文件拷贝到远程主机后的权限,如mode=0644。
  3. 使用:

    # 首先在目标主机创建一个测试文件。
      0 17:23:56 root@ck-node1,172.16.15.21:~ # vim testfile
    Hello world
    
    Ansible docs are generated from GitHub sources using Sphinx using a theme provided by Read the Docs
    Module documentation is not edited directly, but is generated from the source code for the modules.
    
    You are reading an unmaintained version of the Ansible documentation.
    Unmaintained Ansible versions can contain unfixed security vulnerabilities (CVE).
    Please upgrade to a maintained version. See the latest Ansible documentation.
    # 该模块默认是在文件内容结尾追加内容。
      0 17:22:55 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m lineinfile -a 'dest=/root/testfile line="I am a good boy"'
    # 将正则匹配的行替换成line指定的内容。
      0 17:27:21 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m lineinfile -a 'dest=/root/testfile line="wula wula!!!" regexp="^Hello"'
    # 在正则匹配到的行的后面添加一行。
      0 17:27:25 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m lineinfile -a 'dest=/root/testfile line="beng xia ka la ka" insertafter="^You"'
      0 17:28:33 root@ck-node1,172.16.15.21:~ # cat testfile
    wula wula!!!
    
    Ansible docs are generated from GitHub sources using Sphinx using a theme provided by Read the Docs
    Module documentation is not edited directly, but is generated from the source code for the modules.
    
    You are reading an unmaintained version of the Ansible documentation.
    beng xia ka la ka
    Unmaintained Ansible versions can contain unfixed security vulnerabilities (CVE).
    Please upgrade to a maintained version. See the latest Ansible documentation.
    I am a good boy
    

find

  1. 介绍:在远程主机中查找符合条件的文件。

  2. 参数:

    • paths:必须参数,指定在哪个目录中查找文件,可以指定多个路径,路径间用逗号隔开,也可以用name或者path。
    • recurse:递归查找目标目录,默认为no。
    • hidden:当hidden参数的值设置为yes时,才会查找隐藏文件。默认为no。
    • file_type:默认值为file,即只查找文件,不会查找软链接和目录。可以用过此参数指定文件类型,支持:any、directory、file、link四种。
    • patterns:指定查找的文件名,支持使用shell(比如通配符)或者正则表达式去匹配文件名称,默认使用shell匹配对应的文件名,如果想要使用python正则去匹配文件名,需要将use_regex参数的值设置为yes。
    • user_regex:设为yes表示使用python正则去匹配文件名,默认值为no。
    • contains:指定所使用的正则表达式。
    • age:根据时间查找文件,以文件的mtime为准。比如,查找三天以前就是age=3d,三天以内是sage=-3d。单位:秒(s)、分(m)、时(h)、天(d)、周(w)。
    • size:根据大小查找文件。比如,大于3M就是size=3m,小于50k就是size=-50k。支持的单位t、g、m、k、b。
    • get_checksum:当符合条件的文件被找到时,会返回对应文件的sha1校验码,如果要查的文件比较大,那么生成校验码的时间也会比较长。
  3. 使用:

    # 查找/etc下名字包含ifcfg-eth的任意文件。
      0 17:31:53 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m find -a 'path=/etc/ patterns="*ifcfg-eth*" recurse=yes hidden=yes file_type=any'
    

replace

  1. 介绍:根据我们指定的正则表达式替换文件中的字符串,文件中所有被正则匹配到的字符串都会被替换。

  2. 参数:

    • path:必须参数,指定要操作的文件,也可以使用dest、name
    • regexp:必须参数,指定python正则表达式。
    • replace:指定最终要替换成的字符串。
    • backup:操作前是否备份,默认为no。
  3. 使用:

    # 将远端主机上testfile文件的good换成bad。
      0 17:33:18 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m replace -a 'path=/root/testfile regexp="good" replace="bad"'
    

archive

  1. 介绍:对目标文件或者目录进行压缩。

  2. 参数:

    • path:指定要压缩的目标文件或者目录。
    • dest:指定压缩包保存的路径。
    • format:指定压缩类型:bz2、gz、zip
    • exclude_pat:压缩时排除哪些文件。
    • remove:压缩完成后是否保留源文件。
  3. 使用:

    # 将远端主机上的testfile进行压缩,不保留原文件。
      0 17:38:24 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m archive -a 'path=/root/testfile dest=/root/testfile.zip format=zip remove=yes'
    

unarchive

  1. 介绍:解压缩

  2. 参数:

    • copy: 默认为yes,表示解压本地压缩文件到远端,设置为no则表示解压远端压缩文件到远端 。
    • creates:指定一个文件名,当该文件存在时,不执行解压指令。
    • src:如果copy=yes,就需要用src来指定压缩文件的路径。
    • dest:指定远程主机上文件解压的路径。
    • exclude:指定不解压的文件或者目录,2.1版本后支持。
    • list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本后支持。
  3. 使用:

    # 将上面使用archive压缩的压缩包解压。
      0 17:41:06 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m unarchive -a 'src=/root/testfile.zip dest=/root/ copy=no'
    

template

  1. 介绍:也有拷贝文件作用,在第11章节jinja2模板中会详细介绍用法。

  2. 参数:

    • owner/group/mode/force/backup:参考上面copy模板的参数。
    • 使用:
      0 15:16:48 root@ck-ansible,172.16.2.9:/server/ops_tools/ops_ansibles # ansible ck-node1 -m template -a "src=/server/ops_tools/ops_ansibles/redis.conf dest=/etc/redis.conf"
    

Commands Modules

command

  1. 介绍:此模块可以帮助我们在远程主机上执行命令。使用此模块在远程主机执行命令时,不会经过远程主机的shell处理,能避免潜在的shell注入风险,所以相对安全。此模块不识别变量或者特殊符号,如果想用这些功能,可以使用后面的shell模块。

  2. 参数:

    • chdir:指定一个目录位置,就是会先进入到这个目录去执行命令。
    • creates:指定一个文件,如果这个文件存在就不执行命令。
    • free_from:必须参数,指定需要远程执行的命令。free_from是一个不存在的参数名,所以只用写要执行的命令就可以了。
    • removes:与creates相反。指定一个文件,当该文件不存在时,不执行命令。
  3. 使用:

      0 18:36:44 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m command -a 'ls -l /root/testfile'
    

shell

  1. 说明:在远程主机上执行命令。此模块在远程主机上执行命令时会经过shell的处理,也支持特殊字符。

  2. 参数:四个参数与上面command一致,还有一个参数说明如下。

    • executable:默认情况下,ansible会调用远程主机的bash shell来执行命令。可以使用此参数指定不同的shell,比如:executable=/bin/cah
  3. 使用:

      0 18:49:06 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m shell -a 'chdir=/tmp echo 522 >info'
    
  4. 标注:虽然shell模块能满足大部分模块的功能,但是不建议这么使用,一方面是不安全,另一方面是显得不清晰。正确的方式应该是针对不同的功能使用不同的模块,比如安装软件使用yum模块,挂载磁盘使用mount模块。

raw

  1. 说明:在远程主机上执行命令。shell和command模块使用需要在被管控主机上安装python,而raw不用,所以此模块通常用在无法安装python的设备上,例如网络设备。
  2. 参数:executable和free_from与上面参数解释一致。

script

  1. 介绍:在远程主机上执行ansible本机的脚本,无需拷贝。

  2. 参数:chdir、creates、removes与上面的参数解释一致。

    • free_from:必须参数。指定需要在远程主机上执行的脚本名。free_from是一个不存在的参数名,所以只用写脚本路径就可以。
  3. 使用:

      0 18:51:07 root@ck-ansible,172.16.2.9:~ # cat test.sh
    #!/bin/bash
    
    echo 'wula wula !!' >/tmp/info.txt
      0 18:51:09 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m script -a '/root/test.sh'
    

Packaging Modules

yum

  1. 介绍:管理远程主机的软件包

  2. 参数:

    • name:用于指定要管理的软件包。
    • state:指定软件包的状态。
      • present:默认值,确保软件包已经安装。
      • installed:与present一样作用。
      • latest:表示安装yum中最新的版本
      • absent:表示删除对应软件包,也可用removed
    • disable_gpg_check:用于禁用对rpm包的公钥gpg验证,默认值为no,表示不禁用验证,设置为yes表示禁用验证,即不验证包,直接安装,在对应的yum源没有开启gpg验证的情况下,需要将此参数的值设置为yes,否则会报错而无法进行安装。
  3. 使用:

    # 我yum源里面的gpgcheck=1,所以用不上disable_gpg_check的参数。
      0 18:51:35 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m yum -a 'name=lrzsz'
    # 同时安装多个包用逗号隔开。
    

yum_repository

  1. 介绍:管理远程主机的yum仓库。

  2. 参数:

    • name:必须参数,用于指定要操作的唯一仓库ID,也就是".repo"配置文件中每个仓库对应的"中括号"内的仓库ID。
    • baseurl:此参数用于设置yum仓库的baseurl,相当月.repo文件中的baseurl。
    • description::此参数用于设置仓库的注释信息,相当于.repo文件中的name。
    • file:设置repo配置文件名称,在不使用此参数的情况下,默认以name加.repo命名。
    • enabled:此参数用于设置是否激活对应的yum源,此参数默认值为yes,表示启用对应的yum源。相当于.repo文件中的enabled。
    • gpgcheck:是否开启rpm包验证功能,默认值为no。对应.repo文件中的gpgcheck。
    • gpgcakey:当gpgcheck参数设置为yes时,需要使用此参数指定验证包所需的公钥。
    • state:默认值为present,当值设置为absent时,表示删除对应的yum源。
  3. 使用:

      0 19:00:17 root@ck-ansible,172.16.2.9:~ # ansible ck-node1 -m yum_repository -a "name=aliepel description='alibaba epel' baseurl=https://mirrors.aliyun.com/epel/7/x86_64/ enabled=yes gpgcheck=yes gpgcakey=https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-7 file=AliCloud-Epel"
      0 19:06:52 root@ck-node1,172.16.15.21:/etc/yum.repos.d # yum repolist | grep -i aliepel
    aliepel              alibaba epel                                         13,674
    

Utilities Modules

debug

  1. 介绍:debug是ansible版本的print语句,可以输出变量的内容或者随意的字符串,有利于playbook执行阶段的调试。

  2. 参数:

    • msg:定义输出的message信息,如果不定义,默认打印“hello world”
    • var:输出变量内容,不能与msg共用。
    • verbosity:debug的级别(默认是0级,全部显示)
  3. 使用:在后续playbook中会举例使用。


写作不易,转载请注明出处,谢谢~~

posted @ 2021-11-04 15:58  loosenc  阅读(114)  评论(0编辑  收藏  举报