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

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"
  • 使用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主机组中找出满足过滤条件的主机来执行远程操作。
  • 使用file模块创建目录
# 创建文件夹
[root@k8s-node2 ~]# ansible webservers -m file -a "dest=/tmp/dir_test owner=root state=directory"
  • 使用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"

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"

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'
  • 修改所有服务器中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/"'
  • 为所有服务器中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

06.管理服务(service)

  • 主要是管理服务:启动服务、停止服务
  • 几种服务: startedrestartedstopped
# 安装 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)

[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__