2016-02-20 18 views
6

Ansible (v2.0) için ecs_taskdefinition modülünü kullanmaya çalışıyorum ve sanırım temel Ansible YAML gotcha'da takılıyorum. Ansible'da, değişken değerlerini tamsayıya zorlamak için bir yol var mı?

modülü için örnek gereğince, eğer cpu ve memory için tamsayı değerler sağlamak, bu şekilde beklenen işleri: Ben Templatable olmak memory ve cpu istiyorum

- 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 

rağmen. Böylece farklı ortamlar için aynı kapsayıcı tanımını kullanabileceğim. Yukarıdaki ile

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 

, ben botocore API hata alıyorum:

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

bu düzeltilebilir mi aslında tamsayılar için bu değerleri dönüştürmek için denemek için yanıtlayıcı 'modülünü güncellemek zorunda kalmadan?

+1

Bu konuyla ilgili herhangi bir yol bulamadım. Bu özelliği bu özel modüle önermek. https://github.com/ansible/ansible-modules-extras/pull/1715 –

+1

Değişken | int değişkenini 2.0.2'de test ediyorum ve iyi çalışıyor. Bence hata "" alıntılar önce ve sonra lütfen alıntıları siliniz {{vars.get (APP_ENV) .containers.simple_app.cpu | int}} ve tekrar deneyin. –

+0

@RaulHugo [Ansible doc] (http://docs.ansible.com/ansible/YAMLSyntax.html#gotchas) başı olarak teklif vermeden çalışacağını düşünmüyorum. “Dahası, Ansible değişkenler için“ {{var}} ”kullanır. Bir kolondan sonraki değer "{" ile başlıyorsa, YAML bunun bir sözlük olduğunu düşünecek, bu yüzden alıntı yapmanız gerekir, şu şekilde: foo: "{{variable}}" '' ' –

cevap

0

Ansible 2.1.1.0 sürümünde çalışıyor gibi görünüyor. Eğer o iş için alamıyorsanız, olası bir çözüm ... üst sözlüğün seviyesi ve int filtre kullanarak değil bir

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

Not değişkenleri tanımlamak için: Ben ram yerine memory çünkü kullanılan Nasıl çizdiğini seviyorum :)

İlgili konular