自动化运维工具Ansible (一)

Ansible 概念理解

特点:基于python开发,有丰富的内置模块,一条命令影响上千台机器,无客户端,通信基于ssh 具有幂等性

工具集: 

 如图:四种工具集

1,lnventory:主机清单

2,moudle : 模块

3,playins :  插件

4,API     : 接口

使用流程: 

      使用者在使用式,在服务器终端输入命令或者playbooks,会通过预定好的规则将playbook拆解为play,再组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过SSH将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除

服务端和客户端之间免密通讯

用到一个命令:sshpass  (免交互连接)在yum安装ansible时,sshpass命令包已经安装了,后续不用再安装一次

用法:

         (1) :   #sshpass  -p  远程客户端密码   ssh root@IP                                                       //跳过输入密码直接连接

         (2) :   #sshpass  -p  密码   ssh  -o  StricHostKeyChecking=no  root@IP                       //第一次连接直接跳过yes/no  其中的参数在/etc/ssh/ssh_config文件35行有

安装后配置:

vim   /etc/ansible/hosts    要控制的客户端都要写到这个文件夹下

[组名]

机器ip...........

####################

之后测试一下:#ansible  组名  -a "df -hT"

Ansible 语法:

ansible   -i    指定ansible host 文件                                                                         

ansible  组名   -m    模块                                                                          #指定模块

ansible  组名   -m    模块    -a    "命令"   --limit    IP主机                            #-a : 给模块传参数

ansible-playbook  +  文件名.yaml/yml                                                        #运行playbook文件

基本常用的模块

command模块在远程主机执行命令,不支持管道,重定向等shell的特性,常用到的参数(不支持管道)

1,chdir:在远程主机上运行命令前提前进入目录

2,creates: 在命令运行时创建一个文件,如果文件存在,则不会创建任务

3,removes: 在命令运行时移除一个文件,如果文件不存在,则不会执行移除任务

4,executeble: 指明运行命令的shell程序

案例:ls查看所有客户机

ansible all -m  command  -a "chdir=/home  ls ./"

二,shell模块在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持shell命令)

案例:测试管道符

ansible  组名  -m shell  -a   'ifconfig ens32 | awk "/ether/{print $2}"'

,raw模块,最原始的方式运行命令 (不依赖python,仅通过ssh实现)

案例:清除yum缓存

ansible  all -m  raw  -a "yum  clean  all "

,copy模块用于复制指定主机文件到远程主机的

1,dest : 指出复制文件的目标及位置,使用绝对路径,如果是源目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容

2,src :指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录,如果源是目录则目标也要是目录

3,mode: 指出复制时,目标文件的权限 

4,owner:指出复制时,目标文件的属主

5,group: 指出复制时,目标文件的属组

6,content:指出复制到目标主机上的内容,不能与src一起使用

,hostname 模块用于管理远程主机上的主机名

案例:

ansible  组名  -m hostname  -a "name=主机名"

,yum模块管理远程的安装包

1,name : 程序包名,可以带上版本号

2,state=present|latest|absent  : pressent表示安装包;latest表示安装最新版本的程序包;absent表示卸载程序包

3,disablerepo :在用yum安装时禁用某个仓库ID

4,enablerepo:在用yum安装时启用某个参考的ID

5,conf_file:YUM运行时的配置文件,而不是使用默认的配置文件

,service 模块

1,name:被管理的服务名称

2,state=started|stopped|restarted:动作包含启动关闭或者重启

3,enabled=yes|no  :表示是否设置该服务开机自启

4,runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动

案例:ansible  组名 -m service -a "name=httpd state=started  enabled=yes"

,User模块

用户管理的模块

1,name : 必选参数

2,state=present|absent: 创建账号或者删除账号,present表示创建,absent 表示删除

3,system=yes|no:是否为系统账号
4,uid:用户uid

5,group:用户基本组

6,shell:默认使用的shell

7,move_home=yse|no :如果设置的家目录已经存在,是否将已经存在的家目录进行移动

8,password:用户的密码,建议使用加密后的字符串

9,comment:用户的注释信息

10,remove=yes|no  当state=absent时,是否删除用户的家目录

,script模块实现远程批量运行本地的shell脚本

ansible 组名 -m script  -a "/root/脚本名.sh"

十,PLAYBOOK:

文件后缀.yaml

这里介绍一个命令ansible-vault(加密文件)一般用于playbook写好后,防止敏感信息泄露,从而对此文件进行加密处理:用法: #ansible-vault  encrypt  文件.yml       (也可对其他后缀的文件进行加密)

加密后不可运行文件,需先解密

解密用法:ansible-vault decrypt 文件.yml    

#ansible-vault view  文件.yml            //看加密后文件内容

# ansible-vault edit   文件.yml            //修改加密后的文件

#ansible-vault  rekey 文件.yml          //修改口令

============工具============

交互工具
#ansible-console

Welcome to the ansible console.

Type help or ? to list commands.

root@all (0)[f:5]$                                  // “all”代表全部组  其中的()里是当前组有多少个主机  

                 //[]:表示可以支持多少并发

并发可以修改:forks  10               //在后面输入即可改为10并发

交互用法:

root@all (0)[f:5]$       command(模块)    hostname(命令)                   //模块加命令即可实现对组主机操作

单个进入一个主机操作:cd + IP 就可以

playbook

Playbook 是由一个或者多个play组成的列表(YAML语言编写)

主要功能在于将事先归并为一组的主机装扮成事先通过ansible中task定义好的角色。

工作流程:

YAML语言简介

  • 使用#号注释代码
  • 缩进必须是统一的,不能空格和TAB混谈
  • 缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别通过缩进
  • 键值对可以同行写,或者分隔写
  • 一个完整的代码块功能需要包含name:task
  • 一个name只能包括一个task
  • YAML文件扩展名通常为yml或yaml
  • “-”开头
#playbook书写规范
#尽量用空格
#
#模板————————————————————————————-
- host : hostname               #主机名
  remote_user : root            #远程主机用户
  tasks:                        #任务列表
    - name : test1              #任务名称
      user : name=user state=present  #执行user模块
      tages:                    #创建标签
        - testa                 #标签名
    - name : test2
      group : name=root system=yes
      tages:
        - testb              
    - name : test3
      command : hostname
      tages:
        - testb
#----------------------------------------------------------------------------------------------
原文地址:https://www.cnblogs.com/123456likun/p/13496093.html