三、ansible常用模块

ansible常用模块

ansibke-doc -l

查看当前支持的模块

ansibke-doc -s 模块名

查看该模块的参数

一、命令类模块

1、ping 模块

ansible all -m ping 检查所有测试远程主机的运行状态

[root@k8s-master-1 ~]# ansible web -m ping
192.168.134.137 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.134.138 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

2、command模块

功能:在远程主机上执行shell命令,为默认模块 可省略 -m选项;

注意:不支持管道命令 |

command模块常用的参数:

参数

说明

chdir DIR

执行ansible时,切换到指定的目录

creates file

如果file文件存在,则不执行命令

removes file

如果文件存在,则执行命令

free_from

要执行的linux指令,一般使用ansible的-a参数代替

executable

切换shell来执行命令,需要使用命令的绝对路径

示例:

1、基础用法:在远端主机上执行命令
[root@k8s-master-1 log]# ansible web -m command -a "id"
192.168.134.138 | CHANGED | rc=0 >>
uid=0(root) gid=0(root) 组=0(root)

2、在被控端主机切换到指定目录执行
[root@k8s-master-1 log]# ansible web -m command -a "chdir=/tmp/ pwd"
192.168.134.138 | CHANGED | rc=0 >>
/tmp

3、creates:指定的文件存在是,就不执行命令
[root@k8s-master-1 ansible]# ansible web -m command -a "creates=/etc/passwd ls"
192.168.134.138 | SUCCESS | rc=0 >>
skipped, since /etc/passwd exists   已跳过,因为/etc/passwd存在

4、removes:与creates相反,指定的文件存在,则执行对应命令,不存在 就不执行
[root@k8s-master-1 log]# ansible web -m command -a "removes=/tmp/test cat /tmp/abc.yaml"
192.168.134.138 | CHANGED | rc=0 >>
123 hello

[root@k8s-master-1 log]# ansible web -m command -a "removes=/tmp/test1 cat /tmp/abc.yaml"
192.168.134.138 | SUCCESS | rc=0 >>
skipped, since /tmp/test1 does not exist    已跳过,因为/tmp/test1不存在

3、shell模块

功能:在远程主机上执行shell命令,支持管道等特殊符号的操作,比command模块使用广泛

shell模块常用的参数:

参数

说明

chdir DIR

执行ansible时,切换到指定的目录

creates file

如果file文件存在,则不执行命令

removes file

如果文件存在,则执行命令

free_from

需要执行的脚本

cmd

运行的命令后跟可选参数

示例:

[root@k8s-master-1 log]# ansible web -m shell -a "hostname"
192.168.134.138 | CHANGED | rc=0 >>
k8s-node-2
[root@k8s-master-1 log]# 
[root@k8s-master-1 log]# ansible web -m shell -a "echo "123456" > /tmp/abc.yaml"
192.168.134.138 | CHANGED | rc=0 >>

[root@k8s-master-1 log]# ansible web -m shell -a "cat /tmp/abc.yaml"
192.168.134.138 | CHANGED | rc=0 >>
123456
[root@k8s-master-1 log]# ansible web -m shell -a "ps -ef |grep kubelet"

4、script模块

功能:在远程主机上运行本地的脚本,该模块直接指定脚本的路径即可,

语法:-m script -a "/PATH/TO/SCRIPT_FILE";

参数:

creates:如果其后跟的文件存在,就不执行

removes:如果其后跟的文件存在,就执行

示例:

1、先往文本写个内容
[root@k8s-master-1 log]# ansible web -m shell -a "echo "123456" > /tmp/abc.yaml"

2、写个脚本,并添加执行权限
[root@k8s-master-1 test]# cat file.sh 
#!/bin/bash
cat /tmp/abc.yaml

3、执行脚本 查看
[root@k8s-master-1 ~]# ansible web -m script -a "removes=/tmp/test /etc/ansible/test/file.sh"
192.168.134.138 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.134.138 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.134.138 closed."
    ], 
    "stdout": "123456\r\n", 
    "stdout_lines": [
        "123456"
    ]
}

或者
[root@k8s-master-1 test]# ansible web -m script -a "/etc/ansible/test/file.sh"
192.168.134.138 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.134.138 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.134.138 closed."
    ], 
    "stdout": "123456\r\n", 
    "stdout_lines": [
        "123456"
    ]
}

示例2:
编写脚本 > 第二行回被替换, >> 不会替换
[root@k8s-master-1 test]# cat file.sh 

#!/bin/bash
date >> /tmp/a.log
df -lh >> /tmp/a.log
执行脚本

[root@k8s-master-1 test]# ansible web -m script -a "/etc/ansible/test/file.sh"
192.168.134.138 | CHANGED => {
    "changed": true, 
    "rc": 0, 
    "stderr": "Shared connection to 192.168.134.138 closed.\r\n", 
    "stderr_lines": [
        "Shared connection to 192.168.134.138 closed."
    ], 
    "stdout": "", 
    "stdout_lines": []
}

查看

[root@k8s-master-1 test]# ansible web -m shell -a "cat /tmp/a.log"
192.168.134.138 | CHANGED | rc=0 >>
2023年 07月 12日 星期三 16:27:31 CST
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   36G  8.0G   28G   23% /
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G  9.2M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1               1014M  179M  836M   18% /boot
tmpfs                    378M   12K  378M    1% /run/user/42
tmpfs                    378M     0  378M    0% /run/user/0

二、文件操作模块

1、copy模块

功能:从ansible 控制端复制文件到远程主机

主要参数:

参数

说明

src

要复制文件的源路径,若文件为目录,默认进行递归复制,如果路径以“/”结尾,仅会复制路径下的内容,该目录本身不会复制,如果不带“/”,目录本身和目录下的内容都会复制过去。

dest

目标的绝对路径,如果源是文件夹,目标也必须是文件件,不存在就创建

backup

当源文件内容发生改变后,如果目标主机已经有源文件,会事先备份,防止覆盖

mode

文件复制到远程主机并设定权限,默认file=644,directory=755

owner

文件复制到远程主机并设定属主,默认为root

group

文件复制到远程主机并设定属组,默认为root

content

将目标文件的内容,指定为content所带的字符串

force

当目标主机包含该文件,但内容不同时,设为“yes”,表示强制覆盖,设为“no”,表示目标主机的目标位置不存在该文件才复制。默认为“yes”。

示例:

1、将文件volumes目录复制到远程主机,并设置属主组和权限
[root@k8s-master-1 volumes]# ansible web -m copy -a "src=//k8s/kubernetes/cfg/test/volumes dest=/k8s/kubernetes/cfg/test group=root owner=root mode=755"
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "b355193d17961a9c00f7c50ddc01c65bb93f2a69", 
    "dest": "/k8s/kubernetes/cfg/test/volumes/deployment.yaml", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "f317d3a81370d6bb6b4ee86eadcbc371", 
    "mode": "0755", 
    "owner": "root", 
    "size": 835, 
    "src": "/root/.ansible/tmp/ansible-tmp-1689213870.02-2401-63763329438026/source", 
    "state": "file", 
    "uid": 0
}
[root@k8s-master-1 volumes]# ansible web -m shell -a "chdir=/k8s/kubernetes/cfg/test ls"
192.168.134.138 | CHANGED | rc=0 >>
pv-pvc-test
volumes

2、将文件volumes/deployment.yaml 复制到远程主机,并设置属主组和权限,并备份
[root@k8s-master-1 volumes]# ansible web -m copy -a "src=//k8s/kubernetes/cfg/test/volumes/ dest=/k8s/kubernetes/cfg/test/volumes/ group=root owner=root mode=755 backup=yes"
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "backup_file": "/k8s/kubernetes/cfg/test/volumes/deployment.yaml.21653.2023-07-13@10:18:38~", 
    "changed": true, 
    "checksum": "fad8f434d317ad952d5ea498293180547bfeac35", 
    "dest": "/k8s/kubernetes/cfg/test/volumes/deployment.yaml", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "3dd04ad816026f5cabd39dc2688280f6", 
    "mode": "0755", 
    "owner": "root", 
    "size": 841, 
    "src": "/root/.ansible/tmp/ansible-tmp-1689214717.36-2913-65910019380631/source", 
    "state": "file", 
    "uid": 0
}

[root@k8s-master-1 volumes]# ansible web -m shell -a "chdir=/k8s/kubernetes/cfg/test/volumes ls"
192.168.134.138 | CHANGED | rc=0 >>
deployment.yaml
deployment.yaml.21653.2023-07-13@10:18:38~

2、fetch模块

功能:从客户端取文件(只能是文件,不支持目录)至管理端的目录里,与copy相反,如果一定要拉取目录,可以先将目录打包,再拉取。

主要参数:

参数

说明

src

复制的源文件路径,源文件只能是文件

dest

目标绝对路径

示例:

1、把远程主机的文件拷贝到本机的asd目录下
[root@k8s-master-1 test]# ansible web -m fetch -a "src=/k8s/kubernetes/cfg/test/volumes/deployment.yaml dest=/etc/ansible/test/asd/"
192.168.134.138 | CHANGED => {
    "changed": true, 
    "checksum": "fad8f434d317ad952d5ea498293180547bfeac35", 
    "dest": "/etc/ansible/test/asd/192.168.134.138/k8s/kubernetes/cfg/test/volumes/deployment.yaml", 
    "md5sum": "3dd04ad816026f5cabd39dc2688280f6", 
    "remote_checksum": "fad8f434d317ad952d5ea498293180547bfeac35", 
    "remote_md5sum": null
}
注意:把远程主机文件拷贝到本机时,会为每个远程主机建立一个文件夹,名称就是该远程主机的ip地址,然后把文件分别放到对应主机的目录下
[root@k8s-master-1 test]# tree asd
asd
└── 192.168.134.138
    └── k8s
        └── kubernetes
            └── cfg
                └── test
                    └── volumes
                        └── deployment.yaml

2、把目录拷贝到本地
先把目录打包
[root@k8s-master-1 asd]# ansible web -m shell -a "tar -cvf /k8s/kubernetes/cfg/test/volumes.tar /k8s/kubernetes/cfg/test/volumes"
在拷贝
[root@k8s-master-1 asd]# ansible web -m fetch -a "src=/k8s/kubernetes/cfg/test/volumes.tar dest=/etc/ansible/test/asd/"
192.168.134.138 | CHANGED => {
    "changed": true, 
    "checksum": "8166e0877c7f281312146f37d49d699f67ff1256", 
    "dest": "/etc/ansible/test/asd/192.168.134.138/k8s/kubernetes/cfg/test/volumes.tar", 
    "md5sum": "46e465c65910d5a0288c746c8fbfc9e9", 
    "remote_checksum": "8166e0877c7f281312146f37d49d699f67ff1256", 
    "remote_md5sum": null
}
[root@k8s-master-1 test]# tree asd
asd
└── 192.168.134.138
    └── k8s
        └── kubernetes
            └── cfg
                └── test
                    └── volumes.tar

3、file模块

功能:为被控端创建文件或者目录,设定权限和属性

参数

说明

path

指定远程服务器的路径,也可以写成'dest','name'

state

状态,有以下值:

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

touch:如果文件不存在,就创建一个新文件,如果文件存在,则更新其最后修改时间

file:即使文件不存在,也不回被创建

link:创建软连接

hard:创建硬链接

absent:删除目录,文件或者取消连接文件

dest

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

mode

文件复制到远程主机并设定权限,默认file=644,directory=755

owner

文件复制到远程主机并设定属主,默认为root

group

文件复制到远程主机并设定属组,默认为root

recurese

递归修改

示例:

1、创建一个文件
[root@k8s-master-1 test]# ansible web -m file -a "path=/k8s/kubernetes/cfg/test/volumes/test.yaml state=touch"
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/k8s/kubernetes/cfg/test/volumes/test.yaml", 
    "gid": 0, 
    "group": "root", 
    "mode": "0644", 
    "owner": "root", 
    "size": 0, 
    "state": "file", 
    "uid": 0
}

[root@k8s-master-1 test]# ansible web -m shell -a "chdir=/k8s/kubernetes/cfg/test/volumes/ ls"
192.168.134.138 | CHANGED | rc=0 >>
deployment.yaml
test.yaml

2、创建目录
[root@k8s-master-1 test]# ansible web -m file -a "path=/k8s/kubernetes/cfg/test/volumes/test/asd state=directory"
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 0, 
    "group": "root", 
    "mode": "0755", 
    "owner": "root", 
    "path": "/k8s/kubernetes/cfg/test/volumes/test/asd", 
    "size": 6, 
    "state": "directory", 
    "uid": 0
}

3、为test.yaml创建软连接
[root@k8s-master-1 test]# ansible web -m file -a "src=/k8s/kubernetes/cfg/test/volumes/test.yaml dest=/k8s/kubernetes/cfg/test/volumes/test.yaml.link state=link"
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "dest": "/k8s/kubernetes/cfg/test/volumes/test.yaml.link", 
    "gid": 0, 
    "group": "root", 
    "mode": "0777", 
    "owner": "root", 
    "size": 42, 
    "src": "/k8s/kubernetes/cfg/test/volumes/test.yaml", 
    "state": "link", 
    "uid": 0
}

[root@k8s-master-1 test]# ansible web -m shell -a "chdir=/k8s/kubernetes/cfg/test/volumes/ ls"
192.168.134.138 | CHANGED | rc=0 >>
deployment.yaml
test
test.yaml
test.yaml.link

4、删除以上示例中创建的目录和文件夹
[root@k8s-master-1 test]# ansible web -m file -a "path=/k8s/kubernetes/cfg/test/volumes/test.yaml state=absent"
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "path": "/k8s/kubernetes/cfg/test/volumes/test.yaml", 
    "state": "absent"
}

[root@k8s-master-1 test]# 
[root@k8s-master-1 test]# ansible web -m file -a "path=/k8s/kubernetes/cfg/test/volumes/test.yaml.link state=absent"
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "path": "/k8s/kubernetes/cfg/test/volumes/test.yaml.link", 
    "state": "absent"
}

[root@k8s-master-1 test]# ansible web -m file -a "path=/k8s/kubernetes/cfg/test/volumes/test/asd state=absent"
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "path": "/k8s/kubernetes/cfg/test/volumes/test/asd", 
    "state": "absent"
}

4、lineinfile模块

功能:修改或删除文件内容,与系统中的sed命令类似;

参数:

参数

说明

path

指定要操作的文件

regexp

使用正则表达式匹配对应的行

line

修改为新的内容

insertafter

将文本插入到“指定的行”之后 insertafter=EOF,末尾

insertbefore

将文本插入到指定的行 之前 insertbefore=BOF 开头

state

删除对应的文本时,需要state=absent

backrefs

1、支持后项引用、2、当未匹配到内容则不操作文件

backup

是否在修改文件之前对文件进行备份

create

当要操作的文件并不存在时,是否创建对应的文件

示例:

1、插入内容,如果不存在就在文档尾插入该内容
[root@k8s-master-1 ~]# ansible web -m lineinfile -a 'path=/tmp/a.log line="test text"'

[root@k8s-master-1 ~]# ansible web -m shell -a "cat /tmp/a.log"
192.168.134.138 | CHANGED | rc=0 >>
123
456
789
test text

2、使用正则表达式匹配,匹配到的行进行替换,匹配不到就在末尾写入(匹配以2开头的行)匹配不到
[root@k8s-master-1 ~]# ansible web -m lineinfile -a 'path=/tmp/a.log regexp="^2" line="test text2"'

[root@k8s-master-1 ~]# ansible web -m shell -a "cat /tmp/a.log"
192.168.134.138 | CHANGED | rc=0 >>
123
456
789
test text
test text2

3、匹配以3结尾的行)匹配到,可以看到 123 这一行已经被替换成“test text3”
[root@k8s-master-1 ~]# ansible web -m lineinfile -a 'path=/tmp/a.log regexp="3$" line="test text3"'

[root@k8s-master-1 ~]# ansible web -m shell -a "cat /tmp/a.log"
192.168.134.138 | CHANGED | rc=0 >>
test text3
456
789
test text
test text2

4、匹配指定内容的行删除  以 t 开头的行将被删除,或者不是用正则.
[root@k8s-master-1 ~]# ansible web -m lineinfile -a 'path=/tmp/a.log regexp="^t" state=absent'

[root@k8s-master-1 ~]# ansible web -m shell -a "cat /tmp/a.log"
192.168.134.138 | CHANGED | rc=0 >>
456
789

5、将abc 查到以4 开头的这一行之后
[root@k8s-master-1 ~]# ansible web -m lineinfile -a 'path=/tmp/a.log line=abc insertafter="^4"'
[root@k8s-master-1 ~]# ansible web -m lineinfile -a 'path=/tmp/a.log line=abc insertafter="456"'

[root@k8s-master-1 ~]# ansible web -m shell -a "cat /tmp/a.log"
192.168.134.138 | CHANGED | rc=0 >>
456
abc
789

6、在456 前边插入 qwe
[root@k8s-master-1 ~]# ansible web -m lineinfile -a 'path=/tmp/a.log line=qwe insertbefore="456"'
[root@k8s-master-1 ~]# ansible web -m lineinfile -a 'path=/tmp/a.log line=qwe insertbefore="6$"'
[root@k8s-master-1 ~]# ansible web -m shell -a "cat /tmp/a.log"
192.168.134.138 | CHANGED | rc=0 >>
qwe
456
abc
789

7、删除789  这一行  并对源文件进行备份
[root@k8s-master-1 ~]# ansible web -m lineinfile -a 'path=/tmp/a.log line=789 state=absent backup=yes'

[root@k8s-master-1 ~]# ansible web -m shell -a "ls /tmp/"
192.168.134.138 | CHANGED | rc=0 >>
abc.yaml
a.log
a.log.61753.2023-07-14@16:00:25~

5、find 模块

功能:find模块可以帮助我们在远程主机中查找符合条件的文件,就像find命令一样。

参数:

参数

说明

paths

必选。指定在哪个目录中查找,可以指定多个路径,用“逗号”隔开,也可以使用:name、path

recurse

默认情况下,只会在指定的目录中查找文件,ansible并不会递归的进入子目录查找对应文件,如果想要递归的查找文件,需要使用recurse参数并设置为yes时,表示在指定目录中递归的查找文件。

hidden参数

默认情况下,隐藏文件会被忽略,当hidden参数的值设置为yes时,才会查找隐藏文件。

file_type参数

默认情况下,ansible只会根据条件查找”文件”,并不会查找”目录”或”软链接”等文件类型,如果想要指定查找的文件类型,可以通过file_type指定文件类型,可指定的文件类型有any、directory、file、link 四种。

contains参数

使用此参数可以根据文章内容查找文件,此参数的值为一个正则表达式,find模块会根据对应的正则表达式匹配文件内容 。

示例:

1、查找/tmp/下  文件中包含abc的文件,隐藏文件会被忽略,recurse=yes:递归查找。
[root@k8s-master-1 ansible]# ansible web -m find -a 'path=/tmp/ contains=".*abc.*" recurse=yes'

6、replace模块

功能:replace可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被正则表达式匹配到的都会被替换

参数:

参数

说明

path

必须参数,指定要操作的文件,2.3版本之前,只能使用dest, destfile, name指定要操作的文件,2.4版本中,仍然可以使用这些参数名,这些参数名作为path参数的别名使用。

regexp

必须参数,指定一个python正则表达式,文件中与正则匹配的字符串将会被替换。

replace

指定最终要替换成的字符串。

backup

是否在修改文件之前对文件进行备份,最好设置为yes。

示例:

1、把文件中的abc改成ABC
[root@k8s-master-1 ansible]# ansible web -m replace -a 'path=/tmp/asd.yaml regexp="abc" replace="ABC"'

2、把文件中的ABC改成abc,并对源文件进行备份
[root@k8s-master-1 ansible]# ansible web -m replace -a 'path=/tmp/asd.yaml regexp="ABC" replace="abc" backup=yes'

三、系统模块

1、systemd模块

功能:管理服务的启动与停止,与service模块用法一致

常用参数:

参数

说明

name

指定需要控制的服务名称

state

指定服务状态,其值可以为:stopped、started、reloaded、restarted、running

enabled

指定服务是否开机启动,yes为启动,no为不启动

daemon_reload

yes:重启systemd服务。让unit文件生效

示例:

1、停止kubelet.service的服务
[root@k8s-master-1 test]# ansible web -m systemd -a "name=kubelet state=stopped"

2、启动kubelet.service服务
[root@k8s-master-1 test]# ansible web -m systemd -a "name=kubelet state=started"

3、查看kubelet.service的状态
[root@k8s-master-1 test]# ansible web -m shell -a "systemctl status kubelet.service"

2、group模块

功能:管理被控端用户组

常用参数:

参数

说明

name

指定创建的组名

gid

为组设置gid

state

是否将组创建在主机上,创建:present、删除:absent

system

是否创建系统组,yes:创建、no:不创建,默认

示例:

1、创建组news gid为:8888
[root@k8s-master-1 test]# ansible web -m group -a "name=news state=present gid=8888"
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "gid": 8888, 
    "name": "news", 
    "state": "present", 
    "system": false
}

查看
[root@k8s-master-1 test]# ansible web -m shell -a "getent group news"
192.168.134.138 | CHANGED | rc=0 >>
news:x:8888:

3、删除组
[root@k8s-master-1 test]# ansible web -m group -a "name=news state=absent"
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "name": "news", 
    "state": "absent"
}

3、user 模块

功能:管理被控端用户

参数:

参数

说明

name

创建或删除的用户名

uid

为用户设置UID

group

设置用户的主组

groups

设置用户的附加组

shell

为用户设置登录时的shell

create_home

是否为用户创建主目录,yes(默认)、no

state

创建或删除用户,创建:persent、删除:absent

remove

是否删除与用户关联的目录,例如家目录和邮箱目录,只有当state=absent时生效,删除:yes、不删除:no(默认)

system

是否添加为系统用户,yes:为系统用户,no:不是系统用户

generate_ssh_key

为相关用户生成ssh密钥。不会覆盖现有的ssh密钥

ssh_key_bits

创建用户ssh密钥中位数

ssh_key_file

可以实现ssh密钥改名,或变更存放ssh密钥位置,默认为.ssh/id_rsa

append

yes:表示追加附加组

password

指定用户密码

comment

用户描述信息

expires

此参数用于指定用户的过期时间,相当于设置/etc/shadow文件中的的第8列,比如,你想要设置用户的过期日期为2018年12月31日,那么你首先要获取到2018年12月31日的unix时间戳,使用命令”date -d 2018-12-31 +%s”获取到的时间戳为1546185600,所以,当设置expires=1546185600时,表示用户的过期时间为2018年12月31日0点0分,设置成功后,查看远程主机的/etc/shadow文件,对应用户的第八列的值将变成17895(表示1970年1月1日到2018年12月31日的天数,unix时间戳的值会自动转换为天数,我们不用手动的进行换算),目前此参数只支持在Linux和FreeBSD系统中使用。

update_password

此参数有两个值可选,always和on_create,当此参数的值设置为always时表示,如果password参数设置的值与用户当前的加密过的密码字符串不一致,则直接更新用户的密码,默认值即为always,但是当此参数设置为on_create时,如果password参数设置的值与用户当前的加密过的密码字符串不一致,则不会更新用户的密码字符串,保持之前的密码设定,如果是新创建的用户,即使此参数设置为on_create,也会将用户的密码设置为password参数对应的值。

示例:

1、创建系统用户 wuzhaobo uid=2222,创建家目录,主组为root 附加组为bin,默认shell 为nologin,comment 指定描述信息
 [root@k8s-master-1 test]# ansible web -m user -a "name=wuzhaobo system=yes uid=2222 group=root groups=bin shell=/sbin/nologin home=/home/wuzhaobo"
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 0, 
    "groups": "bin", 
    "home": "/home/wuzhaobo", 
    "name": "wuzhaobo", 
    "shell": "/sbin/nologin", 
    "state": "present", 
    "system": true, 
    "uid": 2222
}

查看
[root@k8s-master-1 test]# ansible web -m shell -a "getent passwd wuzhaobo"
192.168.134.138 | CHANGED | rc=0 >>
wuzhaobo:x:2222:0::/home/wuzhaobo:/sbin/nologin
详解:共7个字段
wuzhaobo:用户名
x:密码
2222:用户ID
0:群组ID
空格:描述信息
/home/wuzhaobo:家目录
/sbin/nologin:代表用户使用的shell类型
删除wuzhaobo用户
[root@k8s-master-1 test]# ansible web -m user -a "name=wuzhaobo state=absent"

2、创建wuzhaobo用户并设置登录密码为123456
先创建密码的加密密文:
[root@k8s-master-1 test]# ansible web -m debug -a "msg={{ '123456' | password_hash('sha512', 'sal1t') }}"
192.168.134.138 | SUCCESS => {
    "msg": "$6$sal1t$35YAWpKWlp7E7pjaLFMdrzDV7e6HnPrj3Ctoz5/qBgpPjbzy/xEKJkaalHFtn1xWL8Ej7j.qjlLA7R6mQCmsR."
}

创建

[root@k8s-master-1 test]# ansible web -m user -a 'name=wuzhaobo password="$6$sal1t$35YAWpKWlp7E7pjaLFMdrzDV7e6HnPrj3Ctoz5/qBgpPjbzy/xEKJkaalHFtn1xWL8Ej7j.qjlLA7R6mQCmsR."'

查看

[root@k8s-master-1 test]# ansible web -m shell -a "getent shadow wuzhaobo"
192.168.134.138 | CHANGED | rc=0 >>
wuzhaobo:$6$sal1t$35YAWpKWlp7E7pjaLFMdrzDV7e6HnPrj3Ctoz5/qBgpPjbzy/xEKJkaalHFtn1xWL8Ej7j.qjlLA7R6mQCmsR.:19551:0:99999:7:::

4、cron模块

功能:管理被控端计划任务

参数:

参数

说明

name

定时任务基本描述

job

定时任务要执行的命令

minute

分(0-59,,*,*/2)

hour

小时(0-23,,*,*/2)

day

日(1-31,,*,*/2)

month

月(1-12,,*,*/2)

weekday

周,0-6 或者Sunday-Saturday

disabled

yes:禁用计划任务,no:启用计划任务

state

absent:删除计划任务,present表示添加定时任务

示例:

1、创建计划任务,命名为:datetest,每分钟执行一次,将时间输出到/tmp/a.log 中
[root@k8s-master-1 ~]# ansible web -m cron -a 'name="datetest" job="date >> /tmp/a.log" minute=*/1'
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "synctime", 
        "ls", 
        "datetest"
    ]
}

[root@k8s-node-2 tmp]# crontab -l

#Ansible: datetest
*/1 * * * * date >> /tmp/a.log

2、禁用计划任务
[root@k8s-master-1 ~]# ansible web -m cron -a 'name=datetest job="date >> /tmp/a.log" minute=*/1 disabled=yes'
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "synctime", 
        "ls", 
        "datetest"
    ]
}

3、删除计划任务
[root@k8s-master-1 ~]# ansible web -m cron -a 'name=datetest state=absent'
192.168.134.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "envs": [], 
    "jobs": [
        "synctime", 
        "ls"
    ]
}

5、get_url模块

功能:通过互联网下载软件至本地

参数:

参数

说明

url

资源文件在互联网上具体的地址

dest

文件下载位置的绝对路径

timeout

url请求超时时间 默认10秒

6、archive模块

功能:在被控端 压缩

参数:

参数

说明

path

要压缩的文件或目录

dest

压缩后的文件

format

指定压缩的类型:bz2、gz、tar、zip

示例:

[root@k8s-master-1 ~]# ansible web -m archive -a 'path=/tmp/a.log dest=/tmp/a.log.tar format=tar'
[root@k8s-master-1 ~]# ansible web -m shell -a 'ls /tmp/'
192.168.134.138 | CHANGED | rc=0 >>

a.log

a.log.tar

7、unarchive模块

功能:在远程主机上解压缩

参数:

参数

说明

src

要解压的软件包路径

dest

解压到哪里,是个路径

remote_src

yes:要解压的包在被控端、no:要解压的包在控制端

owner

文件复制到远程并设定属主,默认为root

group

文件复制到远程并设定属组,默认为root

mode

文件复制到远程并设定权限,默认file=644,directory=755

示例:

1、压缩文件在管理端,解压到被管理端
[root@k8s-master-1 tmp]# ansible web -m unarchive -a 'src=/tmp/192.168.134.138/tmp/a.log.tar dest=/tmp/'

2、把压缩包推送到被控端,在被控端主机解压缩:
[root@k8s-master-1 tmp]# ansible web -m copy -a 'src=/tmp/192.168.134.138/tmp/a.log.tar dest=/tmp/a.log remote_src=no'

8、selinux模块

功能:管理被控主机的 SELINUX 防火墙

参数:

参数

说明

state

Selinux模式:enforcing、permissive、disabled

polocy

targeted

示例:

1、设置selinux为:enforcing
[root@k8s-master-1 tmp]# ansible web -m selinux -a 'state=enforcing policy=targeted'

[root@k8s-master-1 tmp]# ansible web -m shell -a 'grep "^SELINUX" /etc/selinux/config'
192.168.134.138 | CHANGED | rc=0 >>
SELINUX=enforcing
SELINUXTYPE=targeted 

2、设置selinux为:disabled
[root@k8s-master-1 tmp]# ansible web -m selinux -a 'state=disabled'

9、firewalld模块

功能:设置防火墙

参数:

参数

说明

zone

防火墙的域

service

服务名称

permanent

永久生效

state

enable:允许

disabled:拒绝

immediate

立即生效

四、包管理模块

1、yaml模块

功能:软件的安装,需要确认被管理端为红帽系列的,并且需要被管理端配置好yum源。

常用参数:

参数

说明

name

指定安装软件包名或者软件包URL

state

指定yum对应的方法,

present:表示安装,默认

installed:安装

latest:安装最新的

absent:卸载软件

removed:卸载

enablerepo

临时使用的yum库。只用于安装或更新时。

disablerepo

临时禁止使用yum库。 只用于安装或更新时。

exclude

排除某些软件包,例如kernel

download_only

仅下载软件包,不安装

disable_gpg_check=no|yes

不进行gpg检测

update_cache

强制更新yum的缓存

示例:

1、在被控端安装vsftpd,apache软件包:
[root@k8s-master-1 test]# ansible web -m yum -a "name=httpd,vsftpd state=installed"

2、安装当前最新的Apache软件,如果存在就更新
[root@k8s-master-1 test]# ansible web -m yum -a "name=httpd state=latest"

3、卸载被控主机上的vsftpd,apache软件包
[root@k8s-master-1 test]# ansible web -m yum -a "name=httpd,vsftpd state=absent"

4、更新所有安装包,httpd除外
[root@k8s-master-1 test]# ansible web -m yum -a "name=* state=latest exclude=httpd"

2、yum_repository模块

功能:管理主机上的yum仓库

参数:

参数

说明

name

必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID

description

此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。

file

此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以name参数的仓库ID作为”.repo”配置文件的文件名前缀,同一个’.repo’配置文件中可以存在多个yum源

enabled参数

此参数用于设置是否激活对应的yum源,此参数默认值为yes,表示启用对应的yum源,设置为no表示不启用对应的yum源。

state参数

默认值为present,当值设置为absent时,表示删除对应的yum源

3、service模块

功能:管理系统服务状态、与systemd相似

参数:

参数

说明

name

指定服务名称

state

指定服务状态,其值可以为:stopped、started、reloaded、restarted

enable

指定是否开机自启动,yes开机启动;no开机不启动

示例:

1、停止kubelet.service的服务
[root@k8s-master-1 test]# ansible web -m systemd -a "name=kubelet state=stopped"

2、启动kubelet.service服务
[root@k8s-master-1 test]# ansible web -m systemd -a "name=kubelet state=started"

3、查看kubelet.service的状态
[root@k8s-master-1 test]# ansible web -m shell -a "systemctl status kubelet.service"

4、debug模块

功能:调试模块,用于在调试中输出信息。类似于echo命令

参数:

参数

说明

msg

调试输出的信息

var

将某个任务执行的输出作为变量传递给debug模块

verbosity

debug的级别(默认是0级,全部显示)

示例

[root@k8s-master-1 variables]# ansible web -m debug -a "msg={{ansible_host}}"
192.168.134.138 | SUCCESS => {
    "msg": "192.168.134.138"
}

5、hostname 模块

功能:管理主机名 注意:它不能修改/etc/hosts文件

示例:

[root@xuzhichao ~]# ansible web -m hostname -a 'name=nginx01'
192.168.20.22 | CHANGED => {
    "ansible_facts": {
        "ansible_domain": "", 
        "ansible_fqdn": "nginx01", 
        "ansible_hostname": "nginx01", 
        "ansible_nodename": "nginx01", 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "name": "nginx01"
}

[root@nginx02 ~]# hostname
nginx01
  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁华依在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值