zoukankan      html  css  js  c++  java
  • 【Ansible】 各种模块

    【Ansible 模块】

      就如python库一样,ansible的模块也分成了基本模块和第三方拓展模块(自定义的模块)。这些模块其实才是作为真实的逻辑载体,在帮助ansible进行作业。

      ansible-doc -l 可以列出当前所有已经安装的模块名。ansible-doc xxx可以调出xxx模块的写详细文档。

      每个模块多多少少都可以跟一些参数(极少数如ping之类的模块可以不要参数),具体可以有哪些参数也可以参见文档。

    ■  ping模块

      最早用的ansible模块,顾名思义用来检查网络的联通状况。

      如果对应主机存活,则返回pong。

    ■  远程命令模块

      广义上的远程命令模块包括了command,script,shell三个。当通过命令行的ansible执行任务时,若不指明-m参数,默认使用的就是command模块。

      首先看command和shell之间的区别。command模块的执行不经过远端主机的shell处理,所以只支持一些简单的交互,稍微复杂一点的如重定向,管道命令,取环境变量的值等不支持。而shell则是在command的基础上用linux的/bin/sh进行包装之后的模块,比较好地支持所有命令。

      相对的,script其实严格来说是个远程脚本/程序执行模块,它将本地的一个脚本给放到远端目录的~/.ansible/tmp/下某个位置,在远端执行。由于命令本身也是程序,所以对于远端也存在的命令,可以通过写出命令的绝对路径的办法来远程执行命令。不过这样做太非主流了。。所以我们还是把它当成远程脚本执行模块来用把。

      shell模块常用的参数有chdir,creates,removes,stdin等等。具体哪个参数干什么用的可以参考文档

      script模块常用的参数也差不多这些。

      至于如何在playbook中设置模块的参数,给出参考如下:

    - script: /some/local/create_file.sh --some-arguments 1234
      args:
        creates: /the/created/file.txt

      可以看到,脚本名create_file.sh和脚本本身的参数--some-arguments 1234外,为了添加模块的参数,多写了一个args字段,这就很容易脑补出来了。

    ■  copy模块

      copy模块最基本的两个参数是src和dest,此外还可以设置诸如owner,group,mode等修饰被传递过去的文件的参数。

      示例如下:

    - name: copy file
      copy: mode={% if item == "ossutil64" %}755{% else %}644{% endif %}
      args:
        src: /data/ossutil/{{item}}
        dest: /tmp/goodhelp/{{item}}
        owner: root
        group: root
      with_items:
        - ["ossutil64","jrydata","README.md"]
      when: connected|success

      可以看到两种不同的给模块添加参数的方法。一种是直接在copy:后面写xx=yy,另一种是在下面加上的args字段下写内容。把mode放在上面的原因是这里的大括号不得不放在最前面而不能加引号(之前我们说过,jinja2的部分语法不能直放在yaml的行首,要不然yaml会解析失败)

      值得一提的是,copy的幂等性还蛮实用的。它会检测目标文件和待复制文件的哈希值,如果相等就不复制了。另外有一点不足的是缺少对远端目录存在的检测。如果远端本身就不存在dest给出值的某个目录的话会报错而不是自动创建。

      copy模块还支持整个目录的拷贝。这个可能比单个拷贝文件更加常用一些。整个复制可行性的判断过程有点像python的shutil.copytree方法。

      除了上面列出的简单的几个参数,copy模块还支持如下参数:

      backup  yes或者no,可以为被覆盖的文件做一个备份。备份完的文件名中带有复制时做备份的时间

      force  是否强行覆盖,默认值为yes,no的话不会报错,而是只有目的主机上没有相关文件才复制

      content  可以代替src参数,给出一段内容,将这段内容直接写入目标文件(w模式,不是a模式)。在这段内容中可以引用各种变量

      

      需要注意的是copy模块在大多数情况下都是单纯的复制(除了content中带变量等少数情况),对于需要根据主机进行个性化配置之类的情景,应该考虑使用template模块。

    ■  user模块

      user主要用来进行用户管理,具有的参数有name(用户名),password(只接受md5加密后的密文)

      state  有两种选择,present或absent,当为present的时候保证用户存在,absent反之。当用户存在条件不符合要求时会自动创建or删除用户

      createhome/remove  (remove后面没有home)在创建/删除的时候,是否指定创建home目录/删除home目录,默认createhome是yes而remove是no

      system  默认值是yes,表示创建的用户是普通系统用户

      其中password的密文可以通过下面这条命令得来

    echo new_password | openssl passwd -1 -stdin

      然后给出一个简单的创建用户的实例

    - name: create user [wyz]
      user: name=wyz state=present password=$1$dv5PrYG7$Zxagv86RdsUG2E4WzaL8D0

    ■  cron模块

      顾名思义,这个模块是为了管理远端主机的crontab任务而存在的。其参数包括:

      state  和user模块的state一样,取值为present或者absent,用来表示希望该任务存在或不存在,以达到没有则创建or有则删除的目的。

      backup  对于删除任务的场合,设置backup为yes后可以对原任务计划内容做一个备份

      job  要执行的任务,具体为一个非shell的命令如/usr/bin/echo hello

      user  以哪个用户的身份运行

      name  任务的描述项(必须)

      minute,hour,day,month,weekday  和crontab配置文件中对应的五个时间点设置类似。*可代表任意时间点。当不特别指出时默认值当然就是*了。

      下面的实例,为远程主机添加一个crontab任务,使之每周一早上八点整运行一个脚本:

    - name: ADD new crontab task to wyz
      cron:
      args:
        name: every monday moring needs to send data
        state: present
        job: /usr/bin/python /home/wyz/scripts/senddata.py
        user: wyz
        minute: 0
        hour: 8
        weekday: 1

    ■  file模块

      file模块主要用于远程的文件管理。具有参数如下:

      owner  指定属主,保持幂等性,如果属主已经是指定值,就不改变。下面的参数也类似

      mode  指定权限

      group  指定所属组

      path  指定文件路径

      recurse  如指出的path是一个目录,设置recurse为yes可以将一些设置内容递归应用给整个目录

      state  值可以有touch(相当于运行了命令touch xxx一样,若xxx不存在则可能会生成一个新文件),directory(创建一个新目录,目录已经存在时不修改),link(创建软链接,如果是link则还需要额外提供src参数),absent(若目标,可以是文件,目录,链接等存在,则删除)

      下面是一个创建目录,并且拷贝一些文件,且文件内容中含有主机个性化内容的示例:

    - name: CREATE directory
      file:
      args:
        state: directory
        owner: wyz
        mode: 0755
        group: wyz
        path: /tmp/hima
    
    - name: COPY files to remote
      template:
      args:
        backup: yes
        src: template
        dest: /tmp/hima/testfile
        owner: wyz
        group: wyz
        mode: 0644

    ■  lineinfile模块

      file模块着眼的是文件层面的操作,而lineinfile则是关注了具体的文件内容的操作。本模块的参数比较多且复杂。首先是

      path  path参数指出了要改的文件的路径

      regexp  指出一个匹配用的正则表达式

      line  要新增或者替换进文件的内容

      这三个参数的逻辑是这样的:首先找到path指定的文件,然后对文件做行遍历,并且以regexp为匹配项进行匹配。对于匹配成功的行(或者压根没匹配到),根据line的值做出一些处理。具体做什么处理由下面那些参数决定:

      state

        absent  表示匹配到行后删除此行,这样line参数就没用了

        present  表示匹配到行后用line替换此行,如果没匹配到则在文件末尾新增一行line

      如果不想在state为present,且没匹配到行时,不默认地在文件末尾增加新行,可以考虑insertbefore或insertafter设置为yes,这样line可以插入到匹配行的前一行或后一行

      backrefs  当state是present的时候,匹配成功会替换line,要是匹配失败,设置backrefs为yes的话也不会在文件末尾增加一行,默认值当然是no。

      backup  当state是present的时候,如果指定了line则一般会对文件做出变更,指定backup为yes可将变更前的源文件备份一份。

      下面这个示例是对目标文件内容进行的一个编辑

    - name: CHANGE content of file
      lineinfile:
      args:
        path: /tmp/testfile
        regexp: '^c$'
        line: 'new line'
        state: present
        backrefs: no

       若远端的/tmp/testfile文件内容是'a b c d e',在第一次运行这个task之后,testfile先被备份然后新testfile中的c行变成了new line。再次运行,由于没有匹配到c行,所以在e行后面新增一行new line。

    ■  yum模块

      远程管理Centos的yum包管理器。

      参数只有

      name  指出一个包名

      state  可以是present,absent和latest。分别表示安装、卸载和更新到最新。

    ■  service模块

      远程管理服务,参数如下:

      enabled  yes或no,表示是否设置服务的开机自启动

      name  指出具体服务

      state  可以是started,stopped,和restarted,用来启动,停止和重启服务。

      sleep  如果执行的state是restarted,可以指出在停止到启动间sleep几秒

      arguments  操作服务时向命令行传递的参数

      

    ■  unarchive模块

      用于解压包(可以是主控端传送到被控端再解压,也可以是直接解压远端的包),会自动判断包属于什么类型而使用合适的方式去解压。参数包括

      copy  yes或no,如果是yes则表明压缩包目前不存在于远端上(比如可以在主控端,或者在第三方的地方,通过url指明等等),需要传输到远端再进行解压。

      src  压缩包文件路径(包括copy的yes和no两种模式)

      dest  远端解压缩到的目录,注意一定要是目录,且此目录一定要存在

      owner/group/mode  将解压出来的整个目录递归地指定属主/属组/权限

      creates  可以指定一个目录或文件,当这个目录或文件存在时就跳过此task

      keep_newer  一个解压出来的文件已经存在,比较两者新旧,保留较新的

      

      

      

    http://blog.51cto.com/liuzhengwei521/1895480

  • 相关阅读:
    HDU 4472 Count DP题
    HDU 1878 欧拉回路 图论
    CSUST 1503 ZZ买衣服
    HDU 2085 核反应堆
    HDU 1029 Ignatius and the Princess IV
    UVa 11462 Age Sort
    UVa 11384
    UVa 11210
    LA 3401
    解决学一会儿累了的问题
  • 原文地址:https://www.cnblogs.com/franknihao/p/8631302.html
Copyright © 2011-2022 走看看