Ansible - 如何在远程服务器中使用查找

标签 ansible

我在目录 /tmp/values.txt 中的每个服务器上都有一个名为 values.txt 的文件,它有一些值。我有一个 jinja 模板,我正在替换 values.txt

中的一些值

但问题是,当我使用 lookup 命令时,它会在 Controller 服务器而不是远程服务器中查找

这是我尝试过的:

- name: Create /etc/systemd/system/etcd.service
  template:
    src: etcd.service.j2
    dest: /etc/systemd/system/etcd.service
  vars:
    value_from_file: "{{ lookup('file', '/tmp/values.txt').split('\n') }}"
    vars_from_jinja: [SELF_NAME, SELF_IP, NODE_1_NAME, NODE_1_IP, NODE_2_NAME, NODE_2_IP, NODE_3_NAME, NODE_3_IP, NODE_4_NAME, NODE_4_IP]
    my_dict: "{{ dict(vars_from_jinja|zip(value_from_file)) }}" 

我怎样才能远程完成这个任务?或者是否有另一种解决方法来将值替换为 jinja 模板?

PS:我无法将 values.txt 提取到 Controller ,因为每个服务器中的 values.txt 内容略有不同。

有人可以帮帮我吗?

最佳答案

查找在 Controller 上找到文件(或流)。如果你的文件在远程节点上,你不能使用查找

Lookup plugins are an Ansible-specific extension to the Jinja2 templating language. You can use lookup plugins to access data from outside sources (files, databases, key/value stores, APIs, and other services) within your playbooks. Like all templating, lookups execute and are evaluated on the Ansible control machine. Ansible makes the data returned by a lookup plugin available using the standard templating system. You can use lookup plugins to load variables or templates with information from external sources.

试试 cat 文件:

- name: read the values.txt
  shell: cat /tmp/values.txt
  register: data

- name: Create /etc/systemd/system/etcd.service
  template:
    src: etcd.service.j2
    dest: /etc/systemd/system/etcd.service
  vars:
    value_from_file: "{{ data.stdout_lines }}"
    vars_from_jinja: [ SELF_NAME, SELF_IP, NODE_1_NAME, NODE_1_IP, NODE_2_NAME, NODE_2_IP, NODE_3_NAME, NODE_3_IP, NODE_4_NAME, NODE_4_IP ]
    my_dict: "{{ dict(vars_from_jinja|zip(value_from_file)) }}"

关于Ansible - 如何在远程服务器中使用查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65034541/

相关文章:

linux - Ansible 跳过我的标签

linux - 无法导入 docker 或 docker-py - 没有名为 docker 的模块

docker - 通过 Ansible 执行 docker-compose pull

ansible - 如果使用 Ansible playbook 超过 15 个字符,则截断字符串

linux - 使用ansible安装.bin文件并保持幂等

linux - 使用 Ansible 执行 Karaf 客户端命令

amazon-ec2 - 以非零退出状态 : 2 终止源后,打包程序失败

Ansible 库存 : inheritance between groups

linux - Ansible: "msg": "basic: Bad HTTP response returned from server. Code 503"

linux - Shell如何杀死一个进程并返回0