Sobes.tech
Junior

Ինչպես կանչել դերերը Ansible-ի playbook-ում?

sobes.tech AI

Պատասխան AI-ից

Ansible-ում դերերը կարելի է կանչել մի քանի եղանակներով playbook-ի շրջանակում:

  1. Օգտագործելով roles բանալի բառը playbook-ի մակարդակում՝

    # playbooks/my_playbook.yml
    - անուն: Դերերի կիրառումը սերվերների վրա
      hosts: webservers
      become: այո
      roles:
        - role: common  # 'common' դերակատարության կանչ
        - role: nginx   # 'nginx' դերակատարության կանչ
          vars:         # Փոփոխականների փոխանցում դերակատարությանը
            nginx_port: 8080
        - another_role # Կարճացված ձևով կանչ
    

    Այս եղանակը կիրառվում է դերակատարությունների կանչի համար, որոնք կատարվում են հերթով բոլոր hosts-ների համար, որոնք նշված են hosts հատվածում:

  2. Օգտագործելով include_role մոդուլը առաջադրանքների ցանկում՝

    # playbooks/my_playbook.yml
    - անուն: Դերերի կիրառումը պայմաններով
      hosts: appservers
      tasks:
        - անուն: Տվյալների բազայի դերակատարության ակտիվացում (միայն dev-ի համար)
          include_role:
            name: database
          when: env == 'dev' # Շարունակական կանչ
    
        - անուն: Դիմումի դերակատարության ակտիվացում
          include_role:
            name: app
          vars:
            app_version: 1.2.0 # Փոփոխականների փոխանցում
    

    include_role մոդուլը կատարում է դերակատարությունը, կարծես դա լինի առաջադրանքների ցանկ, որը ներառված է ընթացիկ playbook-ի մեջ։ Այն թույլ է տալիս օգտագործել պայմաններ (when) և ցիկլեր (loop) դերակատարության վերահսկման համար:

  3. Օգտագործելով import_role մոդուլը առաջադրանքների ցանկում՝

    # playbooks/my_playbook.yml
    - անուն: Դերակատարության ներմուծում
      hosts: appservers
      tasks:
        - անուն: Բոլոր հոստերի համար դերակատարության ներմուծում
          import_role:
            name: app
          vars:
            app_config_file: /etc/app/config.conf # Փոփոխականների փոխանցում
    

    import_role մոդուլը մշակվում է պլեյբուքի վերլուծության փուլում՝ նախքան նրա գործնական կատարմանը։ Սա նշանակում է, որ բոլոր հրահանգները, ինչպիսիք են when, կկիրառվեն դերակատարության բոլոր առաջադրանքների վրա, ոչ միայն կանչի վրա։ Փոփոխականները, որոնք փոխանցվում են vars-ով, հասանելի կլինեն դերակատարության ներսում:

Հիմնական տարբերությունը include_role և import_role միջև ժամանակի առումով է։ import_role մշակում է ստատիկորեն վերլուծության փուլում, իսկ include_role՝ դինամիկորեն՝ գործարկման ժամանակ։ Սա ազդում է պայմանների և ցիկլերի օգտագործման հնարավորության վրա:

Ֆունկցիա include_role import_role
Վերլուծում Դինամիկ Ստատիկ
when օգտագործում Այո Ոչ
loop օգտագործում Այո Ոչ
Փոփոխականների օգտագործում, որոնք նախապես սահմանված են playbook-ում Այո Ոչ

Ընտրությունը կախված է անհրաժեշտ ճկունությունից և վերլուծության ժամանակից։ Պարզ դերակատարությունների համար սովորաբար բավական է roles կամ import_role բանալիները։ Ավելի բարդ սցենարների համար, որոնք պահանջում են պայմաններ և ցիկլեր, օգտագործվում է include_role։