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?
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 –
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. –
@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}}" '' ' –