2015-09-28 15 views
13

Sto cercando di organizzare i miei libri di gioco in base alla struttura Directory Layout. La documentazione non sembra avere una raccomandazione per file/template specifici dell'host.Dove dovrei organizzare file/modelli specifici dell'host?

Ho 2 giochi per un singolo sito

  • example.com-provision.yml
  • example.com-deploy.yml

Questi file si trovano nella radice del mio struttura. Il Playbook provisioning include semplicemente altri ruoli

--- 
- hosts: example.com 

    roles: 
    - common 
    - application 
    - database 

    become: true 
    become_method: su 
    become_user: root 

playbook distribuzione non include i ruoli, ma ha il proprio vars e tasks sezioni. Ho un paio di attività template e copy e mi sto chiedendo quale sia la "migliore pratica" su dove collocare questi modelli/file specifici dell'host all'interno di questa struttura di directory.

In questo momento li ho a ./roles/example.com/templates/ e ./roles/example.com/files/, ma hanno bisogno di fare riferimento ai file con il loro percorso completo dal mio playbook distribuzione, come

- name: deployment | copy httpd config 
    template: 
    src: ./roles/example.com/templates/{{ host }}.conf.j2 
    # ... 

invece di

- name: deployment | copy httpd config 
    template: 
    src: {{ host }}.conf.j2 
    # ... 
+0

dipende anche da come viene gestito l'inventario dinamico. Credo che l'ambito più piccolo da considerare sia i ruoli oi gruppi rispetto agli host. se i tuoi modelli sono diversi per tipi di host, allora forse sono ruoli diversi. ciò dipende anche dal contenuto dei tuoi modelli. –

risposta

18

fronte lo stesso problema il modo più pulito mi sembra la seguente struttura:

Nella directory di livello superiore (stesso livello dei libri di gioco) ho unCartella(e se avevo bisogno anche di una cartella templates). Nella cartella files c'è una cartella per ogni host con i propri file dove il nome della cartella è lo stesso del nome host nell'inventario. (vedere la struttura di seguito: myhost1myhost2)

. 
├── files 
│   ├── common 
│   ├── myhost1 
│ ├── myhost2 
| 
├── inventory 
│   ├── group_vars 
│   └── host_vars 
├── roles 
│   ├── first_role 
│   └── second_role 
└── my_playbook.yml 

Ora in qualsiasi ruolo è possibile accedere ai file con i moduli file relativamente:

# ./roles/first_role/main.yml 

- name: Copy any host based file 
    copy: 
    src={{ inventory_hostname }}/file1 
    dest= /tmp 

Spiegazione:

La variabile magia inventory_hostname è quello di ottenere l'host, vedere here Il modulo file (come per esempio e copy) cerca la directory files nella directory dei rispettivi ruoli e nella directory files allo stesso livello del playbook delle chiamate. Ovviamente lo stesso vale per i modelli (ma se hai modelli diversi per lo stesso ruolo dovresti riconsiderare il tuo design)

Semanticamente un file specifico dell'host non appartiene a un ruolo, ma da qualche parte all'esterno (come host_vars).

+0

Ho deciso di seguire un percorso leggermente diverso in base a questa risposta. Ora ho una directory per ciascun host al di fuori della radice della struttura del mio progetto di provisioning. Ho una directory 'files /', 'group_vars /', e 'templates /' in ognuna di queste directory host, e mi riferisco ad esse con un percorso relativo '../ templates/...' - altrettanto semplice per il tuo Approccio '{{inventory_hostname}}'. Grazie per l'urto nella giusta direzione. – deefour

Problemi correlati