Ansible-Modules

ansible服务介绍

1、ansible批量管理服务意义

1). 提高工作效率
2). 提高工作准确度
3). 减少维护的成本
4). 减少重复性工作

2、ansible批量管理服务功能

1). 可以实现批量系统操作配置
2). 可以实现批量软件服务部署
3). 可以实现批量文件数据分发
4). 可以实现批量系统信息收集

3、ansible批量管理服务部署
1)用脚本将控制端秘钥分发到被控端主机
将要分发的ip写入ip.txt中

#!/bin/bash
for ip in `cat ip.txt`
do
  echo “=========host $ip pub-key is start==========”
  sshpass -pqweasd ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.1.$ip “-o StrictHostKeyChecking=no ” &> /dev/null
  if [ $? -eq 0 ];then
     echo “host $ip is successed”
  fi
  echo “=========host $ip pub-key is end===========”
done

2)安装部署软件

yum -y install ansible            –需要依赖epel的yum源
    
/etc/ansible/ansible.cfg          –ansible服务配置文件
/etc/ansible/hosts                –主机清单文件
/etc/ansible/roles                –角色目录

3)编写主机清单文件

vi /etc/ansible/hosts

4)测试是否可以管理多个主机

脚本 hostname
ansible all -a “command” 
[root@m01 scripts]# ansible all -a “hostname”
172.16.1.41 | CHANGED | rc=0 >>
backup01
172.16.1.8 | CHANGED | rc=0 >>
web02
172.16.1.9 | CHANGED | rc=0 >>
web03
172.16.1.31 | CHANGED | rc=0 >>
nfs01
172.16.1.7 | CHANGED | rc=0 >>
web01

4、ansible服务架构信息

1)主机清单配置
2)软件模块信息
3)基于秘钥连接主机
4)主机需要关闭selinux
5)软件剧本功能

常用模块

ansible官网:https://docs.ansible.com/
模块的应用:
    ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) “执行的命令”

Command

(默认) 注:此模块不支持 $VARNAME < > | ; & 等,用shell模块实现

command — Executes a command on a remote node
            在一个远程主机上执行一个命令

简单用法:
[root@m01 scripts]# ansible 172.16.1.31 -m command -a “hostname”
172.16.1.31 | CHANGED | rc=0 >>
nfs01

扩展应用:
1)chdir – Change into this directory before running the command.
            在执行命令之前对目录进行切换
ansible 172.16.1.31 -m command -a “chdir=/tmp touch file1.txt”
2)creates – If it already exists,this step wom’t be run.
             如果文件已存在,不执行命令操作
[root@m01 scripts]# ansible 172.16.1.31 -m command -a “creates=/tmp/file1.txt touch file1.txt”
172.16.1.31 | SUCCESS | rc=0 >>
skipped, since /tmp/file1.txt exists
3)removes – If it already exists,this setp will be run.
             如果文件已存在,这个步骤将执行
[root@m01 scripts]# ansible 172.16.1.31 -m command -a “removes=/tmp/file1.txt touch file1.txt”
172.16.1.31 | CHANGED | rc=0 >>
4)free_form(required)
The command module takes a free form command to run.
There is no parameter actually nam ed ‘free form’. See the examples!
使用command模块的时候,-a参数后面必须写上一个合法的linux命令信息

Shell

shell    – Execute commands in nodes
            在节点上执行操作

简单用法:
[root@m01 ~]# ansible 172.16.1.31 -m shell -a “hostname”
172.16.1.31 | CHANGED | rc=0 >>
nfs01

Script

1、编写一个脚本 
2、运行ansible命令执行脚本
    
PS:script模块参数功能和commadn模块类似

Copy

copy    – Copies files to remote locations
           将数据信息进行批量分发

基本用法:
ansible 172.16.1.31 -m copy -a “src=/etc/hosts dest=/etc/hosts_bak”

扩展用法:
1、传输文件时修改属主和属组的信息
ansible 172.16.1.31 -m copy -a “src=/etc/hosts dest=/etc/hosts_bak owner=test group=test”

2、在传输文件时修改文件权限信息
ansible 172.16.1.31 -m copy -a “src=/etc/hosts dest=/etc/hosts_bak mode=777”

3、在传输文件时对文件先进行备份
ansible 172.16.1.31 -m copy -a “src=/etc/hosts dest=/etc/hosts_bak backup=yes"

4、传输一个文件并编辑文件的信息
ansible 172.16.1.31 -m copy -a “content=’test123′ dest=/etc/rsync.password”

5、remote_src
If no, it will search for src at originating/master machine.
      src参数指定文件信息,会在本地管理端服务进行查找

If yes, it will go to the remote/target machine for the src. Default is no.
      src参数指定文件信息,会从远程主机上进行查找

PS: ansible软件copy模块复制目录信息

ansible 172.16.1.31 -m copy -a “src=/test /dest/=/test”
src后面目录没有/: 将目录本身以及目录下面的内容都进行远程传输复制

ansible 172.16.1.31 -m copy -a “src=/test/ /dest/=/test”
src后面目录有/:   只将目录下面的内容都进行远程传输复制

File

file – Sets attributes of files
        设置文件属性信息

基本用法:
ansible 172.16.1.31 -m file -a “dest=/etc/hosts owner=test group=test mode=666”

 扩展用法:
1、可以利用模块创建数据信息( 文件 目录 连接文件 )
   state 参数
   =absent      —缺席/删除数据信息
     ansible 172.16.1.31 -m file -a “dest=/test/test.txt state=absent”
     ansible 172.16.1.31 -m file -a “dest=/test/ state=absent”

   =directory   —创建一个目录信息
     ansible 172.16.1.31 -m file -a “dest=/test state=directory”
     ansible 172.16.1.31 -m file -a “dest=/test/test01/test02 state=directory”

   =file        —检测创建的数据信息是否存在

   =hard        —创建一个硬链接文件
     ansible 172.16.1.31 -m file -a “src=/test/test.txt dest=/test_hard.txt state=hard”

   =link        —创建一个软连接文件
     ansible 172.16.1.31 -m file -a “src=/test/test.txt dest=/test_hard.txt state=link”

   =touch       —创建一个文件信息
     ansible 172.16.1.31 -m file -a “dest=/test/test.txt state=touch”
   
   =recurse     —递归修改目录下的属组和属主信息
     ansible 172.16.1.31 -m file -a “dest=/test  owner=test recurse=yes”

Fetch

fetch – 将数据从被控端拉取过来控制端
    
基本用法:
ansible 172.16.1.31 -m fetch -a “src=/etc/hosts dest=/tmp”

Yum

name     —指定安装软件名称

state    —是否安装软件
            installed        —安装软件
            present            
            latest
            absent           —卸载软件
            removed

ansible 172.16.1.31 -m yum -a “name=iotop state=installed”

Service

service模块:管理服务器的运行状态    停止    开启    重启
name:          —指定管理的服务名称
state:        —指定服务状态
                 started        启动
                 restarted      重启
                 stopped        停止
                 enabled        —指定服务是否开机自启动

ansible 172.16.1.31 -m service -a “name=nfs state=started enabled=yes”

Cron

cron模块:批量设置多个主机的定时任务信息
  minute:    Minute when the job should run ( 0-59, * ,*/2 ,etc)
              设置分钟信息
  hour:       Hour when the job should run ( 0-23, *, */2, etc )
              设置小时信息
  day:        Day of the month the job should run ( 1-31, *, */2, etc )
              设置天信息
  month:      Month of the year the job should run ( 1-12, *, */2, etc )
              设置月信息
  weekday:    Day of the week that the job should run ( 0-6 for Sunday-Saturday, *, etc )
              设置周信息
 job:        用于定义定时任务需要做的事情
    
基本用法:
ansible 172.16.1.31 -m cron -a “minute=0 hour=2 job=’/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1′”

扩展用法:
01.给定时任务设置注释信息
 ansible 172.16.1.31 -m cron -a “name=’time sync’ minute=0 hour=2 job=’/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1′”

02.删除指定定时任务
ansible 172.16.1.31 -m cron -a “name=’time sync’ state=absent”

PS:ansible可以删除的定时任务,只能是ansible设置好的定时任务

03.批量注释定时任务
ansible 172.16.1.31 -m cron -a “name=’time sync’ job=’/usr/sbin/ntpdate ntp1.aliyun.com >/dev/null 2>&1′ disabled=yes”

Mount

mount模块:批量进行挂载操作
   src:   需要挂载的存储设备或文件信息
   path:  指定目标挂载点目录
   fstype:指定挂载时的文件系统类型
   state:
       present/mounted        —进行挂载
       present:不会实现立即挂载,实现开机自动挂载
      *mounted:会实现立即挂载,并且会修改fstab文件,实际开机自动挂载            
       absent/unmounted    —进行卸载
       absent:会实现立即卸载,并且会删除fstab文件,禁止开机自动挂载
      *unmounted:会实现立即卸载,但是不会删除fstab文件   

User

user模块:实现批量创建用户
基本用法:
ansible 172.16.1.31 -m user -a “name=test01”

扩展用法:
01.指定用户UID
    ansible 172.16.1.31 -m user -a “name=test01 uid=666” 

02.指定用户组信息
    ansible 172.16.1.31 -m user -a “name=test03 group=test3”
    ansible 172.16.1.31 -m user -a “name=test04 groups=test2”

03.创建虚拟用户
    ansible 172.16.1.31 -m user -a “name=rsync create_home=no shell=/sbin/nologin”

04.给指定用户创建密码
PS:利用ansible程序user模块设置用户密码信息,需要将密码明文转换文密文进行设置
1)生成密文密码信息:
ansible all -i localhost, -m debug -a “msg={{ ‘密码qweasd’ | password_hash(‘sha512′,’加密校验信息123’) }}”
2)创建用户并给予密码
ansible 172.16.1.31 -m user -a ‘name=test08 password=$6$123$90hLUJ33QF7tP7CByH96s4RzRgV6f2KIUQYpKE.Ku9x0uhJV/CTt7isTYS9rR79Or4L3PJulhz9I3adDQCIkk0’
posted @ 2021-08-25 22:08  Cai_HL  阅读(63)  评论(0编辑  收藏  举报
>