(无标题)
以下为观看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 atlantaansible galaxy(ansible-galaxy install username.role)

 官方网站: