zoukankan      html  css  js  c++  java
  • 自动化运维Ansible之常用模块

    0、Ansible模块语法

    在ansible中是指需要快速执行一条命令,并且不需要保存的命令,对于复杂的命令则为playbook

    查看模块帮助:ansible-doc -l

    // 统计模块数量
    $ ansible-doc -l |wc -l
    3387  // ansible有大量的模块
    

    Ansible模块语法:

    ansible [管理主机信息或者主机组信息] -m [模块名称] -a [相关模块参数] 
    主机信息:远程主机IP地址;远程主机组名称;远程所有主机all
    -m:指定相应模块
    -a:利用模块中某些参数功能
    -f :定义每次输出内容的数量
    

    Ansible注意事项颜色信息:
    绿色:对远程节点不进行相应修改,或者只是对远程节点信息进行查看
    红色:操作执行命令有异常
    黄色:对远程节点进行相应修改
    深紫色:表示对命令执行发出警告信息(可能存在的问题,给你提示建议)

    1、Command模块

    command模块的作用:默认模块,在远程主机执行命令;默认模块,可忽略-m选项

    // chaidr 先切换到特定的目录,然后在执行命令
    [root@m01 ~]# ansible 10.4.7.8 -m command -a "chdir=/tmp/ pwd"
    
    // creates 判断一个文件是否存在。文件如果存在,后面命令则不会执行;如果不存在,则执行
    [root@m01 /]# ansible 10.4.7.8 -m command -a "creates=/etc/rsyncd.conf hostname"
    
    // removes 判断一个文件是否存在。文件如果存在,后面命令执行;如果不存在,则不执行
    [root@m01 /]# ansible 10.4.7.8 -m command -a "removes=/etc/exports hostname"
    
    // fress_form 使用command模块批量获取执行hostname命令
    [root@m01 /]# ansible sa -m command -a "hostname"  
    

    该command模块无法和shell一样,像$HOME变量,和一些像 "<", ">", "|", ";" and "&" 这样的操作是没有办法执行(如果要支持这些特殊符号就必须要使用shell模块)错误的演示:

    [root@m01 /]# ansible sa -m command -a "hostname;date"
    

    2、Shell模块

    shell模块作用:shell模块是万能模块,可以满足command模块所有功能,并且可以支持识别特殊字符

    // 在10.4.7.8的机器的当前目录下执行ls和pwd命令
    [root@m01 /]# ansible 10.4.7.8 -m shell -a "ls;pwd"
    

    3、Scripts模块

    scripts模块作用:专门运行脚本模块,在本地执行脚本,脚本产生所有的动作都在远端主机上执行

    // 编写脚本,里面添加yum安装keepalived命令,将脚本执行命令放入到受控端执行 
    [root@m01 ~]# cat /server/scripts/yum.sh
    #!/bin/bash
    yum install -y keepalived
    
    [root@m01 ~]# ansible 10.4.7.8 -m script -a "/server/scripts/yum.sh"
    [root@m01 ~]# ansible 10.4.7.8 -m shell -a "rpm -qa keepalived"
    

    注意:我们在管理机器上执行的脚本,远端(受控端)是不需要存在该脚本

    4、Copy模块

    copy模块作用:将文件从本地或远程机器复制到远程机器上的某个位置

    // 将本端的/etc/hosts文件推送到远端,并且重命名为test.txt
    [root@m01 ~]# ansible sa -m copy -a "src=/etc/hosts dest=/tmp/test.txt"
    
    // 本端在/tmp/下创建文件file01.txt,推送到远端
    [root@m01 ~]# touch /tmp/file01.txt
    [root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/tmp/file01.txt dest=/tmp/" 
    
    // 为本端的/tmp/file01.txt文件追加内容,并推送到远端,覆盖时备份原文件
    [root@m01 ~]# cat /tmp/file01.txt
    [root@m01 ~]# echo 123456 >/tmp/file01.txt
    [root@m01 ~]# cat /tmp/file01.txt
    123456
    [root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/tmp/file01.txt dest=/tmp/ backup=yes"
    
    // 在/root/下创建test.txt文件,在复制的时候修改属主和属组为root,权限644
    [root@m01 ~]# ansible 10.4.7.7 -m copy -a "src=/root/test.txt dest=/test/oldboy/ owner=root group=root mode=644"
    
    // 为对端的/tmp/test.txt文件写入内容“1”
    [root@m01 ~]# ansible 10.4.7.7 -m copy -a "content='1' dest=/tmp/test.txt"
    

    参数

    - backup   # 对推送传输过去的文件,进行备份
    - src      # 推送数据的源文件信息
    - dest     # 推送数据的目标路径
    - content  # 直接批量在被管理端文件中添加内容
    - owner    # 将本地文件推送到远端,指定文件属主权限
    - group    # 将本地文件推送到远端,指定文件属组权限
    - mode     # 将本地文件推送到远端,指定文件权限信息
    

    5、File模块

    file模块作用:对受控端的文件属性修改/目录创建/文件创建

    // 为远端主机修改/tmp/file01.txt文件的属主和属组为root,权限为600
    [root@m01 ~]# ansible 10.4.7.7 -m file -a "path=/tmp/file01.txt owner=root group=root mode=600"
    
    // 为远端主机创建文件和目录,远程创建文件/tmp/file01.txt
    [root@m01 ~]# ansible 10.4.7.7 -m file -a " path =/tmp/file01.txt state=touch"
    
    // 远程创建目录/tmp/dir01
    [root@m01 ~]# ansible 10.4.7.7 -m file -a "path =/tmp/dir01 state=directory"
    
    // 递归修改远端主机的/data目录及目录下的所有文件的属主和属组都为root
    [root@m01 /]# ansible 10.4.7.7 -m file -a "path=/data state=directory owner=root group=root recurse=yes"
    

    模块参数

    - path    # 指定远程主机目录或文件信息
    - recurse # 递归授权:
        yes   # 递归修改权限
        no    # 不递归修改权限(默认)
    - state   # 指定需要执行的动作:
        directory  # 在远端创建目录
        touch      # 在远端创建文件
        hard       #  硬链接
        link       #软链接
    

    6、Yum模块

    yum模块作用:可以对受控端执行yum安装卸载和查看软件包

    // yum安装iftop软件包
    [root@m01 ~]# ansible 10.4.7.7 -m yum -a "name=iftop state=installed"
    
    // 移除iftop软件
    [root@m01 ~]# ansible 10.4.7.7 -m yum -a "name=iftop state=absent"
    
    // 查看指定软件包名的列表
    [root@m01 ~]# ansible 10.4.7.7 -m yum -a "list=iftop"
    

    模块参数

    - name  # 执行要安装软件的名称,以及软件的版本
    - state # 指定需要执行的动作:
        installed、present   # 安装软件包
        latest               # 安装最新软件包
        removed、absent      # 移除软件包
    - list  # 指定软件名称,查看软件是否已经安装了
    

    7、Service模块

    service模块作用:管理服务状态模块,对受控端进行服务的管理

    // 将远端的crond服务关闭,并且开机不启动
    [root@m01 ~]# ansible 10.4.7.7 -m service -a "name=crond state=stopped enabled=no"
    
    // 将远端的crond服务开启,并且开机自启动
    [root@m01 ~]# ansible 10.4.7.7 -m service -a "name=crond state=started enabled=yes"
    

    模块参数

    - name    # 指定需要管理的服务名称(管理的服务一定在chkconfig中可以看到)
    - state   # 指定需要执行的动作:
        started     # 启动服务
        reloaded    # 平滑重启
        restarted   # 重启服务
        stopped     # 停止服务
        running     # 运行(启动)服务
    - enable  # 设置服务是否开机自启动:
        yes    # 服务开机自启动
        no     # 服务开机不启动
    

    8、Cron模块

    cron模块作用:为受控端添加定时任务

    x x x x x /bin/sh /server/scripts/test.sh >/dev/null 2>&1

    将系统命令行的定时任务变成ansilbe的语法
    传统的写法

    "minute=0 hour=0 daay=* month=* weekday=* job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'"
    

    ansible的写法(* 号是可以省略的)

    ansible 10.4.7.7 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'"
    

    定时任务示例

    // 添加一条定时任务
    [root@m01 ~]# ansible 10.4.7.7 -m cron -a "minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'"
    
    // 设置定时任务注释信息,防止重复设置
    [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1'"
    
    // 删除指定的name
    [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1' state=absent"
    
    // 也可以直接指定定时任务项的名称,进行定时任务的删除
    [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron02' state=absent"
    
    // 使用 disabled 参数来注释定时任务
    [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1' disabled=yes"
    
    // 取消注释
    [root@m01 ~]# ansible 10.4.7.7 -m cron -a "name='cron01' minute=0 hour=0 job='/bin/sh /server/scripts/test.sh >/dev/null 2>&1' disabled=no"
    

    模块参数

    - name # 为新的定时任务条目设置名称(防止定时任务项的重复)
    - state  # 需要指定的动作:
        absent   # 添加定时任务
        preset   # 删除定时任务 
    - disabled # 是否禁用定时任务(是否注释):
        yes   # 禁用定时任务项(注释掉)
        no    # 开启定时任务项(取消注释)
    # 该参数需要和job一起使用
    - minute  # 分钟 0-59
    - hour    # 小时 0-23
    - day     # 天数 1-31
    - month   # 月份 1-12
    - weekday # 周 0-6
    

    9、Group模块

    group模块作用:可以为远端创建用户组

    // 创建组,组名为demo,组id为1012
    [root@m01 ~]# ansible 10.4.7.7  -m group -a "name=demo gid=1012"
    

    模块参数

    - name # 必须参数,指定创建的组名
    - gid  # 指定用户的gid
    - state
        absent   # 移除远端主机的组
        present  # 创建远端主机的组(默认)
    

    10、User模块

    user模块作用:可以为远端进行创建用户修改用户删除用户

    // 创建用户名test,uid为999,组为test,shell为/sbin/nologin,并且不创建家目录
    [root@m01 ~]# ansible 10.4.7.7 -m user -a "name=test uid=1010 shell=/sbin/nologin createhome=no"
    
    // 创建普通用户alx,并配置对应的用户密码(-1 使用MD5加密)
    [root@m01 /]# echo '123456' | openssl passwd -1 -stdin
    $1$yGnjv/n3$J.tO.qSIyLy5q547tSisz/
    [root@m01 /]# ansible 10.4.7.7 -m user -a 'name=alx password="$1$yGnjv/n3$J.tO.qSIyLy5q547tSisz/"'
    

    模块参数

    - name     # 必须参数,指定用户名
    - group    # 指定用户组名称
    - groups   # 指定附加组名称,多个组之间用逗号","分隔
    - shell    # 指定用户登录的shell
    - uid      # 指定用户的uid
    - comment  # 指定用户的注释信息
    - password # 给用户添加密码
    - state  # 指定用户是否存在于受控主机中:
        preset  # 创建用户(默认)
        absent  # 删除用户
    - createhome # 是否创建家目录:
        yes  # 创建家目录(默认)
        no   # 不创建家目录
    - home  # 指定家目录,需要和createhome互相配合使用
    

    密码设置:必须要将预先设置的密码做openssl加密处理后输出的一串数值,然后还数值就作为新创建用户的密码,如果添加的是明文密码的话是无效的。

    11、Mount模块

    mount模块作用:可以将挂载参数写入到/etc/fastb文件

    // 仅将挂载的配置写入到/etc/fastb,并不会执行挂载
    [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=present"
    
    // 临时挂载设备,并将挂载的配置写入到/etc/fastb
    [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=mounted"
    
    // 临时卸载,不会清理/etc/fstab
    [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=unmounted"
    
    // 卸载,不仅临时卸载,同时会清理/etc/fstab
    [root@m01 ~]# ansible sa -m mount -a "src=172.16.1.31:/data path=/tmp fstype=nfs opts=defaults state=absent"
    

    模块参数

    - present   # 开机挂载,不会执行挂载指令,仅将挂载的配置写入到/etc/fastb
    - mounted   # 挂载设备,并将挂载的配置写入到/etc/fastb
    - unmounted # 卸载设备,不会清除/etc/fastb写入的配置
    - absent    #卸载设备,会清理/etc/fastb写入的配置
    

    注意:path 所指定的挂载目录不需要手动创建,当执行挂载命令的时候,会自动的创建并挂载

    12、Unarchive模块

    Unarchive模块作用:解压缩

    该模块有两种用法:

    • 将ansible主机上的压缩包在本地解压缩后传到远程主机上,这种情况下,copy=yes. 本地解压缩,解压缩位置不是默认的目录,没找到或传完删了 后传到远程主机

    • 将远程主机上的某个压缩包解压缩到指定路径下。这种情况下,需要设置copy=no 远程主机上面的操作,不涉及ansible服务端

    // 将本地的压缩文件解压后传到远程主机
    [root@m01 ~]# ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=yes mode=0755"
    
    // 将远程主机的压缩文件解压
    [root@m01 ~]# ansible 10.4.7.7 -m unarchive -a "src=/opt/src/apache-tomcat-8.5.53.tar.gz dest=/opt copy=no mode=0755"
    

    模块参数

    - src  # 源压缩包路径
    - dest # 压缩包解压后存放路径
    - copy # yes:本地压缩,no:远程压缩
        yes
        no
    - mode # 解压后的目录/文件权限
    

    13、Git模块

    Git模块作用:管理git仓库的git checkout以部署文件或软件。

    // 拉取git仓库commit id 为78d5d96的代码到指定目录
    [root@m01 ~]# ansible 10.4.7.7 -m git -a "repo=https://gitee.com/jasonminghao/dubbo-demo-service.git dest=/data/git_repo/dubbo-demo-service version=78d5d96 accept_hostkey=yes"
    

    模块参数

    - repo    # git仓库地址(https/ssh)
    - dest    # 将代码克隆到指定路径
    - version # 克隆指定版本分支/commit id
    - accept_hostkey # 类似于-o StrictHostKeyChecking=no
        yes
        no
    

    14、Systemd模块

    systemd模块作用:如果使用systemctl 管理程序的话,可以使用systemd模块,systemctl 可以控制程序,reload,start,status,restart等

    // 拉取git仓库commit id 为78d5d96的代码到指定目录
    [root@m01 ~]# ansible 10.4.7.7 -m systemd -a  "name=nfs state=started enabled=yes daemon_reload=true"
    

    模块参数

    - name     # 需要管理的服务名称
    - state    # 执行动作
        reloaded  # 平滑重启
        restarted # 重启
        started   # 启动
        stopped   # 停止
    - enabled # 是否开机启动
    - daemon_reload # 在执行任何其他操作之前运行daemon-reload,以确保systemd已经读取了任何更改。
         yes
         no
    
  • 相关阅读:
    建立一个能持续处理的C/S网络程序
    建立一个可以不停地接收客户端新的连接,但不能处理复杂的业务的C/S网络程序
    归并排序
    堆排序
    计数排序
    不要在PHP7中踩这些坑
    关于生活学习
    topthink/think-swoole 扩展包的使用 之 WebSocket
    PHP 三元运算符
    topthink/think-swoole 扩展包的使用 之 Task
  • 原文地址:https://www.cnblogs.com/jasonminghao/p/12635616.html
Copyright © 2011-2022 走看看