2016-02-20 11 views
6

Próbuję użyć modułu ecs_taskdefinition dla Ansible (v2.0) i myślę, że utknąłem w podstawowym wątku Ansam YAML.W Ansible, czy istnieje sposób na wymuszenie wartości zmiennych na liczbę całkowitą?

Jak na przykład modułu, jeśli dane dotyczące wartości całkowitej w przypadku cpu i memory ten działa, jak oczekiwano

- 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 

Chociaż chciałbym memory i cpu być templatable. Tak, że będę mógł użyć tej samej definicji kontenera dla różnych środowisk.

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 

Z powyżej, otrzymuję błąd z 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'> 

Czy to naprawić bez konieczności aktualizowania modułu ansibl rzeczywiście spróbować przekonwertować te wartości do liczb całkowitych?

+1

Ponieważ nie znalazłem żadnego sposobu, aby rozwiązać ten problem z poradnika; sugerując tę ​​funkcję temu konkretnemu modułowi. https://github.com/ansible/ansible-modules-extras/pull/1715 –

+1

Testuję zmienną | int w ansible 2.0.2 i działa dobrze. Myślę, że błąd jest cytatem "" proszę usuwać cytaty przed i po {{vars.get (APP_ENV) .containers.simple_app.cpu | int}} i spróbuj ponownie. –

+0

@RaulHugo Nie sądzę, że będzie działało bez cytatów, jak na [Dokumencie do dyskusji] (http://docs.ansible.com/ansible/YAMLSyntax.html#gotchas). Mówi, że '' 'Dalej, Ansible używa" {{var}} "dla zmiennych. Jeśli wartość po dwukropku zaczyna się od "{", YAML uzna to za słownik, więc musisz go zacytować, tak: foo: "{{zmienna}}" '' ' –

Odpowiedz

0

Wygląda na to, że działa w wersji Ansaly 2.1.1.0. Jeśli nie można zmusić go do pracy, możliwym rozwiązaniem jest zdefiniowanie zmiennych a najwyższym poziomie słownika i nie użyciu filtra 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}}" 

Uwaga: Kiedyś ram zamiast memory ponieważ Podoba mi się, jak to się układa :)

Powiązane problemy