ansible 原理 面试
ansible 简介
ansible是一款自动化的运维工具基于Python语言实现,由Paramiko和PyYAML两个关键模块构建,可用于自动化部署应用、配置、编排task(持续交付、无宕机更新等)
组件:
- Host Lnventory 英[ˈɪnvəntri]:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载
- Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来完成的功能.
- Core Modules 英 /kɔː(r)/ Ansible执行任何管理任务都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用core Modules中的模块,然后指明管理Host Lnventory中的主机,就可以完成管理主机。
- Custom Modules英 /ˈkʌstəm/ 自定义模块,完成Ansible核心模块无法完成的功能,此模块支持任何语言编写。
作用:
优点:
- 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
- 默认使用SSH协议对设备进行管理;
- 幂等性 保证我们重复同一样操作的时候,得到的结果是一样的
- 通过Playbooks来定制强大的配置、状态管理;
- 支持API及自定义模块,可通过Python轻松扩展;
返回值颜色:
- 红色 报错
- 黄色 成功 更改了
- 绿色 成功 说明可能执行第二次了 没有更改但也成功了因为幂等性可以多次执行还能保证状态
- 紫色
配置文件:
/etc/ansible/hosts //配置主机组 配置可以使用YAML(一种标记语言)或者INI
基础命令:
- -m : 使用什么模块
- -a : 使用模块中的参数
- -h : 帮助信息
- -C: 测试一下不会真的执行
模块: (ansible-doc -l 可以看到模块的名称和大概功能 -s 可以看单个模块的使用方法)
1.单个模块使用格式 (testA是主机组的名称)
2.学会看ansible-doc信息
标黄色的地方是模块的作用 红色线标注的地方是模块的选项 required是必须选项
3.常见模块
-
1 ping //测试ansible 运行时主机之间是否连通
-
2 fetch //从远程主机拉取文件
- 3 copy //复制模块
- 4 file // 对文本的基本操作 创建文件目录修改删除 权限 软连接硬链接
- 5 blockinfile //在指定文本插入一段文本 是被标记过的 以后可以通过标记修改删除
会添加这样一段文字
-
6 lineinfile //确保某一行文本在指定文本中 删除或替换
- 7 find //寻找模块
- 8 replace //通过正则表达式替换文件中的字符串
- 9 command //和shell差不多但是识别不了管道符,;大于号小于号
- 10 shell //可以通过远程主机上的/bin/sh处理
- 11 script //远程执行ansible主机上的脚本
- 12 cron //相当于crontab 定时任务
- 13 service //服务 关闭开启
- 14 user //用户 创建,删除修改
- 15 group //查看远程主机上的组
- 16 yum_repository // 查看本地yum仓库
- 17 yum //下载模块
4 playbook 里面的使用:
检查语法错误试运行
4.1YAML 语法:
- ”---“代表文档开始
- 第二行”-“ 开头 “-” 后面要有空格
- :后面一定要有空格
- 是不能用tab键缩进的 vim编辑器自动设置为空格
- 每一个任务都要用 “-”开头
4.2 关键字:
- hosts: //主机之间用逗号隔开
- tasks: //任务列表
- name: // 执行的时候会输出关键字
- handlers //notify 调用
- tags //打标签方便单独执行
- 特殊tag always //总是执行 当没有被调用的时候也执行
- 特殊tag never 2.5版本
- 特殊tag tagged// 只有执行标签任务的时候执行别的时候不执行
- 特殊tag untagged //
- 特殊tag all //所有任务
面试题:()
1.Ansible 判断文件存在