Chinaunix首页 | 论坛 | 博客
  • 博客访问: 350437
  • 博文数量: 52
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 577
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-27 14:21
个人简介

知道自己该干嘛,知道自己能干嘛

文章分类

全部博文(52)

文章存档

2019年(1)

2018年(8)

2017年(2)

2016年(11)

2015年(3)

2014年(10)

2013年(17)

我的朋友

分类: 系统运维

2016-02-26 16:44:51

       
           hello,最近都在使用 ansible,不光是平时使用 ad-hoc ,  在deploy 时也通过 playbook 去部署,还有就是代码的发布管理
           先说下, ansible 在不同环境下的目录结构。
           
           目录结构 :           
  1.        
    1. .
    2. ├── development
    3. │   ├── group_vars
    4. │   │   └── hosts
    5. │   └── inventory
    6. ├── production
    7. │   ├── group_vars
    8. │   │   └── hosts
    9. │   └── inventory
    10. ├── roles
    11. │   └── environment
    12. │   ├── tasks
    13. │   │   └── main.yml
    14. │   └── templates
    15. │   └── redis.properties.j2
    16. └── site.yml
    17. 8 directories, 7 files

            可以看到, 我们现在的目录结构,区分的2种环境, 环境之间不同的配置区别,在于各自的 group_var 中,使用一个 redis config 文件来模拟不同环境的下
  2.         生成不同的配置文件。

  3.         首先看下我们2个环境,定义的不同的变量内容
  4.         [root@ansible-53_26 ansible-env]# cat development/group_vars/hosts 
            ---
            env: development


            ##redis config
            redis: 
              redis.server.0:
                 ip: 10.66.128.202
                 port: 8009


           [root@ansible-53_26 ansible-env]# cat production/group_vars/hosts 
           ---

           env: produciton

           project: discount

           ##code variable
           code_dir: /data/www/marketing_project/discount
           remote_code_dir: discount

           ##redis config
           redis: 
             redis.server.0:
                ip: 10.66.141.157
                port: 8000
             redis.server.1:
                ip: 10.66.141.157
                port: 8001 

          可以看出我们 2个环境的 redis ip 地址和端口, 数量都不一致,但是我们可以通过一个 template 去生成不同的配置
          首先我们把,变量定义为 字典结构,方便在 jinja 中调用。
     
          看下一下我们 role 里的内容:
          [root@ansible-53_26 ansible-env]# cat roles/environment/tasks/main.yml 
           ---
           - name: dispaly env variable
             debug: msg="{{ env }}"

           - name: Configure redis.properties j2
             template: >
                src=redis.properties.j2
                dest=/tmp/redis.properties
                owner=root
                group=root
                mode=0644

           [root@ansible-53_26 ansible-env]# cat roles/environment/templates/redis.properties.j2 
           {% for key,vaule in redis.iteritems() %}
           {{ key }}.ip={{ vaule.ip }}
           {{ key }}.port={{ vaule.port }}
           {% endfor %}

          stie.yml 文件内容:
          ---
           - hosts: hosts
             user: root
             gather_facts: False
             roles: 
                - environment

          现在我们让不同环境下的主机组,去执行一个相同的 role ,产生不同的配置文件

          首先我们生成生产环境的配置文件:
          [root@ansible-53_26 ansible-env]# ansible-playbook -i production/inventory site.yml 

           [PLAY [hosts] ****************************************************************** 

           TASK: [environment | dispaly env variable] ************************************ 
           ok: [wx-php-13.65] => {
                   "msg": "produciton"
           }

           TASK: [environment | Configure redis.properties j2] *************************** 
           changed: [wx-php-13.65]

           PLAY RECAP ******************************************************************** 
           wx-php-13.65               : ok=2    changed=1    unreachable=0    failed=0   

           [root@ansible-53_26 ansible-env]# ansible -i production/inventory -a "cat /tmp/redis.properties" all
           wx-php-13.65 | success | rc=0 >>
           redis.server.0.ip=10.66.141.157
           redis.server.0.port=8000
           redis.server.1.ip=10.66.141.157
           redis.server.1.port=8001

          然后我们在生成开发环境的配置文件:
          [root@ansible-53_26 ansible-env]# ansible-playbook -i development/inventory site.yml 
           
          PLAY [hosts] ****************************************************************** 

           TASK: [environment | dispaly env variable] ************************************ 
           ok: [wx-php-48.224] => {
                  "msg": "development"
           }

          TASK: [environment | Configure redis.properties j2] *************************** 
           changed: [wx-php-48.224]

           PLAY RECAP ******************************************************************** 
           wx-php-48.224              : ok=2    changed=1    unreachable=0    failed=0   

           [root@ansible-53_26 ansible-env]# ansible -i development/inventory -a "cat /tmp/redis.properties" all
           wx-php-48.224 | success | rc=0 >>
           redis.server.0.ip=10.66.128.202
           redis.server.0.port=8009


          OK,目的达到了,收工下班,回家。



          
                                                                                               wepaio_Cail
          
          

           





阅读(3338) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~