认识playbook
不同于临时命令,playbook适合于复杂应用的部署。
playbook的格式是YAML。playbook 由一个或多个 play 组成。
play 的内容,被称为 task,即任务。一个任务是一个对 ansible 模块的调用。
playbook包含:
Tasks:任务,即调用模块完成的某操作Variables:变量Templates:模板Handlers:处理器,当某条件满足时,触发执行的操作Roles:角色,通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制
一个项目的目录结构可能是这样的:
site.ymlwebservers.ymlfooservers.ymlroles/common/files/templates/tasks/main.yaml01.yaml02.yamlhandlers/vars/defaults/meta/webservers/files/templates/tasks/handlers/vars/defaults/meta/
- yml文件,用于定义此角色用到的各handler:在handler中使用include包含的其他的handler文件也应该位于此目录中;
- files目录:存放由copy或script等模块调用的文件;
- templates目录:templates模块会自动在此目录中寻找Jinja2模板文件;
- tasks目录:至少应该包含一个名为main.yml的文件,其定义了此角色的任务列表;此文件可以使用include包含其他的位于此目录中的task文件;
- handlers目录:此目录中应当包含一个main;
- vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量;
- meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系;
- default目录:为当前角色设定默认变量时使用此目录;应当包含一个main.yml文件;
YAML文件基本语法规则
- 大小写敏感;
- 使用缩进表示层级关系;
- 缩进时不允许使用Tab键,只允许使用空格;
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可。
- ”
#” 表示注释,从这个字符一直到行尾,都会被解析器忽略 - 只需要知道两种结构类型即可:
- Lists
- Maps
YAML Maps:
- 是一个键值对:
Key:Value - Maps的value既能够对应字符串也能够对应一个Maps,如:
apiVersion: v1kind: Podmetadata:name: kube100-sitelabels:app: web
YAML List:
说白了就是一个数组:
args-beijing-shanghai-shenzhen-guangzhou
Lists的子项也可以是Maps,Maps的子项也可以是List,如:
apiVersion: v1kind: Podmetadata:name: kube100-sitelabels:app: webspec:containers:- name: front-endimage: nginxports:- containerPort: 80- name: flaskapp-demoimage: jcdemo/flaskappports: 8080
注意:
- 在YAML文件中绝对不要使用tab键
- 配置文件应该存储在版本控制仓库中。如果需要,可以快速回滚配置、重新创建和恢复
hosts和users
- hosts: allremote_user: roottasks:- name: test connectionping:remote_user: root
