2

的特定格式的现有文件动态地或预先生成可变的变量我有一个可以创建ECS Taskdefinition的简单操作手册。 例如:如何从AWS ECS

#variable file, vars.yml 
--- 
containers: 
- name: nash-test 
    essential: true 
    image: nash-test 
    memory: 256 
    portMappings: 
    - containerPort: 8080 
    hostPort: 80 
    protocol: tcp 
    environment: 
    - name: USERNAME 
    value: test-user 
    name: PASSWORD 
    value: pass123 
    name: MYSQL 
    value: mysqldb.com:3306 

下面是剧本的执行文件main.yml

--- 
- hosts: localhost 
    connection: local 
    gather_facts: true 
    vars_files: 
    - ["vars.yml"] 

    tasks: 
    - name: Create task definition for ECS Cluster 
    ecs_taskdefinition: 
     state: present 
     family: avinash-environment 
     containers: "{{containers}}" 
     region: us-east-1 
    register: ecs_taskdef 

这上面优良样板工程....但我想做出一些变量动态地使用或产生的是前也很好。

在我的情况,我有以下的文件在我的本地目录

#containers_variables 
name: USERNAME 
value: test-user 
name: PASSWORD 
value: pass123 
name: MYSQL 
value: mysqldb.com:3306 

然后ansible变量文件预计,看起来像这样

#variable file, vars.yml 
--- 
containers: 
- name: nash-test 
    essential: true 
    image: nash-test 
    memory: 256 
    portMappings: 
    - containerPort: 8080 
    hostPort: 80 
    protocol: tcp 
    environment: 
    - #the values from container_variables have to be populated or dynamically read for this list purpose 

有没有简单的解决这个?我尝试使用可靠的查找模块,但即时格式错误,其中说“type = list”正在预期。 这些家伙的任何想法?

+0

在'environment'定义中有一个错字 - 应该有一个'-'符号来定界列表项。关于你的问题:你能以yaml或JSON格式存储你的'containers_variables'文件吗? –

回答

0

这是一个简单的修复......;) 我只是改变了下面,它的工作,考虑到源是在JSON格式。

Before 
    environment: 
    - "{{ lookup('file', '{{playbook_dir}}/environment.json') | from_json }}" 

After 
    environment: "{{ lookup('file', '{{playbook_dir}}/environment.json') | from_json }}"