zoukankan      html  css  js  c++  java
  • ansible命令行常用模块

    1.shell 模块

    此模块用于在各被管理节点运行指定的命令
    [root@xinlibao tmp]# ansible test -m shell -a 'cd /tmp/ && touch 11.txt'
    172.20.35.239 | SUCCESS | rc=0 >>
     
     
    [root@xinlibao tmp]# ansible test -m shell -a 'ls /tmp'
    172.20.35.239 | SUCCESS | rc=0 >>
    11.txt
    

    2.copy 模块

    需要注意的是节点如果开启了selinux ,copy模块的使用必须安装 libselinux-python 安装方式:yum -y install libselinux-python
    此模块为远程复制备份模块
    模块参数详解:
    src:指定源文件路径,可以是相对路径,也可以是绝对路径,可以是目录(并非是必须的,可以使用content,直接生成文件内容)
    dest=:指定目标文件路径,只能是绝对路径,如果src是目录,此项必须是目录
    owner:指定属主
    group:指定属组
    mode:指定权限,可以以数字指定比如0644
    backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no
    force:
        yes:默认项,如果目标主机包含该文件,但内容不同,则强制覆盖
        no:则只有当目标主机的目标位置不存在该文件时,才复制
    directory_mode:递归的设定目录的权限,默认为系统默认权限
    实例:
    [root@xinlibao tmp]# ansible test -m copy -a 'src=/tmp/test.txt dest=/tmp'  #src是本地的文件,dest是远程文件应该复制的绝对路径。
    172.20.35.239 | SUCCESS => {
        "changed": true,
        "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
        "dest": "/tmp/test.txt",
        "gid": 0,
        "group": "root",
        "md5sum": "d41d8cd98f00b204e9800998ecf8427e",
        "mode": "0644",
        "owner": "root",
        "size": 0,
        "src": "/root/.ansible/tmp/ansible-tmp-1516346061.29-144857595536336/source",
        "state": "file",
        "uid": 0
    }
     
    #dest解释
    Remote absolute path where the file should be copied to. If src is a directory, this must be a directory too. If dest is a nonexistent path and if
    either dest ends with "/" or src is a directory, dest is created. If src and dest are files, the parent directory of dest isn't created: the task
    fails if it doesn't already exist.
    远程文件应该复制到的绝对路径。如果src是一个目录,那么它也必须是一个目录。如果dest是不存在的路径,并且如果dest以“/”结尾或者src是目录,则dest被创建。
    如果src和dest是文件,那么不会创建dest的父目录:如果任务不存在,任务将失败
    

    3.file 模块

    对远程文件管理的模块
    模块参数详解:
    owner:修改属主
    group:修改属组
    mode:修改权限
    path=:要修改文件的路径
    recurse:递归的设置文件的属性,只对目录有效
      yes:表示使用递归设置
    state:
     touch:创建一个新的空文件
     directory:创建一个新的目录,当目录存在时不会进行修改
     link:创建软连接,结果src一起使用此选项才生效
     hard:创建硬连接
     absent:删除文件,目录,软连接
    实例:
    [root@xinlibao tmp]# ansible test -m file -a 'dest=/tmp/aa.sh mode=777 owner=xin group=xin'
    172.20.35.239 | SUCCESS => {
        "changed": false,
        "gid": 501,
        "group": "xin",
        "mode": "0777",
        "owner": "xin",
        "path": "/tmp/aa.sh",
        "size": 19,
        "state": "file",
        "uid": 501
    }
    #创建一个文件
    [root@xinlibao tmp]# ansible test -m file -a 'path=/tmp/xlb.txt state=touch'
    #递归设置文件的属主或者属组
    [root@xinlibao tmp]# ansible test -m file -a 'path=/tmp/xlb owner=root group=root recurse=yes'
    #为文件设置软连接
    [root@xinlibao tmp]# ansible test -m file -a 'src=/tmp/xinlibao state=link path=/tmp/xin'
    

    4.template 模块

    ansible的template模块,可以将带有参数的配置文件传递到目标地址,可以对文件进行属组属主的修改以及备份。
    参数详解:
    dest:远程节点上的绝对路径,用于放置template文件
    src:本地Jinjia2模版的template文件位置
    group:设置远程节点上的的template文件的所属用户组
    owner:设置远程节点上的template文件所属用户
    mode:设置远程节点上的template文件权限
    官方文档:
    Templates are processed by the Jinja2 templating language (http://jinja.pocoo.org/docs/) - documentation on the template formatting can be found in the Template Designer Documentation (http://jinja.pocoo.org/docs/templates/).
    Six additional variables can be used in templates: ansible_managed (configurable via the defaults section of ansible.cfg) contains a string which can be used to describe the template name, host, modification time of the template file and the owner uid. template_host contains the node name of the template’s machine. template_uid the numeric user id of the owner. template_path the path of the template. template_fullpath is the absolute path of the template. template_run_date is the date that the template was rendered.
    实例:
    [root@xinlibao ansible]# ansible test -m template -a 'src=/etc/ansible/hosts dest=/tmp/ owner=root group=root mode=0644'
    10.0.0.5 | SUCCESS => {
        "changed": true,
        "checksum": "d0f824ed0d55618ae4ef58a75917b19dad896193",
        "dest": "/tmp/hosts",
        "gid": 0,
        "group": "root",
        "md5sum": "606dfb055212a670f0fe03eb8510d1d5",
        "mode": "0644",
        "owner": "root",
        "size": 16,
        "src": "/root/.ansible/tmp/ansible-tmp-1516545559.76-271687129655779/source",
        "state": "file",
        "uid": 0
    }
    

    5.lineinfile 模块

    此模块为文件编辑模块
    模块参数详解:
      path:指定要修改的配置文件
      regexp:匹配要修改的内容
      line:要增加或者修改的内容
      state:
          absent:表示删除,当匹配到时进行删除
          present:表示增加,当匹配到时进行修改,当没有匹配到时在最后增加一行,默认为此项
      backrefs:
          no:表示如果没有匹配到,则增加line;如果匹配成功,则替换line;
          yes:表示如果没有匹配到,则不变line;如果匹配成功,则替换line;
      backup: 
          no:表示如果没有匹配到,则增加line;如果匹配成功,则替换line;不备份原文件
          yes:表示如果没有匹配到,则增加line;如果匹配成功,则替换line;备份原文件
      insertafter:
          在匹配到的行之后添加一行
      insertbefore:
            在匹配到的行之前添加一行
    实例:
    [root@xinlibao ansible]# ansible test -m lineinfile -a 'path=/tmp/test.txt regexp="11111" line=aaaaa backrefs=no'
    10.0.0.5 | SUCCESS => {
        "backup": "",
        "changed": true,
        "msg": "line replaced"
    }
    [root@xinlibao ansible]# ansible test -m lineinfile -a 'path=/tmp/test.txt regexp="4444" line=bbbb backrefs=yes'
    10.0.0.5 | SUCCESS => {
        "backup": "",
        "changed": false,
        "msg": ""
    }
    

    6.service

    service为服务模块
    模块参数详解:
    enabled:表示设置服务开机是否启动,enabled=yes
    name:表示要控制哪一个服务
    state:
         started:表示现在就启动此服务
         stopped:表示现在关闭此服务
         restarted:表示重启此服务
    sleep:如果执行了restarted,在stop和start之间沉睡几秒
    [root@xinliao ~]#ansible test -m service -a 'enabled=on name=httpd state=started'
    

    7.cron 模块

    此模块是创建计划任务
    模块参数详解:
    state:
     present:创建任务
     absent:删除任务
    backup:对远程主机上的原任务计划内容修改之前做备份
    job:要执行的任务
    name:该任务的描述
    minute:分钟(0-59,*,*/2,……),不写默认为*
    hour:小时(0-23,*,*/2,……),不写默认为*
    day:日(1-31,*,*/2,……),不写默认为*
    month:月(1-12,*,*/2,……),不写默认为*
    weekday:周(0-7,*,……),不写默认为*
    实例:
    [root@xinlibao tmp]# ansible test -m cron -a 'name="custom job" minute=*/3 hour=* day=* month=* weekday=* job="/usr/sbin/sh aa.sh"'
    172.20.35.239 | SUCCESS => {
        "changed": true,
        "envs": [],
        "jobs": [
            "custom job"
        ]
    }
    [root@xinlibao tmp]# ansible test -a 'crontab -l'
    172.20.35.239 | SUCCESS | rc=0 >>
    #time sync by aige at 2017-03-08
    */5 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1
    #Ansible: custom job
    */3 * * * * /usr/sbin/sh aa.sh
    

    8.user/group 模块

    user为管理用户的模块
     name:指定用户名
     password:设定用户密码,password参数需要接受md5加密后的值
     state:用户状态,默认为present
        present:表示添加用户
        absent:表示删除用户
    system:
        yes:默认创建为普通用户,而非系统用户
      如果不指定默认生成的选项有:
         home:创建家目录
         shell:创建默认的shell为/bin/bash
    remove:
        yes:删除用户家目录,需要指定此参数
        no:默认项,删除用户时默认不删除用户的家目录
    update_password:修改用户密码
        always:新密码和旧密码不同时进行修改
        on_create:为新创建的用户指定密码
     
    #实例:创建一个用户。
    [root@xinlibao ansible]# echo 123456 | openssl passwd -1 -stdin
    $1$N9pnVurO$n4fDhg.X2kWcy0WwWaZLo1
    [root@xinlibao ansible]# ansible test -m user -a 'name=xin system=yes password=$1$N9pnVurO$n4fDhg.X2kWcy0WwWaZLo1'
    10.0.0.5 | SUCCESS => {
        "changed": true,
        "comment": "",
        "createhome": true,
        "group": 992,
        "home": "/home/xin",
        "name": "xin",
        "password": "NOT_LOGGING_PASSWORD",
        "shell": "/bin/bash",
        "state": "present",
        "system": true,
        "uid": 995
    }
    实例:删除一个用户
    [root@xinlibao ansible]# ansible test -m user -a 'name=xin remove=yes state=absent'
    10.0.0.5 | SUCCESS => {
        "changed": true,
        "force": false,
        "name": "xin",
        "remove": true,
        "state": "absent",
        "stderr": "userdel: xin mail spool (/var/spool/mail/xin) not found
    ",
        "stderr_lines": [
            "userdel: xin mail spool (/var/spool/mail/xin) not found"
        ]
    }
    实例:更新一个用户的密码
    ansible test -m user -a 'name=liuwei1 update_password=always password=$1$N9pnVurO$n4fDhg.X2kWcy0WwWaZLo1'
    

    9.setup 模块

    此模块是收集远程主机信息。
    收集可用的facts,收集每个节点的相关信息:架构信息,IP,时间,域名,网卡,MAC,主机名,CPU等信息。
    这些收集的信息,可以作为变量。
    ansible test -m setup
    

    10.script 模块

    此模块为在远程主机执行本地脚本
    [root@xinlibao tmp]# ansible test -m script -a '/tmp/cc.sh'
    172.20.35.239 | SUCCESS => {
        "changed": true,
        "rc": 0,
        "stderr": "Shared connection to 172.20.35.239 closed.
    ",
        "stdout": "",
        "stdout_lines": []
    }
    

    11.unarchive 模块

    unarchive模块为解压缩,这个模块有两种用法,一种是解压本地的压缩文件,另一种是解压远程主机上的压缩文件。
    参数:
    copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件。
    src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no。
    dest:远程主机上的目标路径。
    mode:设置解压缩后的文件权限。
     
    实例1:解压本地的压缩文件
    [root@netpas-lab7 ansible]# ansible centos5 -m unarchive -a 'src=/etc/ansible/s.tgz dest=/xlb/test/ copy=yes mode=0755 owner=root group=root'
    172.20.33.151 | SUCCESS => {
        "changed": true,
        "dest": "/xlb/test/",
        "extract_results": {
            "cmd": [
                "/bin/gtar",
                "--extract",
                "-C",
                "/xlb/test/",
                "-z",
                "--owner=root",
                "--group=root",
                "-f",
                "/root/.ansible/tmp/ansible-tmp-1520215977.01-169254067586872/source"
            ],
            "err": "",
            "out": "",
            "rc": 0
        },
        "failed": false,
        "gid": 0,
        "group": "root",
        "handler": "TgzArchive",
        "mode": "0755",
        "owner": "root",
        "size": 4096,
        "src": "/root/.ansible/tmp/ansible-tmp-1520215977.01-169254067586872/source",
        "state": "directory",
        "uid": 0
    }
     
    验证:
    [root@netpas-lab7 ansible]# ansible centos5 -m shell -a 'ls -l /xlb/test/'
    172.20.33.151 | SUCCESS | rc=0 >>
    总计 4
    drwxr-xr-x 7 root root 4096 01-25 11:13 service
     
    实例2:解压远程主机上的压缩文件
    [root@netpas-lab7 ansible]# ansible centos5 -m unarchive -a 'src=/xlb/test/s.tgz dest=/xlb/test/ copy=no mode=0755 owner=root group=root'
    172.20.33.151 | SUCCESS => {
        "changed": true,
        "dest": "/xlb/test/",
        "extract_results": {
            "cmd": [
                "/bin/gtar",
                "--extract",
                "-C",
                "/xlb/test/",
                "-z",
                "--owner=root",
                "--group=root",
                "-f",
                "/xlb/test/s.tgz"
            ],
            "err": "",
            "out": "",
            "rc": 0
        },
        "failed": false,
        "gid": 0,
        "group": "root",
        "handler": "TgzArchive",
        "mode": "0755",
        "owner": "root",
        "size": 4096,
        "src": "/xlb/test/s.tgz",
        "state": "directory",
        "uid": 0
    }
     
    验证:
    [root@netpas-lab7 ansible]# ansible centos5 -m shell -a 'ls -l /xlb/test/'
    172.20.33.151 | SUCCESS | rc=0 >>
    总计 24
    drwxr-xr-x 7 root root  4096 01-25 11:13 service
    -rw-r--r-- 1 root root 18533 03-05 10:19 s.tgz

      

  • 相关阅读:
    并发编程之线程进阶
    并发编程之线程
    进程间通信(队列和管道)
    在python程序中的进程操作
    操作系统之进程
    网络编程之黏包
    树莓派 websocket 控制LED
    lua 调用 C -- 实例 C函数作为应用程序的一部分
    linux 环境下进程什么时候会被 killed掉
    STM32 + cJSON 死机问题解决
  • 原文地址:https://www.cnblogs.com/xinlibao/p/8715873.html
Copyright © 2011-2022 走看看