• 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

  • 相关阅读:
    leetcode Remove Nth Node From End of List
    leetcode Plus One
    leetcode climbing stairs
    leetcode Merge Two Sorted Lists
    leetcode Maximum Subarray
    leetcode Binary Tree Level Order Traversal I II
    leetcode Pascal's Triangle II
    leetcode pascal's triangle
    leetcode valid parentheses
    leetcode Path Sum
  • 原文地址:https://www.cnblogs.com/wangsl1204/p/14177537.html
Copyright © 2020-2023  润新知