Ansible / Jinja2中的复杂过滤

时间:2016-11-07 09:08:39

标签: ansible jinja2

我对Jinja2很新,我想知道如何实现这个目标。

说我有以下--- servers: 192.168.0.1: names: - foo.example.com - foo exports: data: foo1: /disks/foo1 foo2: /disks/foo2 192.168.0.2: ...

/data/foo1

我想创建符号链接/disks/foo1/data/foo2/disks/foo2foo,但只能在file status=link with_items=...服务器上创建;在其他服务器上,为各自的导出创建符号链接。所以我认为[ { 'mount': mount, 'export': export } for ip, server in servers.iteritems() if ansible_hostname in server['names'] and 'exports' in server and 'data' in server['exports'] for mount, export in server['exports']['data'].iteritems()' ] 是正确的做法。在Python中,我可以使用以下逻辑获取我需要的数组:

{{ servers | select('ansible_hostname in self.names') | ... }}

我不知道如何在Jinja2中这样做。我想做一些像

这样的事情
servers

但这不起作用。我需要为这个逻辑创建一个插件吗?或者我的方法是错的,我应该重新考虑我的MariaDB []> select * from plc_data order by data_ora desc limit 50; +----------------------------------+---------+---------------------+ | nome | valore | data_ora | +----------------------------------+---------+---------------------+ | AN_SILOS1.PESO-PRODOTTO-CARICATO | 127.771 | 2016-11-07 09:35:06 | | AN_SILOS2.PESO-PRODOTTO-CARICATO | 383.813 | 2016-11-07 09:35:06 | | AN_SILOS3.PESO-PRODOTTO-CARICATO | 224.913 | 2016-11-07 09:35:06 | | AN_SILOS4.PESO-PRODOTTO-CARICATO | 331.064 | 2016-11-07 09:35:06 | | AN_SILOS5.PESO-PRODOTTO-CARICATO | 276.469 | 2016-11-07 09:35:06 | | AN_SILOS6.PESO-PRODOTTO-CARICATO | 303.538 | 2016-11-07 09:35:06 | | AN_SILOS7.PESO-PRODOTTO-CARICATO | 54.7685 | 2016-11-07 09:35:06 | | AN_SILOS8.PESO-PRODOTTO-CARICATO | 31.8234 | 2016-11-07 09:35:06 | | ON-EV.QEV1 | 0 | 2016-11-07 09:35:06 | | ON-EV.QEV2 | 0 | 2016-11-07 09:35:06 | | ON-EV.QEV3 | 0 | 2016-11-07 09:35:06 | | ON-EV.QEV4 | 0 | 2016-11-07 09:35:06 | | ON-EV.QEV5 | 0 | 2016-11-07 09:35:06 | | ON-EV.QEV6 | 0 | 2016-11-07 09:35:06 | | ON-EV.QEV7 | 0 | 2016-11-07 09:35:06 | | ON-EV.QEV8 | 0 | 2016-11-07 09:35:06 | | MARCIA_9 | 0 | 2016-11-07 09:35:06 | | MARCIA_10 | 0 | 2016-11-07 09:35:06 | | AN_SILOS1.PESO-PRODOTTO-CARICATO | 127.88 | 2016-11-07 09:30:07 | | AN_SILOS2.PESO-PRODOTTO-CARICATO | 383.813 | 2016-11-07 09:30:07 | | AN_SILOS3.PESO-PRODOTTO-CARICATO | 224.935 | 2016-11-07 09:30:07 | | AN_SILOS4.PESO-PRODOTTO-CARICATO | 331.064 | 2016-11-07 09:30:07 | | AN_SILOS5.PESO-PRODOTTO-CARICATO | 253.48 | 2016-11-07 09:30:07 | | AN_SILOS6.PESO-PRODOTTO-CARICATO | 303.517 | 2016-11-07 09:30:07 | | AN_SILOS7.PESO-PRODOTTO-CARICATO | 54.7685 | 2016-11-07 09:30:07 | | AN_SILOS8.PESO-PRODOTTO-CARICATO | 31.8256 | 2016-11-07 09:30:07 | | ON-EV.QEV1 | 0 | 2016-11-07 09:30:07 | | ON-EV.QEV2 | 0 | 2016-11-07 09:30:07 | | ON-EV.QEV3 | 0 | 2016-11-07 09:30:07 | | ON-EV.QEV4 | 0 | 2016-11-07 09:30:07 | | ON-EV.QEV5 | 0 | 2016-11-07 09:30:07 | | ON-EV.QEV6 | 0 | 2016-11-07 09:30:07 | | ON-EV.QEV7 | 0 | 2016-11-07 09:30:07 | | ON-EV.QEV8 | 0 | 2016-11-07 09:30:07 | | MARCIA_9 | 0 | 2016-11-07 09:30:07 | | MARCIA_10 | 0 | 2016-11-07 09:30:07 | | AN_SILOS1.PESO-PRODOTTO-CARICATO | 127.815 | 2016-11-07 09:25:06 | | AN_SILOS2.PESO-PRODOTTO-CARICATO | 383.748 | 2016-11-07 09:25:06 | | AN_SILOS3.PESO-PRODOTTO-CARICATO | 225.391 | 2016-11-07 09:25:06 | | AN_SILOS4.PESO-PRODOTTO-CARICATO | 331.172 | 2016-11-07 09:25:06 | | AN_SILOS5.PESO-PRODOTTO-CARICATO | 257.388 | 2016-11-07 09:25:06 | | AN_SILOS6.PESO-PRODOTTO-CARICATO | 303.538 | 2016-11-07 09:25:06 | | AN_SILOS7.PESO-PRODOTTO-CARICATO | 54.204 | 2016-11-07 09:25:06 | | AN_SILOS8.PESO-PRODOTTO-CARICATO | 31.8278 | 2016-11-07 09:25:06 | | ON-EV.QEV1 | 0 | 2016-11-07 09:25:06 | | ON-EV.QEV2 | 0 | 2016-11-07 09:25:06 | | ON-EV.QEV3 | 0 | 2016-11-07 09:25:06 | | ON-EV.QEV4 | 0 | 2016-11-07 09:25:06 | | ON-EV.QEV5 | 1 | 2016-11-07 09:25:06 | | ON-EV.QEV6 | 0 | 2016-11-07 09:25:06 | +----------------------------------+---------+---------------------+ 50 rows in set (1.96 sec) 数据的结构?

1 个答案:

答案 0 :(得分:1)

从我的评论中回答:

通常您希望使用inventory_hostname变量 - 它是您在广告资源中用作主机名的内容 servers[ansible_hostname]将访问名为servers的{​​{1}}'密钥。

只是出于好奇,您可以查看this(复杂过滤器链)和this(运行时对象构造)。