ansible命令行常用模块

Posted xinlibao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible命令行常用模块相关的知识,希望对你有一定的参考价值。

1.shell 模块

此模块用于在各被管理节点运行指定的命令
[[email protected] tmp]# ansible test -m shell -a ‘cd /tmp/ && touch 11.txt‘
172.20.35.239 | SUCCESS | rc=0 >>
 
 
[[email protected] 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:递归的设定目录的权限,默认为系统默认权限
实例:
[[email protected] 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:删除文件,目录,软连接
实例:
[[email protected] 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
}
#创建一个文件
[[email protected] tmp]# ansible test -m file -a ‘path=/tmp/xlb.txt state=touch‘
#递归设置文件的属主或者属组
[[email protected] tmp]# ansible test -m file -a ‘path=/tmp/xlb owner=root group=root recurse=yes‘
#为文件设置软连接
[[email protected] 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.
实例:
[[email protected] 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:
        在匹配到的行之前添加一行
实例:
[[email protected] 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"
}
[[email protected] 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之间沉睡几秒
[[email protected] ~]#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,*,……),不写默认为*
实例:
[[email protected] 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"
    ]
}
[[email protected] 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:为新创建的用户指定密码
 
#实例:创建一个用户。
[[email protected] ansible]# echo 123456 | openssl passwd -1 -stdin
$1$N9pnVurO$n4fDhg.X2kWcy0WwWaZLo1
[[email protected] 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
}
实例:删除一个用户
[[email protected] 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\n",
    "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 模块

此模块为在远程主机执行本地脚本
[[email protected] 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.\r\n",
    "stdout": "",
    "stdout_lines": []
}

11.unarchive 模块

unarchive模块为解压缩,这个模块有两种用法,一种是解压本地的压缩文件,另一种是解压远程主机上的压缩文件。
参数:
copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件。
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no。
dest:远程主机上的目标路径。
mode:设置解压缩后的文件权限。
 
实例1:解压本地的压缩文件
[[email protected] 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
}
 
验证:
[[email protected] 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:解压远程主机上的压缩文件
[[email protected] 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
}
 
验证:
[[email protected] 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

  

以上是关于ansible命令行常用模块的主要内容,如果未能解决你的问题,请参考以下文章

Ansible Ad-Hoc 常用命令

Ansible概述及常用命令模块

Ansible概述及常用命令模块

Ansible常用模块详解

Ansible7:Playbook常用模块

Ansible常用Ad-Hoc命令介绍