自动化运维工具之ansible(修改版1.0)

自动化运维工具之ansible

工作模式:以主控制端身份管理被控制端,被控制端需安装代理程序或者通过ssh协议被管理,适用于中小环境

只需要在主控端安装ansible程序包

(一般情况下都是基于ssh key验证协议使用,将ansible主机ssh公钥传给被控制端)

ansible是基于模块的方式来进行操作的,实现管理的方式有两种:

1.命令行输入指令

2.将需要执行的操作规划在指定playbook中,自动逐条执行


ansible的相关配置

1.配置文件/etc/ansible/hosts 用来存放需要批量进行ansible操作的主机清单

其中可以直接写入被控制端IP,也可以自定义进入不同的组中:

[GROUP_NAME ]    

IP-1

IP-2

注意:每个主机IP可以存放在不同的组中

(默认是基于SSH端口,若不是,则可以另外在主机地址后加“:端口号”)

2.配置文件/etc/ansible/ansible.cfg,定义了ansible执行时的一些默认选项,常用的选项如下:

fork=VALUE                                    表示可同时并发编排的被控制端数量 

host_key_checking = False        表示进行ansible操作时,不需要对第一次访问的主机进行“yes/no”的询问

log_path = /var/log/ansible.log   表示开启日志记录


ansible的相关命令

1.ansible-doc

ansible-doc  -l                                    表示查看目前可用的模块

ansible-doc [-s] Module_NAME    表示查看某模块详细[ 简要 ]用法

 

2.ansible 单条命令执行ansible相关操作,格式如下:

ansible IP -m Module_NAME -a ARGS  

IP:指在/etc/ansible/hosts设定的各分类主机

(若是将IP写为all,则表示清单中所有主机,也可写GROUP_NAME,但是需要使用“”号,也支持通配符)

-m Module_NAME:指定运用的模块,默认是command模块

ARGS:表示模块对应的相关参数,参数需要‘’号引起来

另外的一些选项使用:

-u      指定被控制端执行命令的用户,默认是root

-k      若是主控之间不是基于ssh key验证,则需要加入选项,输入被控制端主机登入口令

-C      进行测试,检查语法

-b     表示切换至sudo执行操作,默认sudo切换用户是root,若是需要切换至普通用户,则另外需要加“—become-user USER”,并且需要结合“-K”选项输入自身普通用户的密码


ansible常用模块

command 默认使用的执行命令型模块,但是不支持一些变量、特殊符号,建议使用shell模块(在件/etc/ansible/ansible.cfg进行修改)

script  通过运行ansible主控端上的脚本,在被控制端主机上实现实际内容操作

copy、fetch(与copy相反)文件的复制、获取

file    用来创建、删除文件,设置软、硬链接,以及修改属性等

cron 计划任务

yum、service   程序包的安装、卸载;服务的启动、暂停、重启和加载

hostname、user、group


PlayBook 

YMAL语言编写的ansible需要执行的内容,通常文件名为yml或yaml结尾,格式如下:(文件格式缩进有严格要求,并且区分大小写)

vim FILE_NAME.yml

---

- hosts: 指定主机范围

  remote_user: 指定用户

  tasks:           (可存在多个模块任务)

    - name: 执行模块的描述a

    Module_NAME:模块对应的需要被执行的参数信息

在playbook编写完成结束,可使用如下命令进行调用执行:

ansible-playbook FILE_NAME.yml [OPTION]

常见的OPTION如下:

--check(-C)            试运行来检测正确与否

--list-hosts                  列出执行任务的主机列表

--limit HOST_LIST    只针对指定HOST_LIST运行任务

为了保证编写的脚本文件的安全性,可使用ansible特定命令进行加密:(注意加密后就不可以执行ansible-playbook操作)

ansible-vault encrypt FILE_NAME.yml

若是需要解密,则将encrypt 换为 decrypt 即可


playbook中的其他一些复杂用法

1.特定触发条件的操作:

  notify:描述信息  (位置处于tasks中发生变化的模块任务下方)

handlers:    (与tasks处于同级阶段,注意格式缩进)

  - name: 描述信息

  Module_NAME:模块对应的需要被执行的参数信息

(注意:其中notify用来定义发生变化的模块任务,从而通知触发handlers里设置的指定模块任务运行,因此要求此时notify与handlers里指定模块任务的描述信息必须一样,这是因为如果执行模块多了的话,保证对应性)

并且notify还可以通过列表的方式,在一个发生变化的模块任务下触发handlers里中多个任务模块,格式如下:

notify:

- 描述信息-1

- 描述信息-2

2.通过设置的标签来执行特定的任务

tags:NAME (tags位置处于tasks某个模块任务下)

通过在执行剧本文件时调用标签,来实现只执行标签指定的模块任务,命令如下:

ansible-playbook -t NAME FILE_NAME.yml

标签可以同时指定多个,以“,”分隔

3.变量的使用

第一种:ansible的setup 模块可直接调用远程主机的已有信息,可通过参数指定,来显示对应信息,执行命令如下:

ansible IP -m setup -a ‘filter= VAR_NAME’

其中主要使用的变量如下:

ansible_distribution_major_version      显示系统主版本号

ansible_nodename                                     显示完整主机名

ansible_memtotal_mb                                显示总内存大小

ansible_processor_vcpus                        显示cpu的进程数

第二种:在主机清单文件/etc/ansible/hosts中设置

可在每个主机IP后给其单独设定变量:VAR_NAME=VALUE

也可通过组设定变量,只要在组中的成员变量都有效,其中公共组变量设置格式:

[GROUP_NAME:vars ]

VAR_NAME=VALUE

值得注意的是,若变量冲突,则优先使用单独定义的变量

第三种:通过命令行设定并进行调用执行:

ansible-playbook -e VAR_NAME=VALUE FILE_NAME.yml

也可以同时指定多个变量:-e “VAR_NAME1=VALUE1 VAR_NAME2=VALUE2”

    ( 变量在FILE_NAME.yml中引用时,需要如此格式 {{ VAR_NAME }} )

第四种:在playbook中直接定义,或者写入独立yml文件中,格式如下:

vars:                                                                         vars_files:

- VAR_NAME1: VALUE1                                            - vars.yml(此文件中定义变量)

- VAR_NAME2: VALUE2

注意以上变量的优先级顺序:   命令行   > 文件vars.yml  >    主机清单文件/etc/ansible/hosts

4.模板templates(需要调用的template模块只能在playbook中使用)

功能:根据模块文件动态同步相关配置文件

要求:必须在需要执行的FILE_NAME.yml文件的同级目录下,创建templates文件夹,并将需要调用的模板文件以“.j2”结尾放入其中,然后在FILE_NAME.yml文件调用template模块任务,格式如下:

template: src=FILE.j2 dest=/PATH   (此处的FILE.j2是相对路径下的文件,也可写成绝对路径)

其中也可通过条件判断,来执行指定条件下运行的模块任务,方式如下:

when: CONDITION    位置在指定指定模块任务下,当条件成立时,才执行对应任务

template模块任务也可以调用用If与for语句编写“.j2”结尾的文件,遵循以下格式:

{%for  n in “定义变量”%}      

    server{

          {%if “条件判断”%}

          {%endif%}

}

{%endfor%}

5.迭戈嵌套变量,会按照定义的元素列表,在需要执行的模块任务中调用,依次执行,格式如下:

模块任务中引用变量{{ item }}

with_items:       (位置放在需要执行的模块任务下)

    - VALUE

也可引用变量VAR定义的子变量VALUE,调用方式{{ item.VAR}}

with_items:

    -{ VAR: ‘VALUE’}     (注意‘’号)



roles

用于层次性、结构性地组织playbook,将每个需要执行的角色都分别建立层级目录进行组织,大致常见的模板如下:

playbook.yml             (总的剧本文件)

roles/:                           (存放不同角色的目录)

    PROJECT/:              (角色名称命名的文件夹)

        tasks/:                   (设置的模块任务文件)

        files/:                     (需要调用的文件存放处)

        vars/:                     (存放变量文件夹)

        templates/:          (模板文件夹)

        handlers/:            (触发条件的任务)

 

其中上面模板中涉及的一些文件内容如下:

1.主剧本playbook.yml的文件内容如下:

---

- hosts: 指定主机范围

  remote_user: USER

  roles:

    - role: PROJECT  (可写多个角色)

   若是需要使用 tags,则格式如下:

   - {role: PROJECT.tags: [‘TAG_NAME’] }   (可指定多个标签)

2.每个角色下的tasks目录下的主调用文件 main.yml必须内容如下:

---

- include: EXAMPLE.yml    (调用设置的模块任务文件,需要注意顺序问题)

其他的一些目录下主main.yml文件可使用正常格式编写信息,外加include调用

注意:若是需要调用不同角色下的相关文件,可使用相对路径 roles/PROJECT/PATH/TO/FILE



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值