05.ansible常用模块
# ansible常用模块
- 执行shell命令(command和shell)
- 文件传输(copy和file)
- 管理软件包(yum)
- 用户和组(user)
- 从源代码管理系统部署(git)
- 管理服务(service)
- 收集目标主机信息(setup)
# 01.执行shell命令(command和shell)
# 1.1 Command
在Ad-Hoc常用选项中介绍到 -m 用来指定运行的模块,没有指定模块 时,默认使用的是command模块
命令说明:
-a
:在常用选贡中介绍到,该选项用来为模块提供参数,这里为command模块提供一条命令参数;- "
df -hl
" :在远程主机上执行的命令; webservers
:主机清单hosts上配置的主机组,包含192.168.56.66和192.168.56.65。
[root@k8s-node2 ~]# ansible webservers -a "df -hl"
# 1.2 Shell
- 用来在远程主机上执行命令,使用-m 选项指定使用shell模块
- Command与Shell比较
- command 和 shell 模块都可以在远程主机上执行命令
- 但是command不支持变量和管道符操作,所以当需要使用到变量和管道符时需要使用shell模块
[root@k8s-node2 ~]# ansible webservers -m shell -a "ifconfig | grep '192.168.56'"
192.168.56.66 | CHANGED | rc=0 >>
inet 192.168.56.66 netmask 255.255.255.0 broadcast 192.168.56.255
192.168.56.65 | CHANGED | rc=0 >>
inet 192.168.56.65 netmask 255.255.255.0 broadcast 192.168.56.255
2
3
4
5
5.2
# 02.文件传输(copy和file)
https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html
# 2.1 copy模块
copy
:文件传输模块,可以将文件并行拷贝到多台主机上
[root@k8s-node2 ~]# touch file_test.txt
[root@k8s-node2 ~]# ansible webservers -m copy -a "src=/root/file_test.txt dest=/tmp/file_test.txt"
2
- 使用copy模块传输文件时,可以通过参数设置文件属主、属组和权限
[root@k8s-node2 ~]# ansible webservers -m copy -a "src=/root/file_test.txt dest=/tmp/ owner=root group=root mode=600"
# 2.2 file模块
- 使用file模块可以创建文件和更改文件的所有和权限
[root@k8s-node2 ~]# ansible webservers -m file -a "dest=/tmp/file_test.txt mode=666" -l 192.168.56.65
# 修改远程文件权限为:666;
# -l 指定运行目标主机(过滤),从webservers主机组中找出满足过滤条件的主机来执行远程操作。
2
3
- 使用file模块创建目录
# 创建文件夹
[root@k8s-node2 ~]# ansible webservers -m file -a "dest=/tmp/dir_test owner=root state=directory"
2
- 使用file模块删除文件
# 创建文件
[root@k8s-node2 ~]# ansible webservers -m file -a "dest=/tmp/t1.txt owner=root state=touch"
# 删除文件
[root@k8s-node2 ~]# ansible webservers -m file -a "dest=/tmp/file_test.txt state=absent"
2
3
4
# 03.管理软件包(yum)
Ansible 提供了yum和apt模块,通过这些模块可以很方便在系统上安装软件包。
项目中使用的是Centos系统,所以可以使用yum模块来安装软件包
命令执行说明:
- 使用yum模块来安装软件包;
- name:用来指定安装的软件包名称;
- state:指定安装的动作(present,installed,latest,absent,removed)
# 安装
[root@k8s-node2 ~]# ansible webservers -m yum -a "name=tcpdump state=latest"
# 卸载
[root@k8s-node2 ~]# ansible webservers -m yum -a "name=tcpdump state=absent"
2
3
4
# 04.用户和组(user)
- 在所有服务器中创建test用户,若已存在,不进行任何操作
[root@k8s-node2 ~]# ansible all -m user -a 'name=test'
- 在所有服务器中删除test用户,但不删除此用户的家目录
[root@k8s-node2 ~]# ansible all -m user -a 'name=test state=absent'
- 在所有服务器中删除test用户,且删除此用户的家目录
[root@k8s-node2 ~]# ansible all -m user -a 'name=test state=absent remove=yes'
- 指定所有服务器中test用户的基本组为admin(需提前存在),不指定时默认与用户名一样
[root@k8s-node2 ~]# ansible all -m user -a 'name=test group=admin'
- 指定所有服务器中test用户的附加组为root和admin
[root@k8s-node2 ~]# ansible all -m user -a 'name=test groups=root,admin append=yes'
- 指定所有服务器中test用户过期时间是2020-05-20
[root@k8s-node2 ~]# date -d 2021-05-20 +%s #获取对应日期的unix时间戳
1621440000
[root@k8s-node2 ~]# ansible all -m user -a 'name=test expires=1621440000'
2
3
- 修改所有服务器中test用户的密码为'123455'
[root@k8s-node2 ~]# python
>>> import crypt
>>> crypt.crypt('123455')
'$6$B0zo/bCGaUmqFKx8$apGEf9i1Yd4/PE.bhL7P86T6FDir45jE5DQ549CjG3SoWtfPmAQSCDkz2Wt5kXppAlhbTLqOclg45yOz7YH9K/'
>>> exit()
[root@k8s-node2 ~]# ansible all -m user -a 'name=test password="$6$B0zo/bCGaUmqFKx8$apGEf9i1Yd4/PE.bhL7P86T6FDir45jE5DQ549CjG3SoWtfPmAQSCDkz2Wt5kXppAlhbTLqOclg45yOz7YH9K/"'
2
3
4
5
6
- 为所有服务器中test用户生成ssh密钥对,生成在/opt目录下,私钥名id_rsa_test,注释信息"test rsa",私钥密码123455
[root@k8s-node2 ~]# ansible all -m user -a 'name=test generate_ssh_key=yes ssh_key_file=/opt/id_rsa_test ssh_key_comment="test rsa" ssh_key_passphrase=123455'
# 05.从源代码管理系统部署(git)
# 拉取ansible代码
[root@k8s-node2 ~]# ansible 192.168.56.66 -m git -a "repo=https://github.com/ansible/ansible.git dest=/tmp/ansible" -u root
2
# 06.管理服务(service)
- 主要是管理服务:启动服务、停止服务
- 几种服务:
started
、restarted
、stopped
# 安装 memcached
[root@k8s-node2 ~]# ansible webservers -m yum -a "name=memcached state=latest"
# 启动 memcached
[root@k8s-node2 ~]# ansible webservers -m service -a "name=memcached state=started"
# 设置ansible开机自启动
[root@k8s-node2 ~]# ansible webservers -m service -a "name=memcached enabled=true"
2
3
4
5
6
# 07.收集目标主机信息(setup)
[root@k8s-node2 ~]# ansible webservers -m setup # 获取主机的信息
[root@k8s-node2 ~]# ansible webservers -m setup -a "filter=ansible_nodename" # 获取集群名称
[root@k8s-node2 ~]# ansible webservers -m setup -a "filter=ansible_all_ipv4_addresses" # 获取ipv4地址
[root@k8s-node2 ~]# ansible webservers -m setup -a "filter=ansible_memory_mb" # 获取主机内存
[root@k8s-node2 ~]# ansible webservers -m setup -a "filter=*mb" " # 通过通配符实现模糊匹配,比如以”mb”关键字结尾的信息
2
3
4
5
- 其他常用信息列出如下
ansible_all_ipv4_addresses:
仅显示ipv4的信息
。 ansible_devices:仅显示磁盘设备信息
。 ansible_distribution:显示是什么系统,例:centos,suse等
ansible_distribution_major_version:显示是系统主版本
ansible_distribution_version:仅显示系统版本
ansible_machine:显示系统类型,例:32位,还是64位
ansible_eth0:仅显示eth0的信息
ansible_hostname:仅显示主机名
ansible_kernel:仅显示内核版本
ansible_lvm:显示lvm相关信息
ansible_memtotal_mb:显示系统总内存
ansible_memfree_mb:显示可用系统内存
ansible_memory_mb:详细显示内存情况
ansible_swaptotal_mb:显示总的swap内存
ansible_swapfree_mb:显示swap内存的可用内存
ansible_mounts:显示系统磁盘挂载情况
ansible_processor:显示cpu个数(具体显示每个cpu的型号)
ansible_processor_vcpus:显示cpu个数(只显示总的个数)