2016-02-20 5 views
6

मैं Ansible (v2.0) के लिए ecs_taskdefinition मॉड्यूल का उपयोग करने की कोशिश कर रहा हूं, और मुझे लगता है कि मैं मूल उत्तरदायी YAML Gotcha में फंस गया हूं।उत्तर में, परिवर्तनीय मानों को पूर्णांक में मजबूर करने का कोई तरीका है?

मॉड्यूल के लिए उदाहरण के अनुसार, अगर मैं cpu और memory के लिए पूर्णांक मूल्यों प्रदान करते हैं, इस के रूप में की उम्मीद काम करता है:

- 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 

हालांकि, मैं memory और cpu चाहते हैं templatable किया जाना है। ताकि मैं विभिन्न वातावरणों के लिए एक ही कंटेनर परिभाषा का उपयोग कर सकूं। वास्तव में पूर्णांक के लिए इन मूल्यों को बदलने की कोशिश करने के लिए Ansible मॉड्यूल अद्यतन करने के लिए बिना

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

इस सुधारी जा सकने वाली है:

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 
ऊपर के साथ

, मैं botocore एपीआई से त्रुटि मिलती है?

+1

जैसा कि मुझे प्लेबुक से इसे संबोधित करने का कोई तरीका नहीं मिला है; इस विशिष्ट मॉड्यूल के लिए इस सुविधा का सुझाव। https://github.com/ansible/ansible-modules-extras/pull/1715 –

+1

मैं परिवर्तनीय 2.0.2 में परिवर्तनीय | int का परीक्षण करता हूं और ठीक काम करता है। मुझे लगता है कि त्रुटि उद्धरण है "कृपया {{vars.get (APP_ENV) से पहले और बाद में उद्धरण हटाएं .containers.simple_app.cpu | int}} और पुनः प्रयास करें। –

+0

@RaulHugo मुझे नहीं लगता कि यह उद्धरण के बिना काम करेगा [Ansible doc] (http://docs.ansible.com/ansible/YAMLSyntax.html#gotchas) के अनुसार। यह कहता है, "आगे, उत्तर परिवर्तनीय के लिए" {{var}} "का उपयोग करता है। यदि कॉलन के बाद एक मान "{" से शुरू होता है, तो वाईएएमएल को लगता है कि यह एक शब्दकोश है, इसलिए आपको इसे उद्धृत करना होगा, जैसे: foo: "{{variable}}" '' ' –

उत्तर

0

ऐसा लगता है कि यह उत्तर संस्करण 2.1.1.0 में काम कर रहा है। आप इसे काम करने के लिए नहीं मिल सकता है, एक संभव समाधान और शब्दकोश के शीर्ष स्तर नहीं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}}" 

नोट है: मैं ram बजाय memory क्योंकि इस्तेमाल किया मुझे यह पसंद है कि यह कैसे लाइनें :)

संबंधित मुद्दे

 संबंधित मुद्दे