Ein systematischer Ansatz fΓΌr Variablen in Ansible

ansible devops codestyle



Hallo! Mein Name ist Denis Kalyuzhny und ich arbeite als Ingenieur in der Abteilung fΓΌr Entwicklungsprozessautomatisierung. TΓ€glich werden neue Builds von Apps auf Hunderten von Kampagnenservern eingefΓΌhrt. In diesem Artikel teile ich meine Erfahrungen mit der Verwendung von Ansible fΓΌr diese Zwecke.



Dieses Handbuch bietet eine MΓΆglichkeit, Variablen in einer Bereitstellung zu organisieren. Dieses Handbuch richtet sich an Personen, die bereits Rollen in ihren Playbooks verwenden und BestPractices lesen , jedoch Γ€hnliche Probleme haben:



  • Nachdem im Code eine Variable gefunden wurde, ist es unmΓΆglich, sofort zu verstehen, wofΓΌr sie verantwortlich ist.
  • Es gibt mehrere Rollen, und Variablen mΓΌssen an denselben Wert gebunden sein, aber nichts funktioniert.
  • Es ist schwierig, anderen zu erklΓ€ren, wie die Logik von Variablen in Ihren SpielbΓΌchern funktioniert


Wir sind auf diese Probleme bei Projekten in unserem Unternehmen gestoßen, wodurch wir zu den Regeln für die Gestaltung von Variablen in unseren Spielbüchern gekommen sind, die diese Probleme teilweise gelâst haben.



Bild



Variablen in Rollen



Eine Rolle ist ein separates Objekt des Bereitstellungssystems. Wie jedes Systemobjekt muss es eine Schnittstelle fΓΌr die Interaktion mit dem Rest des Systems haben. Die Rollenvariablen sind eine solche Schnittstelle.



, , api, Java . ?



Bild



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 , .



Bild



, :



- 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 , .



.



:



Bild



, , :



# 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