2016-12-05 12 views
1

これは、Ansible, Boto, AWS - Invalid type for parameter containerDefinitions[0].memoryで受け取った優れた答えのフォローアップです。ジンジャーテンプレートでjson辞書とリストを結合する方法

私は、提供された回答を適切に組み合わせる方法を理解していません。

私が持っている私の元ansible /役割/ ecs_cluster_init /タスク/ main.yamlファイルで:

## ECS Task and Service Definitions 
- block: 
    - name: Create ECS Service1 Task Definitions 
     ecs_taskdefinition: 
     region: "{{ region }}" 
     containers: 
      - name: "{{ item.name }}" 
      cpu: 0 
      essential: true 
      image: "{{ item.image }}" 
      memory: "{{ item.memory|int|abs }}" 
      mountPoints: "{{ item.mounts }}" 
      environment: "{{ item.env_vars }}" 
      portMappings: "{{ item.portmap }}" 
      entryPoint: 
       - "java" 
       - "-Xms{{ java_heap_size_initial }}" 
       - "-Xmx{{ java_heap_size_max }}" 
       - "-DlogDir=/host" 
       - "-Dcom.sun.net.ssl.checkRevocation=false" 
       - "-jar" 
       - "/app.jar" 
      logConfiguration: 
       logDriver: "{{ ecs_task_log_configuration.logDriver }}" 
       options: 
       max-size: "{{ ecs_task_log_configuration.options.max_size }}" 
       max-file: "{{ ecs_task_log_configuration.options.max_file }}" 
     family: "{{ service_prefix }}-{{ item.name }}-{{ env_name }}" 
     state: present 
     increment_revision: true 
     volumes: "{{ item.volumes }}" 
     register: service1_task_definition 
     with_items: "{{ ecs_task_definitions }}" 

エントリポイントなしのサービスのために働く最初の答えが何をした:

- name: Create ECS Service1 Task Definitions 
    ecs_taskdefinition: 
    region: "{{ region }}" 
    containers: "{{'['+dict(name=item.name, cpu=0, image=item.image, memory=item.memory|int)|to_json+']'}}" 
    with_items: "{{ ecs_task_definitions }}" 

とエントリポイントのキーを処理する方法のための答えました:

entryPoint=('jav‌​a^-Xms'+java_heap_size_initial+'^-Xmx'+jav‌​a_heap_size_max+'^-D‌​logDir=/host^-Djava.‌​security.egd=file:/d‌​ev/./urandom^-D‌​com‌​.sun.net.ssl.chec‌​k‌​Revocation=false^-j‌‌​​ar^/app.jar').split‌​(‌​'^') 

私は届かない何されます私の不可能な/ roles/ecs_cluster_init/tasks/main.yamlファイルで2つを組み合わせる方法。 entryPointとそれに続くlogConfigurationリストをコンテナ辞書に入れるにはどうすればよいですか?

答えて

2

あなたはansible≥1.8.4上にあるか、そのバージョン(https://github.com/ansible/ansible/issues/5865)にアップグレードすることができれば、あなただけのmemoryの前後に引用符を追加することができます。

memory: "{{ item.memory|int|abs|int }}" 

をしかし、あなたはこれに苦労をしたい場合:

- name: Create ECS Service1 Task Definitions 
    ecs_taskdefinition: 
    region: "{{ region }}" 
    containers: "{{'['+dict(name=item.name, cpu=0, image=item.image, memory=item.memory, entryPoint=[ 'java', '-Xms'+java_heap_size_initial, '-Xmx'+java_heap_size_max, '-DlogDir=/host', '-Djava.security.egd=file:/dev/./urandom', '-Dcom.sun.net.ssl.checkRevocation=false', '-jar', '/app.jar' ], logConfiguration=dict(logDriver=ecs_task_log_configuration.logDriver, options={ 'max-size': ecs_task_log_configuration.options.max_size, 'max-file': ecs_task_log_configuration.options.max_file}))|to_json+']'}}" 
    with_items: "{{ ecs_task_definitions }}" 
+0

は、私は間違いなく、簡単な方法を好むが、 'メモリを使用したとき、私はまだ「無効な型」エラーメッセージが表示されます。「{{item.memory | int型| ABS | INT}}」'。 –

+0

「難しい方法」を使用して、テンプレート文字列中にテンプレートエラーが発生しました:unexpected char u '\\ u200c''。 200はメモリ値ですが、テンプレート/フィルタによって追加されない限り、次の "c"がどこから来るのか分かりません。 –

+0

'\ u200cはゼロ幅でない結合者です。これはおそらくコピー&ペーストのアーティファクトです。私は今それを調べている。 – 2ps

関連する問題