簡體   English   中英

使用變量創建帶有 ansible 的符號鏈接

[英]Creating symlinks with ansible using variables

我正在編寫一個劇本來創建 nodejs、npm 和 gulp 的符號鏈接,因為我需要使用特定版本並安裝它,我只是將文件夾解壓縮到 /opt/,所有這些都將保留。

我用於創建鏈接的項目的任務是:

- name: Create NPM symlink
  file:
    src: '{{ item.src_dir }}/{{ item.src_name }}'
    dest: '{{ item.dest_dir }}/{{ item.dest_name }}'
    owner: "{{ ansible_ssh_user }}"
    group: "{{ ansible_ssh_user }}"
    state: link
  with_items:
    - { src_dir: "{{ npm_real_dir }}", src_name: "{{ npm_real_name }}" }
    - { dest_dir: "{{ nodenpm_link_dir }}", dest_name: "{{ npm_link_name }}" }

項目“區域”中使用的所有變量都在主機文件中聲明如下: npm_real_dir=/opt/nodejs/node-v6.11.2-linux-x64/lib/node_modules/npm/bin

npm_real_name=npm-cli.js

nodenpm_link_dir=/opt/nodejs/node-v6.11.2-linux-x64/bin

npm_link_name=npm

ansible_ssh_user=vagrant

我收到錯誤:

FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'dest_dir'

我不明白,因為任務中使用的所有變量都已聲明且正確。 我做了一個沒有物品的類似任務:

- name: Create symbolic link for npm
  file:
    src: '{{ npm_real_dir }}/{{ npm_real_name }}'
    path: '{{ nodenpm_link_dir }}/{{ npm_link_name }}'
    owner: "{{ ansible_ssh_user }}"
    group: "{{ ansible_ssh_user }}"
    state: link

它的工作原理和以前一樣,只是沒有項目。

在這一點上,我只想知道它是否是一個已知的錯誤,在使用項目創建鏈接時是否有任何問題,或者我是否犯了一個愚蠢的錯誤並獲得了相關知識

提前致謝

問題是您將兩個不同的對象傳遞給with_items屬性。 第一個對象有兩個屬性( src_dirsrc_name ),而第二個對象有兩個不同的屬性( dest_dirdest_name )。

看起來您想將它們組合成一個對象,如下所示:

- name: Create NPM symlink
  file:
    src: '{{ item.src_dir }}/{{ item.src_name }}'
    dest: '{{ item.dest_dir }}/{{ item.dest_name }}'
    owner: "{{ ansible_ssh_user }}"
    group: "{{ ansible_ssh_user }}"
    state: link
  with_items:
    - { src_dir: "{{ npm_real_dir }}", src_name: "{{ npm_real_name }}", dest_dir: "{{ nodenpm_link_dir }}", dest_name: "{{ npm_link_name }}" }

這應該會更好並消除錯誤,但在這種情況下,您實際上並不需要with_items ,因為它只是您正在處理的一項。 您可以為其他工具添加更多對象,例如以相同的方式gulp ,例如:

- name: Create symlinks
  file:
    src: '{{ item.src_dir }}/{{ item.src_name }}'
    dest: '{{ item.dest_dir }}/{{ item.dest_name }}'
    owner: "{{ ansible_ssh_user }}"
    group: "{{ ansible_ssh_user }}"
    state: link
  with_items:
    - { src_dir: "{{ npm_real_dir }}", src_name: "{{ npm_real_name }}", dest_dir: "{{ nodenpm_link_dir }}", dest_name: "{{ npm_link_name }}" }
    - { src_dir: "{{ gulp_real_dir }}", src_name: "{{ gulp_real_name }}", dest_dir: "{{ gulp_link_dir }}", dest_name: "{{ gulp_link_name }}" }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM