首页 > 其他 > 详细

ansible

时间:2019-05-03 21:08:16      阅读:159      评论:0      收藏:0      [点我收藏+]

一、ansible简介

ansible是一个自动化批量部署工具,底层是用python写的(paramiko,jinjia2(模板语言),yaml)

核心组件:

    Ansible:ansible的核心程序

    Playbooks:yaml格式文件,多个任务定义在一个文件中,使用时可以统一调用,‘剧本’用来调用哪些主机需要调用哪些模块来完成的功能。

    Host Inventory:管理主机,记录了由每一个ansible管理的主机信息,包括ssh端口号,root用户密码,ip地址等,可以通过file加载,也可以通过CMDB加载。

    Core Modules:核心模块,把常用命令模块化,Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。

    Custom Modules:支持任意语言,自定义模块,完成Core Modules无法完成的功能。

    Connection Plagins:连接作用,连接插件,Ansible和Host通信使用。

工作原理:

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

优点:

  ansible不需要安装客户端或agent(代理)

  支持API和自定义模块

  通过playbooks定制强大的配置,状态管理

   配置简单,功能强大

  提供一个功能强大、操作性强的Web管理界面和REST API接口——AWX平台

  幂等性:一次操作重复多次结果相同

ansible配置客户端(两种方法):

  第一种:ssh免密登录

  第二种:vim /etc/ansible/hosts在最低端写入要管理的主机

    如:192.168.42.12 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=root

二、ansible常用模块

①ping模块

技术分享图片
[root@localhost ~]# ansible testhost -m ping
192.168.42.10 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
192.168.42.9 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
192.168.42.8 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
测试主机连通性

②command模块

这个模块可以直接在远程主机上执行命令,并将结果返回本主机。

ansible testhost -m command -a ls -ltr

③shell模块

shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等。

ansible testhost -m shell -a rpm -qa | grep "http"

④copy模块

这个模块用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等。(src是源文件,dest是目标文件,可以改名)

ansible testhost -m copy -a src=/root/1 dest=/tmp
#给定内容生成文件,并制定权限
ansible web -m copy -a ‘content="I am keer\n" dest=/data/name mode=666‘ #connect可以直接指定文件的值(替换src)
#查看上条命令的执行结果
ansible testhost -m shell -a ‘ls -l /tmp/‘
#覆盖,原文件备份
ansible testhost -m copy -a ‘content="I am keerya\n" backup=yes dest=/tmp/name mode=666‘

⑤file模块

该模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等。

⑥yum模块

name=要安装的包名   state有三种模式(present下载   latest下载最新版本   absent卸载)

ansible testhost -m yum -a name=httpd state=present

⑦service模块

该模块用于服务程序的管理。

name=服务名称  state有started,stopped,restarted,reloaded四种模式,enabled开机自启。

ansible testhost -m service -a name=ntpd state=started enabled=true

⑧user模块

该模块主要是用来管理用户账号。

#创建一个uid为11111的keer用户
ansible testhost -m user -a name=keer uid=11111
#删除用户
ansible testhost -m user -a ‘name=keer state=absent‘

⑨scrip模块

该模块用于将本机的脚本在被管理端的机器上运行。直接指定脚本的路径即可

在服务端写一个脚本/tmp/test.sh

ansible testhost -m script -a /tmp/test.sh

⑩setup

查看用户信息

  facts组件是Ansible用于采集被管机器设备信息的一个功能,我们可以使用setup模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。
  facts就是变量,内建变量 。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。

ansible testhost -m setup
ansible testhost -m setup -a ‘filter="*mem*"‘

三、playbooks

一个任务叫做一个play,多个play组成的组合叫playbooks

①基础

- hosts: testhost
  remote_user: root
  tasks:
  - name: cteate user name
    user: name=jam1

②变量

- hosts: testhost        #冒号后面必须有空格
  remote_user: root
  vars:
  - packages: jam2       #等价于packages=jam2
  tasks:                        #tasks的s不能少
  - name: cteate user name     #名字随便起,最好是任务的注释
    user: name={{ packages }}    #与变量呼应
  - name: delete
    user: name=jam1 state=absent

③迭代

什么情况下可以用到迭代?

安装软件包;创建用户,组;删除用户,软件包等

- hosts: testhost   #-和:后面必须都有空格
  remote_user: root    #用root用户执行
  vars:
  - packages: jam2
  tasks:
  - name: cteate user name
    user: name={{ packages }}
  - name: delete
    user: name=jam1 state=absent
  - name: yum install many
    user: name={{ item }} state=present     #迭代固定格式
    with_items:   #固定
    - jam0
    - jam1
    - jam2
    - jam3

④触发器

只要执行文件就重启ntpd,类似于只要修改配置文件就重启服务

- hosts: testhost
  remote_user: root
  vars:
  - packages: jam2
  tasks:
  - name: cteate user name
    user: name={{ packages }}
  - name: delete
    user: name=jam1 state=absent
  - name: yum install many
    user: name={{ item }} state=present
    with_items:
    - jam0
    - jam1
    - jam2
    - jam3
    notify:      #触发器,固定
    - restart ntp    #随便起
  handlers:       #要与tasks对齐
  - name:  restart ntp      #名字要与触发器名字一样
    service: name=ntpd state=restartede‘u

⑤模板

 

ansible

原文:https://www.cnblogs.com/daisyyang/p/10806203.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!