2016-02-20 10 views
6

Sto provando ad usare il modulo ecs_taskdefinition per Ansible (v2.0), e penso di essere bloccato nel getcha di base di Ansible YAML.In Ansible, c'è un modo per forzare i valori delle variabili in numero intero?

Come per l'esempio del modulo, se forniscono valori interi per cpu e memory, questo funziona come previsto:

- name: "Create task definition" 
    ecs_taskdefinition: 
    containers: 
    - name: simple-app 
     cpu: 10 
     memory: 300 
     essential: true 
     image: "httpd:2.4" 
     portMappings: 
     - containerPort: 80 
     hostPort: 80 

Anche se, vorrei il memory e cpu essere templatable. In questo modo sarò in grado di utilizzare la stessa definizione di contenitore per diversi ambienti.

APP_ENV: "test" 
test: 
    containers: 
    simple_app: 
     memory: 1920 
     cpu: 2560 

- name: "Create task definition" 
    ecs_taskdefinition: 
    containers: 
    - name: simple-app 
     cpu: "{{vars.get(APP_ENV).containers.simple_app.cpu | int}}" 
     memory: "{{vars.get(APP_ENV).containers.simple_app.memory | int}}" 
     essential: true 
     image: "httpd:2.4" 
     portMappings: 
     - containerPort: 80 
     hostPort: 80 

Con sopra, ottengo l'errore dal API botocore:

botocore.exceptions.ParamValidationError: Parameter validation failed: 
Invalid type for parameter containerDefinitions[0].memory, value: 1920, type: <type 'str'>, valid types: <type 'int'>, <type 'long'> 
Invalid type for parameter containerDefinitions[0].cpu, value: 2560, type: <type 'str'>, valid types: <type 'int'>, <type 'long'> 

È questo risolvibile senza dover aggiornare il modulo Ansible per effettuare il tentativo di convertire questi valori in numeri interi?

+1

Come non ho trovato alcun modo per affrontare questo dal playbook; suggerendo questa funzione a questo modulo specifico. https://github.com/ansible/ansible-modules-extras/pull/1715 –

+1

Testare la variabile | int in ansible 2.0.2 e funziona correttamente. Penso che l'errore sia le virgolette "" per favore cancella le virgolette prima e dopo {{vars.get (APP_ENV) .containers.simple_app.cpu | int}} e riprova. –

+0

@RaulHugo Non penso che funzionerà senza virgolette, come da [Ansible doc] (http://docs.ansible.com/ansible/YAMLSyntax.html#gotchas). Dice, '' 'Inoltre, Ansible usa" {{var}} "per le variabili. Se un valore dopo i due punti inizia con un "{", YAML penserà che sia un dizionario, quindi devi citarlo, in questo modo: foo: "{{variable}}" '' ' –

risposta

0

Sembra funzionare in Ansible versione 2.1.1.0. Se non è possibile farlo funzionare, una possibile soluzione è quella di definire le variabili di un livello superiore del dizionario e non usando il filtro int ...

vars: 
    APP_ENV: test 
    simple_app_container_cpu: 2560 
    simple_app_container_ram: 1920 

tasks: 
    - name: Create task definition 
    ecs_taskdefinition: 
     containers: 
     - name: simple-app 
      cpu: "{{simple_app_container_cpu}}" 
      memory: "{{simple_app_container_ram}}" 

Nota: Ho usato ram invece di memory perché Mi piace come si allinea :)

Problemi correlati