【问题标题】:copy files to server from relative path in ansible将文件从ansible中的相对路径复制到服务器
【发布时间】:2020-12-17 00:25:12
【问题描述】:

如何传递相对路径以便 Ansible 可以从 node/keys 复制文件并将它们复制到服务器?

剧本是ansible/playbook

我的目录结构是:

├── ansible
│   ├── inventory
│   └── playbook
├── node
│   ├── keys
│   ├── index.js
│   ├── node_modules
│   ├── package-lock.json
│   └── utils
└── shell
    ├── data.json
    ├── create-data.sh
    ├── destory.sh
    └── firewall-rules.sh

下面是剧本:

- hosts: all
  vars:
    source: "{{ source }}"
    destination: /home/ubuntu

  tasks: 

    - name: Copy files
      copy: 
        src:  "{{ source }}"
        dest: "{{ destination }}"

我就是这样跑的:

ansible-playbook -i inventory/inventory.yaml playbook/crypto-generate.yaml
 --extra-vars "source=../node/keys"

我正在尝试传递相对路径。

【问题讨论】:

  • 您收到错误消息还是文件没有被复制?
  • 我认为您的方法没有任何问题。刚刚做了一个快速测试,它对我有用。您面临的具体问题是什么?
  • 找不到文件。它看起来在这里/ansible/playbook/files/../node/keys。我不确定它是否会查找 ansible/files
  • 谁能帮我解决这个问题?

标签: ansible ansible-inventory ansible-facts


【解决方案1】:

我正在使用{{ playbook_dir }} 构建完整路径,请参阅 special ansible variables

- name: Copy files
  copy: 
    src:  "{{ playbook_dir }}/../../node/keys"
    dest: "{{ destination }}"

【讨论】:

    【解决方案2】:

    您可以使用绝对路径与 src 避免不知道根文件夹在哪里的问题。

    要复制到远程服务器的文件的本地路径。这可以是 绝对的或相对的。如果 path 是目录,则复制它 递归地。在这种情况下,如果路径以“/”结尾,则只有内部内容 该目录的副本被复制到目标。否则,如果没有 以“/”结尾,复制包含所有内容的目录本身。这个 行为类似于 rsync 命令行工具。

    https://docs.ansible.com/ansible/latest/modules/copy_module.html

    【讨论】:

    • 我不想有严格的绝对路径,因为我可以把这个脚本放在任何机器上
    • 您不必这样做。你可以很容易地在任何地方构建绝对路径。
    • 但在这种情况下,如果我移动我的代码,我每次都需要更改 ansible 脚本。在 assible 中,我怎样才能做到这一点?
    • 可以在不改代码的情况下组合密码+相对路径
    • 正如 Istvan 所说,就像 ansible-playbook -i inventory/inventory.yaml playbook/crypto-generate.yaml --extra-vars "source=$(pwd)/../node/keys".
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多