最近在学习使用ansible,为了未来的大规模部署应用做准备,这东西比我之前用过的puppet,saltstack都简便一点,没有client端,也不需要额外配置,基本上手技能用,据说在国外的热门程度目前也超过saltstack了。
下面就开始零星的记录吧。
确保服务在running状态
tasks:
- name: make sure apache is running
service: name=httpd state=running
写web server的vhost配置文件可以采用变量的方式
tasks:
- name: create a virtual host file for {{ vhost }}
template: src=somefile.j2 dest=/etc/httpd/conf.d/{{ vhost }}
组合起来看下面两条示例。notify中的task被称作为handlers,它们是单独定义的,notify指定handlers的name,handlers分列了各个条目的task。
- name: template configuration file
template: src=template.j2 dest=/etc/foo.conf
notify:
- restart memcached
- restart apache
handlers:
- name: restart memcached
service: name=memcached state=restarted
- name: restart apache
service: name=apache state=restarted
project的目录结构示范
site.yml
webservers.yml
fooservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
webservers/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
在playbook中,你应该考虑这么写:
- hosts: webservers
roles:
- common
- webservers
如果play中包含"task"部分,那些"tasks"会在role角色之后被执行。
如果你希望定义一些在role之前或之后执行的任务,你可以这么写:
- hosts: webservers
pre_tasks:
- shell: echo 'hello'
roles:
- { role: some_role }
tasks:
- shell: echo 'still busy'
post_tasks:
- shell: echo 'goodbye'