• Ansible常用模块


    一、commands相关模块

    1、commands模块

    command模块包含如下选项:

    creates:一个文件名,当该文件存在,则该命令不执行,反正,则执行。

    free_form:要执行的linux指令

    chdir:在执行指令之前,先切换到该指定的目录

    removes:一个文件名,当该文件存在时,则该选项执行,反之,不执行。

    注意:commands模块的执行,在远程主机上,需要有python环境的支持。

    该模块通过-a跟上要执行的命令可以直接执行,不过命令里如果有带有特殊字符("<", ">", "|", "&"等)那么则执行不成功。

    2、shell 模块

    在远程节点上执行命令,用法和command一样,不过shell模块执行命令的时候使用的是/bin/sh,所以shell模块可以执行任何命令。

    ansible 172.16.213.233 -m shell -a 'ps-ef|grepsshd'

    ansible 172.16.213.233 -m shell -a 'sh/tmp/install.sh >/tmp/install.log'

    上面这个命令是执行远程机器上的脚本,脚本路径为/tmp/install.sh(远程主机上的脚本,非本机的),然后将执行命令的结果存放在远程主机路径/tmp/install.log中,注意在进行保存文件的时候,写上全路径,否则就会保存在登录之后的默认路径中。

    官方上说,command用起来更安全,更有可预知性。

    3、raw模块

    raw模块功能类似与前面说的command、shell能够完成的操作,raw也都能完成。不同的是,raw模块不需要远程主机上的python环境。

    ansible要执行自动化操作,需要管理机上装ansible,客户机上也需要安装python,如果客户机上没有安装python模块,那么command、shell模块将无法工作,而

    raw却可以正常工作,因此,如果有的机器是没有装python,或者说安装的python版本在python2.4以下,就可以使用raw模块来装python、python-simplejson等。

    如果有些机器压根就装不了python的话(比如交换机,路由器等),那么,直接用raw模块是最好的选择。

    举例:

    ansible 172.16.213.233 -m raw -a "ps-ef|grepsshd|awk'{print $2}' "

    ansible 172.16.213.107 -m raw -a "yum -y install python26" -k

    raw模块和comand、shell模块不同的还有:raw没有chdir、creates、removes参数

    [root@localhostansible]# ansible 172.16.213.157 -m command -a 'chdir=/tmptouch test1.txt' -k

    [root@localhostansible]# ansible 172.16.213.157 -m shell -a 'chdir=/tmptouch test2.txt' -k

    [root@localhostansible]# ansible 172.16.213.157 -m raw -a 'chdir=/tmptouch test3.txt' -k

    4、script模块

    script模块是将管理端的shell脚本拷贝到被管理的远程主机上执行,其原理是先将shell复制到远程主机,再在远程主机上执行,此模块的执行,也不需要远程主机上的python环境。

    ansible 172.16.213.233 -m script -a 'sh/tmp/install1.sh >/tmp/install.log'

    脚本/tmp/install1.sh在管理端本机上,script 模块执行的时候将脚本传送到远程的172.16.213.233主机中,然后执行这个脚本,同时,将执行的输出日志文件保存在远程主机对应的路径/tmp/install.log下,这里保存日志文件的时候,最好用全路径。

    二、其他模块

    1、ping模块

    测试主机是否是通的,用法很简单,不涉及参数:

    [root@361way ~]# ansible 172.16.213.170-m ping

    172.16.213.170 | SUCCESS => {

    "changed": false,

    "ping": "pong"

    }

    2、file模块

    file模块主要用于远程主机上的文件操作,file模块包含如下选项:

    force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no

    group:定义文件/目录的属组

    mode:定义文件/目录的权限

    owner:定义文件/目录的属主

    path:必选项,定义文件/目录的路径

    recurse:递归的设置文件的属性,只对目录有效

    src:要被链接的源文件的路径,只应用于state=link的情况

    dest:被链接到的目标路径,只应用于state=link的情况

    state:有如下几个选项:

    directory:表示目录,如果目录不存在,则创建目录。

    link:创建软链接

    hard:创建硬链接

    touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间

    absent:删除目录、文件或者取消链接文件。

    使用示例:

    ansible 172.16.213.233 -m file -a "path=/mnt/abc123 state=directory"

    ansible 172.16.213.233 -m file -a "path=/mnt/abc123 owner=nobody group=nobody mode=0644 recurse=yes"

    ansible 172.16.213.233 -m file -a "path=/mnt/syncfile.txt owner=sshdgroup=sshdmode=0644"

    ansible 172.16.213.233 -m file -a "path=/mnt/syncfile.txt mode=0444"

    ansible 172.16.213.233 -m file -a "src=/etc/ssh/sshd_configdest=/mnt/sshd_configowner=sshdstate=link"

    ansible 172.16.213.233 -m file -a "path=/tmp/backup.tar.gz state=absent"

    ansible 172.16.213.233 -m file -a "path=/tmp/ansibletempstate=touch"

    3、copy模块

    Copy模块用于复制文件到远程主机,copy模块包含如下选项:

    backup:在覆盖之前将原文件备份,备份文件包含时间信息。有两个选项:yes|no

    content:用于替代"src",可以直接设定指定文件的值

    dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录

    directory_mode:递归的设定目录的权限,默认为系统默认权限

    force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes

    others:所有的file模块里的选项都可以在这里使用

    src:要复制到远程主机的文件在本地的地址,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用"/"来结尾,则只复制目录里的内容,如果没有使用"/"来结尾,则包含目录在内的整个内容全部复制,类似于rsync。

    copy模块举例:

    ansible 172.16.213.233 -m copy -a 'src=/etc/sudoersdest=/app/sudoersowner=root group=root mode=440 backup=yes'

    ansible 172.16.213.233 -m copy -a "src=/etc/sudoersdest=/app/sudoersvalidate='visudo-cf%s'"

    ansible 172.16.213.233 -m copy -a 'src=/etc/yum dest=/app/ owner=root group=root directory_mode=644'

    ansible 172.16.213.233 -m copy -a 'src=/etc/yum/ dest=/app/bakowner=root group=root directory_mode=644'

    4、service模块

    用于管理远程主机上的服务,该模块包含如下选项:

    enabled:是否开机启动yes|no

    name:必选项,服务名称

    pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行

    sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟

    state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)

    使用示例:

    ansible172.16.213.233 -m service -a "name=httpdstate=started"

    ansible172.16.213.233 -m service -a "name=httpdenabled=yes"

    5、cron模块

    用于管理计划任务,包含如下选项:

    backup:对远程主机上的原任务计划内容修改之前做备份

    cron_file:用来指定一个计划任务文件,也就是将计划任务写到远程主机上/etc/cron.d目录下,创建一个文件对应的计划任务。

    day:日(1-31,*,*/2,……)

    hour:小时(0-23,*,*/2,……)

    minute:分钟(0-59,*,*/2,……)

    month:月(1-12,*,*/2,……)

    weekday:周(0-7,*,……)

    job:要执行的任务,依赖于state=present

    name:定义定时任务的描述信息

    special_time:特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)

    state:确认该任务计划是创建还是删除,有两个值可选,分别是present和absent,present表示创建定时任务,absent表示删除定时任务,默认为present。

    user:以哪个用户的身份执行job指定的任务。

    使用示例:

    ansible172.16.213.233 -m cron-a 'name="job for reboot" special_time=reboot job="/data/bootservice.sh"'

    ansible172.16.213.233 -m cron-a 'name="yum autoupdate" weekday="6" minute=20 hour=1 user="root" job="yum -y update"'

    ansible172.16.213.233 -m cron-a 'backup="True" name="autobackup" weekday="6" minute=30 hour=1 user="root" job="/home/ixdba/backup.sh"'

    ansible172.16.213.233 -m cron-a 'name="checkhttp" minute=30 hour=12 user="root" job="/home/ixdba/check_http.sh" cron_file="check_http_for_ansible" '

    ansible172.16.213.233 -m cron-a 'name="yum autoupdate" state=absent'

    6、yum模块

    使用yum包管理器来管理软件包,其选项有:

    config_file:yum的配置文件

    disable_gpg_check:关闭gpg_check

    disablerepo:不启用某个源

    enablerepo:启用某个源

    name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径

    state:表示要安装还是删除软件包,要安装软件包,可选择present(安装)、installed(安装)、latest(安装最新版本),删除软件包可选择absent、removed。

    示例如下:

    ansible172.16.213.77 -m yum -a "name=redisstate=installed"

    ansible172.16.213.77 -m yum -a "name=redisstate=removed"

    ansible172.16.213.77 -m yum -a "name=redisstate=latest enablerepo=epel"

    ansible172.16.213.77 -m yum -a " name=http://mirrors.aliyun.com/centos/7.4.1708/os/x86_64/Packages/bash-4.2.46-28.el7.x86_64.rpm state=present "

    7、user模块与group模块

    user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod三个指令。

    name # 指定用户名

    group # 指定用户的主组

    groups # 指定附加组,如果指定为('groups=')表示删除所有组。

    shell # 指定默认shell

    state #设置帐号状态,不指定为默认为present,表示创建,指定值为absent表示删除

    remove #当使用状态为state=absent时使用,类似于userdel--remove选项。

    示例:

    ansible172.16.213.77 -m user -a "name=testuser1"

    ansible172.16.213.77 -m user -a "name=testuser2 groups=admins,developers" //添加用户时,同时添加附组

    ansible172.16.213.77 -m user -a "name=testuser3 state=absent remove=yes" //删除用户的同时,删除用记家目录

    批量修改用户密码:

    echo "123456" | opensslpasswd-1 -salt $(< /dev/urandomtr-dc '[:alnum:]' | head -c 32) -stdin

    $1$yjJ74Wid$x0QUaaHzA8EwWU2kG6SRB1

    ansible172.16.213.77 -m user -a 'name=testuser1 password="$1$Kklap7y3$3AYJdqrcmZUMt9W2/MYE4." '

    -1:表示采用的是MD5加密算法。

    -salt:指定salt值。在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。

    "< /dev/urandomtr-dc '[:alnum:]' | head -c 32"产生一个随机的salt。

    passwd的值不能是明文,passwd关键字后面应该是密文,且密文将被保存在/etc/shadow文件中。

    8、synchronize模块

    此模块通过调用rsync进行文件或目录同步。

    archive:归档,相当于同时开启recursive(递归),links,perms,itmes,owner,group,-D选项都为yes,默认该选项为开启

    checksum:跳过检测sum值,默认关闭

    compress:是不开启压缩,默认开启

    copy_links:复制链接文件,默认为no,注意后面还有一个links参数

    delete:删除不存在的文件,默认为no

    dest:目录路径

    dest_prot:默认为22,ssh协议

    mode:push和pull模块,push模块的话,一般用于从本机向远程主机上传文件,pull模式用于从远程主机上拉取文件

    示例:

    ansible172.16.213.77 -m synchronize -a 'src=/mnt/a dest=/tmp'

    ansible172.16.213.77 -m synchronize -a 'mode=pull src=/mnt/a dest=/tmp

    9、setup模块

    setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数,具体使用示例如下(由于输出结果较多,这里只列命令不写结果):

    [root@linux~]# ansible172.16.213.77 -m setup -a 'filter=ansible_*_mb' //查看主机内存信息

    [root@linux~]# ansible172.16.213.77 -m setup -a 'filter=ansible_em[1-2]' //查看地接口为em1-2的网卡信息

    [root@linux~]# ansible all -m setup --tree /tmp/facts //将所有主机的信息输入到/tmp/facts目录下,每台主机的信息输入到主机名文件中(/etc/ansible/hosts里的主机名)

    10、get_url模块

    该模块主要用于从http、ftp、https服务器上下载文件(类似于wget),主要有如下选项:

    sha256sum:下载完成后进行sha256 check;

    timeout:下载超时时间,默认10s

    url:下载的URL

    url_password、url_username:主要用于需要用户名密码进行验证的情况

    use_proxy:表示使用代理,代理需事先在环境变更中定义

    示例:

    ansible172.16.213.77 -m get_url-a "url=http://172.16.213.157/Python-2.7.14.tgz dest=/mnt/python-2.7.14.tgz"

  • 相关阅读:
    ASCII对应码表-键值(完整版)
    node.js中使用路由方法
    关于vscode自动跳转回车的解决方法(关闭vscode自动保存功能;可能和其他插件有冲突)
    js中 !==和 !=的区别是什么
    spring 请求参数和路径变量
    PowerShell因为在此系统中禁止执行脚本解决方法
    SQL server 2008数据库的备份与还原(亲测,效果良好)注意采用单用户模式呀
    webpack-dev-server提示css模块解析失败,但已经装了css-loader
    webpack集成vue单文件模式的很多坑(研究了1个星期)
    npm全局模块卸载及默认安装目录修改方法
  • 原文地址:https://www.cnblogs.com/yxf-/p/11494182.html
Copyright © 2020-2023  润新知