2016-02-20 3 views
6

Ich versuche, ecs_taskdefinition Modul für Ansible (v2.0) zu verwenden, und ich denke, ich bin in der grundlegenden Ansible YAML Gotcha stecken.Gibt es in Ansible eine Möglichkeit, Variablenwerte auf Integer zu setzen?

Gemäß dem Beispiel für das Modul, wenn ich ganzzahlige Werte für cpu liefern und memory, das funktioniert wie erwartet:

- 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 

, Obwohl ich die memory und cpu sein templatable möchte. Damit kann ich dieselbe Containerdefinition für verschiedene Umgebungen verwenden.

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 

Mit oben, erhalte ich Fehler aus der botocore API:

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'> 

dieser fixierbar ist ohne ansible Modul zu aktualisieren, die tatsächlich versuchen, diese Werte auf ganze Zahlen zu konvertieren?

+1

Da ich keine Möglichkeit gefunden habe, dies aus dem Playbook zu lösen; schlägt dieses Feature zu diesem spezifischen Modul vor. https://github.com/ansible/ansible-modules-extras/pull/1715 –

+1

Ich teste die Variable | int in ansible 2.0.2 und funktioniert gut. Ich denke, dass der Fehler die Anführungszeichen "" sind, löschen Sie bitte die Anführungszeichen vor und nach {{vars.get (APP_ENV) .containers.simple_app.cpu | int}} und versuchen Sie es erneut. –

+0

@RaulHugo Ich glaube nicht, dass es ohne Anführungszeichen funktioniert, wie in [Ansible doc] (http://docs.ansible.com/ansible/YAMLSyntax.html#gotchas). Es sagt, '' 'Weiterhin verwendet Ansible" {{var}} "für Variablen. Wenn ein Wert nach einem Doppelpunkt mit einem "{" beginnt, wird YAML denken, dass es ein Wörterbuch ist, also müssen Sie es so zitieren: foo: "{{variable}}" '' ' –

Antwort

0

Es scheint in Ansible Version 2.1.1.0 zu funktionieren. Wenn Sie nicht bekommen kann es zu arbeiten, ist eine mögliche Lösung ist es, die Variablen eine der obersten Ebene des Wörterbuchs und nicht mit dem int Filter ...

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}}" 

Hinweis zu definieren: benutzte ich ram statt memory weil Ich mag, wie es anordnet :)

Verwandte Themen