I have defined a main playbook, which calls another preparation playbook via import_playbook.
The preparation playbook returns credentials for an S3 repository, var is called “service_secrets” at the moment, which is a dict (see below). This dict needs to be appended into the last item of product.dependencies. The indicator to pick the specific listitem could be just “Source=S3”.
---
- name: 'Preparation'
ansible.builtin.import_playbook: 'playbook_preparation.yml'
vars:
product:
name: 'mssql'
dependencies:
- Name: 'SqlServer'
Source: 'psgallery'
Type: 'psmodule'
- Name: 'SqlServerDsc'
Source: 'psgallery'
Type: 'dscmodule'
- Name: 'AWSPowershell.NetCore'
Source: 'psgallery'
Type: 'psmodule'
- Name: 'ComputerManagementDsc'
Source: 'psgallery'
Type: 'dscmodule'
- Name: >-
{{
["mssql", ci.attributes.input_parameters.mssql.version,
ci.attributes.input_parameters.mssql.edition,
ci.attributes.input_parameters.mssql.language]
| join("_")
}}
Source: 'S3'
Type: 'iso'
Bucket: 'repository'
The new fact “service_secrets” looks something like this:
"service_secrets": {
"Access_key_id": "abc",
"Access_key_secret": "defghi",
"Bucket": "repository",
"Endpoint": "https://s3.abc.com"
}
I tried to fiddle around with combine(), but i could not get the service_secrets into the last listitem.
- name: DEBUG
debug:
msg: '{{ product | combine({"dependencies": [service_secrets]}, list_merge="append") }}'
loop: '{{ product.dependencies }}'
when: 'item.Source == "S3"'
This will result in:
ok: [localhost] => (item={'Name': 'mssql_2022_standard_en', 'Source': 'S3', 'Type': 'iso', 'Bucket': 'repository'}) => {
"msg": {
"dependencies": [
{
"Name": "SqlServer",
"Source": "psgallery",
"Type": "psmodule"
},
{
"Name": "SqlServerDsc",
"Source": "psgallery",
"Type": "dscmodule"
},
{
"Name": "AWSPowershell.NetCore",
"Source": "psgallery",
"Type": "psmodule"
},
{
"Name": "ComputerManagementDsc",
"Source": "psgallery",
"Type": "dscmodule"
},
{
"Bucket": "repository",
"Name": "mssql_2022_standard_en",
"Source": "S3",
"Type": "iso"
},
{
"Access_key_id": "abc",
"Access_key_secret": "defgh",
"Bucket": "repository",
"Endpoint": "https://s3.abc.com"
}
],
"name": "mssql"
}
}
To make it more clear: The last two listitems of product.dependencies should be one item.