• ansible常用模块


    ansible常用模块

    1. ansible常用模块使用详解

    ansible常用模块有:

    • ping
    • yum
    • template
    • copy
    • user
    • group
    • service
    • raw
    • command
    • shell
    • script
    • file

    ansible常用模块raw、command、shell的区别:

    • shell模块调用的/bin/sh指令执行
    • command模块不是调用的shell的指令,所以没有bash的环境变量
    • raw很多地方和shell类似,更多的地方建议使用shell和command模块。但是如果是使用老版本python,需要用到raw,又或者是客户端是路由器,因为没有安装python模块,那就需要使用raw模块了

    2. ansible常用模块之ping

    ping模块用于检查指定节点机器是否连通,用法很简单,不涉及参数,主机如果在线,则回复pong

    具体用法

    [root@ansible ansible]# ansible 192.168.160.137 -m ping
    192.168.160.137 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": false,
        "ping": "pong"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3. ansible常用模块之command

    command模块用于在远程主机上执行命令,ansible默认就是使用command模块。
    command模块有一个缺陷就是不能使用管道符和重定向功能。

    具体用法

    //查看受控主机的/tmp目录内容
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls /tmp'
    192.168.160.137 | CHANGED | rc=0 >>
    ansible_ansible.legacy.command_payload_5oag98gx
    vmware-root_912-2697663791
    
    //在受控主机的/tmp目录下新建一个文件test
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls /tmp'
    192.168.160.137 | CHANGED | rc=0 >>
    ansible_ansible.legacy.command_payload_5oag98gx
    vmware-root_912-2697663791
    [root@ansible ansible]# ansible 192.168.160.137 -a 'touch /tmp/test'
    192.168.160.137 | CHANGED | rc=0 >>
    
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls /tmp'
    192.168.160.137 | CHANGED | rc=0 >>
    ansible_ansible.legacy.command_payload_vr17igqu
    test
    vmware-root_912-2697663791
    
    //command模块不支持管道符,不支持重定向
    [root@ansible ansible]# ansible 192.168.160.137 -a 'echo "hello world"> /tmp/test'
    192.168.160.137 | CHANGED | rc=0 >>
    hello world> /tmp/test
    [root@ansible ansible]# ansible 192.168.160.137 -a 'cat /tmp/test'
    192.168.160.137 | CHANGED | rc=0 >>
    
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ps -ef|grep vsftpd'
    192.168.160.137 | FAILED | rc=1 >>
    error: unsupported SysV option
    
    Usage:
     ps [options]
    
     Try 'ps --help '
      or 'ps --help '
     for additional help text.
    
    For more details see ps(1).non-zero return code
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    4. ansible常用模块之raw

    raw模块用于在远程主机上执行命令,其支持管道符与重定向

    具体用法

    //支持重定向
    [root@ansible ansible]# ansible 192.168.160.137 -m raw -a 'echo "hello world"> /tmp/test'
    192.168.160.137 | CHANGED | rc=0 >>
    Shared connection to 192.168.160.137 closed.
    
    [root@ansible ansible]# ansible 192.168.160.137 -a 'cat /tmp/test'
    192.168.160.137 | CHANGED | rc=0 >>
    hello world
    
    //支持管道符
    [root@ansible ansible]# ansible 192.168.160.137 -m raw -a 'cat /tmp/test|grep -Eo hello'
    192.168.160.137 | CHANGED | rc=0 >>
    hello
    Shared connection to 192.168.160.137 closed.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    5. ansible常用模块之shell

    shell模块用于在受控机上执行受控机上的脚本,亦可直接在受控机上执行命令
    shell模块亦支持管道与重定向。

    具体用法

    //查看受控机上的脚本
    [root@yxt01 ~]# mkdir /scripts
    [root@yxt01 ~]# vim /scripts/test.sh
    #!/bin/bash
    
    for i in $(seq 10);do
        echo $i
    done
    [root@yxt01 ~]# chmod +x /scripts/test.sh 
    
    //使用shell模块在受控机上执行受控机上的脚本
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a /scripts/test.sh
    192.168.160.137 | CHANGED | rc=0 >>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    6. ansible常用模块之script

    script模块用于在受控机上执行主控机上的脚本

    具体用法

    //控制节点编写脚本
    [root@ansible ansible]# mkdir scripts
    [root@ansible ansible]# vim scripts/a.sh
    #!/bin/bash
    
    echo "123456789" > /tmp/yxt
    [root@ansible ansible]# chmod +x scripts/a.sh 
    [root@ansible ansible]# ansible 192.168.160.137 -m script -a /etc/ansible/scripts/a.sh 
    192.168.160.137 | CHANGED => {
        "changed": true,
        "rc": 0,
        "stderr": "Shared connection to 192.168.160.137 closed.\r\n",
        "stderr_lines": [
            "Shared connection to 192.168.160.137 closed."
        ],
        "stdout": "",
        "stdout_lines": []
    }
    //查看受控机上的/tmp/yxt文件内容
    [root@ansible ansible]# ansible 192.168.160.137 -a 'cat /tmp/yxt'
    192.168.160.137 | CHANGED | rc=0 >>
    123456789
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    7. ansible常用模块之template

    template模块用于生成一个模板,并可将其传输至远程主机上。

    具体用法

    //将控制节点的源传到受控主机
    [root@ansible ansible]# ansible 192.168.160.137 -m template -a 'src=/etc/yum.repos.d/base.repo dest=/etc/yum.repos.d/yxt.repo'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "checksum": "560603bdf5025f4792d05af5c847c331021ce0bd",
        "dest": "/etc/yum.repos.d/yxt.repo",
        "gid": 0,
        "group": "root",
        "md5sum": "8c363e0c07338b6ac086febc52347eec",
        "mode": "0644",
        "owner": "root",
        "size": 363,
        "src": "/root/.ansible/tmp/ansible-tmp-1666347840.691359-46642-101169141864363/source",
        "state": "file",
        "uid": 0
    }
    //查看受控机是否传输成功
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls /etc/yum.repos.d'
    192.168.160.137 | CHANGED | rc=0 >>
    yxt.repo
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    8. ansible常用模块之yum

    yum模块用于在指定节点机器上通过yum管理软件,其支持的参数主要有两个

    • name:要管理的包名
    • state:要进行的操作

    state常用的值:

    • latest:安装软件
    • installed:安装软件
    • present:安装软件
    • removed:卸载软件
    • absent:卸载软件

    若想使用yum来管理软件,请确保受控机上的yum源无异常。

    具体用法

    //在ansible主机上使用yum模块在受控机上安装httpd
    [root@ansible ansible]# ansible 192.168.160.137 -m yum -a 'name=httpd state=present'
    192.168.160.137 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": false,
        "msg": "Nothing to do",
        "rc": 0,
        "results": []
    }
    
    //查看受控机上是否安装了vsftpd
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a 'rpm -qa|grep httpd'
    192.168.160.137 | CHANGED | rc=0 >>
    centos-logos-httpd-85.8-2.el8.noarch
    httpd-tools-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64
    httpd-filesystem-2.4.37-43.module_el8.5.0+1022+b541f3b1.noarch
    httpd-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64
    
    //安装多个软件包
    [root@ansible ansible]# ansible 192.168.160.137 -m yum -a 'name=httpd,vim,unzip state=present'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    9. ansible常用模块之copy

    copy模块用于复制文件至远程受控机。

    具体用法

    [root@ansible ansible]# ansible 192.168.160.137 -m copy -a 'src=/etc/ansible/scripts/a.sh dest=/tmp/'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "checksum": "ab84c988002f9a200bb48f94998796fc4ec4f08f",
        "dest": "/tmp/a.sh",
        "gid": 0,
        "group": "root",
        "md5sum": "598a8c03922c68043f9a641e9beba08e",
        "mode": "0644",
        "owner": "root",
        "size": 41,
        "src": "/root/.ansible/tmp/ansible-tmp-1666350011.7698014-47306-233152996046928/source",
        "state": "file",
        "uid": 0
    }
    //查看受控机上的/tmp
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls /tmp/'
    192.168.160.137 | CHANGED | rc=0 >>
    ansible_ansible.legacy.command_payload_xnu2k8sp
    a.sh
    test
    vmware-root_912-2697663791
    yxt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    10. ansible常用模块之group

    group模块用于在受控机上添加或删除组。

    name用于指定group的组名,string类型,必填项
    
    state用于指定用户组在远程主机上是否被更改或删除,string类型。
    有两个选项:absent,present。默认值为present,absent为删除组。
    
    gid用于设定用户组gid,int类型,默认值为空
    
    system用于指定创建的用户组是否为系统组,布尔类型,可用选项false,true,默认为false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    具体用法

    //在受控机上添加一个系统组,其gid为306,组名为mysql
    [root@ansible ansible]# ansible 192.168.160.137 -m group -a 'name=mysql gid=306 state=present'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "gid": 306,
        "name": "mysql",
        "state": "present",
        "system": false
    }
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a 'grep mysql /etc/group'
    192.168.160.137 | CHANGED | rc=0 >>
    mysql:x:306:
    
    //删除受控机上的mysql组
    [root@ansible ansible]# ansible 192.168.160.137 -m group -a 'name=mysql state=absent'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "gid": 306,
        "name": "mysql",
        "state": "absent",
        "system": false
    }
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a 'grep mysql /etc/group'
    192.168.160.137 | FAILED | rc=1 >>
    non-zero return code
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    11. ansible常用模块之user

    user模块用于管理受控机的用户帐号。

    name参数:必须参数,用于指定要操作的用户名称,可以使用别名 user。
    
    group参数:此参数用于指定用户所在的基本组。
    
    uid参数:此参数用于指定用户的 uid 号。
    
    system参数:此参数用于指定是否创建系统账号
    
    shell参数:此参数用于指定用户的默认 shell。
    
    state参数:此参数用于指定用户是否存在于远程主机中,可选值有 present、absent,默认值为 present,表示用户需要存在,当设置为 absent 时表示删除用户。
    
    remove参数:当 state 的值设置为 absent 时,表示要删除远程主机中的用户。但是在删除用户时,
    不会删除用户的家目录等信息,这是因为 remove 参数的默认值为 no,如果设置为yes,在删除用户
    的同时,会删除用户的家目录。当 state=absent 并且 remove=yes 时,相当于执行 “userdel --remove” 命令。
    
    password参数:此参数用于指定用户的密码。但是这个密码不能是明文的密码,而是一个对明文密码
    ”加密后”的字符串,相当于 /etc/shadow 文件中的密码字段,是一个对明文密码进行哈希后的字符串,
    你可以在 python 的命令提示符下输入如下命令,生成明文密码对应的加密字符串。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    具体用法

    //在受控机上添加一个系统用户,用户名为mysql,uid为306,设置其shell为/sbin/nologin,无家目录
    [root@ansible ansible]# ansible 192.168.160.137 -m user -a 'name=mysql uid=306 system=yes create_home=no shell=/sbin/nologin state=present'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "comment": "",
        "create_home": false,
        "group": 100,
        "home": "/home/mysql",
        "name": "mysql",
        "shell": "/sbin/nologin",
        "state": "present",
        "system": true,
        "uid": 306
    }
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a 'grep mysql /etc/passwd'
    192.168.160.137 | CHANGED | rc=0 >>
    mysql:x:306:100::/home/mysql:/sbin/nologin
    
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a 'ls /home'
    192.168.160.137 | CHANGED | rc=0 >>
    yexiaotian
    
    //修改mysql用户的uid为366
    [root@ansible ansible]# ansible 192.168.160.137 -m user -a 'name=mysql uid=366'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "append": false,
        "changed": true,
        "comment": "",
        "group": 100,
        "home": "/home/mysql",
        "move_home": false,
        "name": "mysql",
        "shell": "/sbin/nologin",
        "state": "present",
        "uid": 366
    }
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a 'grep mysql /etc/passwd'
    192.168.160.137 | CHANGED | rc=0 >>
    mysql:x:366:100::/home/mysql:/sbin/nologin
    
    //删除受控机上的mysql用户
    [root@ansible ansible]# ansible 192.168.160.137 -m user -a 'name=mysql state=absent'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "force": false,
        "name": "mysql",
        "remove": false,
        "state": "absent"
    }
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a 'grep mysql /etc/passwd'
    192.168.160.137 | FAILED | rc=1 >>
    non-zero return code
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    12. ansible常用模块之service

    service模块用于管理受控机上的服务。

    具体用法

    name参数:此参数用于指定需要操作的服务名称,比如 httpd。
    
    state参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将 state 
    的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参
    数的可用值有 started、stopped、restarted、reloaded。
    
    enabled参数:此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机
    启动,设置为 no 表示不会开机启动。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    //查看受控机上的httpd服务是否启动
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a 'systemctl is-active httpd'
    192.168.160.137 | FAILED | rc=3 >>
    inactivenon-zero return code
    
    //启动受控机上的httpd服务
    [root@ansible ansible]# ansible 192.168.160.137 -m service -a 'name=httpd state=started'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "name": "httpd",
        "state": "started",
        "status": {
            "ActiveEnterTimestamp": "Fri 2022-10-21 19:59:40 CST",
            "ActiveEnterTimestampMonotonic": "37169140809",
    .....省略
    
    //查看受控机上的httpd服务是否启动
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a 'systemctl is-active httpd'
    192.168.160.137 | CHANGED | rc=0 >>
    active
    
    //查看受控机上的httpd服务是否开机自动启动
    [root@ansible ansible]# ansible 192.168.160.137 -m service -a 'name=httpd enabled=yes'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "enabled": true,
        "name": "httpd",
        "status": {
            "ActiveEnterTimestamp": "Fri 2022-10-21 20:01:35 CST",
            "ActiveEnterTimestampMonotonic": "37284140964",
            "ActiveExitTimestamp": "Fri 2022-10-21 19:59:49 CS
    .....省略
    
    //查看受控机上的httpd服务是否开机自动启动
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a 'systemctl is-enabled httpd'
    192.168.160.137 | CHANGED | rc=0 >>
    enabled
    
    //停止受控机上的httpd服务
    [root@ansible ansible]# ansible 192.168.160.137 -m service -a 'name=httpd state=stopped'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "name": "httpd",
        "state": "stopped",
        "status": {
            "ActiveEnterTimestamp": "Fri 2022-10-21 20:01:35 CST",
            "ActiveEnterTimestampMonotonic": "37284140964",
    .....省略
    [root@ansible ansible]# ansible 192.168.160.137 -m shell -a 'systemctl is-active httpd'
    192.168.160.137 | FAILED | rc=3 >>
    inactivenon-zero return code
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ss -anlt'
    192.168.160.137 | CHANGED | rc=0 >>
    State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
    LISTEN 0      128          0.0.0.0:22        0.0.0.0:*          
    LISTEN 0      128             [::]:22           [::]:*
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65

    13. ansible常用模块之file

    file 模块可以帮助我们完成一些对文件的基本操作

    state参数

    state=directory 在远程主机上创建一个名为 data 的目录,如果存在则不会做操作。
    state=touch 在远程主机上创建一个名为 testfile1 的文件,如果 testfile1 文件已经存在并且文件内有内容,则只会更新文件的时间戳,与 touch 命令的作用相同。
    state=link 在远程主机上为 testfile1 文件创建软链接文件
    state=hard 在远程主机上上为 testfile1 文件创建硬链接文件
    state=absent 删除文件,删除时不用区分目标是文件、目录、还是链接
    state=src 在state设置为link或者hard时,表示我们想要创建一个软链或者硬链,所以,我们必须指明软链或硬链链接的哪个文件,通过src参数即可指定链接源
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    path参数

    指定文件 如果远程主机上没有该文件,则进行创建
    
    • 1

    mod参数

    权限 可以在添加时设置特殊权限,前提要有执行权限( set 粘滞位)
    
    • 1

    owner和group参数

    属主和属组
    
    • 1

    具体用法

    //在远程主机上创建一个名为 data 的目录
    [root@ansible ansible]# ansible 192.168.160.137 -m file -a 'path=/root/data state=directory'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "gid": 0,
        "group": "root",
        "mode": "0755",
        "owner": "root",
        "path": "/root/data",
        "size": 6,
        "state": "directory",
        "uid": 0
    }
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls -l /root'
    192.168.160.137 | CHANGED | rc=0 >>
    total 0
    drwxr-xr-x 2 root root 6 Oct 21 20:17 data
    
    //在远程主机上创建一个名为abc的文件
    [root@ansible ansible]# ansible 192.168.160.137 -m file -a 'path=/root/abc state=touch'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "dest": "/root/abc",
        "gid": 0,
        "group": "root",
        "mode": "0644",
        "owner": "root",
        "size": 0,
        "state": "file",
        "uid": 0
    }
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls -l /root'
    192.168.160.137 | CHANGED | rc=0 >>
    total 0
    -rw-r--r-- 1 root root 0 Oct 21 20:21 abc
    drwxr-xr-x 2 root root 6 Oct 21 20:17 data
    
    //在远程主机上为abc文件创建软链接文件,软链接名为 1.link
    [root@ansible ansible]# ansible 192.168.160.137 -m file -a 'path=/root/1.link state=link src=/root/abc'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "dest": "/root/1.link",
        "gid": 0,
        "group": "root",
        "mode": "0777",
        "owner": "root",
        "size": 9,
        "src": "/root/abc",
        "state": "link",
        "uid": 0
    }
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls -l /root'
    192.168.160.137 | CHANGED | rc=0 >>
    total 0
    lrwxrwxrwx 1 root root 9 Oct 21 20:23 1.link -> /root/abc
    -rw-r--r-- 1 root root 0 Oct 21 20:21 abc
    drwxr-xr-x 2 root root 6 Oct 21 20:17 data
    
    //在远程主机上上为 abc文件创建硬链接文件,硬链接名为 1.hard
    [root@ansible ansible]# ansible 192.168.160.137 -m file -a 'path=/root/1.hard state=hard src=/root/abc'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "dest": "/root/1.hard",
        "gid": 0,
        "group": "root",
        "mode": "0644",
        "owner": "root",
        "size": 0,
        "src": "/root/abc",
        "state": "hard",
        "uid": 0
    }
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls -l /root'
    192.168.160.137 | CHANGED | rc=0 >>
    total 0
    -rw-r--r-- 2 root root 0 Oct 21 20:21 1.hard
    lrwxrwxrwx 1 root root 9 Oct 21 20:23 1.link -> /root/abc
    -rw-r--r-- 2 root root 0 Oct 21 20:21 abc
    drwxr-xr-x 2 root root 6 Oct 21 20:17 data
    
    注意:在创建链接文件时,如果源文件不存在,或者链接文件与其他文件同名时,强制覆盖同名文件或者创建链接文件
    
    //删除远程机器上的指定文件或目录
    [root@ansible ansible]# ansible 192.168.160.137 -m file -a 'path=/root/data state=absent'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "path": "/root/data",
        "state": "absent"
    }
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls -l /root'
    192.168.160.137 | CHANGED | rc=0 >>
    total 0
    -rw-r--r-- 2 root root 0 Oct 21 20:21 1.hard
    lrwxrwxrwx 1 root root 9 Oct 21 20:23 1.link -> /root/abc
    -rw-r--r-- 2 root root 0 Oct 21 20:21 abc
    
    // 在创建文件或目录的时候指定属主,或者修改远程主机上的文件或目录的属主
    [root@ansible ansible]# ansible 192.168.160.137 -m file -a 'path=/root/abc state=touch owner=yexiaotian group=apache'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "dest": "/root/abc",
        "gid": 48,
        "group": "apache",
        "mode": "0644",
        "owner": "yexiaotian",
        "size": 0,
        "state": "hard",
        "uid": 4000
    }
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls -l /root'
    192.168.160.137 | CHANGED | rc=0 >>
    total 0
    -rw-r--r-- 2 yexiaotian apache 0 Oct 21 20:30 1.hard
    lrwxrwxrwx 1 root       root   9 Oct 21 20:23 1.link -> /root/abc
    -rw-r--r-- 2 yexiaotian apache 0 Oct 21 20:30 abc
    
    //在创建文件或目录的时候指定权限,或者修改远程主机上的文件或目录的权限
    [root@ansible ansible]# ansible 192.168.160.137 -m file -a 'path=/root/abc state=touch mode=755'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "dest": "/root/abc",
        "gid": 48,
        "group": "apache",
        "mode": "0755",
        "owner": "yexiaotian",
        "size": 0,
        "state": "hard",
        "uid": 4000
    }
    [root@ansible ansible]# ansible 192.168.160.137 -a 'ls -l /root'
    192.168.160.137 | CHANGED | rc=0 >>
    total 0
    -rwxr-xr-x 2 yexiaotian apache 0 Oct 21 20:31 1.hard
    lrwxrwxrwx 1 root       root   9 Oct 21 20:23 1.link -> /root/abc
    -rwxr-xr-x 2 yexiaotian apache 0 Oct 21 20:31 abc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156

    扩展模块之 yum_repository模块**

    yum_repository 模块可以帮助我们管理远程主机上的 yum 仓库

    name参数: 必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中
    每个仓库对应的”中括号”内的仓库ID
    
    baseurl参数: 此参数用于设置 yum 仓库的 baseurl。
    
    description参数: 此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”na
    me字段”对应的内容。
    
    file参数: 此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此
    参数的情况下,默认以 name参数的仓库ID作为”.repo”配置文件的文件名前缀,同一个”.repo” 配置
    文件中可以存在多个 yum 源。
    
    enabled参数: 此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum
    源,设置为 no表示不启用对应的 yum 源
    
    gpgcheck参数: 此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置
    为 yes 表示开启包验证功能。
    
    gpgkey参数: 当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥
    
    state参数: 默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    具体用法

    [root@ansible ansible]# ansible 192.168.160.137 -m yum_repository -a 'file=yxt.repo name="BaseOS" description=BaseOS baseurl="http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/$basearch/os/" gpgcheck=no enabled=yes'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "repo": "BaseOS",
        "state": "present"
    }
    [root@ansible ansible]# ansible 192.168.160.137 -m yum_repository -a 'file=yxt.repo name="AppStream" description=AppStream baseurl="http://mirrors.aliyun.com/centos-vault/8.5.2111/AppStream/$basearch/os/" gpgcheck=no enabled=yes'
    192.168.160.137 | CHANGED => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": true,
        "repo": "AppStream",
        "state": "present"
    }
    
    [root@ansible ansible]# ansible 192.168.160.137 -a 'cat /etc/yum.repos.d/yxt.repo.repo'
    192.168.160.137 | CHANGED | rc=0 >>
    [BaseOS]
    async = 1
    baseurl = http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/$basearch/os/
    enabled = 1
    gpgcheck = 0
    name = BaseOS
    
    [AppStream]
    async = 1
    baseurl = http://mirrors.aliyun.com/centos-vault/8.5.2111/AppStream/$basearch/os/
    enabled = 1
    gpgcheck = 0
    name = AppStream
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
  • 相关阅读:
    【基础框架】Spring_下
    SSM - Springboot - MyBatis-Plus 全栈体系(十四)
    11.22Spring 学习day02
    springboot和springcloud的区别是什么?
    使用JMX监控ZooKeeper和Kafka
    商业化广告--体系学习-- 2 -- 行业蓝图篇 -- 广告产品与商业模式
    如何在聊天记录中实时查找大量的微信群二维码
    C++图解模板
    Go协程,用通道传输数据
    自然语言处理(NLP)技术
  • 原文地址:https://blog.csdn.net/weixin_52813907/article/details/127450355