使用awk和ansible运行命令

时间:2018-10-22 16:54:18

标签: ansible ansible-2.x

我下面有一部剧本:

- hosts: localhost vars: folderpath: folder1/des folder2/sdf tasks: - name: Create a symlink shell: "echo {{folderpath}} | awk -F'/' '{system(\"mkdir \" $1$2 );}'" register: result #- debug: # msg: "{{ result.stdout }}" with_items: - " {{folderpath}} "

但是,当我运行剧本时,会得到2个文件夹。第一个是:

1- folder1des (as expected) 2- folder2 (this should ideally be folder2sdf )

我尝试了许多组合,但仍然不想工作。我需要什么才能使其正常工作。

2 个答案:

答案 0 :(得分:0)

我目前没有一个痛苦的环境。但是以下方法应该起作用:

- hosts: localhost
  tasks:
  - name: Create a symlink
    shell: "echo {{item}} | awk -F'/' '{system(\"mkdir \" $1$2 );}'"
    register: result
    #- debug:
    #  msg: "{{ result.stdout }}"
    with_items:
      - folder1/des
      - folder2/sdf

参考:Ansible Loops Example

说明: 您正在向with_items添加一个列表对象。因此,在您的with_items中,它仅找到一个要迭代的对象(属于列表类型)。因此,它只运行一次。所以现在我要做的是将项目列表传递给with_items,这样它就可以遍历with_items中存在的多个项目。

希望这会有所帮助!

答案 1 :(得分:0)

也许

- hosts: localhost
  vars:
    folderpath:
      folder1/des
      folder2/sdf
  tasks:
  - name: Create a symlink
    file:
      state : link
      path  : "{{ item | regex_replace('[0-9]/','_') }}"
      src   : "{{ item }}"
    with_items: " {{ folderpath }} "

给定代码中的任何内容都不会创建符号链接。那真的就是你的本意吗?