一、ansible的功能和意义

1、功能

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

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

  

2、意义

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

  

二、ansible的特点

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

  

三、ansible和相似的软件对比

和ansible相似的软件:saltstack

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

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

四、ansible安装

yum安装(需要epel源):

  1. yum -y install epel-release
  1. yum install -y ansible

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

1、ansible主要配置文件

  1. (1) ansible应用程序的主配置文件:/etc/ansible/ansible.cfg
  2.  
  3. (2) Host Inventory定义管控主机:/etc/ansible/hosts

  

2、ansible应用程序命令

  1. ansible-doc 命令:获取模块列表,及模块使用格式;
  2.  
  3. ansible-doc -l:获取模块列表
  4. ansible-doc -s module_name:获取指定模块的使用信息

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

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

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

(1)绿色:执行成功

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

(3)红色:执行失败

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

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

1、主机清单配置方式:

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

方式2:指定分组

  1. [oldboy]
  2. 172.16.1.41
  3. 172.16.1.31
  4.  
  5. [oldgirl]
  6. 172.16.1.7

  

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

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

  

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

  1. [oldboy]
  2. 172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_ssh_port=22
  3.  
  4. [oldboy]
  5. 172.16.1.7 ansible_user=root ansible_password=123456 ansible_port=22

  

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

  1. [oldboy]
  2. 172.16.1.7
  3.  
  4. [oldboy:vars]
  5. ansible_user=root
  6. ansible_password=123456
  7. ansible_port=22

  

方式6:嵌入式配置方法

  1. [backup:children]
  2. backupclient
  3. backupserver
  4.  
  5. [backupclient]
  6. 172.16.1.7 ansible_user=root ansible_password=123456
  7. 172.16.1.31
  8. [backupserver]
  9. 172.16.1.41

 

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

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

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

1、ping模块

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

参数:

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

  

基本用法:

  1. [root@m01 ansible]# ansible backup -m command -a "hostname"
  2. 172.16.1.31 | CHANGED | rc=0 >>
  3. nfs01
  4.  
  5. 172.16.1.41 | CHANGED | rc=0 >>
  6. backup
  7.  
  8. 172.16.1.7 | CHANGED | rc=0 >>
  9. web01

  

特殊用法:

  1. chdir 参数:
  2. [root@m01 ansible]# ansible backup -m command -a "chdir=/tmp pwd"
  3. 172.16.1.31 | CHANGED | rc=0 >>
  4. /tmp
  5.  
  6. 172.16.1.7 | CHANGED | rc=0 >>
  7. /tmp
  8.  
  9. 172.16.1.41 | CHANGED | rc=0 >>
  10. /tmp

 

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

  

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

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

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

  

例如:

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

  

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

例如:

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

  

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

作用:

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

  

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

基本用法:

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

  

特殊用法:

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

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

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

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

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

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

批量还原:

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

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

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

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

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

  

7、file模块:

作用:

01. 修改文件权限信息

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

基本用法:修改文件权限

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

  

特殊用法:创建数据信息

  1. 参数:state
  2. absent -- 删除数据信息
  3. directory -- 创建目录
  4. file
  5. hard -- 创建硬链接
  6. link -- 创建软链接
  7. touch -- 创建文件

创建文件:

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

  

创建目录:

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

  

删除文件数据:

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

  

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

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

  

每隔5分钟,时间同步:

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

  

批量删除定时任务信息:

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

  

批量注释定时任务信息:

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

  

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

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

  

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

  

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

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

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

  

  1. ansible backup -m service -a "name=firewalld state=started enabled=yes"
  2.  
  3. ansible backup -m service -a "name=firewalld state=stopped enabled=no"

  

11、user模块:用户管理

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

  

创建虚拟用户:

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

  

12、mount模块:挂载

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

  

批量挂载:

  1. 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)规范位置

  1. mkdir /etc/ansible/ansible_playbook
  2.  
  3. vim /etc/ansible/ansible_playbook/test.yaml

(3)语法规范

  1. 规则一:缩进
  2.  
  3. yaml使用一个固定的缩进风格表示数据层结构关系,Saltstack需要每个缩进级别由两个空格组成。一定不能使用tab
  4.  
  5. 规则二:冒号
  6.  
  7. CMD="echo"
  8.  
  9. yaml:
  10.  
  11. mykey:
  12.  
  13. 每个冒号后面一定要有一个空格(以冒号结尾不需要空格,表示文件路径的模版可以不需要空格)
  14.  
  15. 规则三:短横线
  16.  
  17. 想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分

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

2、剧本的执行方式

(1)检查剧本的语法

  1. ansible-playbook --syntax-check test.yaml

(2)剧本模拟执行

  1. ansible-playbook -C test.yaml

(3)正式执行剧本

  1. 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 8 Predicate 函数接口

    同学你好,这里有一份你的未读代码,等你查收. 这篇文章属于 Java 8 教程(LTS)系列教程,点击阅读更多相关文章. Predicate 函数接口同之前介绍的 Function 接口一样,是一个函 ...

  2. String,String Builder,String Buffer-源码

    目录 String 源码分析 常用的API isEmpty() length() charAt() substring() equals() equals()与"==" inter ...

  3. JS系统函数

    1. parseInt--转为整型 2. parseFloat--转为浮点型 3. Number--转为数字型 4. isFinite()--检测一个值是否为有限值,如果是返回true,否则就是Inf ...

  4. 为什么 WordPress 镜像用起来顺手?

    有用户朋友问,用已有WordPress镜像好?还是自己动手安装配置好? 答案:用Websoft9的相关镜像好(各大云市场的镜像提供商比较多,"真假李逵"的现象总是有的,我们只对We ...

  5. Bugku-web-字符?正则?

    题目意思很明显,根据给出的规则构造出合理的正则表达式然后通过get方式提交弹出Flag. i:字体大小 /..../表示开始和结束. .号表示匹配0-9任一数字 *号表示重复前一个字符多次 {4,7} ...

  6. HTML5(十一)——WebSocket 基础教程

    一.为什么要学 WebSocket? websocket 是 HTML5 提供的一种长链接双向通讯协议,使得客户端和服务器之间的数据交换更简单,允许服务端主动向客户端推送数据,并且客户端与服务端只需连 ...

  7. 一键部署lamp脚本

    #!/bin/bash systemctl stop firewalld systemctl disable firewalld setenforce 0 #-------Apache------ # ...

  8. LDAP未授权访问学习

    LDAP未授权访问学习 一.LDAP 介绍 LDAP的全称为Lightweight Directory Access Protocol(轻量级目录访问协议), 基于X.500标准, 支持 TCP/IP ...

  9. 题解 block

    传送门 如果不想让next_permutation()自动忽略重复元素,可以在比较函数里加个rk之类的东西使它们不同(next_permutation()不用等于号) 关于第一问:貌似也是一个挺常见的 ...

  10. Sadmin:打造私有Django公共库实现代码复用

    我们借助于Django开发了许多的内部管理系统,例如之前介绍过的Probius.Kerrigan.Proxy等等,这些系统看起来长的都一样,但实际实现的功能确是千差万别,这些不同的系统为什么会长的一样 ...