一、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. 🏆【Java技术专区】「编译器专题」重塑认识Java编译器的执行过程(消除数组边界检查+公共子表达式)!

    前提概要 Java的class字节码并不是机器语言,要想让机器能够执行,还需要把字节码翻译成机器指令.这个过程是Java虚拟机做的,这个过程也叫编译.是更深层次的编译. 在编译原理中,把源代码翻译成机 ...

  2. 打造自己的Vue组件文档生成工具

    程序员最讨厌的两件事情,第一种是写文档,另一种是别人没有写文档.有没有直接根据vue组件生成文档的呢?当然是有的的.但第三方使用起来不一定能和现有项目结合使用,往往需要额外的注释用来标记提取信息.使用 ...

  3. 并发编程——线程中sleep(),yield(),join(),wait(),notify(),notifyAll()区别

    前言 今天简单的讲一讲线程中sleep(),join(),yield(),wait(),notify(),notifyAll()这些方法的使用以及区别. 不过在讲这些方法之前,需要简单的介绍一下锁池和 ...

  4. Linux - curl -w 参数详解

    -w 的作用 完成请求传输后,使 curl 在 stdout 上显示自定义信息 格式是一个字符串,可以包含纯文本和任意数量的变量 输出格式 输出格式中的变量会被 curl 用对应的值替换掉 所有变量的 ...

  5. SpringBoot 整合缓存Cacheable实战详细使用

    前言 我知道在接口api项目中,频繁的调用接口获取数据,查询数据库是非常耗费资源的,于是就有了缓存技术,可以把一些不常更新,或者经常使用的数据,缓存起来,然后下次再请求时候,就直接从缓存中获取,不需要 ...

  6. 从跨域与同源策略谈CSRF防御与绕过

    之前偶然看到群里有小伙汁问这个token相关的问题,当时我酝酿了一下子,没想好怎么总结,今天来说一下 CSRF在过去还属于OWASP TOP10 ,现在已经不是了(补充一点:关于OWASP API 请 ...

  7. Django静态文件配置 request对象 Django操作MySQL

    Django中的文件介绍 render.HttpResponse和redirect 当我们想起手写一个项目,创建好应用并且注册之后,在urls.py文件先导入app文件夹下migrations下的vi ...

  8. 题解 u

    传送门 这里AC解法因为手残 tag2[min(r+l, n+1)][min(c+l+1, n+1)]+=s; 写成 tag2[min(r+l, n+1)][c+l+1]+=s; 惨遭RE,以后注意查 ...

  9. Spring Data JPA:解析SimpleJpaRepository

    源码 SimpleJpaRepository的定义如下: /** * Default implementation of the {@link org.springframework.data.rep ...

  10. MongoDB 数据库创建删除、表(集合) 创建删除、数据增删改查

    使用数据库.创建数据库 use student 如果真的想把这个数据库创建成功,那么必须插入一个数据. 数据库中不能直接插入数据,只能往集合(collections)中插入数据.不需要专门创建集合,只 ...