ansible 资料,ansible资料


1.ansible  介绍

Ansible 来源于科幻小说,是一种超光速通讯设备。

 

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppetcfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行

命令等功能。支持linux、BSD、MacOS、等 支持openstack 、docker等结合使用。


1.1ansible 结构

Ansible 核心组建说明:

     Ansible  :Ansible 得核心程序

     host lnventory :记录了每个由Ansible 管理得主机信息,包括ssh端口,root账号密码。IP地址等等可以通过file 来加载,可以通过CMDB加载

     Playbooks:YAML 格式文件,多个任务定义再一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用哪些模块来完成得功能,

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

     Custom  Modules:自定义模块,完成,Ansible 核心模块无法完成的功能,此模块支持任务语言编写

       Connection Plugins:连接插件,Ansible 和Host 通信使


Ansible 工作流程:

      Ansile--->host (主机资源定义)--->模块(核心模块/自定义模块)--->插件(ssh)


1.2ansible 特性

no agent 不v要安装客户端(只需要支持ssh)

no  server  不需要启动服务(ansible)

基于模块工作,可以使用任意语言开发模块

基于ssh 工作(基于密钥认证)

YMAL格式  编排任务,支持丰富的数据结构(剧本playbook)

使用python 编写  维护简单


2.ansible的安装部署

主机 :192.168.142.138       vm1.linux.com  (ansible 服务端)

            192.168.142.142       vm2.linux.com

            192.168.142.143      vm3.linux.com

安装方法1:在线安装(epel源)


安装方法2:自己制作本地yum源 (准备好相应的软件) 



ssh 如果有可以忽略  版本低的可以升级下


安装完怎么让ansible  工作呢 

工作流程

1.配置密钥对

2.配置ansible hosts 文件,(该文件不是/etc/hosts 文件)

3.测试连接(通过模块)

ansible 的配置文件

[root@master ~]# rpm -qc ansible

/etc/ansible/ansible.cfg    

/etc/ansible/hosts

配置密钥


编辑/etc/ansible/hosts 文件,指定被管理端的IP 地址或者主机名




hosts 配置文件写法

写法1:

node1.ansible.com

node2.ansible.com

192.168.1.1

写法2:以组的方式

[webserver]  ----可以随意定义

192.168.10.1

192.168.10.2

[dbserver]

192.168.20.1

192.168.20.2

为方便管理主机推荐使用组的形势配置主机




3.Ansible 命令使用方法

# ansible <PATTERN> -m <module_name> -a <arguments>

PATTERN的写法:

某一个主机组的名称 web  

所有主机 all, *

IP地址或系列主机名

one.example.com

one.example.com:two.example.com >>>支持写多个主机名,不同的主机名间使用冒号":"隔开

192.168.1.50

192.168.1.* >>>支持通配符

webservers:!phoenix >>>对属于webservers组中的主机,但不属于phoenix组的主机

webservers:&phoenix >>>对同时属于webservers和phoenix组中的主机进行操作

正则表达式, 必须以~开头 

~(web|db).*\.example\.com


4.常见模块 

4.1 测试被管理端主机存活状态

Ansible  查看帮助:


查看模块使用方法:

Ansible-doc [模块名] 

4.2ping 模块

测试管理端与被管理端的连接情况


4.3user 模块

管理远程主机上的用户的账号

    常见参数有:

        name=   指明要管理的账号名称

        state=present|absent   指明是创建账号还是删除账号,present表示创建,absent表示删除

        system=yes|no   指明是否为系统账号  

        uid=   指明用户UID

        group=   指明用户的基本组

        groups=   指明用户的附加组

        shell=   指明默认的shell   ()

        home=   指明用户的家目录

        move_home=yes|no   当home设定了家目录,如果要创建的家目录已存在,是否将已存在的家目录进行移动

        password=   指明用户的密码,最好使用加密好的字符串

        comment=   指明用户的注释信息

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



4.4group 模块

用来添加或删除远端主机的用户组

  常见参数有:

        name=                  被管理的组名

        state=present|absent   是添加还是删除,不指名默认为添加

        gid=                   指明GID

        system=yes|no          是否为系统组


4.5 file模块

用于设定远程主机上的文件属性

   常见参数有:

        path=   指明对哪个文件修改其属性

        src=   指明path=指明的文件是软链接文件,其对应的源文件是谁,必须要在state=link时才有用

        state=directory|link|absent   表示创建的文件是目录还是软链接

        owner=   指明文件的属主

        group=   指明文件的属组

        mode=   指明文件的权限

 

        创建软链接的用法:

            src=  path=  state=link

        修改文件属性的用法:

            path=  owner=  mode=  group=

        创建目录的用法:

            path=   state=directory

        删除文件:

            path= state=absent


4.6  copy 模块

拷贝ansible管理端的文件到远程主机的指定位置

常见参数有:

     dest=    指明拷贝文件的目标目录位置,使用绝对路径,如果源是目录,则目标也要是目录,如果目标文件已存在,会覆盖原有内容

     src=     指明本地路径下的某个文件,可以使用相对路径和绝对路径,支持直接指定目录,如果源是目录,则目标也要是目录

     mode=    指明复制时,目标文件的权限

     owner=   指明复制时,目标文件的属主

     group=   指明复制时,目标文件的属组

     content= 指明复制到目标主机上的内容,不能与src一起使用,相当于复制content指明的数据,到目标文件中

4.7shell 模块

在被管理端执行命令   (常用命令)

支持重定向,管道

参数: chdir=<Directory>

4.8 command  模块

在被管理端执行命令  (常用命令)

不支持重定向,管道 

默认模块

参数:chdir=<Directory>

4.9 yum模块

基于yum机制,对远程主机管理程序包

   常用参数有:

        name=   指明程序包的名称,可以带上版本号,不指明版本,就是默认最新版本

name=httpd

name=httpd-2.2.15

        state=present|lastest|absent   指明对程序包执行的操作,present表示安装程序包,latest表示安装最新版本的程序包,absent表示卸载程序包

        disablerepo=      在用yum安装时,临时禁用某个仓库,仓库的ID   仓库id查看方式 (yum repolist)

        enablerepo=      在用yum安装时,临时启用某个仓库,仓库的ID

        conf_file=         指明yum运行时采用哪个配置文件,而不是使用默认的配置文件

        disable_gpg_check=yes|no   是否启用gpg-check

4.10  service模块

用来管理远程主机上的服务的模块

    常见参数有:

        name=                             被管理的服务名称(/etc/init.d)

        state=started|stopped|restarted   表示启动或关闭或重启

        enabled=yes|no                    表示要不要设定该服务开机自启动

        runlevel=                         如果设定了enabled开机自动启动,则要定义在哪些运行级别下自动启动

4.11 Uri模块

 如果远端是web服务器,可以利用ansible直接请求某个网页

常用作网站测试

        常见参数有:

        url=       指明请求的url的路径,如:http://10.1.32.68/test.jpg

        user=      如果请求的url需要认证,则认证的用户名是什么

        password=  如果请求的url需要认证,则认证的密码是什么

        method=    指明请求的方法,如GET、POST, PUT, DELETE, HEAD

4.12 cron模块

管理计划任务的模块

  常见参数有:

    minute=  指明计划任务的分钟,支持格式:0-59,*,*/2等,与正常cron任务定义的一样的语法,省略时,默认为*,也就是每分钟都执行

    hour=    指明计划任务的小时,支持的语法:0-23,*,*/2等,省略时,默认为*,也就是每小时都执行

    day=     指明计划任务的天,支持的语法:1-31,*,*/2等,省略时,默认为*,也就是每天都执行

    month=   指明计划任务的月,支持的语法为:1-12,*,*/2等,省略时,默认为*,也就是每月都执行

    weekday= 指明计划任务的星期几,支持的语法为:0-6,7 ,*等,省略时,默认为*,也就是每星期几都执行

    reboot   指明计划任务执行的时间为每次重启之后

    name=    给该计划任务取个名称,必须要给明。每个任务的名称不能一样。

    job=     执行的任务是什么,当state=present时才有意义

    state=present|absent   表示这个任务是创建还是删除,present表示创建,absent表示删除,默认是present

4.13  hostname模块

        管理远程主机上的主机名

        常用参数有

name=  指明主机名

4.14 script模块

将管理端的某个脚本,移动到远端主机(不需要指明传递到远端主机的哪个路径下,系统会自动移动,然后执行),

 一般是自动移动到远端主机的/root/.ansible/tmp目录下,然后自动给予其权限,然后再开个子shell然后运行脚本,运行完成后删除脚本

4.15   setup模块

可收集远程主机的facts变量的信息,相当于收集了目标主机的相关信息(如内核版本、操作系统信息、cpu、…),保存在ansible的内置变量中,之后我们有需要用到时,直接调用变量即可

4.16 fetch模块   

从远程主机拉取文件到本地

  一般情况下,只会从一个远程节点拉取数据

 常见参数有:

    dest=  从远程主机上拉取的文件存放在本地的位置,一般只能是目录

    src=   指明远程主机上要拉取的文件,只能是文件,不能是目录


4.17 mount模块

配置挂载点 
选项:

dumpfstype:必选项,挂载文件的类型

name:必选项,挂载点

opts:传递给mount命令的参数

src:必选项,要挂载的文件

state:必选项 present:只处理

fstab中的配置

absent:删除挂载点

mounted:自动创建挂载点并挂载之

umounted:卸载


4.ansible playbook

1.Playbook 简介

简单来说,playbooks 是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署.

Playbooks 可用于声明配置,更强大的地方在于,在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤.并且可以同步或异步的发起任务.

Playbooks 的格式是YAML(详见:YAML 语法),语法做到最小化,意在避免 playbooks 成为一种编程语言或是脚本,但它也并不是一个配置模型或过程的模型.

playbook 由一个或多个 ‘plays’ 组成.它的内容是一个以 ‘plays’ 为元素的列表.

play 之中,一组机器被映射为定义好的角色.在 ansible 中,play 的内容,被称为 tasks,即任务.在基本层次的应用中,一个任务是一个对 ansible 模块的调用,

playbook的基础组件:

Playbook 文件必须是*.yml结尾。

hosts:运行指定任务的目标主机,多个主机用:冒号分隔

remote_user:在远程主机上执行任务的用户;可以全局指定,也可以单个任务指定

sudo_user:表示以sudo方式运行任务时,切换为哪个用户身份运行

tasks: 任务列表

示例


测试文件语法

[root@master ~]# ansible-playbook --syntax-check vm.yml

测试执行

[root@master ~]# ansible-playbook --check  vm.yml

Ansible 中文权威指南

http://www.ansible.com.cn/ 


相关内容

    暂无相关文章