Ashok1
(Ashok)
March 13, 2019, 6:55am
1
Hi All,
I have a list logf_dest
(of log files):
"logf_dest": [ "/logs/mx/mail.log", "/logs/dyn.log", "/logs/apache-servers/other.log" ]
I need to form a “list of dicts” called logfile_config
, like the below:
`
logfile_name: remote.conf
logfile_pattern: /logs/mx/mail.log
logfile_owner: root
logfile_name: remote.conf
logfile_pattern: /logs/dyn.log
logfile_owner: root
logfile_name: remote.conf
logfile_pattern: /logs/apache-servers/other.log
logfile_owner: root
`
I’ve come this far in doing so:
`
name: Create list of dicts
set_fact:
logfile_config: |
{
{% for k in logf_dest %}
logfile_name: remote.conf
logfile_pattern: {{ k }}
logfile_owner: root
{% endfor %}
}
`
But, above is obviously not formatted correctly.
I need help on what I am missing here.
Thanks in advance.
Karl_Auer
(Karl Auer)
March 13, 2019, 7:20am
2
How dynamic is the content of that source list? One simple approach would be:
logfile_name: remote.conf
logfile_pattern: “{{ logf_dest[0] }}”
logfile_owner: root
logfile_name: remote.conf
logfile_pattern: “{{ logf_dest[1] }}”
logfile_owner: root
logfile_name: remote.conf
logfile_pattern: “{{ logf_dest[2] }}”
logfile_owner: root
If the list is not always three items long, you can do it with a loop:
set_fact:
logdict: “{{ loglist |default( ) +
[ {
‘logfile_name’: ‘remote.conf’,
‘logfile_pattern’: item,
‘logfile_owner’: ‘root’
}
] }}”
with_items: “{{ logf_dest }}”
Anyway, something like that. That’s off the top of my head, so you may need to correct the syntax a bit, but you get the idea.
Regards, k.
Ashok1
(Ashok)
March 13, 2019, 11:08am
3
The content of the source is very dynamic on each run, hence, going static isn’t viable.
I tried with your logic, like below:
`
name: Form list of dicts
set_fact:
logfile_config: “{{ logf_dest |default( ) +
[ {
‘logfile_name’: ‘remote.conf’,
‘logfile_pattern’: item,
‘logfile_owner’: ‘root’
}
] }}”
with_items: “{{ logf_dest }}”
debug:
var: logfile_config
`
It doesn’t give the desired output. logfile_config
is:
TASK [debug] *********************************************************************************************************************************
task path: /home/ansible/playbooks/loghost-new.yml:42
ok: [log-dvl.vpn] => {
“logfile_config”: [
“/logs/mx/mail.log”,
“/logs/dyn.log”,
“/logs/apache-servers/other.log”,
{
“logfile_name”: “remote.conf”,
“logfile_owner”: “root”,
“logfile_pattern”: “/logs/apache-servers/other.log”
}
]
}
Anything I missed?
This need to be
logfile_config: "{{ logfile_config |default( ) +
Karl_Auer
(Karl Auer)
March 13, 2019, 10:15pm
5
Sorry about that. I did warn you it was off the top of my head
Karl_Auer
(Karl Auer)
March 13, 2019, 10:21pm
6
As Kai Stian Olstad wrote, I got the target list wrong. The first ocurrence of “loglist” should be “logdict”, OR (even better) do as Kai suggested and substitute “logfile_config” for loglist and logdict.
Regards, K.