返回顶部

linux 综合架构 ansible 常用模块

ansible 批量管理服务介绍

ansible批量管理服务意义

  • 01. 提高工作的效率

  • 02. 提高工作准确度

  • 03. 减少维护的成本

  • 04. 减少重复性工作

ansible批量管理服务功能

  • 01. 可以实现批量系统操作配置

  • 02. 可以实现批量软件服务部署

  • 03. 可以实现批量文件数据分发

  • 04. 可以实现批量系统信息收集

ansible 服务架构信息

  •  主机清单配置

  •  软件模块信息

  •  基于秘钥连接主机

  •  主机需要关闭selinux

  •  软件剧本功能

 ansible服务特点说明

  • 01. 管理端不需要启动服务程序(no server)

  • 02. 管理端不需要编写配置文件(/etc/ansible/ansible.cfg)

  • 03. 受控端不需要安装软件程序(libselinux-python)装 这个包,可以在 selinux 没关闭的情况下使用 ansible

  • 04. 受控端不需要启动服务程序(no agent)

  • 05. 服务程序管理操作模块众多(module)

  • 06. 利用剧本编写来实现自动化(playbook)

官方网站

https://docs.ansible.com/

ansible学习帮助手册如何查看

  • ansible-doc -l --- 列出模块使用简介

  • ansible-doc -s fetch --- 指定一个模块详细说明

  • ansible-doc fetch --- 查询模块在剧本中应用方法

ansible批量管理服务部署

管理端服务器

第一个历程: 安装部署软件

yum install -y ansible
rpm -ql  ansible

ansible 一些中的配置文件

/etc/ansible/ansible.cfg   --- ansible服务配置文件
/etc/ansible/hosts         --- 主机清单文件   定义可以管理的主机信息
/etc/ansible/roles         --- 角色目录???

第二个历程: 需要编写主机清单文件  /etc/ansible/hosts

# 在最后一行
172.16.1.41
172.16.1.7
172.16.1.31

第三个历程: 测试是否可以管理多个主机

ansible all -a "hostname"

ansible软件模块应用

模块的应用语法格式

  • ansible 主机名称/主机组名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息) "执行什么动作"

命令类型模块  command (默认模块)

功能:在一个远程主机上执行一个命令

ansible 172.16.1.31 -m command -a "ifconfig"

扩展应用:

(1)chdir Change into this directory before running the command

  • 在执行命令之前对目录进行切换

在 /tmp 下创建 oldboy.txt

ansible 172.16.1.31 -m command -a "chdir=/tmp touch oldboy.txt"

(2)creates If it already exists, this step won't be run

  • 如果文件存在了,不执行命令操作
ansible 172.16.1.31 -m command -a "creates=/tmp/hosts touch oldboy.txt" 

(3)removes If it already exists, this step will be run

  • 如果文件存在了, 这个步骤将执行
ansible 172.16.1.31 -m command -a "removes=/tmp/hosts chdir=/tmp touch oldboy.txt"

(4)free_form(required )

  • 使用command模块的时候,-a参数后面必须写上一个合法linux命令信息

注意事项

  • 有些符号信息无法识别: <", ">", "|", ";" and "&"

ping 模块检查主机是否联通

ansible all -m ping

shell (万能模块)

功能:在节点上执行操作,支持 command 模块中的所有功能

简单用法

ansible 172.16.1.31 -m shell -a "hostname"
ansible 172.16.1.31 -m shell -a "echo 123 > haha.txt"
ansible 172.16.1.31 -m shell -a "netstat -anptu | grep LISTEN"

script (万能模块)

第一个步骤: 编写一个脚本  /root/yum.sh

#!/bin/bash
yum install htop

第二个步骤: 运行 ansible 命令执行脚本

ansible 172.16.1.31 -m script -a "chdir=/root/yum.sh"

查看是否安装 htop

ansible 172.16.1.31 -m shell -a "rpm -qa | grep htop"

PS: scripts模块参数功能和command模块类似

文件类型模块 copy

  • copy – Copies files to remote locations

  • 将数据信息进行批量分发

基本操作

ansible 172.16.1.31 -m copy -a "src=/etc/hosts dest=/root/"

 输出信息详解

    172.16.1.31 | CHANGED => {       --- 对哪台主机进行操作
        "changed": true,             --- 是否对主机信息进行改变
        "checksum": "6ed7f68a1d6b4b36c1418338b2001e421eeba270",    --- 生成一个文件校验码==MD5数值
        "dest": "/root/hosts",        --- 显示目标路径信息  
        "gid": 0,                    --- 显示复制后文件gid信息
        "group": "root",             --- 显示复制后文件属组信息
        "md5sum": "7afd7b74854f0aaab646b3e932f427c0",              --- 生成一个文件校验码==MD5数值
        "mode": "0644",              --- 显示复制后文件权限信息
        "owner": "root",             --- 显示复制后文件属主信息
        "size": 401,                 --- 显示文件的大小信息
        "src": "/root/.ansible/tmp/ansible-tmp-1557804498.23-26487341925325/source", 
        "state": "file",             --- 显示文件的类型信息
        "uid": 0                     --- 显示复制后文件uid信息
    }

扩展用法:

(1)在传输文件时修改文件的属主和属组信息

ansible 172.16.1.31 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ owner=oldboy group=oldboy"

(2)在传输文件时修改文件的权限信息

ansible 172.16.1.31 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ mode=1777"

(3)在传输数据文件信息时对远程主机源文件进行备份

ansible 172.16.1.31 -m copy -a "src=/etc/ansible/file/rsync/rsync.password dest=/etc/ backup=yes"

查看备份生成的文件

 (4)创建一个文件并直接编辑文件的信息

ansible 172.16.1.31 -m copy -a "content='zhangbiao' dest=/root/zhangbiao.txt"

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

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

文件模块 file

  • Sets attributes of files

  • 设置文件属性信息

设置远程机器指定文件的属主,属组,权限

ansible 172.16.1.31 -m file -a "dest=/etc/hosts owner=oldboy group=oldboy mode=666"

扩展用法:

可以利用模块创建数据信息 (文件 目录 链接文件)

state 参数

  • =absent --- 缺席/删除数据信息

  • =directory --- 创建一个目录信息

  • =file --- 检查创建的数据信息是否存在 绿色存在 红色不存在

  • =hard --- 创建一个硬链接文件

  • =link --- 创建一个软链接文件

  • =touch --- 创建一个文件信息

创建目录信息(可以递归的创建)

ansible 172.16.1.31 -m file -a "dest=/oldboy/ state=directory"
ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy01/oldboy02/ state=directory"

创建文件信息

ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy.txt state=touch"

创建链接文件信息:

ansible 172.16.1.31 -m file -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy_hard.txt state=hard"
ansible 172.16.1.31 -m file -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy_link.txt state=link"

利用 file 模块删除数据信息

ansible 172.16.1.31 -m file -a "dest=/oldboy/oldboy.txt state=absent"
ansible 172.16.1.31 -m file -a "dest=/oldboy/  state=absent"

批量拉取数据文件 fetch

ansible 172.16.1.31 -m fetch -a "src=/tmp/oldboy.txt dest=/tmp"

系统模块 yum

name --- 指定安装软件名称
state --- 指定是否安装软件

  • installed --- 安装软件

  • present --- 安装软件

  • latest    --- 安装软件

  • absent --- 卸载软件

  • removed --- 卸载软件

ansible 172.16.1.31 -m yum -a "name=iotop state=installed"	

service模块: 管理服务器的运行状态 停止 开启 重启

name: --- 指定管理的服务名称
state: --- 指定服务状态

  • started 启动

  • restarted 重启

  • stopped 停止

enabled --- 指定服务是否开机自启动

案例:开启 nfs 服务使之开机运行

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

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. 删除指定定时任务

  • PS: ansible可以删除的定时任务,只能是ansible设置好的定时任务
ansible 172.16.1.31 -m cron -a "name='time sync01' state=absent"

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: 批量挂载操作

  • src: 需要挂载的存储设备或文件信息

  • path: 指定目标挂载点目录

  • fstype: 指定挂载时的文件系统类型

  • state

  • present/mounted --- 进行挂载

  • present: 不会实现立即挂载,修改fstab文件,实现开机自动挂载

  • mounted: 会实现立即挂载, 并且会修改fstab文件,实现开机自动挂载 *****

  • absent/unmounted --- 进行卸载

  • absent: 会实现立即卸载, 并且会删除fstab文件信息,禁止开机自动挂载

  • unmounted: 会实现立即卸载, 但是不会会删除fstab文件信息 *****

ansible 172.16.1.31 -m mount -a 'fstype=nfs src=172.16.1.31:/nfs path=/mnt state=mounted'

user模块: 实现批量创建用户

ansible 172.16.1.31 -m user -a "name=oldboy01"

扩展用法:

指定用户uid信息

ansible 172.16.1.31 -m user -a "name=oldboy02 uid=6666"

指定用户组信息

ansible 172.16.1.31 -m user -a "name=oldboy03 group=oldboy02"
# groups 添加到多个组
ansible 172.16.1.31 -m user -a "name=oldboy04 groups=oldboy02"

批量创建虚拟用户

ansible 172.16.1.31 -m user -a "name=rsync create_home=no  shell=/sbin/nologin"

给指定用户创建密码

生成密文密码信息方法

方法一

ansible all -i localhost, -m debug -a "msg={{ '123456' | password_hash('sha512', 'oldboy') }}"

 

方法二

yum install -y python-pip
pip install passlib
python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"

 使用生成的密文创建密码

ansible 172.16.1.31 -m user -a 'name=oldboy08 password=$6$oldboy$MVd3DevkLcimrBLdMICrBY8HF82Wtau5cI8D2w4Zs6P1cCfMTcnnyAmmJc7mQaE9zuHxk8JFTRgYMGv9uKW7j1'

  

 

posted @ 2019-12-03 14:13  Crazymagic  阅读(366)  评论(0编辑  收藏  举报