Ansible:自动化运维工具

  你需要在一台机器上yum install 一个包,这时候有一个需求,比如现在有5台机同时需要装apache这个包,那么100台呢,ssh上去就太慢了,这时候就借助到了ansible批量部署工具。

通过host inventory这个文件去管理需要批量部署的主机,它实现的就是ssh协议。

把公钥拷给需批量部署的主机。

Core Modules模块:核心模块,比如说cp、yum这些命令在ansuble里模块化了。

Custom Modules模块:自定义模块,但是得需要有编程语言技术。

Connection Plugins:连接插件。

playbooks:一个任务或条命令代表一个play,多个任务写在一个文件里。

工作原理

ansible加载hosts文件,通过免秘钥或配置文件参数来批量管理主机。

ansible优点:

上手简单,无需安装客户端

ansible无需客户端

配置简单、扩展性强

支持API自定义模块,可通过python扩展

幂等性:一种操作重复多次结果相同82分19

ansible安装

yum install epel-release

yum install ansible

如遇ansible下载不成功,是yum仓库的问题,把自己的移除,而后把C开头的文件都移除来,而后yum clean all ,再去下载即可。

ansible配置客户端

首先生成密钥

ssh-keygen

而后进入.shh这个文件,里面的id_rsa.pub文件就是公钥,id_rsa就是私钥。

利用scp发送给客户端

也可以

ssh-copy-id -i id_rsa.pub 客户端ip
vim /etc/ansible/hosts

这个就是host inventory文件

在这个文件里需要定义组:格式如下:

[组名自定义]

客户端ip ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=密码(这是通过配置文件免密登录)

ansible 组名 -m ping 这一步是ping组里所有机器,看是否ok(调用模块命令)

显示的changed:false是没有做出改变的意思

如果ping失败,请打开配置文件

修改#host_key_checking=False

把注释打开即可。

ansible常用命令

列出当前的核心模块

ansible-doc -l 

查看此模块用法

ansible-doc -s 模块名 

启动并发线程数,减少压力

ansible 组名 -f 

测试通信

ansible all -m ping

在组里的机器去创建用户

ansible 组名 –m user –a 'name=名字'

给组里的所有机器安装这个软件

ansible 组名 –m yum –a 'name=安装包名字 state=present'

卸载组里所有机器的这个安装包

ansible 组名 –m yum –a 'name=安装包名字 state=absent'

重启组里所有机器的这个安装包

ansible 组名 –m service –a 'name=服务名字 state=restarted'

拷贝当前文件到组里的机器

ansible 组名 –m copy –a 'src=/root/psu.py dest=/tmp'

拷贝当前文件到组里的机器的任意一台

ansible 组里机器的ip –m copy –a 'src=/root/psu.py dest=/tmp'

直接执行命令

ansible 组名 –m command  -a 'ls -ltr'

检测剧本是否有语法错误

ansible-playbook --syntax-check 文件名.yml  

模拟执行剧本

ansible-playbook  -C  文件名.yml   

palybooks核心部分

书写格式

vim 名字.yml

-[空格]hosts:[空格]组名

remote_user:[空格]用户名

tasks:

-[空格]name:[空格]yum install tree

yum:[空格] name=tree state=present

-[空格]name:[空格]changed service status

service:[空格] name=httpd state=started

ansible-playbook 名字.yml  :调用yml文件

还可以赋予变量

vim 名字.yml

-[空格]hosts:[空格]组名

remote_user:[空格]用户名

vars:

-[空格]packages:[空格]tree   把tree这个包名赋予给packages这个变量。就是tree=packages

tasks:

-[空格]name:[空格]yum install tree

service:[空格] name={{ packages }} state=absent

ansible-playbook 名字.yml  :调用yml文件

还可以迭代:比如创建多个用户

-[空格]hosts:[空格]组名

remote_user:[空格]用户名

vars:

-[空格]packages:[空格]tree   把tree这个包名赋予给packages这个变量。就是tree=packages

tasks:

-[空格]name:[空格]yum install tree

service:[空格] name={{ packages }} state=absent

        -[空格]name:[空格]create many users

                   user[空格]:[空格]name={{ item }} item是内置变量,可以直接使用

                with_items:

                  -[空格]用户名

                  -[空格]应户名

ansible-playbook 名字.yml  :调用yml文件

还可以触发器:

-[空格]hosts:[空格]组名

remote_user:[空格]用户名

vars:

-[空格]packages:[空格]tree   把tree这个包名赋予给packages这个变量。就是tree=packages

tasks:

-[空格]name:[空格]yum install tree

service:[空格] name={{ packages }} state=absent

        -[空格]name:[空格]copy

                   copy:[空格]src= 本机文件路径    dest=目标文件路径

                   notify:

                   -[空格]service httpd restart(给触发器起个名字) 

            handlers:

            -[空格]name:这的名字一定要跟触发器起的名字一样

                      service:[空格]name=httpd state=restarted

ansible-playbook 名字.yml  :调用yml文件

多个触发只需要在任务下紧跟notify:而后在handlers里同一添加要触发的任务即可。

template模块

比如我批量部署apache,我的需求是同时安装apache,但他俩的配置文件不能一样,比如里面的端口号不一样。

vim 命名.yml文件

- hosts: testhost

 remote_user: root

 tasks:

 - name: copy differernt httpd.conf

  template: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf

而后 改写httpd的配置文件,把端口号设置成一个变量

Listen {{ port }}

vim /etc/ansible/hosts

把我们刚设置变量传进去,添加至每台机器后

port=需求端口号

port=需求端口号

roles用法

把每一个play封装到角色里,就是把目录模块化了。

第一层目录可以自定义名字,第二层目录必须交roles,而后roles里又包含两个目录,这两个目录也可以自定义名字,而后再在这两个目录里去定义目录。

调用task目录,适用于yum模块,service模块。

而后进入tasks目录(第四级目录)创建main.yml文件,必须叫这个。

而后进去直接写任务即可。而后在roles同级目录下,创建site.yml这个文件,而后写入:

- hosts: 组名

 remote_user: root

 roles:

 - 刚才编写的第三级目录名,就是你编写那个第三级目录,直接把目录名写到这即可。

调用files目录,适用于copy模块。

先把你要批量拷贝的文件放到files这个目录里。而后编辑taks目录的main.yml文件:

handlers跟vars目录必须定义main.yml这个文件。

vars里的main.yml只需定义变量即可。

变量名 = 名字

handlers里的main.yml只需定义名字跟任务即可。notify要写到tasks里的main.yml。

调用的时候调用site.yml这个文件即可。

Ansible批量部署工具的更多相关文章

  1. Ansible批量部署工具的安装

    1.系统安装gcc,以及python2.6以上(2.6.8): 第一种比较简单的安装方法: 1)直接yum install -y ansible; 2)然后更改配置,/etc/ansible/ansi ...

  2. Linux系统——Ansible批量管理工具

    批量管理工具: (1)ansible 操作简单(适用于500台以下服务器) (2)saltstack 比较复杂(一般适用于1000-4w台服务器) (3)puppet超级复杂 systemctl(统一 ...

  3. ansible 批量部署准备工作

    Ansible:自动化运维工具,基于Python开发 功能{ 批量系统配置 批量程序部署 批量运行命令等等 } 准备工作: 一.操作主机安装epel源 和 ansible工具 yum -y insta ...

  4. 利用ansible批量部署zabbix-agent

    应用环境:Linux运维工作少不了一个好的监控,zabbix就是目前比较好的一款开源监控软件. 监控类型多种多样,如果不介意或者系统支持安装,那么agent方式是首选. 当主机数量较多时,可以利用相关 ...

  5. ansible批量部署(一)

    自动化运维工具shell脚本/Ansible(无客户端)/Saltstack(master-minion) 回顾服务器部署的流程:买云主机->环境部署->软件部署->配置部署-> ...

  6. ansible批量管理工具的搭建与简单的操作

    ansible的安装 # [root@localhost ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@localhost ...

  7. Linux批量部署工具Expect

    既然没有遇到过,做好准备总是好的.这是自己送给自己的话,现在运维做自动话越来越多,自己就学以下,记录笔记.目前主流的有puppet.Expect.pssh等等,今天就用Expect做自动部署和日常管理 ...

  8. ansible批量部署mysql

    1.1 将mysql软件包同步到客户端服务器,做安装前期准备 Ps:mysql安装包线拖到ansible服务端的/ansible/roles/mysql/files目录下 vim /ansible/r ...

  9. ansible批量部署模块(二)

    回顾:Ansible: 无需客户端程序 只要有SSH 模块化 ansible帮助工具ansible-doc 模块名ansible-doc 模块名 -s 列出该模块的所有选项ansible-doc -l ...

随机推荐

  1. 一、基础篇--1.1Java基础-Session和Cookie的区别【转】

    https://www.cnblogs.com/zlw-xf/p/8001383.html 1:cookie数据存放在客户的浏览器上(客户端),session数据放 @1:cookie不是很安全,别人 ...

  2. zoopkeeper 的ACL操作

    1.创建一个变量存放模式信息, private static final String MODE = "digest"; //ACL模式   2.在一个类的构造函数内放入初始化信息 ...

  3. 【转】C++ const成员变量和成员函数(常成员函数)

    转:http://c.biancheng.net/view/2230.html 在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定.const 可以用来修饰成员变量和成员函数. co ...

  4. python - lambda 函数使用

    # if we need it only once and it's quite simple def make_incrementor(n): return lambda x: x + n f = ...

  5. python之拷贝文件

    做了个小实验, 用于拷贝文件夹下面的jpg. 用于拓展, 可以引入类和方法, 拷贝你指定的任意类型的文件. import os src = 'C:\\Users\\Administrator\\Des ...

  6. KVM 开启嵌套虚拟化

    问题 在 CentOS KVM 上启动虚拟机来部署 OpenStack 测试环境,在启动具有 CPU 绑定.NUMA 亲和的虚拟机时触发错误: libvirtError: Requested oper ...

  7. Django模型的Field Types

    Field Types 常用参数: null 如果设置为 True , Django 存放一个 NULL 到数据库字段.默认为 False. allow_null 如果设置为 True , 该字段将接 ...

  8. svn导出项目到myeclipse,运行报ClassNotFoundException

    一开始以为是 这样的svn导出项目到myeclipse,运行报ClassNotFoundException 后来不行 又看了一下  还不行 以为是这样的MyEclipse2014报错java.lang ...

  9. SI_WorkShop_V4安装手册

    V4安装手册 第一步 启动workshopV4 解压workshopV4.rar,在解压后的目录中双击eclipse.exe启动workshopV4,启动画面如下图所示:(注:解压后第1次启动速度会慢 ...

  10. HashMap根据value值排序

    )))); Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); for (Map.Entry s : entr ...