一、ansible的功能和意义

1、功能

 ansible批量功能 ----------------------> 并行

01. 可以实现批量系统操作配置
02. 可以实现批量软件服务部署
03. 可以实现批量文件数据分发
04. 可以实现批量系统信息收集

  

2、意义

01. 提高工作的效率
02. 提高工作准确度
03. 减少维护的成本
04. 减少重复性工作

  

二、ansible的特点

1. 没有配置文件(不需要配置)
2. 不需要启动服务
3. 客户端不需要部署任务

  

三、ansible和相似的软件对比

和ansible相似的软件:saltstack

saltstack也是自动化批量管理软件。

但是saltstack比较复杂,软件服务比较重。

四、ansible安装

yum安装(需要epel源):

yum -y install epel-release
yum install -y ansible

五、ansible基本使用(默认是以root用户执行,但是基于ssh连接操作要多次输入密码,为方便可以使用基于ssh密钥方式进行认证)

1、ansible主要配置文件

 (1) ansible应用程序的主配置文件:/etc/ansible/ansible.cfg

 (2) Host Inventory定义管控主机:/etc/ansible/hosts

  

2、ansible应用程序命令

ansible-doc 命令:获取模块列表,及模块使用格式;

ansible-doc -l:获取模块列表
ansible-doc -s module_name:获取指定模块的使用信息

ansible的命令格式可以理解为(ansible还有很多参数):

ansible     主机信息(IP 主机组 all ...)    -m    (模块名)command     -a      "操作动作" 

3、ansible执行命令返回信息的颜色的含义

(1)绿色:执行成功

(2)黄色:执行成功并且状态发生了改变

(3)红色:执行失败

提示:可以在ansible.cfg中进行定制颜色的设定

六、ansible主机清单功能模块(指定可以管理哪些主机)

1、主机清单配置方式:

方式1:直接把IP写在配置文件中

方式2:指定分组

[oldboy]
172.16.1.41
172.16.1.31 [oldgirl]
172.16.1.7

  

方式3:支持主机名符号匹配配置

[oldboy]
172.16.1.[1:50]
web[01:03]

  

方式4:支持内置变量信息配置

[oldboy]
172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22 [oldboy]
172.16.1.7 ansible_user=root ansible_password=123456 ansible_port=22

  

方式5:支持特殊变量信息配置 (剧本)

[oldboy]
172.16.1.7 [oldboy:vars]
ansible_user=root
ansible_password=123456
ansible_port=22

  

方式6:嵌入式配置方法

[backup:children]
backupclient
backupserver [backupclient]
172.16.1.7 ansible_user=root ansible_password=123456
172.16.1.31
[backupserver]
172.16.1.41

 

2、ansible命令指定管理的主机方式

ansible命令后面指定要管理的主机,all表示主机清单里面的全部主机,也可指定主机清单里面的分组名等。

七、ansible的模块使用(以下列举的是一些常用的模块)

1、ping模块

2、command模块 :命令模块=========在目标主机执行命令

参数:

chdir:    在执行命令前,先切换目录信息
creates: 判断一个文件是否存在,如果存在,后面命令被跳过(不执行)
removes: 判断一个文件是否存在,如果存在,后面命令就执行
free_form:在使用command模块时候必须输入一个合法的linux命令

  

基本用法:

[root@m01 ansible]# ansible backup -m command -a "hostname"
172.16.1.31 | CHANGED | rc=0 >>
nfs01 172.16.1.41 | CHANGED | rc=0 >>
backup 172.16.1.7 | CHANGED | rc=0 >>
web01

  

特殊用法:

chdir 参数:
[root@m01 ansible]# ansible backup -m command -a "chdir=/tmp pwd"
172.16.1.31 | CHANGED | rc=0 >>
/tmp 172.16.1.7 | CHANGED | rc=0 >>
/tmp 172.16.1.41 | CHANGED | rc=0 >>
/tmp

 

creates 参数:
[root@m01 tmp]# ansible backup -m command -a "creates=/etc/oldboy.txt touch /opt/oldboy.txt"
172.16.1.41 | CHANGED | rc=0 >> 172.16.1.7 | SUCCESS | rc=0 >>
skipped, since /etc/oldboy.txt exists 172.16.1.31 | CHANGED | rc=0 >>

  

3、shell模块:万能模块==========在目标主机执行命令

chdir:    在执行命令前,先切换目录信息
creates: 判断一个文件是否存在,如果存在,后面命令被跳过(不执行)
removes: 判断一个文件是否存在,如果存在,后面命令就执行
free_form:在使用command模块时候必须输入一个合法的linux命令
可以识别一些特殊字符 < > | ; $

提示:shell模块虽然是万能模块,但最好选择专业的模块完成专业事情

  

例如:

ansible backup -m shell -a "rpm -qa iftop"

  

4、script模块:命令模块==========执行脚本

例如:

ansible backup -m script -a "/server/scripts/yum.sh"

  

5、copy模块:=============批量分发文件

作用:

01. 分发文件数据信息     从管理端 -- 被管理端
02. 修改文件权限属性信息
03. 移动远程主机数据信息 被管理端 -- /tmp/oldboy.txt --- /opt/

  

参数:
src: 指定要推送的数据信息
dest:指定数据保存在远程主机什么目录中
mode:修改文件权限信息
owner:修改文件属主信息
group:修改文件属组信息
backup: 分发文件数据时,会对源文件进行备份
remote_src: 复制远程主机文件到其他路径,或者进行远程主机数据备份
content: 直接编辑文件内容

基本用法:

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

  

特殊用法:

传输文件时,修改文件权限:

ansible backup -m copy -a "src=/etc/hosts dest=/etc/hosts.bak mode=600 owner=oldboy666 group=oldboy666"

分发文件时,对源文件进行备份:

 ansible backup -m copy -a "src=/etc/hosts dest=/etc/ backup=yes"

远程主机文件进行复制备份(便于批量还原):

ansible backup -m copy -a "src=/etc/hosts dest=/etc/hosts.backup  remote_src=yes"

批量还原:

ansible backup -m copy -a "src=/etc/hosts.backup dest=/etc/hosts  remote_src=yes"

直接编辑文件信息,并且进行批量分发:

ansible backupclient -m copy -a "content='oldboy123' dest=/etc/rsync.password mode=600"

6、fetch模块:===================批量拉取文件

ansible 172.16.1.7 -m fetch -a "src=/etc/oldgirl.txt dest=/tmp"

  

7、file模块:

作用:

01. 修改文件权限信息

02. 创建数据信息/删除数据信息

基本用法:修改文件权限

ansible 172.16.1.7 -m file -a "path=/etc/oldgirl.txt mode=666 owner=oldboy666 group=oldboy666"

  

特殊用法:创建数据信息

参数:state
absent -- 删除数据信息
directory -- 创建目录
file ←
hard -- 创建硬链接
link -- 创建软链接
touch -- 创建文件

创建文件:

ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy.txt state=touch"

  

创建目录:

ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy_dir state=directory"

  

删除文件数据:

ansible 172.16.1.7 -m file -a "path=/oldboy/oldboy_dir/oldboy_soft_link  state=absent"

  

8、cron模块:定时任务模块=========批量添加设置定时任务信息

参数:
minute hour day month weekday --- 时间参数
job -- 指定定时任务信息
name -- 添加注释信息
state -- absent 删除定时任务 present 添加定时任务
disabled -- 注释定时任务 yes 取消定时任务注释 no

  

每隔5分钟,时间同步:

ansible backup -m cron -a "name='date ntpdate crond02'  minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'"

  

批量删除定时任务信息:

ansible backup -m cron -a "name='date ntpdate crond' state=absent"

  

批量注释定时任务信息:

ansible backup -m cron -a "name='date ntpdate crond'  minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"

  

9、yum模块:批量下载安装软件

参数:
name: 指定软件名称
state: 指定动作信息 installed

  

ansible backup -m yum -a "name=nmap state=installed"

  

10、service模块:管理服务状态模块

作用:批量启动/停止服务程序  设置服务是否开机自动启动

参数:
name: 定义服务名称
state: 是否启动 started 停止 stopped 重启 restarted 平滑重启 reloaded
enabled:设置服务是否开机自动启动

  

ansible backup -m service -a "name=firewalld state=started enabled=yes"

ansible backup -m service -a "name=firewalld state=stopped enabled=no"

  

11、user模块:用户管理

参数
name 创建的用户名称
uid 指定用户的uid信息
group 指定属于主要组
groups 指定属于哪个附属组
password 设置用户密码信息???
shell 指定登录方式 /bin/bash /sbin/nologin
create_home:

  

创建虚拟用户:

ansible backup -m user -a "name=Alex uid=250 group=root groups=oldboy shell=/sbin/nologin create_home=no"

  

12、mount模块:挂载

参数:
src:需要挂载存储设备信息
path: 挂载点路径信息
fstype:挂载类型信息
state:挂载操作(mounted present)/卸载操作(unmounted absent)
mounted:可以实现立即挂载 永久开机自动挂载
present:永久开机自动挂载
unmounted:可以实现立即卸载
absent:可以实现立即卸载 永久卸载

  

批量挂载:

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

  

八、ansible剧本

1、具体的编写规范

(1)python yaml 语法规范

(2)规范位置

mkdir /etc/ansible/ansible_playbook

vim /etc/ansible/ansible_playbook/test.yaml

(3)语法规范

规则一:缩进

yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成。一定不能使用tab键   

规则二:冒号

CMD="echo"

    yaml:

    mykey:

每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)

规则三:短横线

想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分

核心规则:有效的利用空格进行剧本的编写,剧本编写是不支持tab的

2、剧本的执行方式

(1)检查剧本的语法

ansible-playbook --syntax-check test.yaml 

(2)剧本模拟执行

ansible-playbook -C test.yaml

(3)正式执行剧本

ansible-playbook  test.yaml

3、ansible剧本的编写

Linux下ansible使用的更多相关文章

  1. Linux下ansible的group模块

    一.概述 group 模块可以帮助我们管理远程主机上的组. 二.常用参数 name参数:必须参数,用于指定要操作的组名称. state参数:用于指定组的状态,两个值可选,present,absent, ...

  2. linux下安装部署ansible

    linux下安装部署ansible 介绍 Ansible是一种批量部署工具,现在运维人员用的最多的三种开源集中化管理工具有:puppet,saltstack,ansible,各有各的优缺点,其中sal ...

  3. Ansible学习记录一:Linux下部署

    0.Ansible介绍 Ansible 是一个简单的自动化运维管理工具,可以用来自动化部署应用.配置.编排 task(持续交付.无宕机更新等),采用 paramiko 协议库(fabric 也使用这个 ...

  4. Linux下实现免密登录

    过程如下: 1.Linux下生成密钥 通过命令”ssh-keygen -t rsa“ 2.1 通过ssh-copy-id的方式 命令: ssh-copy-id -i ~/.ssh/id_rsa.put ...

  5. 1.Linux下生成密钥

    1.Linux下生成密钥 ssh-keygen的命令手册,通过”man ssh-keygen“命令: 通过命令”ssh-keygen -t rsa“ 生成之后会在用户的根目录生成一个 “.ssh”的文 ...

  6. linux 下使用github

    Linux下Git和GitHub环境的搭建 1.创建Github帐号  (name@server.com) 2.安装git [root@cloud ~]# yum install git -y 3.生 ...

  7. Linux下如何使用Rsync备份服务器重要数据

    Rsync介绍: Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似 ...

  8. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  9. Linux下服务器端开发流程及相关工具介绍(C++)

    去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...

随机推荐

  1. HCNA Routing&Switching之交换技术基础

    什么是交换机?顾名思义,交换机就是用来数据包交换的:广泛用于终端接入:它的前身是hub(集线器),hub是一个古老的设备,它的作用也是用于终端接入,但hub有一个最大的缺点是它不能隔离冲突域:所谓冲突 ...

  2. div 模拟alert弹出框

    --------------信息展示弹出框---------------- <style> .over{background-color: rgba(0, 0, 0, 0.7);displ ...

  3. 如何给html元素的onclick事件传递参数即如何获取html标签的data

    某些非text元素,如a.button等用于触发时间的标签可已将要传的数据放在一个属性中,如data,这个属性必须是不影响样式的,可以使用任意非html定义的名字命名属性,然后将数据传到属性中, &l ...

  4. java小程序之随机任务发布器

    需求 自定义任务 随机定时 随机排序 集合输出 搭建 简单项目,所以我使用java 的maven来搭建一个控制台程序,并且使用excel来记录任务 创建任务类(sub) package com.mic ...

  5. 什么是 RFC 2544

    什么是 RFC 2544? 如果您从事网络工作,您可能听说过它,但 RFC 2544 究竟是什么呢? RFC 的全称是 Request for comment ,请求注解.是一系列收录了互联网国际标准 ...

  6. vulnhub-靶机Lampiao

    目标信息:攻击机IP地址:192.1681.10 Lampiao靶机IP地址:192.168.1.12 DC-1靶机IP地址:192.168.1.7 目的:获取靶机root权限和靶机设置的所有flag ...

  7. TCP 才不傻!

    大家好,我是小林. 之前收到个读者的问题,对于 TCP 三次握手和四次挥手的一些疑问: 第一次握手,如果客户端发送的SYN一直都传不到被服务器,那么客户端是一直重发SYN到永久吗?客户端停止重发SYN ...

  8. Flutter开发进阶学习指南Flutter开发进阶学习指南

    Flutter 的起源 Flutter 的诞生其实比较有意思,Flutter 诞生于 Chrome 团队的一场内部实验, 谷歌的前端团队在把前端一些"乱七八糟"的规范去掉后,发现在 ...

  9. 使用Cobertura做代码覆盖率测试

    经验总结:首先要把cobertura.jar包含ant的classpath路径中,其次要求它包含在测试用例的classpath中: 使用cobertura做代码覆盖率测试中出现的问题:覆盖率始终为0, ...

  10. POSIX多线程编程-条件变量pthread_cond_t

    条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用.使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化.一旦其它 ...