Ansible - Roller

Ansible - Roller

Ansible Roller
Ansible roller er en måte å organisere playbooks på.
Det finnes to måter å installere roller på
Den første er å lage en requirements.yml fil og refere til et git repository.
Den andre er å bruke ansible-galaxy kommandoen.


Ansible-galaxy init
Kommandoen ansible-galaxy init lager en mappestruktur for en ny rolle.
Kommandoen lager mappe strukturen i den mappen du står i.
Du må legge roller i en mappe som heter roles.

ansible-galaxy init core
- Role core was created successfully
                

Du kan opprette mappen roles og initere rollen core på en gang:
mkdir roles && ansible-galaxy init roles/core
- Role roles/core was created successfully
                


Mappe strukturen med de nødvendige filene blir automatisk opprettet for oss.

tree

└── roles
    └── core
       ├── README.md
       ├── defaults
       │   └── main.yml
       ├── files
       ├── handlers
       │   └── main.yml
       ├── meta
       │   └── main.yml
       ├── tasks
       │   └── main.yml
       ├── templates
       ├── tests
       │   ├── inventory
       │   └── test.yml
       └── vars
            └── main.yml
                    

defaults/main.tf
I defaults mappen legger vi til standard verdier for rollen

files
I files mappen legger vi til filer som skal brukes i forbindelse med rollen.

handlers/main.tf
I handlers mappen legger vi til handlers som skal brukes i forbindelse med rollen.
Hanlers er oppgaver som du ønsker skal kjøre etter at alle tasks er ferdige.

meta/main.tf
I meta mappen legges det inn informasjon om roller, avhengigheter og om roller skal kunne kjøres to ganger i samme playbook.

tasks/main.tf
I tasks mappen legger vi til tasks som skal kjøre i rollen.

templates
I templates mappen legger vi til jinja2 maler som skal brukes i forbindelse med rollen.

tests
I tests mappen legger vi til tester som skal kjøre i forbindelse med rollen.

vars/main.tf
I vars mappen legger vi til variabler som skal brukes i forbindelse med rollen.
Vi må ikke lage alle disse mappene med innholdet.
Det er nok å lage de mappene som vi trenger.
Kommer til å gå gjennom de forskjellige mappene lengre ned og opprette mappe strukturen manuelt.

Det finnes to måter å kalle på roller fra playbooks
Den første er å bruke roles: i playbooken. Dette referes til som den classic måten å gjøre det på.
Den andre er å bruke import_role eller include_role.

I dette eksempelet lager jeg en rolle som heter colapsed_core og en playbook som kaller på rollen på den klassiske måten.
Vi later som at IOS-XE swichene er collapsed core swiches.
IOS swichene er access swiches og kommer til å få access_switches rollen.

<strong>Ansible Roller</strong>,Ansible roller er en måte å organisere playbooks på.,Det finnes to måter å installere roller på,Den første er å lage en requirements.yml fil og refere til et git repository.,Den andre er å bruke ansible-galaxy kommandoen.,,,<strong>Ansible-galaxy init</strong>,Kommandoen ansible-galaxy init lager en mappestruktur for en ny rolle.,Kommandoen lager mappe strukturen i den mappen du står i.,Du må legge roller i en mappe som heter roles.,<pre class="code">
<strong>ansible-galaxy init core</strong>
- Role core was created successfully
                </pre>,Du kan opprette mappen roles og initere rollen core på en gang:,<pre class="code">
<strong>mkdir roles && ansible-galaxy init roles/core</strong>
- Role roles/core was created successfully
                </pre>,,Mappe strukturen med de nødvendige filene blir automatisk opprettet for oss.,,<pre class="code">
<strong>tree</strong>

└── roles
    └── core
       ├── README.md
       ├── defaults
       │   └── main.yml
       ├── files
       ├── handlers
       │   └── main.yml
       ├── meta
       │   └── main.yml
       ├── tasks
       │   └── main.yml
       ├── templates
       ├── tests
       │   ├── inventory
       │   └── test.yml
       └── vars
            └── main.yml
                    </pre>,<strong>defaults/main.tf</strong>,I defaults mappen legger vi til standard verdier for rollen,,<strong>files</strong>,I files mappen legger vi til filer som skal brukes i forbindelse med rollen.,,<strong>handlers/main.tf</strong>,I handlers mappen legger vi til handlers som skal brukes i forbindelse med rollen.,Hanlers er oppgaver som du ønsker skal kjøre etter at alle tasks er ferdige.,,<strong>meta/main.tf</strong>,I meta mappen legges det inn informasjon om roller, avhengigheter og om roller skal kunne kjøres to ganger i samme playbook.,,<strong>tasks/main.tf</strong>,I tasks mappen legger vi til tasks som skal kjøre i rollen.,,<strong>templates</strong>,I templates mappen legger vi til jinja2 maler som skal brukes i forbindelse med rollen.,,<strong>tests</strong>,I tests mappen legger vi til tester som skal kjøre i forbindelse med rollen.,,<strong>vars/main.tf</strong>,I vars mappen legger vi til variabler som skal brukes i forbindelse med rollen.,Vi må ikke lage alle disse mappene med innholdet.,Det er nok å lage de mappene som vi trenger.,Kommer til å gå gjennom de forskjellige mappene lengre ned og opprette mappe strukturen manuelt.,,Det finnes to måter å kalle på roller fra playbooks,Den første er å bruke roles: i playbooken. Dette referes til som den classic måten å gjøre det på.,Den andre er å bruke import_role eller include_role.,,I dette eksempelet lager jeg en rolle som heter colapsed_core og en playbook som kaller på rollen på den klassiske måten.,Vi later som at IOS-XE swichene er collapsed core swiches.,IOS swichene er access swiches og kommer til å få access_switches rollen.

Playbook som kaller på rolle

---
- name: playbook_rolle_collapsed_core
  hosts: collapsed_core
  roles:
    - collapsed_core
            
                


Vi må opprette hosts gruppen collapsed_core og rollen collapsed_core.

Vi legger til collapsed_core i inventory filen og spesifiserer at IOS_XE_switcher er children:
collapsed_core:
  children:
    IOS_XE_switcher:                
                


Opprette collapsed_core mappen under roles.:
Kjør playbooken som referer til collapsed_core rollen:

ansible-playbook playbook_rolle_collapsed_core.yaml -k
SSH password: 

PLAY [playbook_rolle_collapsed_core] ***************************************************************************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************************************************************************
ok: [IOS_XE_switch_3]
ok: [IOS_XE_switch_4]

PLAY RECAP *****************************************************************************************************************************************************************************************************************************
IOS_XE_switch_3            : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
IOS_XE_switch_4            : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
                    


Ansible ser etter filen main.yml, main.yaml eller main i tasks mappen.
Opprett mappen tasks under collapsed_core og legg til en main.yaml playbook som ping gateway.
Sett også gather_facts: no for å unngå å samle informasjon om hosten før playbooken kjører.
---
  - name: Ping gateway
    ios_ping:
      dest: 10.170.0.1
      count: 1
                     


Import av tasker

Du kan bruke import_tasks for å kalle på tasker.
Opprett en fil som heter lldp.yaml under tasks mappen i collapsed_core rollen.
---
  - name: Aktiver LLDP
    cisco.ios.ios_lldp_global:
      config:
        holdtime: 10
        enabled: true
        reinit: 3
        timer: 10
      state: merged
                       


---
  - name: Ping gateway
    ios_ping:
      dest: 10.170.0.1
      count: 1

  - name: Aktiver LLDP
    import_tasks: lldp.yaml
    tags: lldp
                          


ansible-playbook playbook_rolle_collapsed_core.yaml -k
SSH password: 

PLAY [playbook_rolle_collapsed_core] ***************************************************************************************************************************************************************************************************

TASK [collapsed_core : Ping gateway] ***************************************************************************************************************************************************************************************************
ok: [IOS_XE_switch_3]
ok: [IOS_XE_switch_4]

TASK [collapsed_core : Aktiver LLDP] ***************************************************************************************************************************************************************************************************
changed: [IOS_XE_switch_3]
changed: [IOS_XE_switch_4]

PLAY RECAP *****************************************************************************************************************************************************************************************************************************
IOS_XE_switch_3            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
IOS_XE_switch_4            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
                            


Du kan også bruker import_role og include_role for å kalle på en rolle fra en playbook.
import_role og include_role er nyere og mer fleksible enn roles:.