第一章 ansible服务介绍

1.1 ansible批量管理服务概述

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

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

1.2 ansible批量管理服务意义

  1. 提高工作的效率

  2. 提高工作准确度

  3. 减少维护的成本

  4. 减少重复性工作

1.3 ansible批量管理服务功能

  1.    可以实现批量系统操作配置
  2.    可以实现批量软件服务部署
  3.    可以实现批量文件数据分发
  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---被管理端)

Ansible介绍的更多相关文章

  1. 自动化运维工具之 Ansible 介绍及安装使用

    一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...

  2. Ansible 介绍和安装

    目录 Ansible 介绍 环境准备 Ansible安装 配置秘钥管理 配置Inventory文件 简单测试连通性 Ansible 介绍 运维工具分类: agent: puppet, func 这类都 ...

  3. Linux centosVMware 自动化运维Ansible介绍、Ansible安装、远程执行命令、拷贝文件或者目录、远程执行脚本、管理任务计划、安装rpm包/管理服务、 playbook的使用、 playbook中的循环、 playbook中的条件判断、 playbook中的handlers、playbook实战-nginx安装、管理配置文件

    一.Ansible介绍 不需要安装客户端,通过sshd去通信 基于模块工作,模块可以由任何语言开发 不仅支持命令行使用模块,也支持编写yaml格式的playbook,易于编写和阅读 安装十分简单,ce ...

  4. 自动化运维工具Ansible介绍

    一个由 Python 编写的强大的配置管理解决方案.尽管市面上已经有很多可供选择的配置管理解决方案,但他们各有优劣,而 ansible 的特点就在于它的简洁. 让 ansible 在主流的配置管理系统 ...

  5. ansible介绍和安装

    ansible是由 Python 编写的强大的配置管理解决方案,ansible 的特点就在于它的简洁与高效率 ansible与其他的配置管理工具不同点在于:不需要你在想要配置的每个节点上安装自己的组件 ...

  6. Ansible介绍/安装/入门

    http://docs.ansible.com/ansible/ https://galaxy.ansible.com/ Ansible是一个IT自动化工具. 它可以配置系统,部署软件,并编排更先进的 ...

  7. Ansible介绍及安装部署

    本节内容: 运维工具 Ansible特性 Ansible架构图和核心组件 安装Ansible 演示使用示例 一.运维工具 作为一个Linux运维人员,需要了解大量的运维工具,并熟知这些工具的差异,能够 ...

  8. ansible入门一(Ansible介绍及安装部署)

    本节内容: 运维工具 Ansible特性 Ansible架构图和核心组件 安装Ansible 演示使用示例 一.运维工具 作为一个Linux运维人员,需要了解大量的运维工具,并熟知这些工具的差异,能够 ...

  9. ansible介绍与安装

    一.什么是ansible ansible是python中一套模块,系统中的一套自动化工具,可以用来作系统管理.自动化命令等任务. 二.ansible优势 .ansible是Python中一套完整的自动 ...

随机推荐

  1. C语言中各种进制的表示

    #include<stdio.h> int main() { //默认情况下是十进制 ; // 二进制(0b或者0B开头) int number2 = 0b1100; //八进制(0开头) ...

  2. MySQL关闭查询缓存(QC)的两种方法

    MySQL Query Cache 会缓存select 查询,安装时默认是开启的,但是如果对表进行INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP ...

  3. Oracle实现主键自增的几种方式

    数据库作为一个系统的核心,数据库设计的1NF就是一个表结构必须有唯一约束也就是主键,Oracle数据库本身没有自增机制,不像MySQL直接使用关键字AUTO_INCREMENT自动加一,所以需要我们去 ...

  4. git——创建分支后,切换分支报错(error: pathspec 'master' did not match any file(s) known to git)

    error: pathspec 'master' did not match any file(s) known to git 解决办法: 1.查看分支 git branch -a 2.获取所有分支 ...

  5. Array排序和List排序

    public class SortTest { public static void main(String[] args) { int arr[]={12,4,45,23,5,7,9,33}; Sy ...

  6. 【基础】Pipeline

    1. 参考的优秀文章 Request/Response protocols and RTT 2. 来源 原来,系统中一个树结构的数据来源是Redis,由于数据增多.业务复杂,查询速度并不快.究其原因, ...

  7. vue2 开发总结

    vue-cli学习资料: http://m.php.cn/article/394750.html  或 https://www.cnblogs.com/zhanglin123/p/9270051.ht ...

  8. 上传漏洞科普[1]-文件上传表单是Web安全主要威胁

    为了让最终用户将文件上传到您的网站,就像是给危及您的服务器的恶意用户打开了另一扇门.即便如此,在今天的现代互联网的Web应用程序,它是一种 常见的要求,因为它有助于提高您的业务效率.在Facebook ...

  9. DGIM算法

    /***************************************************** copyright (C), 2014-2015, Lighting Studio. Co ...

  10. 工具类--map 转成xml xml转成map

    public class WxChatReq { /** * Map转换成XML * @param data * @return * @throws Exception */ public stati ...