1、ansible管理命令

  • Ansible命令行执行方式有Ad-Hoc、Ansible-playbook两种方式:
  • Ad-Hoc主要用于临时命令的执行。
  • Ansibel-playbook可以理解为Ad-Hoc的集合,通过一定的规则编排在一起。
  • 两者的操作也极其简便,且提供了如with_items、failed_when、changed_when、until、ignore_errors等丰富的逻辑条件和Dry-run的Check Mode。但在Chceck Mode下并不真正执行命令,即将执行的操作不会对端服务器产生任何影响,只模拟命令的执行过程是否能正常执行。
  • Ansible管理命令有:
  • ansible:这个命令是日常工作中使用率非常高的命令之一,主要用于临时一次性操作。
  • ansible-doc:Ansible模块文档说明,针对每个模块都有详细的用法说明和应用案例介绍。
  • ansible-galaxy:可以简单的理解为Github或PIP的功能,是Ansible官方一个分享role的功能平台。可以通过ansible-galaxy命令很简单的实现role的分享和安装。
  • ansible-playbook:是日常应用中使用频率最高的命令,其工作机制是,通过读取预先编写好的playbook文件实现批量管理。
  • ansible-pull:Ansible的另一种工作模式(pull模式),Ansible默认使用push模式。
  • ansible-vault:主要用于配置文件加密。
  • ansible-console:让用户可以在ansible-console虚拟出来的终端上像Shell一样使用Ansible内置的各种命令。

1.1、ansible命令

  • Ad-Hoc是官方对Ansible命令的一种称谓。一般称之为“临时操作”或Ansible命令。
  • Ad-Hoc是相对Ansible-playbook而言的,Ansible提供两种完成任务方式:
  • 一种是Ad-Hoc命令集,即ansible命令。解决一些简单或者平时工作中临时遇到的任务,相当于Linux系统命令行下的Shell命令。
  • 另一种是ansible-playbook命令。解决复杂或需固化下来的任务,相当于Linux系统的Shell Scripts。
  • 需要使用Ad-Hoc的场景
  • 情景1:节假日将至,我们需要关闭所有不必要的服务器,并对所有服务器进行节前健康检查。
  • 情景2:临时更新Apache&Nginx的配置文件,且需同时将其分发至所有需更新该配置的Web服务器。
  • 需要使用Ansible-playbook的场景
  • 情景1:新购置的服务器安装完系统后需做一系列固化的初始化工作,诸如:定制防火墙策略、添加NTP时间同步配置、添加EPEL源等。
  • 情景2:业务侧每周定期对生产环境发布更新程序代码。
  • Ansible的命令使用格式如下:
ansible <host-pattern> [options]
  • <host-pattern>是Inventory中定义的主机或主机组,可以为ip、hostname、Inventory中的group组名、具有“.”或“*”或“:”等特殊字符的匹配型字符串。<>表示该选项是必须项,不可忽略。
  • [options]是Ansible的参数选项,[]表示该选项中的参数任选其一。
  • -i INVENTORY, --inventory INVENTORY:指定主机清单文件(默认/etc/ansible/hosts),或以逗号分隔的主机列表。
  • -m MODULE_NAME, --module-name MODULE_NAME:指定要使用的模块(default=command)。
  • -a MODULE_ARGS, --args MODULE_ARGS:模块参数。
  • -f FORKS, --forks FORKS:并发管控主机的数量(default=5)。
  • --list-hosts:列出符合条件的主机列表,不执行任何操作。
  • -M MODULE_PATH, --module-path MODULE_PATH:指定模块存放路径,默认/usr/share/ansible,也可以通过ANSIBLE_LIBRARY设定默认路径。
  • -l SUBSET, --limit SUBSET:指定运行的主机。
  • -C, --check:检查语法。测试执行,不会做任何更改。
  • -v, --verbose:输出更详细的执行过程信息,-vvv可得到执行过程所有信息。
  • -o, --one-line:标准输出至一行。
  • -t TREE, --tree TREE:输出信息至TREE目录下,结果文件以远程主机名命名。
  • -b, --become:使用在远程主机上切换到root用户去执行命令(不提示密码)。要在远程主机提升sudo权限(例如centoshh ALL=(ALL) NOPASSWD:ALL)。
  • -u REMOTE_USER, --user REMOTE_USER:指定远程主机以此用户运行命令。(default=None)。
  • -K, --ask-become-pass:用户的密码(--sudo时使用)
  • --private-key PRIVATE_KEY_FILE, --key-file PRIVATE_KEY_FILE:指定密钥文件。
ansible <host-pattern> -m MODULE_NAME -a MODULE_ARGS -f FORKS -b
  • ansible命令主要使用场景:
  • 非固化需求
  • 临时一次性操作
  • 二次开发接口调用
  • Ansible的返回结果都非常友好,一般会用3种颜色来表示执行结果:红色、绿色、橘黄色。
  • 红色表示执行过程有异常,一般会中止剩余所有的任务。
  • 绿色和橘黄色表示执行过程没有异常,所有任务均正常执行,但橘黄色表示命令执行结束后目标有状态的变化。
  • 不仅ansible命令的执行结果如此设置,Ansible系列命令均如此设置,所以判断Ansible系列命令的执行结果是否正常是一件非常容易的事情,只要看颜色即可。

示例1:

  • 针对特定主机做变更。
//--limit:通过--limit参数限定主机做变更。
]# ansible all -i /etc/ansible/hosts -m shell -a "pwd" --limit "10.1.1.12"
//指定IP:通过指定具体IP限定主机做变更。
]# ansible 10.1.1.12 -m shell -a "pwd"
//用“,”或“:”作分隔符,指定多台机器做变更。
]# ansible 10.1.1.12,10.1.1.13 -m shell -a "pwd"
]# ansible 10.1.1.12:10.1.1.13 -m shell -a "pwd"
//通过“*”泛匹配,更灵活地针对多台主机做变更。
]# ansible 10.1.1.* -m shell -a "pwd"

示例2:

]# ansible all -i /etc/ansible/hosts -m ping
10.1.1.12 | SUCCESS => {    #10.1.1.12是执行命令的主机,Success表示命令执行成功,“>>{}”表示详细返回结果
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false,       #“"changed":false”表示没有对主机做变更。
    "ping": "pong"          #“"ping":"pong"”表示执行了ping命令返回结果为pong。
}
...

1.2、Ansible-playbook命令

  • ansible-playbook:是日常应用中使用频率最高的命令,其工作机制是,通过读取预先编写好的playbook文件实现批量管理。
  • Ansible-playbook的命令使用格式如下:
ansible-playbook playbook.yml
  • Ansible-playbook的参数:
  • -i INVENTORY, --inventory INVENTORY:指定主机清单文件,或以逗号分隔的主机列表。
  • -b, --become:使用在远程主机上切换到root用户去执行命令(不提示密码)。要在远程主机提升sudo权限(例如centoshh ALL=(ALL) NOPASSWD:ALL)。
  • -f FORKS, --forks FORKS:并发管控主机的数量(default=5)。
  • -C, --check:测试执行,不会做任何更改。
  • --syntax-check:检查Playbook中的语法,但不执行。
  • --list-hosts:列出匹配的主机列表,不执行任何操作。
  • --list-tasks:列出所有要执行的任务。
  • --list-tags:列出所有可用的tags。
  • -t TAGS, --tags TAGS:只执行指定的tags任务。
  • --skip-tags SKIP_TAGS:跳过指定的tags任务。
  • --start-at-task START_AT_TASK:从第几条任务开始执行。
  • --step:逐步执行Playbook定义的任务,并经人工确认后继续执行下一步任务。
  • -e EXTRA_VARS, --extra-vars EXTRA_VARS:在Playbook中引入外部变量。
  • -D,--diff:当更新的文件数及内容较少时,该选项可显示这些文件不同的地方,该选项结合-C用会有较好的效果。
  • --ask-vault-pass:使用加密playbook文件时提示输入密码。
  • --force-handlers:即使任务失败,也要运行处理程序
  • --flush-cache:清除缓存。
  • --version:显示程序版本号,配置文件位置,配置模块搜索路径,模块位置,可执行位置和退出
  • --become-user BECOME_USER:以此用户运行操作(default=root)

1.3、ansible-galaxy命令

  • ansible-galaxy:可以简单的理解为Github或PIP的功能,是Ansible官方一个分享role的功能平台。可以通过ansible-galaxy命令很简单的实现role的分享和安装。
  • ansible-galaxy命令可以根据下载量和关注量等信息,查找和安装优秀的Roles。
  • Roles下载地址:https://galaxy.ansible.com
//执行各种角色和收集相关的操作。
]# ansible-galaxy -h
usage: ansible-galaxy [-h] [--version] [-v] TYPE ...
positional arguments:
  TYPE
    collection   管理Ansible Galaxy集合。
    role         管理Ansible Galaxy角色。

]# ansible-galaxy role -h
usage: ansible-galaxy role [-h] ROLE_ACTION ...
positional arguments:
  ROLE_ACTION
    info       查看指定role的详细信息。
    list       列出本地已下载的Roles。
    init       使用role的基本结构初始化新role。
    search     通过标签、平台、作者或关键字搜索Galaxy数据库。
    install    从file(s)、URL(s)或Ansible Galaxy安装role(s)
    remove     删除本地已下载的Roles。
    delete     从Galaxy中移除角色。它不会删除或更改实际的GitHub存储库。
    import     导入一个角色
    setup      管理Galaxy和给定源代码之间的集成。

]# ansible-galaxy collection -h
usage: ansible-galaxy collection [-h] COLLECTION_ACTION ...
positional arguments:
  COLLECTION_ACTION
    init             使用集合的基本结构初始化新的集合。
    build            构建一个Ansible集合神器,可以发布到Ansible Galaxy。
    publish          向Ansible Galaxy发布一个收藏品。
    install          从file(s)、URL(s)或Ansible Galaxy安装集合

1.4、ansible-pull命令

  • ansible-pull:Ansible的另一种工作模式:pull模式(Ansible默认使用push模式)。
  • 适用于以下场景:
  • 有数量巨大的机器需要配置,即使使用高并发线程依旧要花费很多时间;
  • 要在刚启动的、没有网络连接的主机上运行Ansible。
  • ansible-pull命令使用格式如下:
ansible-pull [options] [playbook.yml]
  • [options]是参数选项。
  • -o, --only-if-changed:只有在存储库已更新时才运行剧本(playbook )。
  • -C CHECKOUT, --checkout CHECKOUT:检验branch(分支)/tag(标记)/commit(提交)。存储库模块默认是branch。
  • -d DEST, --directory DEST:从存储库下载到目录
  • -i INVENTORY, --inventory INVENTORY:指定主机清单文件(默认/etc/ansible/hosts),或以逗号分隔的主机列表。
  • -U URL, --url URL:剧本库的URL
  • --check:测试执行,不会做任何更改。
  • --diff:当更改(小)文件和模板时,显示这些文件的差异。
  • -m MODULE_NAME, --module-name MODULE_NAME:存储库模块名,可用值有git(默认)、subversion、hg、bzr。
  • -f, --force:即使无法更新存储库,也要运行剧本
  • --list-hosts:列出将管控的主机列表,不执行任何操作。
  • -u REMOTE_USER, --user REMOTE_USER:以此用户连接远程主机(default=None)。
  • 通过ansible-pull结合Git和crontab一并实现,其原理是:通过crontab定期拉取指定的Git版本到本地,并以指定模式自动运行预先制订好的指令。
*/20 * * * * root /usr/local/bin/ansible-pull -o -C 2.1.0 -d /srv/www/king-gw/ -i /etc/ansible/hosts \
    -U git://git.kingifa.com/king-gw-ansiblepull >> /var/log/ansible-pull.log 2>&1
  • ansible-pull通常在配置大批量机器的场景下会使用,灵活性稍有欠缺,但效率几乎可以无限提升,对运维人员的技术水平和前瞻性规划有较高要求。

1.5、ansible-doc命令

  • ansible-doc是Ansible模块说明文档,针对每个模块都有详细的用法说明及应用案例介绍,和Linux系统的man命令类似。
  • ansible-doc命令使用格式如下:
ansible-doc [options] [module...]
  • 常用参数
//列出支持的模块
ansible-doc -l

//查看模块功能说明
ansible-doc MODULE_NAME

//查看模块的参数
ansible-doc -s MODULE_NAME

1.6、ansible-vault命令

  • ansible-vault主要用于配置文件加密,如编写的Playbook配置文件中包含敏感信息,不希望其他人随意查看,ansible-vault可加密/解密这个配置文件。
  • ansible-vault命令使用格式如下:
]# ansible-vault --help
usage: ansible-vault {create,decrypt,edit,view,encrypt,encrypt_string,rekey} ...
positional arguments:
    encrypt             加密YAML文件
    encrypt_string      加密字符串
    create              创建新的vault加密文件
    edit                编辑vault加密文件
    view                查看vault加密文件
    rekey               重新为vault加密文件密钥
    decrypt             解密

示例:

//加密a.yml文件
ansible-vault encrypt a.yml
//解密a.yml文件
ansible-vault decrypt a.yml

1.7、ansible-console命令

  • ansible-console为用户提供的一款交互式工具,用户可以在ansible-console虚拟出来的终端上像Shell一样使用Ansible内置的各种命令,这为习惯于使用Shell交互方式的用户提供了良好的使用体验。
  • ansible-console主要是针对1.X版本中ansible-shell工具而研发的,目前官网还没有对ansible-console进行详细的用法说明,最新版本的Ansible软件包也没有对应的man文档说明。

2、Ansible常用模块

2.1、ansible-doc命令

  • ansible-doc是Ansible模块说明文档,针对每个模块都有详细的用法说明及应用案例介绍,和Linux系统的man命令类似。
  • ansible-doc命令使用格式如下:
ansible-doc [options] [module...]
  • 常用用法
//列出支持的模块
ansible-doc -l
 
//查看模块功能说明
ansible-doc MODULE_NAME
 
//查看模块的参数(模块的参数,带等号的是必选的,不带的是可选的)
ansible-doc -s MODULE_NAME

2.2、ping模块

  • 判断远程主机是否在线。

示例:

]# ansible all -i /etc/ansible/hosts -m ping
10.1.1.12 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
...

2.3、command模块

  • command模块是Ansible默认模块,主要在远程主机执行Linux基础命令,但不用shell解析。
  • command模块不支持变量(如$HOME)、重定向、管道符等,比如“<”,“>”,“|”,“;”和“&”这些符号不会生效。如果需要这些功能,可以使用[shell]模块。
  • 常用参数:
  • chdir:执行命令前,切换到此目录。(type: path,[Default: (null)])
  • creates:当文件名或(从2.0开始)glob模式存在时,不执行该命令(type: path,[Default: (null)])
  • removes:当文件名或(从2.0开始)glob模式不存在时,不执行该命令(type: path,[Default: (null)])
  • warn:启用或禁用任务警告。如果设定了false,不会告警。(type: bool,[Default: True])
  • free_from:需要执行的脚本,一般使用Ansible的-a参数代替。( [Default: (null)],type: str)

示例:

ansible all -m command -a "ls chdir=/"
//如果a.txt文件存在,该命令就不执行
ansible all -m command -a "ls chdir=/ creates=a.txt"
//如果a.txt文件不存在,该命令就不执行
ansible all -m command -a "ls chdir=/ removes=a.txt"

//禁止告警
ansible all -m command -a "mkdir /test/aaa warn=false"

2.4、shell模块

  • shell模块与command模块类似,可以在远程主机上执行命令。但与command模块不同的是,shell模块在远程主机中执行命令时,会经过远程主机上的 /bin/sh程序处理。
  • 常用参数:
  • chdir:执行命令前,切换到此目录。(type: path,[Default: (null)])
  • creates:当文件名或(从2.0开始)glob模式存在时,不执行该命令(type: path,[Default: (null)])
  • removes:当文件名或(从2.0开始)glob模式不存在时,不执行该命令(type: path,[Default: (null)])
  • warn:启用或禁用任务警告。如果设定了false,不会告警。(type: bool,[Default: True])
  • free_from:需要执行的脚本,一般使用Ansible的-a参数代替。( [Default: (null)],type: str)
  • executable:切换其他shell来执行命令,需要使用命令的绝对路径,例如/bin/bash

示例:

ansible all -m shell -a "ls chdir=/"
//如果a.txt文件存在,该命令就不执行
ansible all -m shell -a "ls chdir=/ creates=a.txt"
//如果a.txt文件不存在,该命令就不执行
ansible all -m shell -a "ls chdir=/ removes=a.txt"

//禁止告警
ansible all -m shell -a "mkdir /test/aaa warn=false"

//shell命令可以使用“|”符号
ansible all -m shell -a "echo hengha | passwd --stdin testuser"
//shell命令可以使用其他shell
ansible all -m shell -a "echo hengha | passwd --stdin testuser excutable=/bin/bash"

2.5、copy模块

  • copy模块将文件从本地或远程计算机复制到远程计算机上的某个位置。
  • copy模块可以复制单个文件或少量文件。
  • synchronize模块可以复制大量的文件,嵌套几层的目录。
  • unarchive模块可以复制一个归档,然后展开它。
  • 常用参数
  • dest=:目标路径(文件或目录)。源是目录,目标也必须是目录。(type: path)
  • src:源路径(文件或目录)。(type: path,[Default: (null)])
  • 将本地的path复制到远程计算机上
  • 源路径是目录时,默认做递归复制。若以“/”结尾,则只复制目录下的内容,不复制目录本身。若不以“/”结尾,则递归复制目录。
  • content:源内容。(type: str,[Default: (null)])
  • 当不使用src指定拷贝的文件时,可以使用content直接指定文件内容。但仅当dest为文件时才有效,如果文件不存在,会创建该文件。
  • src与content两个参数必有其一,否则会报错。
  • backup:是否备份文件(带有时间戳)。(type: bool,[Default: False])
  • 当为true时,会先备份远程主机的文件,然后再将ansible主机中的文件拷贝到远程主机。
  • force:是否替换远程文件。(type: bool,[Default: True])
  • 如果'yes',当内容与源文件不同时,远程文件将被替换。
  • 如果'no',则只有在目标文件不存在时,才会传输该文件。
  • remote_src:是否使用远程计算机上的src(type: bool,[Default: False])
  • 如果为“yes”,将文件从远程计算机复制到远程计算机上的某个位置
  • 如果为“no”,将文件从本地复制到远程计算机上的某个位置
  • mode:指定文件或目录复制到远程计算机后的权限。
  • 如果想将权限设置为“rw-r--r--”,则可以使用mode=0644。如果想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
  • owner:指定文件或目录复制到远程计算机后的属主。
  • 远程主机上必须有对应的用户,否则会报错。
  • group:指定文件或目录复制到远程计算机后的属组。
  • 远程主机上必须有对应的组,否则会报错。

示例:

//将文件从本地复制到远程计算机
ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab.ansible"
//将文件从远程计算机复制到远程计算机
ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab.ansible remote_src=yes"

//将修改到远程计算机的文件
ansible all -m copy -a "content='hi there\n' dest=/tmp/fstab.ansible backup=true"

2.6、fetch模块

  • fetch模块与copy模块类似,但作用与copy模块相反。
  • fetch模块将文件从远程计算机复制到本地。远程主机不能指定多个。
  • 常用参数
  • src=:源路径。远程计算机上的一个文件,不能是目录。
  • dest=:目标路径。保存文件的本地目录。
  • 例如,如果“dest”目录是“/backup”,那么主机“host.example.com”上名为“/etc/profile”的“src”文件将被保存到“/backup/host.example.com/etc/profile”中。
  • flat:覆盖将文件保存到hostname/path/to/file目录的默认行为,而是直接将文件保存到本地目录中。
  • 如果多个主机具有相同的文件名,则每个主机的文件将被覆盖,最后只会存在一个文件。

示例1:

//将文件复制到本地目录
]# ansible all -m fetch -a "src=/etc/fstab dest=/backup/"

//查看目录结构
]# tree /backup/
/backup/
├── 10.1.1.12
│   └── etc
│       └── fstab
└── 10.1.1.13
    └── etc
        └── fstab

示例2:

//将文件复制到本地目录
]# ansible all -m fetch -a "src=/etc/fstab dest=/backup/ flat=yes"

//查看目录结构
]# tree /backup/
/backup/
└── fstab

2.7、file模块

  • file模块设置文件、符号链接或目录的属性。比如创建文件或目录、删除文件或目录、修改文件权限等。
  • 常用参数
  • path=:指定要操作的远程计算机上的文件或目录(Aliases: dest, name)。(type: path)
  • state:此参数非常灵活,其对应的值需要根据情况设定。(Choices: absent、directory、file、hard、link、touch。[Default: file])
  • 如果state=directory,可以创建或修改目录(递归创建)。
  • 如果state=touch,可以创建或修改文件时。
  • 如果'path'不存在,将创建一个空文件。
  • 如果state=link,可以创建或修改软链接文件时。
  • 如果state=hard,可以创建或修改硬链接文件时。
  • 如果state=file
  • 如果没有任何其他选项,它主要作为'stat'工作,并将返回'path'的当前状态。
  • 如果有其他选项(例如' mode'),文件也会被修改,但如果它不存在就不会被创建
  • 如果state=absent
  • 如果'path'不存在,不会导致失败,因为状态没有改变。
  • 如果'path'存在,将删除目录(递归)、文件、符号链接。
  • 在目录的情况下,如果声明了'diff',您将看到删除的文件和文件夹列在'path_contents'下。
  • recurse:是否递归操作目录。(type: bool,[Default: False])
  • 只适用于'state=directory'。
  • 如果recurse为yes,递归修改目录中文件的属性。
  • src:指明软链或硬链链接哪个文件。(type: path,[Default: (null)])
  • 只适用于'state=link'和'state=hard'。
  • force:强制创建符号链接。(type: bool,[Default: False])
  • 在两种情况下强制创建符号链接:源文件不存在(但稍后会出现),目标已经存在,并且是一个文件(因此,需要解除“path”文件的链接,并创建指向“src”文件的符号链接来代替它)。
  • mode:指定文件或目录复制到远程计算机后的权限。
  • 如果想将权限设置为“rw-r--r--”,则可以使用mode=0644。如果想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
  • owner:指定文件或目录复制到远程计算机后的属主。
  • 远程主机上必须有对应的用户,否则会报错。
  • group:指定文件或目录复制到远程计算机后的属组。
  • 远程主机上必须有对应的组,否则会报错。

示例:

//创建目录
ansible all -m file -a "path=/test/dir state=directory" -b
//创建文件
ansible all -m file -a "path=/test/hi.txt state=touch" -b

//递归删除目录
ansible all -m file -a "path=/test/ state=absent" -b

//修改文件属性
ansible all -m file -a "path=/test/hi.txt owner=centoshh group=centoshh mode=666"
//修改目录属性
ansible all -m file -a "path=/test state=directory recurse=yes owner=centoshh group=centoshh mode=666"

2.8、blockinfile模块

  • blockinfile模块可以在指定的文件中插入“一段文本”,并且这段文本会被标记(被标记的“一段文本”,以后称为“文本块”)。也就是,在这段文本上做了记号,以便以后可以通过“标记”找到这段文本,然后修改或者删除它。
  • 常用参数
  • path=:指定要操作的文件(Aliases: dest, destfile, name)。(type: path)
  • state:更新或删除的“文本块”。(type: str,[Default: present])
  • 默认情况下(state=present),更新“文本块”。
  • 如果state=absent,从文件中删除文本块。
  • block:指定要插入的“文本块”(Aliases: content)。(type: str,[Default: ])
  • 如果它缺失或为空字符串,该文本块将被删除。
  • insertafter:将“文本块”插入到文件的指定位置。(type: str,[Default: EOF],(Choices: EOF, *regex*))
  • 如果insertafter=EOF(默认),会将文本块插入到文件的末尾。
  • 如果insertafter=*regex*,会将文本块插入到正则表达式(python正则)最后一次匹配的行之后。如果没有配到行,会将文本块插入到文件的末尾。
  • insertbefore:将“文本块”插入到文件的指定位置。(type: str,[Default: (null)],(Choices: BOF, *regex*))
  • 如果insertbefore=BOF,会将文本块插入到文件的开头。
  • 如果insertbefore=*regex*,会将文本块插入到正则表达式(python正则)最后一次匹配的行之前。如果没有配到行,会将文本块插入到文件的末尾。
  • marker:自定义文本块的标记。
  • 在文件中插入文本块时,ansible会自动为文本块添加两个标记。一个开始标记,一个结束标记。
  • 默认情况下,开始标记是“# BEGIN ANSIBLE MANAGED BLOCK”,结束标记是“# END ANSIBLE MANAGED BLOCK”。
  • 自定义文本块的标记:marker=#{mark} test。开始标记变成了“# BEGIN test”,结束标记变成了“# END test”。
  • {mark}会自动被替换成开始标记和结束标记中的BEGIN和END,这样就可以插入很多文本块了,并为不同的文本块添加不同的标记,下次通过标记就可以找到对应的文本块了。
  • '{mark}'将被替换为'marker_begin'(default="BEGIN")和'marker_end'(default="END")。
  • marker_begin:自定义文本块的开始标记。(type: str,[Default: BEGIN])
  • marker_end:自定义文本块的结束标记。(type: str,[Default: END])
  • backup:是否备份文件(带有时间戳)。(type: bool,[Default: False])
  • 当为true时,会先备份远程主机的文件,然后再将ansible主机中的文件拷贝到远程主机。
  • creates:如果文件不存在,则创建一个新文件。(type: bool,[Default: (null)])
  • mode:指定文件或目录复制到远程计算机后的权限。
  • 如果想将权限设置为“rw-r--r--”,则可以使用mode=0644。如果想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
  • owner:指定文件或目录复制到远程计算机后的属主。
  • 远程主机上必须有对应的用户,否则会报错。
  • group:指定文件或目录复制到远程计算机后的属组。
  • 远程主机上必须有对应的组,否则会报错。

示例:

//##将文件从远程计算机复制到远程计算机
ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab.bak remote_src=yes"

//将文本块插入到文件末尾
ansible all -m blockinfile -a "path=/tmp/fstab.bak block='hengha line1\nhengha line2'"
//将文本块插入到文件开头
ansible all -m blockinfile -a "path=/tmp/fstab.bak block='hengha line1\nhengha line2' insertafter=BOF"

//将文本块插入到文件指定的行之后(python正则)
ansible all -m blockinfile -a "path=/tmp/fstab.bak block='hengha line1\nhengha line2' insertafter='^/dev'"
//将文本块插入到文件指定的行之前(python正则)
ansible all -m blockinfile -a "path=/tmp/fstab.bak block='hengha line1\nhengha line2' insertbefore='^/dev'"

//将文本块插入到文件末尾,并使用自定义标记
ansible all -m blockinfile -a "path=/tmp/fstab.bak block='hengha line1\nhengha line2' marker='#{mark} mark1'"

//删除指定的文本块(删除默认标记的文本块)
ansible all -m blockinfile -a "path=/tmp/fstab.bak state=present"
ansible all -m blockinfile -a "path=/tmp/fstab.bak block=''"
//删除指定的文本块(删除标记是'#{mark} mark1'的文本块)
ansible all -m blockinfile -a "path=/tmp/fstab.bak state=absent marker='#{mark} mark1'"

2.9、lineinfile模块

  • lineinfile模块可以确保“某一行文本”存在于指定的文件中,或者确保从文件中删除指定的“某一行文本”(即确保指定的文本不存在于文件中),还可以根据正则表达式,替换“某一行文本”。
  • 常用参数
  • path=:指定要操作的文件(Aliases: dest, destfile, name)。(type: path)
  • state:替换还是删除匹配到的行(Choices: absent, present)。(type: str,[Default: present])
  • 替换模式state=present
  • 删除模式state=absent
  • 当想要删除对应的文本时,需要将state参数的值设置为absent
  • line:指定要插入/替换到文件中的行(Aliases: value)。(type: str,[Default: (null)])
  • 只适用于'state=present'。
  • 如果设置了backrefs,则可能包含反向引用,如果regexp匹配,则这些反向引用将与regexp捕获组一起展开。
  • regexp:使用正则表达式匹配对应的行(Aliases: regex)。
  • 替换模式state=present,如果可以匹配到多行,则只替换最后一行。如果没有匹配到任何行,该行将按照insertbefore或insertafter设置添加到文件中。
  • 删除模式state=absent,如果可以匹配到多行,这些行都会被删除。
  • insertafter:将“行”插入到文件的指定位置(type: str,(Choices: EOF, *regex*)[Default: EOF])
  • 如果regexp和insertafter同时存在,则只有regexp没有匹配到行时,insertafter才会有效。
  • 不能与backrefs或insertbefore一起使用。
  • 只适用于'state=present'。
  • insertafter=*regex*,会将该行插入到正则表达式的最后一个匹配项之后。如果没有匹配到行,该行会被插入到文件的末尾。
  • 如果要插入到第一个匹配之后,可以使用firstmatch=yes。
  • insertbefore:将“行”插入到文件的指定位置(type: str,(Choices: BOF, *regex*)[Default: (null)])
  • 如果regexp和insertbefore同时存在,则只有regexp没有匹配到行时,insertbefore才会有效。
  • 不能与backrefs或insertafter一起使用。
  • 只适用于'state=present'。
  • insertafter=*regex*,会将该行插入到正则表达式的最后一个匹配项之前。如果没有匹配到行,该行会被插入到文件的末尾。
  • 如果要插入到第一个匹配之前,可以使用firstmatch=yes。
  • backrefs:是否启用正则表达式的捕获组
  • 只适用于'state=present'。
  • 如果backrefs=True,insertbefore和insertafter会被忽略。
  • 如果regexp在文件中匹配不到行,文件将保持不变。
  • 如果regexp可以在文件中匹配到行,line就能对regexp中的分组进行后向引用。
  • backup:是否备份文件(带有时间戳)。(type: bool,[Default: False])
  • 当为true时,会先备份远程主机的文件,然后再将ansible主机中的文件拷贝到远程主机。
  • creates:如果文件不存在,则创建一个新文件。(type: bool,[Default: False])
  • mode:指定文件或目录复制到远程计算机后的权限。
  • 如果想将权限设置为“rw-r--r--”,则可以使用mode=0644。如果想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
  • owner:指定文件或目录复制到远程计算机后的属主。
  • 远程主机上必须有对应的用户,否则会报错。
  • group:指定文件或目录复制到远程计算机后的属组。
  • 远程主机上必须有对应的组,否则会报错。

示例:

//替换匹配到的行
ansible all -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SELINUX=disabled'"
//删除匹配到的行
ansible all -m lineinfile -a "path=/etc/sudoers state=absent regexp='^%wheel'"
//如果regexp不能匹配到,就使用insertafter,
ansible all -m lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' insertafter='^#Listen' line='Listen 8080'"
//使用正则表达式捕获组
ansible all -m lineinfile -a "path=/etc/sudoers regexp='^(# %wheel)(.*)' backrefs=yes line='centoshh1 \2'" -b

2.10、replace模块

  • replace模块根据正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换。
  • 常用参数
  • path=:指定要操作的文件(Aliases: dest, destfile, name)。(type: path)
  • regexp=:指定一个正则表达式(python正则),文件中与正则匹配的字符串将会被替换。
  • replace:指定要替换成的字符串(可以引用捕获组)。如果没有设置,则删除匹配项。
  • after:只替换/删除该字符串之后的被匹配的字符串。可以和before连用。
  • before:只替换/删除该字符串之前的被匹配的字符串。可以和after连用。
  • encoding:用于读写文件的字符编码。[Default: utf-8]
  • backup:是否备份文件(带有时间戳)。(type: bool,[Default: False])
  • 当为true时,会先备份远程主机的文件,然后再将ansible主机中的文件拷贝到远程主机。
  • mode:指定文件或目录复制到远程计算机后的权限。
  • 如果想将权限设置为“rw-r--r--”,则可以使用mode=0644。如果想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
  • owner:指定文件或目录复制到远程计算机后的属主。
  • 远程主机上必须有对应的用户,否则会报错。
  • group:指定文件或目录复制到远程计算机后的属组。
  • 远程主机上必须有对应的组,否则会报错。

示例:

//替换SELinux,但行开头不是SELinux
ansible all -m replace -a "path=/etc/selinux/config regexp='(.{1,})(SELinux)' replace='\1hengha'"

//替换SELinux,但行开头不是SELinux,并且要在'permissive -'和'of enforcing'之间的被匹配到的字符串
ansible all -m replace -a "path=/etc/selinux/config regexp='(.{1,})(SELinux)' replace='\1hengha' after='permissive -' before='of enforcing'"

2.11、template模块

  • template模块可以基于模板在远程计算机上生成一个文件。
  • 模板说明文档:http://jinja.pocoo.org/docs/
  • 模板格式说明:http://jinja.pocoo.org/docs/templates/
  • 在模板中可以使用的其他变量。
  • ansible_managed:(可通过ansible.cfg中的defaults配置)包含一个字符串,可以用来描述模板名称、主机、模板文件的修改时间和所有者uid。
  • template_host:模板所在机器的节点名称。
  • template_uid:所有者的用户id。
  • template_path:模板的路径。
  • template_fullpath:模板的绝对路径。
  • template_destpath:模板在远程系统上的路径(在2.8中添加)。
  • template_run_date:模板被渲染的日期。
  • 常用参数
  • src=:模板的路径
  • dest=:基于模板生成的文件,保存在远程计算机上的位置
  • force:是否替换远程文件。(type: bool,[Default: True])
  • 如果'yes',当内容与源文件不同时,远程文件将被替换。
  • 如果'no',则只有在目标文件不存在时,才会传输该文件。
  • mode:指定文件或目录复制到远程计算机后的权限。
  • 如果想将权限设置为“rw-r--r--”,则可以使用mode=0644。如果想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
  • owner:指定文件或目录复制到远程计算机后的属主。
  • 远程主机上必须有对应的用户,否则会报错。
  • group:指定文件或目录复制到远程计算机后的属组。
  • 远程主机上必须有对应的组,否则会报错。

2.12、cron模块

  • cron模块可以管理远程主机中的计划任务和anacrontab的环境变量(不是系统环境变量)。
  • 常用参数:
  • state:修改/删除计划任务或环境变量。(Choices: absent, present)[Default: present]
  • 如果state=present,修改计划任务或环境变量。
  • 如果state=absent,删除计划任务或环境变量。
  • env:设置环境变量。(type: bool,[Default: False])
  • name:设置计划任务或环境变量的名称。
  • 计划任务的名称会在注释中显示,当不指定计划任务的名称时,ansible会默认为计划任务添加一个名称:“#Ansible: None”。例如如果指定计划任务的名称为test,那么注释的内容为#Ansible: test。
  • 计划任务的名称应该是唯一的,方便以后根据名称修改或删除计划任务。
  • 如果设置了env,则是环境变量的名称。
  • job:指定计划的任务中需要实际执行的命令或者脚本
  • 如果设置了env,则是环境变量的值。
  • cron_file:使用指定的文件,而不是单个用户的crontab。
  • 如果是相对路径,会在/etc/cron.d中。
  • 如果是绝对路径,通常是/etc/crontab。
  • 要使用cron_file参数,还必须指定user。
  • user:用于设置当前计划任务属于哪个用户,当不使用此参数时,默认为管理员用户。
  • disabled:是否禁用计划任务(根据计划任务的名称)
  • 只适用于'state=present'。
  • backup:修改crontab之前是否创建备份。(type: bool,[Default: False])
  • 备份的位置在‘backup_file’变量中返回。
  • minute:设置计划任务中的分钟( 例如0-59、*、*/2)。[Default: *]
  • hour:设置计划任务中的小时(例如0-23、*、*/2)。[Default: *]
  • day:设置计划任务中的月份的几号(例如1-31、*、*/2)。[Default: *]
  • month:设置计划任务中的月份(例如1-12、*、*/2)。[Default: *]
  • weekday:设置计划任务中的周几(例如0-6表示星期日—星期六、*)。[Default: *]
  • special_time:计划任务的时间设定格式为@reboot或者@hourly。
  • @reboot表示重启时执行
  • @hourly表示每小时执行一次,相当于设置成”0 0 * * *”
  • special_time可用值有:hourly(每时)、daily(每天)、monthly(每月)、yearly(每年)、annually(每年,与yearly相同)、weekly(每周)、reboot(重启后)。[Default: (null)]

示例:

//在用户的crontab中的顶部添加一个环境变量
ansible all -m cron -a "state=present env=yes name=PATH job=/opt/bin"
//在用户的crontab中的变量PATH之后添加一个环境变量
ansible all -m cron -a "state=present env=yes name=APP_HOME job=/srv/app insertafter=PATH"

//删除crontab中的环境变量
ansible all -m cron -a "state=absent env=yes name=PATH"

//在用户的crontab中添加一个计划任务
ansible all -m cron -a "name='ansible hh1' minute=1 job='echo hengha2'"
ansible all -m cron -a "name='压缩日志' minute=5 hour=3  job='sudo sh /opt/sh/log.sh gzip_log'"
//删除计划任务
ansible all -m cron -a "state=absent name='ansible hh1'"

2.13、yum_repository模块

  • yum_repository模块可以管理(添加或删除)远程主机上的yum仓库。如果要更新现有的存储库定义,可以使用ini_file模块。
  • 常用参数
  • state:添加或删除yum仓库。(Choices: absent, present)[Default: present]
  • 如果state=present,添加yum仓库。
  • 如果state=absent,删除yum仓库。
  • name=:指定要操作的仓库ID(唯一)。“.repo”配置文件中的仓库ID,也就是“中括号”内的。
  • description:设置仓库的注释信息。“.repo”配置文件中的“name字段”。
  • baseurl:设置yum仓库的baseurl。
  • file:设置yum配置文件的名称。即“.repo”配置文件名的前缀,默认以name参数作为“.repo”配置文件名的前缀。
  • 但一个“.repo”配置文件中可以存在多个yum源。
  • enabled:是否启用对应的yum源。(type: bool,[Default: yes])
  • 如果enabled=yes,则启用对应的yum源。
  • 如果enabled=no,则不启用对应的yum源。
  • gpgcheck:设置是否开启GPG签名验证功能。(type: bool,[Default: (null)])
  • 如果gpgcheck=no,则不启用GPG签名验证。
  • 没有默认设置。如果未设置该值,将使用/etc/yum.conf中的系统设置或no的系统默认值。
  • gpgcakey:当gpgcheck=yes时,需要使用此参数指定验证包所需的公钥。

示例:

//创建一个repo文件,文件名默认是“name=test-epel”
ansible all -m yum_repository -a 'name=test-epel description="my EPEL YUM repo" baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ enabled=yes gpgcheck=no'
//向test-epel.repo(“file=test-epel”)中的文件添加一个yum源test-epel
ansible all -m yum_repository -a 'name=test-epel2 description="my EPEL YUM repo" baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ enabled=yes gpgcheck=no file=test-epel'

//查看repo文件
]# cat /etc/yum.repos.d/test-epel.repo 
[test-epel]
baseurl = https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
enabled = 1
gpgcheck = 0
name = my EPEL YUM repo

[test-epel2]
baseurl = https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
enabled = 1
gpgcheck = 0
name = my EPEL YUM repo

//删除test-epel.repo文件中的一个yum源test-epel2
ansible all -m yum_repository -a 'state=absent name=test-epel2 file=test-epel'

2.14、yum模块

  • yum模块可以在远程主机上通过yum管理(安装、升级、降级、删除、列出)软件包。
  • 这个模块只适用于Python 2。如果需要支持Python 3,可以使用dnf模块。
  • 常用参数
  • state:安装或卸载(Choices: absent, installed, latest, present, removed)[Default: (null)]
  • present和installed将安装指定的包。
  • latest将安装最新的指定的包
  • absent和removed将删除指定的包。
  • Default是None,但是实际上默认操作是present,除非此模块启用了autoremove选项,否则会推断为absent。
  • name:程序包名称,可以带版本号,比如nginx-1.0。(Aliases: pkg),type: list。
  • 当使用state=latest时,它可以是“*”,这意味着运行yum -y update。
  • disable_gpg_check:是否禁用对rpm包的公钥gpg验证。(type: bool,[Default: no])
  • 如果disable_gpg_check=yes表示禁用验证,直接安装。
  • 仅当state为present或latest时才生效。
  • enablerepo:临时启用的一个或多个repository(yum源)。
  • disablerepo:临时禁用的一个或多个repository(yum源)。

示例:

//安装nginx
ansible all -m yum -a "name=nginx"

//安装nginx
ansible all -m yum -a "state=absent name=nginx"

//启用/禁止repository
ansible all -m yum -a "name=telnet disable_gpg_check=yes enablerepo=local"
ansible all -m yum -a "name=telnet disable_gpg_check=yes disablerepo=local"

3.15、service模块

  • service模块可以管理远程主机上的服务。例如,启动或停止nginx服务。
  • 常用参数
  • name=:服务名。centos6是脚本的名称,centos7是unite file名称。
  • state:用于指定服务的状态。(Choices: reloaded, restarted, started, stopped)[Default: (null)]
  • started启动服务,是幂等的,除非必要,否则不会执行。
  • stopped停止服务,是幂等的,除非必要,否则不会执行。
  • restart总会重启服务。
  • reloaded总会重新加载配置。
  • 至少指定state和enabled中的一个
  • enabled:是否将服务设置为开机自动启动。(type: bool,[Default: (null)])
  • 如果enabled=yes,表示将对应服务设置为启用开机自动启动。
  • 如果enabled=no,表示将对应服务设置为禁止开机自动启动。
  • runlevel:在那些级别下启用/禁止开机自动启动。

示例:

//将nginx设置为开机自启
ansible all -m service -a "enabled=yes name=nginx"
//启动nginx服务
ansible all -m service -a "state=started name=nginx"
//停止nginx服务
ansible all -m service -a "state=stopped name=nginx"

3.16、group模块

  • group模块可以管理远程主机上的用户组。
  • 常用参数
  • state:创建或删除组。(type: str,(Choices: absent, present)[Default: present])
  • 如果state=present,创建组
  • 如果state=absent,删除组
  • name=:指定要操作的组名称。
  • gid:指定用户组的gid。
  • system:是否创建为系统组。(type: bool,[Default: False])
  • 如果system=yes,创建为系统组。

示例:

//创建组
ansible all -m group -a "state=present name=somegroup" -b
//删除组
ansible all -m group -a "state=absent name=somegroup" -b

3.17、user模块

  • user模块可以管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作。
  • 常用参数
  • state:创建或删除用户。(type: str,(Choices: absent, present)[Default: present])
  • 如果state=present,创建用户
  • 如果state=absent,删除用户
  • name=:指定要操作的用户名称(Aliases: user)。
  • system:是否创建为系统用户。(type: bool,[Default: False])
  • 如果system=yes,创建为系统用户。
  • 不能对现有用户进行设置。
  • uid:指定用户的uid。
  • group:指定用户的基本组。(type: str)
  • groups:指定用户的附加组。(type: list)
  • 注意,如果说用户已经存在并且已经拥有多个附加组,那么如果想要继续添加新的附加组,需要结合append参数使用,否则在默认情况下,当再次使用groups参数设置附加组时,用户原来的附加组会被覆盖。
  • append:新增或更新附加组。(type: bool,[Default: False])
  • 如果append=no,将会更新附加组,即将用户只添加到groups指定的组中,并从所有其他组中删除。
  • 如果append=yes,将会新增附加组,即将用户也添加到groups指定的组中。
  • shell:指定用户的默认shell
  • comment:用户注释信息
  • expires:指定用户的过期时间,相当于设置/etc/shadow文件中的的第8列。
  • 如果要设置用户的过期日期为2018年12月31日,那么首先要获取到2018年12月31日的unix时间戳(“date -d 2018-12-31 +%s”),获取到的时间戳为1546185600,即将expires=1546185600,表示用户的过期时间为2018年12月31日0点0分,设置成功后,查看远程主机的/etc/shadow文件,对应用户的第8列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix 时间戳的值会自动转换为天数),目前此参数只支持在Linux和 FreeBSD系统中使用。
  • home:指定用户家目录
  • move_home:是否将原来的家目录中的文件移动到新的目录下。(type: bool,[Default: False])
  • 如果move_home=yes,将原来的家目录中的文件移动到新的目录下。
  • remove:删除用户时,是否同时删除其家目录。。
  • 只适用于'state=absent'。
  • 如果remove=yes,在删除用户的同时,会删除用户的家目录。
  • password:指定用户的密码
  • 要在Linux系统上创建一个禁用的帐户,可以将其设置为“!”或“*”。
  • 这个密码不能是明文的密码,而是一个对明文密码”加密后”的字符串,相当于/etc/shadow文件中的密码字段,是一个对明文密码进行哈希后的字符串。
  • update_password:当新设置的密码与旧密码不同时,是否更新密码(type: str,(Choices: always, on_create)[Default: always])
  • 如果update_password=always,如果password设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码。
  • 如果update_password=on_create,如果password设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定。
  • 如果是新创建的用户,即使此参数设置为on_create,也会将用户的密码设置为password参数对应的值。
  • generate_ssh_key:是否为该用户生成SSH密钥。(type: bool,[Default: False])
  • 如果generate_ssh_key=yes,表示为用户生成ssh密钥对,默认存放在用户家目录的./ssh目录中。不会覆盖现有的SSH密钥,除非与' force=yes'一起使用。
  • ssh_key_file:当generate_ssh_key=yes时,使用此参数自定义生成ssh私钥的路径和名称。

示例:

//创建用户
ansible all -m user -a "state=present name=testuse uid=1040 comment='John Doe' shell=/bin/sh"
//删除用户
ansible all -m user -a "state=absent name=testuse remove=yes"

3.18、script模块

  • script模块可以在远程主机上执行ansible管理主机上的脚本。也就是说,脚本一直在ansible管理主机本地,不需要手动拷贝到远程主机后再执行。
  • 常用参数
  • free_form:指定要执行的脚本,脚本位于ansible管理主机本地。
  • 注意,并没有一个参数名叫free_form,一般使用Ansible的-a参数代替。
  • chdir:执行命令前,切换到此目录。
  • creates:当文件名存在时,不执行该命令
  • removes:当文件名不存在时,不执行该命令
  • executable:切换其他shell来执行命令,需要使用命令的绝对路径,例如/bin/bash

示例:

ansible all -m script -a "/root/test.sh"
ansible all -m script -a "/root/test.sh chdir=/tmp creates=t.txt"
ansible all -m script -a "/root/test.sh chdir=/tmp removes=t.txt"

3.19、setup模块

  • setup模块由剧本自动调用,以收集关于远程主机的有用变量,这些变量可以在剧本中使用。也可以通过/usr/bin/ansible'直接执行,以检查主机有哪些变量可用。
  • 常用参数
  • filter:用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息(shell样式是通配符)。
  • gather_subset:如果提供,则将收集到的附加事实限制到给定的子集。
  • 取值为:all、min、hardware、network、virtual、ohai、facter。[Default: all]
  • 可以指定一个值列表,也可以用‘!’来指定不应该收集特定的子集,例如`!hardware,!network,!virtual,!ohai,!facter’。
  • 其他常用信息列出如下:
  • 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_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个数(只显示总的个数)。

示例:

//查看所有的信息
ansible 10.1.1.12 -m setup
//仅查看ansible_all_ipv4_addresses的信息
ansible 10.1.1.12 -m setup -a "filter=ansible_all_ipv4_addresses"
//仅查看被*mb匹配的信息
ansible 10.1.1.12 -m setup -a "filter=*mb"

3.20、archive和unarchive模块

//压缩远程主机上的yum.repos.d目录,压缩包的起始目录是yum.repos.d/
ansible all -m archive -a "path=/etc/yum.repos.d dest=/root/yum.tar.gz format=gz" -b
//压缩远程主机上的yum.repos.d目录,压缩包不包含yum.repos.d目录
ansible all -m archive -a "path=/etc/yum.repos.d/ dest=/root/yum.tar.gz format=gz" -b

//将远程主机上的压缩包解压到远程主机上
ansible all -m unarchive -a "src=/root/yum.tar.gz dest=/root/test/ remote_src=yes"
//将ansible主机上的压缩包解压到远程主机上
ansible all -m unarchive -a "src=/root/yum.tar.gz dest=/root/test/"

1

#                                                                                                                          #