我创建了ansible角色来创建多个lambda函数,我从变量文件传递一些参数。我的变量文件看起来像
变量文件
S3BucketName: "test_bucket"
S3Key1: "test.zip"
runtime: "python3.6"
handler1: "test.lambda_handler"
role1: "test_role_arn"
memory_size: "128"
timeout: "180"
s3_key2: "temp.zip"
role2: "temp_role_Arn"
handler2: "temp.lambda_handler"
在我的剧本中,我使用ansible循环同时创建多个aws lambda函数。当我在with_items中使用变量时。
Playbook文件
- hosts: localhost
roles:
- ansible-lambda
vars_files:
- "ansible-lambda/vars/cf_vars.yaml"
lambda:
name: '{{ item.name }}'
region: "{{ aws_region }}"
state: "{{state}}"
runtime: "{{ runtime }}"
timeout: "{{timeout}}"
memory_size : "{{memory_size}}"
s3_bucket: "{{ S3BucketName}}"
s3_key: '{{ item.s3_key }}'
role: '{{ item.role }}'
handler: '{{ item.handler }}'
with_items:
- name: test
s3_key: "{{ S3Key1 }}" #refering to variable 1
- name: temp
s3_key: "{{ S3Key2 }}" #refering to variable 2
- debug:
msg: "Lambda creation Complete!!"
以下是错误:
致命:[localhost]:失败! => {“msg”:“'S3Key1'未定义”}
当我传递绝对值而不是变量时,这个剧本可行。我的意思是 s3_key:test.zip
如何在项目中使用变量?
答案 0 :(得分:0)
-------------- var file ---------------
aws_region: austin
lambda_list:
- name: lambda1
state: "UR STATE HERE"
S3BucketName: "test_bucket"
S3Key: "test.zip"
runtime: "python3.6"
handler: "test.lambda_handler"
role_desc: "test_role_arn"
memory_size: "128"
timeout: "180"
- name: lambda2
state: "UR STATE HERE"
S3BucketName: "test_bucket"
S3Key: "test2.zip"
runtime: "python2.7"
handler: "test.lambda_handler"
role_desc: "test_role_ARN"
memory_size: "256"
timeout: "150"
---------------playbook------------------------
- hosts: localhost
vars_files: "ansible-lambda/vars/cf_vars.yaml"
tasks:
lambda:
name: '{{ item.name }}'
region: "{{ aws_region }}"
state: "{{ item.state }}"
runtime: "{{ item.runtime }}"
timeout: "{{ item.timeout }}"
memory_size : "{{ item.memory_size }}"
s3_bucket: "{{ item.S3BucketName }}"
s3_key: "{{ item.s3_key }}"
role: "{{ item.role_desc }}"
handler: "{{ item.handler }}"
with_items:
- "{{ lambda_list }}"
这里有一个正确的方式片段恕我直言如何实现你想要做的事情,确保除了在上面的例子中有效和简单配置之外,还有其他几种方法,你可以看到&# 39; sa dict将每个lambda的信息保存为关键词,当你使用with_items时,它会将每个键迭代到任务,同时将项目的数据用作{{ item.name }}
。
你甚至可以在字典中输入一个字典/列表。例如:
lambda_list:
- name: lambda1 # <--- each dash('-') is a key with a value, that value is a dict
S3: #
S3BucketName: "test_bucket"
S3Key: "test.zip"
- name: lambda2
S3: # <-- without the dash its indicated as a list inside the dict.
S3BucketName: "test_bucket"
S3Key: "test2.zip"
在这种情况下访问您的嵌套列表,您将使用{{item.S3.S3BucketName}}或{{item [&#39; S3&#39;] [&#39; S3BucketName&#39;]}} < / p>
如果它是dict中的dict,你将得到每个键的键/值而没有正确的方法来访问特定的键(使用循环你可以迭代dict并使用&#39;当&#39;得到想要的钥匙。)
这里有一些值得一读的关于循环,dicts以及如何访问它们的参考资料。
http://ansible-docs.readthedocs.io/zh/stable-2.0/rst/playbooks_loops.html#nested-loops