Ansible介绍

第一章 ansible服务介绍

1.1 ansible批量管理服务概述

是基于python语言开发的自动化软件工具node

是基于SSH远程管理服务实现远程主机批量管理python

1.2 ansible批量管理服务意义

1) 提升工做的效率linux

2) 提升工做准确度web

3) 减小维护的成本正则表达式

4) 减小重复性工做shell

1.3 ansible批量管理服务功能

1) 能够实现批量系统操做配置vim

2) 能够实现批量软件服务部署windows

3) 能够实现批量文件数据分发bash

4) 能够实现批量系统信息收集服务器

1.4 ansible批量管理服务特色

管理端不须要启动服务程序(no server)

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

受控端不须要安装软件程序(libselinux-python)

被管理端selinux服务没有关闭---影响ansible软件的管理

libselinux-python让selinux开启的状态也可使用ansible程序

受控端不须要启动服务程序(no agent)

服务程序管理操做模块众多(module)

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

第二章 Ansible安装部署

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

[root@m01 ~]#  yum -y install ansible
[root@m01 ~]# rpm -qc ansible
/etc/ansible/ansible.cfg    --ansible服务配置文件
/etc/ansible/hosts          --主机清单文件
/etc/ansible/roles          ---角色目录

2. 第二个历程:须要编写主机清单文件

[root@m01 ansible]# vim /etc/ansible/hosts
[all]
172.16.1.31
172.16.1.41
172.16.1.7
[backup]
172.16.1.41
[nfs]
172.16.1.31
[web]
172.16.1.7

3 第三个历程:测试是否能够管理多个主机

[root@m01 ansible]# ansible all -a "hostname"
172.16.1.41 | CHANGED | rc=0 >>
backup

172.16.1.7 | CHANGED | rc=0 >>
web01

172.16.1.31 | CHANGED | rc=0 >>
nfs

[root@m01 ansible]#

第三章 Ansible主机清单

1.主机支持主机名通配以及正则表达式,例如 web[1:3].oldboy.com 表明三台主机
2.主机支持基于非标准的 ssh 端口,例如 web1.oldboy.com:6666
3.主机支持指定变量,可对个别主机的特殊配置,如登录用户,密码
4.主机组支持指定变量[group_name:vars],同时支持嵌套组[game:children]

1.指定主机组相关配置

#主机组
[root@m01 ~]# cat /etc/ansible/hosts
[all]
172.16.1.31 
172.16.1.41
#主机+端口+密码
[all]
172.16.1.31 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
172.16.1.41 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass='123456'
#对整个主机组都生效的变量
[all:vars]
ansible_ssh_pass='123456'

第四章 Ansible经常使用模块

1. command(默认模块)

command – Execute commands on targets
            在一个远程主机上执行一个命令

应用场景:
相似shell,可是只能执行简单的命令,复杂的命令和有些符号并不能识别,用的比较少

01.查看主机名,能够执行成功

[root@m01 ~]# ansible all -m ping       
172.16.1.41 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
172.16.1.31 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

02.使用awk拼接查看主机IP执行失败

[root@m01 ansible]# ansible all -m command -a "ifconfig eth0|grep 172"     
172.16.1.7 | FAILED | rc=255 >>
SIOCSIFADDR: No such device
eth0|grep: ERROR while getting interface flags: No such devicenon-zero return code

172.16.1.41 | FAILED | rc=255 >>
SIOCSIFADDR: No such device
eth0|grep: ERROR while getting interface flags: No such devicenon-zero return code

172.16.1.31 | FAILED | rc=255 >>
SIOCSIFADDR: No such device
eth0|grep: ERROR while getting interface flags: No such devicenon-zero return code

[root@m01 ansible]#

2. shell(万能模块)

command – Execute shell commands on targets
            在节点上执行操做

万能模块,全部命令均可以执行,和本地执行效果同样
01.使用管道查询IP地址

[root@m01 ~]# ansible all -m shell -a "ifconfig eth0|grep 10.0.1"
172.16.1.41 | CHANGED | rc=0 >>
        inet 10.0.1.41  netmask 255.255.255.0  broadcast 10.0.1.255

172.16.1.31 | CHANGED | rc=0 >>
        inet 10.0.1.31  netmask 255.255.255.0  broadcast 10.0.1.255

3. copy 模块

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

01.拷贝m01的hostsname文件到其余主机的/opt目录下

[root@m01 ~]# ansible 172.16.1.31 -m copy -a "src=/etc/hostname dest=/opt"
172.16.1.31 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "f434396716e2c9aed47cfde87c491cce5a2c08fa", 
    "dest": "/opt/hostname", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "318d7defb693a2eb0d4f1a7a96575a57", 
    "mode": "0644", 
    "owner": "root", 
    "size": 4, 
    "src": "/root/.ansible/tmp/ansible-tmp-1563780990.63-144254987732501/source", 
    "state": "file", 
    "uid": 0
}

02.在传输文件时修改文件属主和属组信息及权限信息

ansible 172.16.1.31 -m copy -a "src=/root/rsync.password dest=/etc/ owner=opesn group=opesn mode=0600"

03.建立文件并直接写入内容

ansible 172.16.1.31 -m copy -a "content='opesn' dest=/etc/rsync.password mode=0600"

05.复制目录
src后面目录没有/: 将目录自己以及目录下面的内容都进行远程传输复制

ansible 172.16.1.31 -m copy -a "src=/data dest=/data"

src后面目录有/: 只将目录下面的内容都进行远程传输复制

ansible 172.16.1.31 -m copy -a "src=/data/ dest=/data"

参数说明:

src #推送数据的源文件信息
dest #推送数据的目标路径
backup #对推送传输过去的文件,进行备份
content #直接批量在被管理端文件中添加内容
group #将本地文件推送到远端,指定文件属组信息
owner #将本地文件推送到远端,指定文件属主信息
mode #将本地文件推送到远端,指定文件权限信息

4. file 模块

01.建立文件夹

ansible all -m file -a "path=/root/test state=directory"

02.建立文件并更改属性

ansible all -m file -a "path=/root/test.txt state=touch mode=777 owner=root group=root"

03.建立软连接

ansible all -m file -a "src=/root/abc path=/root/abc_link state=link"

参数说明:

path #指定远程主机目录或文件信息
recurse #递归受权
state
directory #在远端建立目录
touch #在远端建立文件
link #link 或 hard 表示建立连接文件
absent #表示删除文件或目录
mode #设置文件或目录权限
owner #设置文件或目录属主信息
group #设置文件或目录属组信息

5.script(脚本模块)

script – Runs a local script on a remote node after transferring it
        在传输远程节点以后,在远程节点上运行一个本地脚本
# 编写脚本
[root@m01 ~]# mkdir -p /server/scripts
[root@m01 ~]# cat /server/scripts/yum.sh
#!/usr/bin/bash
yum install -y iotop
#在本地运行模块,等同于在远程执行,不须要将脚本文件进行推送目标主机执行
[root@m01 ~]# ansible oldboy -m script -a "/server/scripts/yum.sh"

6.cron 模块

01.建立一条定时任务

ansible all -m cron -a "minute=* hour=* day=* month=* weekday=* job='/bin/sh
/server/scripts/test.sh'"

02.添加定时任务名字信息,防止重复

ansible all-m cron -a "name='cron01' job='/bin/sh /server/scripts/test.sh'"

03.删除相应定时任务

ansible all -m cron -a "name='ansible cron02' minute=0 hour=0 job='/bin/sh
/server/scripts/test.sh' state=absent"

04.注释相应定时任务,使定时任务失效

ansible all -m cron -a "name='ansible cron01' minute=0 hour=0 job='/bin/sh
/server/scripts/test.sh' disabled=no"

mount模块

src:须要挂载的存储设备或文件信息
path:指定目标挂载点目录
fstype:指定挂载时的文件系统类型
state:presnet/mounted   --- 进行挂载
            present:不会实现当即挂载修改fstab文件,实际开机自动挂载
            mounted:会实现当即挂载,而且会修改fstab文件,实际开机自动挂载
      absent/umounted   --- 进行卸载
            absent:会实现当即卸载,而且会删除fstab文件信息,禁止开机自动挂载
            unmounted:会实现当即卸载,但不会删除fstab文件信息
ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs state=present"
ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs state=mounted"
ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs state=unmounted"
ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs state=absent"

user模块

01.建立用户指定uid,gid,不建立家目录也不容许登录

ansible all -m user -a "name=test uid=888 group=888 shell=/sbin/nologin create_home=no"
name #指定建立的用户名
uid #指定用户的 uid
group #指定用户组名称
groups #指定附加组名称
password #给用户添加密码
shell #指定用户登陆 shell
create_home #是否建立家目录

group模块

01.建立用户组

ansible test -m group -a "name=test gid=888 state=present"
name #指定建立的组名
gid #指定组的 gid
state
absent #移除远端主机的组
present #建立远端主机的组(默认)

yum模块

name       #指定要安装的软件包名称
state      #指定使用 yum 的方法
installed, present #安装软件包
removed, absent #移除软件包
latest     #安装最新软件包
ansible test -m yum -a "name=httpd state=installed"

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

name # 定义要启动服务的名称
state # 指定服务状态
started #启动服务
stopped #中止服务
restarted #重启服务
reloaded #重载服务
enabled #开机自启
ansible oldboy -m service -a "name=nfs state=stopped enabled=yes"

unarchive(解压模块)

01.解压远程服务器的压缩包到指定目录
建立压缩包:
cd /etc && tar zxvf /opt/sys.tar.gz etc/fstab etc/hosts  
执行命令:
ansible 172.16.1.31 -m unarchive -a "src=/opt/sys.tar.gz dest=/opt/ remote_src=yes"
02.把本地文件解压到目标机器指定目录
建立命令
cd / && tar zcvf /opt/log.tar.gz var/log/messages
ansible 172.16.1.31 -m unarchive -a "src=/opt/log.tar.gz dest=/opt/"

archive(解压单个文件)

01.压缩单个文件

ansible 172.16.1.31 -m archive -a "path=/var/log/message dest=/tmp/log.tar.gz format=gz force_archive=true"

setup 获取主机信息

01.直接执行获取主机信息

ansible 172.16.1.31 -m setup

02.只将主机某个信息打印出来

[root@m01 /server/scripts/test]# ansible 172.16.1.41 -m setup -a "filter=ansible_all_ipv4_addresses"              
172.16.1.41 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "172.16.1.41", 
            "10.0.1.41"
        ], 
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false
}

查看帮助

[root@mo1 ~]# ansible-doc -l            --- 列出ansible简介
[root@mo1 ~]# ansible-doc -s fetch  --- 指定一个模块详细说明
[root@mo1 ~]# ansible-doc fetch     --- 查询模块在剧本中应用方法

Ansible输出信息颜色解释

01. 绿色信息:  查看主机信息/对主机未作改动
02. 黄色信息:  对主机数据信息作了修改
03. 红色信息:  命令执行出错了
04. 粉色信息:  忠告信息
05. 蓝色信息:  显示ansible命令执行的过程

远程主机没法管理问题分析

1)  管理端没有分发好主机的公钥
2)  被管理端远程服务出现问题SSH
3)  被管理端进程出现僵死状况
    /usr/sbin/sshd -D       --- 负责创建远程链接
    sshd: root@pts/0        --- 用于维护远程链接(windows---linux)
    sshd: root@notty        --- 用户维护远程链接(ansible---被管理端)
相关文章
相关标签/搜索