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