Ansible系列基础篇 1.5、常用模块

 一、ping

功能:ping主机是否通。

# 示例
ansible all -m ping

  

二、copy

功能:将ansible主机上的文件拷贝到远程主机中。

参数  说明
 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表示

示例:u=rwX,g=rX,o=rX  ;  u=rwX,g=,o= (如果权限为0,可以等号后内容不写,但要加上这格式

# 示例
# 把~/test.txt文件,拷贝到/usr/local/logs/目录下
ansible all -m copy -a "src=~/test.txt dest=/usr/local/logs/"

# 把当前目录下authorized_keys文件,拷贝到/home/servyou/.ssh/authorized_keys
- name: servyou账号,上传authorized_keys文件
  copy: 
        src: authorized_keys
        dest: /home/servyou/.ssh/authorized_keys
        owner: servyou
        group: servyou
        mode: '0600'

  

 三、file

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

参数 说明
path 必须参数,用于指定要操作的文件或目录,在之前版本的ansible中,使用dest参数或者name参数指定要操作的文件或目录,为了兼容之前的版本,使用dest或name也可以
state 此参数非常灵活,此参数对应的值需要根据情况设定,比如,当我们需要在远程主机中创建一个目录的时候,我们需要使用path参数指定对应的目录路径,假设,我想要在远程主机上创建/testdir/a/b目录,那么我则需要设置path=/testdir/a/b,但是,我们无法从"/testdir/a/b"这个路径看出b是一个文件还是一个目录,ansible也同样无法单单从一个字符串就知道你要创建文件还是目录,所以,我们需要通过state参数进行说明,当我们想要创建的/testdir/a/b是一个目录时,需要将state的值设置为directory,"directory"为目录之意,当它与path结合,ansible就能知道我们要操作的目标是一个目录,同理,当我们想要操作的/testdir/a/b是一个文件时,则需要将state的值设置为touch,当我们想要创建软链接文件时,需将state设置为link,想要创建硬链接文件时,需要将state设置为hard,当我们想要删除一个文件时(删除时不用区分目标是文件、目录、还是链接),则需要将state的值设置为absent,"absent"为缺席之意,当我们想让操作的目标"缺席"时,就表示我们想要删除目标
src 当state设置为link或者hard时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源
force 当state=link的时候,可配合此参数强制创建链接文件,当force=yes时,表示强制创建链接文件,不过强制创建链接文件分为两种情况,情况一:当你要创建的链接文件指向的源文件并不存在时,使用此参数,可以先强制创建出链接文件。情况二:当你要创建链接文件的目录中已经存在与链接文件同名的文件时,将force设置为yes,回将同名文件覆盖为链接文件,相当于删除同名文件,创建链接文件。情况三:当你要创建链接文件的目录中已经存在与链接文件同名的文件,并且链接文件指向的源文件也不存在,这时会强制替换同名文件为链接文件
owner 用于指定被操作文件的属主,属主对应的用户必须在远程主机中存在,否则会报错
group 用于指定被操作文件的属组,属组对应的组必须在远程主机中存在,否则会报错
mode 用于指定被操作文件的权限,比如,如果想要将文件权限设置为"rw-r-x---",则可以使用mode=650进行设置,或者使用mode=0650,效果也是相同的,如果你想要设置特殊权限,比如为二进制文件设置suid,则可以使用mode=4700,很方便吧
recurse 当要操作的文件为目录,将recurse设置为yes,可以递归的修改目录中文件的属性
# 示例
# 在主机上创建一个名为testfile的文件,如果testfile文件已经存在,则会更新文件的时间戳,与touch命令的作用相同
ansible all -m file -a "path=/usr/local/testfile state=touch"

# 在主机上创建一个名为testdir的目录,如果testdir目录已经存在,则不进行任何操作
ansible all -m file -a "path=/usr/local/testdir state=directory"

# 在主机上为testfile文件创建软链接文件,软链接名为linkfile
ansible all -m file -a "path=/usr/local/linkfile state=link src=/usr/local/testfile"

# 在主机上为testfile文件创建硬链接文件,硬链接名为hardfile
ansible all -m file -a "path=/usr/local/hardfile state=hard src=/usr/local/testfile"

# 在创建链接文件时,如果源文件不存在,或者链接文件与其他文件同名时,强制覆盖同名文件或者创建链接文件,参考上述force参数的解释。
ansible all -m file -a "path=/usr/local/linkfile state=link src=/usr/local/testfile force=yes"
ansible all -m file -a "path=/usr/local/hardfile state=hard src=/usr/local/testfile force=yes"

# 删除远程机器上的指定文件或目录
ansible all -m file -a "path=/usr/local/testdir state=absent"

# 在创建文件或目录的时候指定属主、属组、权限,或者修改远程主机上的文件或目录的属主、属组、权限。
ansible all -m file -a "path=/usr/local/testfile owner=root group=root mode=0755"
ansible all -m file -a "path=/usr/local/testfile owner=root group=root mode=mode=u=rwx,g=rx,o=rx"

# 当操作远程主机中的目录时,同时递归的将目录中的文件的属主属组都设置为zsy。
ansible all -m file -a "path=/usr/local/testfile owner=root group=root mode=0755 recurse=yes"

  

 四、command

功能:帮助我们在远程主机上执行命令。

注意:使用command模块在远程主机中执行命令时,不会经过远程主机的shell处理,在使用command模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效,比如"<", ">", "|", ";" 和 "&" 这些符号,如果你需要这些功能,可以参考后面介绍的shell模块,还有一点需要注意,如果远程节点是windows操作系统,则需要使用win_command模块。

参数 说明
free_form 必须参数,指定需要远程执行的命令,需要说明一点,free_form参数与其他参数并不相同,在之前的模块示例中,如果想要使用一个参数,那么则需要为这个参数赋值,举个例子,之前的示例模块中,大多都有path参数,当我们需要指定要操作的文件时,通常需要对path参数赋值,比如,path=/testdir/test,表示我们想要操作/testdir/test文件,但是free_form参数则不同,"free_form"并不是一个"实际存在"的参数名,比如,当我们想要在远程主机上执行ls命令时,我们并不需要写成"free_form=ls" ,这样写反而是错误的,因为并没有任何参数的名字是free_form,当我们想要在远程主机中执行ls命令时,直接写成ls即可,这就是free_form参数的含义,因为command模块的作用是执行命令,所以,任何一个可以在远程主机上执行的命令都可以被称为free_form,如果你还是不明白,看下面的小示例就行了。
chdir 此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。
creates 看到creates,你可能会从字面上理解这个参数,但是使用这个参数并不会帮助我们创建文件,它的作用是当指定的文件存在时,就不执行对应命令,比如,如果/testdir/test文件存在,就不执行我们指定的命令。
removes 与creates参数的作用正好相反,它的作用是当指定的文件不存在时,就不执行对应命令,比如,如果/testdir/tests文件不存在,就不执行我们指定的命令,此参数并不会帮助我们删除文件。
# 远程主机上执行命令,默认在使用用户的家目录下执行
ansible all -m command -a "ls"

# 进入指定的目录执行命令
ansible all -m command -a "chdir=/usr/local/ ls"

# 远程有此文件或目录,则不执行命令
ansible all -m command -a "creates=/usr/local/ ls"

# 远程无文件或目录,则不执行命令
ansible all -m command -a "removes=/usr/local/ ls"

  

 五、shell

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

参数 说明
free_form 功能同command模块一样
chdir 功能同command模块一样
creates 功能同command模块一样
removes 功能同command模块一样
executable 默认情况下,shell模块会调用远程主机中的/bin/sh去执行对应的命令,通常情况下,远程主机中的默认shell都是bash,如果你想要使用其他类型的shell执行命令,则可以使用此参数指定某种类型的shell去执行对应的命令,指定shell文件时,需要使用绝对路径。
# 使用shell模块可以在远程服务器上执行命令,它支持管道与重定向等符号。
ansible all -m shell -a "chdir=/usr/local/ echo test > test"

# 指定shell
ansible all -m shell -a "executable=/usr/bin/bash echo test > test"

  

六、script

功能:帮助我们在远程主机上执行ansible主机上的脚本,也就是说,脚本一直存在于ansible主机本地,不需要手动拷贝到远程主机后再执行。

参数 说明
free_form 功能同command模块一样
chdir 功能同command模块一样
creates 功能同command模块一样
removes 功能同command模块一样
# 把本地脚本在远程主机上运行
ansible all -m script -a "/usr/local/test.sh"

 

七、copy 

 功能:将 ansible 管理主机上的文件拷贝到远程主机中。

参数 说明
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表示。
# 示例
ansible 10.96.0.59 -m copy -a "src=~/test.txt dest=/usr/local/ backup=yes owner=root group=root mode=644"

# playbook示例
- name: 文件拷贝
  copy:
    src: /mine/ntp.conf
    dest: /etc/ntp.conf
    owner: root
    group: root
    mode: '0644'
    backup: yes

copy模块拓展:https://www.jianshu.com/p/e000205cee60

八、fetch

功能:将远程主机中的文件拷贝到管理主机上。

注意:不能拷贝目录

参数 说明
src 在远程拉取的文件,并且必须是一个file,不能是目录。用来存放文件的目录,例如存放目录为/backup,源文件名称为/etc/profile/pythonserver,那么保存为/backup/<主机名或ip(inventory中的内容)>/etc/profile/pythonserver。
dest 用来存放文件的目录
flat 如果flat为yes,不按照src的目录来创建目录。flat为no就创建和src一样的目录.
Fail_on_missing 当源文件不存在的时候,标识为失败
Validate_checksum 当文件fetch之后进行md5检查
# 从远程下拉文件
ansible all -m fetch -a "src=/usr/local/test.txt dest=/root/"

# 不建立远程的目录
ansible all -m fetch -a "src=/usr/local/test.txt dest=/root/ flat=true"

示例代码一结果:

示例代码二结果:

九、setup

 功能:用于收集远程主机的一些基本信息。

参数 说明
fact_path

搜集主机自定义的信息,区别于setup模块搜集的系统信息,可以在"ansible_local"下查看自定义变量。

默认会去目标主机的/etc/ansible/facts.d目录下查找主机中的自定义信息,并且规定,自定义信息需要写在以.fact为后缀的文件中,同时,这些以.fact为后缀的文件中的内容需要是INI格式或者是json格式的。

filter 用于进行条件过滤。
gather_subset

控制facts的收集种类,默认值为all。参考:https://www.cnblogs.com/mauricewei/p/10056494.html

参数有all, min, hardware, network, virtual, ohai, facter,可以使用列表的格式指定多个参数,使用「!」指定不收集的facts类型。

  • 仅指定facter,说明收集puppet facter和min子集信息(默认包含min子集)。
  • 指定「!all」,说明只收集min子集信息
  • 指定「!all,!min」,说明不收集任何信息
  • 指定「!all,!any」+其他的fact子集,说明只收集该子集信息 
gather_timeout 设置超时时间,默认10秒。
# 搜集远程主机信息
ansible 10.96.0.59 -m setup
# 过滤信息
ansible 10.96.0.59 -m setup -a "filter=ansible_all_ipv4_addresses"
# 泛过滤
ansible 10.96.0.59 -m setup -a "filter=*mb"


# 示例 fact_path 功能
# 远程机器,自定义变量结构,/etc/ansible/facts.d/
/etc/ansible/facts.d/
└── test.fact

# test.fact 文件内容
[pe]
name=pe
age=2

# 执行命令(默认路径):ansible 10.96.0.59 -m setup -a "filter=ansible_local"
# 执行命令(自定义路劲):ansible 10.96.0.59 -m setup -a "filter=ansible_local fact_path=/etc/ansible/"
# 在ansible_local下查到自定义的变量
10.96.0.59 | SUCCESS => {
    "ansible_facts": {
        "ansible_local": {
            "test": {
                "pe": {
                    "age": "2", 
                    "name": "pe"
                }
            }
        }, 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}

# 关于gather_subset的使用,个人不理解各个之间的区别,只是感觉显示内容多少是有差别的
ansible all -m setup -a 'gather_subset=!all,!any,facter'
ansible all -m setup -a 'gather_subset=network'

  

 十、debug

 功能:调试playbook

参数 说明
msg 调试输出文本消息
var 将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出,不可与msg选项共用
verbosity debug的级别(默认是0级,全部显示)
# var使用示例
---
- hosts: 10.96.0.59
  remote_user: root
  vars:
    testvar: value of test variable
  tasks:
  - name: debug demo
    debug:
      var: testvar
      #或者 msg: value of test variable
...
# 获取setup中的系统变量
---
- hosts: all
  remote_user: root
  tasks:
  - name: debug demo
    debug:
      msg: "{{ ansible_all_ipv4_addresses }}"  # 这里一定要加上引号,否则失败
...

  

https://www.cnblogs.com/wanwz/archive/2004/01/13/12921827.html

cron
service
lineinfile
user
group
blockinfile
find
replace

原文地址:https://www.cnblogs.com/wangsl1204/p/14177537.html