ansible常用模块
执行shell命令(command和shell)
文件传输(copy和file)
管理软件包(yum)
用户和组(user)
从源代码管理系统部署(git)
管理服务(service)
收集目标主机信息(setup)
01.执行shell命令(command和shell)
1.1 Command
1 [root@k8s-node2 ~]# ansible webservers -a "df -hl"
1.2 Shell
用来在远程主机上执行命令,使用-m 选项指定使用shell模块
Command与Shell比较
command 和 shell 模块都可以在远程主机上执行命令
但是command不支持变量和管道符操作,所以当需要使用到变量和管道符时需要使用shell模块
1 2 3 4 5 [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
5.2
02.文件传输(copy和file)
https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html
2.1 copy模块
copy
:文件传输模块,可以将文件并行拷贝到多台主机上
1 2 [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"
使用copy模块传输文件时,可以通过参数设置文件属主、属组和权限
1 [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模块可以创建文件和更改文件的所有和权限
1 2 3 [root@k8s-node2 ~]# ansible webservers -m file -a "dest=/tmp/file_test.txt mode=666" -l 192.168.56.65 # 修改远程文件权限为:666; # -l 指定运行目标主机(过滤),从webservers主机组中找出满足过滤条件的主机来执行远程操作。
1 2 # 创建文件夹 [root@k8s-node2 ~]# ansible webservers -m file -a "dest=/tmp/dir_test owner=root state=directory"
1 2 3 4 # 创建文件 [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"
03.管理软件包(yum)
1 2 3 4 # 安装 [root@k8s-node2 ~]# ansible webservers -m yum -a "name=tcpdump state=latest" # 卸载 [root@k8s-node2 ~]# ansible webservers -m yum -a "name=tcpdump state=absent"
04.用户和组(user)
在所有服务器中创建test用户,若已存在,不进行任何操作
1 [root@k8s-node2 ~]# ansible all -m user -a 'name=test'
在所有服务器中删除test用户,但不删除此用户的家目录
1 [root@k8s-node2 ~]# ansible all -m user -a 'name=test state=absent'
在所有服务器中删除test用户,且删除此用户的家目录
1 [root@k8s-node2 ~]# ansible all -m user -a 'name=test state=absent remove=yes'
指定所有服务器中test用户的基本组为admin(需提前存在),不指定时默认与用户名一样
1 [root@k8s-node2 ~]# ansible all -m user -a 'name=test group=admin'
指定所有服务器中test用户的附加组为root和admin
1 [root@k8s-node2 ~]# ansible all -m user -a 'name=test groups=root,admin append=yes'
指定所有服务器中test用户过期时间是2020-05-20
1 2 3 [root@k8s-node2 ~]# date -d 2021-05-20 +%s #获取对应日期的unix时间戳 1621440000 [root@k8s-node2 ~]# ansible all -m user -a 'name=test expires=1621440000'
修改所有服务器中test用户的密码为’123455’
1 2 3 4 5 6 [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/"'
为所有服务器中test用户生成ssh密钥对,生成在/opt目录下,私钥名id_rsa_test,注释信息"test rsa",私钥密码123455
1 [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)
1 2 # 拉取ansible代码 [root@k8s-node2 ~]# ansible 192.168.56.66 -m git -a "repo=https://github.com/ansible/ansible.git dest=/tmp/ansible" -u root
06.管理服务(service)
主要是管理服务:启动服务、停止服务
几种服务: started
、 restarted
、 stopped
1 2 3 4 5 6 # 安装 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"
07.收集目标主机信息(setup)
1 2 3 4 5 [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”关键字结尾的信息
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个数(只显示总的个数)
__END__