نهج منظم للمتغيرات في أنسيبل

ansible devops codestyle



مهلا! اسمي دينيس كاليوجني وأعمل مهندسًا في قسم أتمتة عمليات التطوير. كل يوم ، يتم طرح إصدارات جديدة من التطبيقات على مئات من خوادم الحملة. وفي هذه المقالة أشارك تجربتي في استخدام Ansible لهذه الأغراض.



يوفر هذا الدليل طريقة لتنظيم المتغيرات في عملية النشر. تم تصميم هذا الدليل لأولئك الذين يستخدمون بالفعل أدوارًا في كتيبات اللعب الخاصة بهم ويقرؤون BestPractices ، لكنهم يواجهون مشكلات مماثلة:



  • بعد العثور على متغير في الكود ، من المستحيل أن نفهم على الفور ما هو مسؤول عنه ؛
  • هناك عدة أدوار ، ويجب أن تكون المتغيرات مرتبطة بنفس القيمة ، لكن لا شيء يعمل ؛
  • هناك صعوبات في شرح كيفية عمل منطق المتغيرات في كتيبات اللعب للآخرين


لقد واجهنا هذه المشاكل في المشاريع في شركتنا ، ونتيجة لذلك توصلنا إلى قواعد تصميم المتغيرات في كتيبات اللعب لدينا ، والتي حلت إلى حد ما هذه المشاكل.



صورة



المتغيرات في الأدوار



الدور هو كائن منفصل لنظام النشر. مثل أي كائن نظام ، يجب أن يكون له واجهة للتفاعل مع بقية النظام. هذه الواجهة هي متغيرات الدور.



, , api, Java . ?



صورة



2 :



1. 
    a)   
    )   
2. 
    a)  
    )   
    )   


— , .



— , , , .



— , , .



, 1, 2, 2 — , (, ..) defaults . 1. 2. 'example' , .



Code style



  • . , .
  • , , .
  • . Ansible .



    :



    myrole_user:
        login: admin
        password: admin


    login — , password — .

    ,

    . . :



    myrole_user_login: admin
    myrole_user_password: admin






( ), , . , : git . , — , . .



, , : .



mydeploy                        #  
├── deploy.yml                  #  
├── group_vars                  #   
│   ├── all.yml                 #      
│   └── myapi.yml               #     myapi
└── inventories                 #
    └── prod                    #   prod
        ├── prod.ini            #  
        └── group_vars          #    
            └── myapi           #
                ├── vars.yml    #    myapi
                └── vault.yml   #  ( ) *


* — Variables and Vaults



, , . , , . , , , .



, , .



, .



, , SSL , SSL . , , .





1, 2 Java , .



صورة



, :



- hosts: myapi
  roles:
    - api

- hosts: bbauth
  roles:
    - auth

- hosts: ghauth
  roles:
    - auth


, group_vars , . , . . : .



Code Style



  • host_vars , , , : " ?", .




, , ?

, .



:

hostvars[groups['bbauth'][0]]['auth_bind_port'],

. -, . -, . -, , .



.



— , , .



group_vars/all/vars , .



.



:



صورة



, , :



# roles/api/defaults:
#  
api_auth1_address: "http://example.com:80"
api_auth2_address: "http://example2.com:80"

# roles/auth/defaults:
#  
auth_bind_port: "20000"


group_vars/all/vars , :



# group_vars/all/vars
bbauth_auth_bind_port: "20000"
ghauth_auth_bind_port: "30000"

# group_vars/bbauth/vars
auth_bind_port: "{{ bbauth_auth_bind_port }}"

# group_vars/ghauth/vars
auth_bind_port: "{{ ghauth_auth_bind_port }}"

# group_vars/myapi/vars
api_auth1_address: "http://{{ bbauth_auth_service_name }}:{{ bbauth_auth_bind_port }}"
api_auth2_address: "http://{{ ghauth_auth_service_name }}:{{ ghauth_auth_bind_port }}"


, , , , .



Code Style



  • , , , , .




, .



SSL-.

. .



, api_ssl_key_file: "/path/to/file".



, , ,

group_vars/myapi/vars , ' '.





files/prod/certs/myapi.key, :

api_ssl_key_file: "prod/certs/myapi.key". , , . , .











. , , . . .



group_vars, .









:



mydeploy                        #  
├── deploy.yml                  #  
├── files                       #    
│   ├── prod                    #      prod
│   │   └── certs               # 
│   │       └── myapi.key       #
│   └── test1                   #      test1
├── group_vars                  #   
│   ├── all.yml                 #      
│   ├── myapi.yml               #     myapi
│   ├── bbauth.yml              # 
│   └── ghauth.yml              #
└── inventories                 #
    ├── prod                    #   prod
    │   ├── group_vars          #    
    │   │   ├── myapi           #
    │   │   │   ├── vars.yml    #    myapi
    │   │   │   └── vault.yml   #  ( )
    │   │   ├── bbauth          # 
    │   │   │   ├── vars.yml    #
    │   │   │   └── vault.yml   #
    │   │   └── ghauth          #
    │   │       ├── vars.yml    #
    │   │       └── vault.yml   #
    │   └── prod.ini            #   prod
    └── test                    #   test
        ├── group_vars          #
        │   ├── myapi           #
        │   │   ├── vars.yml    #
        │   │   └── vault.yml   #
        │   ├── bbauth          #
        │   │   ├── vars.yml    #
        │   │   └── vault.yml   #
        │   └── ghauth          #
        │       ├── vars.yml    #
        │       └── vault.yml   #
        ├── test1.ini           #   test1   test
        └── test2.ini           #   test2   test




: . , . , , , .



, , . .



. , .












All Articles