Jinja模板中的多个事实

时间:2019-03-14 14:30:18

标签: linux ansible jinja2

我想从主机上提取所有接口名称,然后打印该接口的所有信息。

--- # Fetches network interfaces with IPs
- hosts: hta
  gather_facts: yes
  become: yes
  tasks
- debug: msg=" {{ ansible_interfaces|length }}"
  register: num
- name: moving template over to server
  template: src=templates/network.j2 dest=/root/network_info.txt

还有network.j2文件

{% for int in ansible_interfaces %}
Interfaces: Interface-{{ int }}
Data: ansible_{{ int }}
{% endfor %}

到目前为止,我无法打印信息,而Ansible将我的输入ansible _ {{int}}作为文字。

2 个答案:

答案 0 :(得分:0)

下面的戏

@RestController
public class GreetingController {

    @RequestMapping("/hello/{name}")
    String hello(@PathVariable String name) {
        return "Hello, " + name + "!";
    }

    @PostMapping(path = "/departments", produces = MediaType.APPLICATION_XML_VALUE, consumes = MediaType.APPLICATION_XML_VALUE)
    @ResponseBody
    Departments newEmployee(@RequestBody List<Department> departments) {
            Departments departmentsObj = new Departments();
            for(Department department : departments) {
                System.out.println(department);
            }
        departmentsObj.setDepartment(departments);

        return departmentsObj;
    }
}

使用此模板

- command: "ifconfig {{ item }}"
  register: result
  loop: "{{ ansible_interfaces }}"
- template:
    src: template.j2
    dest: int.txt
  delegate_to: localhost

localhost 中创建带有接口数据的文件 int.txt

答案 1 :(得分:0)

我真正不明白的是,您正在调用服务器来收集有关其接口的信息,并将文件发送回同一台服务器,其中包含您可以随时再次收集的信息。我看不出重点,但我们继续。

应用KISS原理:调用ifconfig,它将返回所有接口的详细信息并将结果存储在远程主机上的文件中

playbook.yml

- name: Simple interface info dump on hosts
  hosts: whatevergroup_you_need
  become: true
  gather_facts: false

  tasks:
    - name: dump ifconfig result to /root/network_interface.txt
      shell: ifconfig > /root/network_interfaces.txt

注意:

    仅需要
  • become: true是因为您要在root的主目录中写入文件。如果您在具有适当权限的其他任何地方写入文件,则ifconfig本身可由任何人执行
  • 由于不需要从主机收集任何其他信息,因此gather_facts: false将加快完成这一项简单任务的工作簿。
  • shell模块对于将输出重定向到文件是必需的。如果您担心安全性,则可以改用command模块(无需文件重定向),使用register捕获输出,然后在下一个任务中将内容写入文件中。
  • 我假设您正在呼叫linux主机,而ifconfig正在输出您所需的信息。如果不是这种情况,则需要重写您的问题,并更准确地了解您要实现的目标。