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