Some related modules of shell ansible

三、ansible的模块

- ansible的模块非常多:600+
- ansible依赖模块完成具体工作

3.1 command模块

功能:

- 用来执行命令的模块
- 默认模块,可以省略

格式:

- -m command -a 命令

查看各个节点的内存

    [root@master ~]# ansible myservers -a "free -m"
    192.168.31.65 | CHANGED | rc=0 >>
                  total        used        free      shared  buff/cache   available
    Mem:           1819         272        1387           9         158        1398
    Swap:          2047           0        2047
    192.168.31.66 | CHANGED | rc=0 >>
                  total        used        free      shared  buff/cache   available
    Mem:           1819         272        1383           9         164        1399
    Swap:          2047           0        2047

- command是默认的,可以省略

3.2 cron模块

作用:

- 定时周期完成特定的操作

格式

- -m  cron  -a  "选项"

选项

- minute:设置以分钟为单位来运行
- state:设置添加或者删除计划任务
  - present:添加计划任务
  - absent:删除计划任务
- job:设置要执行的操作
- special_time:设置特殊时间点
  - reboot:在系统重启的时候执行的操作
  - daily:每天都执行一次的计划任务
  - hourly:
  - weekly:
  - monthly:
  - yearly:

案例:每隔2分钟执行一次echo操作

    [root@master ~]# ansible myservers -m cron \
    > -a 'name="mycron" state="present" job="echo \"123\"">>/tmp/test.log" minute=*/2'

结果会在各个节点创建接话任务

    [root@master ~]# ansible myservers  -a 'crontab -l'
    192.168.31.65 | CHANGED | rc=0 >>
    #Ansible: None
    */2 * * * * echo "123">>/tmp/test.log
    192.168.31.66 | CHANGED | rc=0 >>
    #Ansible: None
    */2 * * * * echo "123">>/tmp/test.log

删除计划任务

    [root@master ~]# ansible myservers -m cron -a 'name="mycron" state="absent"'

3.3 user模块

作用:

- 管理各个节点上的用户

格式

- -m  user -a  "选项"

选项

- name:指定用户名
- password:指定用户的密码
- state:是创建还是删除
- createhome:是否创建家目录 yes|no
- remove:当state=absent时,remove=yes则表示连同家目录一起删除
- groups:指定用户的属组
- system:是否为系统用户
- uid:用户uid

案例:在所有被管理节点上创建用户tom

    [root@master ~]# ansible myservers -m user -a 'name="tom"'
    [root@master ~]# ansible myservers -a 'tail -n1 /etc/passwd'
    192.168.31.65 | CHANGED | rc=0 >>
    tom:x:1000:1000::/home/tom:/bin/bash
    192.168.31.66 | CHANGED | rc=0 >>
    tom:x:1000:1000::/home/tom:/bin/bash

案例:删除tom用户

    [root@master ~]# ansible myservers -m user -a 'name="tom" state="absent"'

案例:创建用户jerry,uid 为3000,所在组为gp001,shell为/bin/bash

    [root@master ~]# ansible myservers -m group -a "name=gp001"
    [root@master ~]# ansible myservers -m user \
    > -a 'name="jerry" uid="3000" group="gp001" shell="/bin/bash"'

3.4 copy模块

作用:

- 目录和文件的复制

格式

- -m  copy -a  "选项"

选项

- src 指定原文件或目录。
- dest 被复制到远程主机的本地对象文件或者文件夹
- mode 设置复制后文件的权限 ,比如644
- owner 指定复制后的文件的属主
- backup 设置是否先将源文件备份.设定值:yes/no 缺省为yes 
- force 是否强制覆盖同名文件.设定值:yes/no 缺省为no
- content 可替换 src,也就是直接用这个内容生成文件内容

案例1:将文件passwd复制到目标主机的tmp下,然后修改权限为777,属主改为jerry

    [root@master ~]# ansible myservers -m copy \
    > -a "src=/etc/passwd dest=/tmp mode=777 owner=jerry"

案例2:将两行内容复制tmp下,保存为文件b.txt

    i am zxhk
    i love golnag

    [root@master ~]# ansible myservers -m copy \
    > -a 'content="i am zxhk\ni love golang\n" dest=/tmp/b.txt' 

3.5 file模块

作用:

- 对文件进行操作的模块,可以操作的内容包括
- 创建空文件、拷贝、移动、删除、链接

格式

- -m  file -a  "选项"

选项

- follow 如果原来的文件是link,拷贝后依旧是link 
- force 强制执行
- group  设定一个群组拥有拷贝到远程节点的文件权限
- mode 等同于chmod
- owner 设定一个用户拥有拷贝到远程节点的文件权限
- path 目标路径,也可以用dest,name代替
- src  待拷贝文件/文件夹的原始位置。
- state 代表拷贝后是文件类型;
  - link代表最终是个软链接;
  - directory代表文件夹;
  - hard代表硬链接;
  - touch代表生成一个空文件;
  - absent代表删除

案例1:在每个主机的tmp下创建一个空文件,文件名是new.txt

    [root@master ~]# ansible all -m file -a 'path="/tmp/new.txt" state="touch"'

案例2:在每个主机的tmp的new.txt创建软链接new.txt.soft

    [root@master ~]# ansible all -m file \
    > -a 'src="/tmp/new.txt" path="/tmp/new.txt.soft" state="link"'

案例3:修改每个主机的tmp下new.txt的权限为000,属主为jerry

    [root@master ~]# ansible all -m file -a "path=/tmp/new.txt mode=000 owner=jerry"

3.6 ping模块

作用:

- 这是个测试模块,测试主机是否都正常连接

案例:

    [root@master ~]# ansible all -m ping
    192.168.31.65 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    192.168.31.66 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        }, 
        "changed": false, 
        "ping": "pong"
    }
    

3.7 service模块

作用:

- 这模块很重要,是用来管理服务的
- 管理centos6的服务器,只能用service模块

格式

- -m  service -a  "选项"

选项

- state 有多个子选项
  - started:启动服务
  - stopped:关闭服务
  - restarted:重启服务
  - reloaded:重读服务的配置文件
- enabled 表示是否设置开机自动启动
- name 表示要控制的服务的名称
- runlevel 设置在哪些级别下自动启动

案例:查看httpd服务运行状态

    [root@master ~]# ansible all -m command -a "systemctl status httpd"
    [root@master ~]# ansible all -m command -a "service httpd status

案例:启动httpd服务,并且设置为开机自动启动

    [root@master ~]# ansible all -m service -a 'name="httpd" state="started" enabled="on"'

3.8 systemd模块

作用:

- 这模块很重要,是用来管理服务的
- 管理centos7的服务器,可以用service和systemd,建议用systemd模块

格式

- -m  systemd -a  "选项"

选项

- state 有多个子选项
  - started:启动服务
  - stopped:关闭服务
  - restarted:重启服务
  - reloaded:重读服务的配置文件
- enabled 表示是否设置开机自动启动
- name 表示要控制的服务的名称
- runlevel 设置在哪些级别下自动启动

    [root@master ~]# ansible all -m systemd \
    > -a 'name="httpd.service" state="restarted" enabled="no"'

3.9 shell模块

作用:

- 与command模块类似,也是用于执行命令
- command只能执行简单命令
- shell模块可以执行复杂命令,可以使用变量

格式

- -m  shell -a  "选项"

案例:

    [root@master ~]# ansible all -m shell -a 'echo "123" | passwd --stdin jerry'

3.10 script模块

作用:

- 将一个脚本文件发送到被管理节点,并执行较

格式

- -m  scribe -a  "选项"

案例:

首先创建一个shell脚本

    [root@master ~]# cat /root/t.sh 
    #!/bin/bash
    useradd tom01
    mkdir /tmp/qq
    touch /tmp/baidu

使用ansible将脚本发送到被管理节点,并执行

    [root@master ~]# ansible all -m script -a '/home/t.sh'

3.11 yum模块

作用:

- 管理软件

格式

- -m  yum -a  "选项"

选项:

- name:软件名
- state:安装或者卸载
  - present
  - absent

案例:在所有节点上安装epel yum源

    [root@master ~]# ansible all -m yum -a 'name="epel-release" state="present"'

案例:在安装了epel源的节点上,安装nginx

    [root@master ~]# ansible all -m yum -a 'name="nginx" state="present"'

案例:启动nginx

    [root@master ~]# ansible all -m systemd  \
    > -a 'name="nginx.service" state="started" enabled="on"'

3.12 setup模块

作用:

- 收集各个节点的参数信息:facts

格式

- -m  setup

    [root@master ~]# ansible all -m setup
3.14 unarchive模块

作用:

- 将压缩包解压到目标主机的特定目录下

格式

- -m  unarchive -a  "选项"

选项:

- src:压解压的那个压缩包文件
- dest:指定解压到远程主机的哪个目录

案例:下载nginx的1.17.9版本,解压到远程主机的/usr/local/

    [root@master ~]# yum install wget -y
    [root@master ~]# wget http://nginx.org/download/nginx-1.17.9.tar.gz
    [root@master ~]# ansible all -m unarchive -a "src=nginx-1.17.9.tar.gz dest=/usr/local/"

3.15 reboot模块

作用:

- 重启远程主机

格式

- -m  reboot

    [root@master ~]# ansible all -m reboot

3.16 selinux模块

作用:

- 改变selinux的状态

格式

- -m  selinux -a  "选项"

选项:

- state:disabled

    [root@master ~]# ansible all -m selinux -a "state=disabled"

3.17 sysctl模块

作用:

- 用来修改内核参数

格式

- -m  sysctl  -a  "选项"

选项:

- sysctl_file:知道内核文件的文件名
- name:内核参数的名称
- value:内核参数的值

案例:实现路由转发功能

    [root@master ~]# ansible all -m sysctl \
    > -a 'sysctl_file=/etc/sysctl.conf name=net.ipv4.ip_forward value=1'

3.18 stat模块

作用:

- 用来显示文件的属性信息,比如时间戳信息、uid、gid、inode、md5值等等

格式

- -m  stat  -a  "选项"

选项:

- path:文件的绝对路径



案例:查看各个节点的/etc/passwd文件属性

    [root@master ~]# ansible all -m stat \
    > -a 'path="/etc/passwd" get_checksum="yes" checksum_algorithm="md5"'

3.19 replace模块

作用:

- 对字符串进行替换,支持正则表达式

格式

- -m  replace  -a  "选项"

选项

- path:指定目标文件
- regexp:要替换的目标字符串,也可以是一个表达式
- replace:将目标字符串替换为什么字符串
- backup:是否对原始文件仅备份

案例:将目标主机的/tmp/passwd中的bash替换为BASH

    [root@master ~]# ansible all -m replace
    > -a 'path=/tmp/passwd regexp=bash replace=BASH backup=yes'

Guess you like

Origin blog.csdn.net/lq_hello/article/details/106077555