最近在学习使用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'