(无标题)
以下为观看Ansible-Configuration Management的笔记。不适合初学者查看。可以作为温习使用
Ansible总结
- 单个Module是基石,将机器分组,严重依靠变量
- task组成任务
- 全部的task组成playbooks.将所有的机器定义到一个确定的状态
- 使用role对playbooks进行拆分.role有约定好的目录结构
- ansible galaxy来分享role.使用时完全使用变量来覆盖原有变量,严重依赖社区水平(比如国情安装许多软件都需要使用镜像,而外国作者编写role并不会考虑这些)
特点
- change management(定义一个特定的系统状态,change_event用于回调)
- Provisioning(role。服务划分。比如一个webserver会依次执行某些步骤)
- Automation(playbook同时设置上千台)
- Orchestration(编排多个tasks让其协调coordinates执行。多个系统配置。解决task间的依赖性)
为什么使用它
- No agents
- No database
- No residual software
- No complex upgrades
- 题外话。使用yaml文件描述而无法使用编程控制。我认为迟早药丸。只不过目前还没找到更好的替代品
- ssh/root/encrypted vault(共享到github仓库成标配了,几乎所有的软件都是这个套路)
- easy to extend:http call、shell commands(挺有用)、scripts(暂时不太懂,感觉是扩充model)、Ansible-Galaxy
Ansible 架构
Variables:
- Host Variables: 在资产中给host或者group设置的变量
- Facts: ansible进行的第一步就是setup。获取机器的基础信息。比如内网ip
- Dynamic Variables: 收集tasks数据或者运行时获取?比如将上一个task的结果作为参数
执行过程中将model发送到远方机器临时目录执行。返回json结果。然后删除临时目录内容
学习环境搭建(视频19)
- Vagrant、Virtualbox、Ansible
- Remote、Local(基本不使用Local模式。仅有一次无法远程ssh我用过)
Inventory Features
- Behavioral Parameters
- Groups
- Groups of Groups
- Assign Variables
- Scaling out using multiple files
- Static/Dynamic
分组、组合、赋予变量(和python里面变量作用域LEGB差不多)
1 | [db] |
分组的套路(group_vars、host_vars下面的文件必须和inventory相对应)
1 | ├── group_vars # 全局 |
1 | # variable file example |
Ad-Hoc 临时使用
1 | ansible -m ping all |
参数注解
- -b become变成某用户一般是root
- -K 配合-b输入密码
- -m 使用某个模块
- -vvv 和ssh -vvv一样查看详细日志
- -T timeout 设置超时
- -c 选择连接的模块. 3.5使用默认值搞sudo可能会有问题
1 | 使用变量(估计使用janja2模板引擎是会python的人使用ansible的唯一优势了-_-) |
ansible-doc可以查看文档
Host/Group Target Patterns
- OR (group1:group2)
- NOT (!group2)
- Wildcard (web*.ex.com)
- Regex (~web[0-9]+)
- Complex Patterns AND (group1:&group2) # 求交集、中间出现一个:有点奇葩
Anaible Playbooks
- 组合ansible modules组成play,多个play组成playbooks
- logic controls & error handle
- include 合并多个
- Grab output of task for another task(register)
- Debug Module(debug/msg or var)
- Promptins for input(类似与input,vars_prompt)
- Playbook Handlers(notify)
- Tasks with asynchronous execution
- Only runs tasks when notified
- Tasks Only notify when state=changed
- Does not run until all playbook tasks have executed
- Most common for restarting services to load changes(if changes are made)
- Contitional Clause(when: ansible_os_family == “Debian”,搭配register使用)
- Jinja2 Template Module(template)
1 | --- |
ansible-playbook -i inventory web_db.yaml
Roles
Predefined directory structure
defaults、files、handlers、meta、tasks、templates、vars
main.yml,使用include.vars除外
use tags to define categories within your playbooks
Adding Roles to Playbook
1
2
3
4
5
6
7
8---
- hosts: code-dev
roles:
- server-common
- builders
gather_facts: no
tasks:
# Build your extra tasks here likePre-tasks and Post-tasks(executes plays before or after roles)
ansible-playbook site.yml -tags "web" -limit atlanta
ansible galaxy(ansible-galaxy install username.role)