【发布时间】:2022-12-06 01:23:04
【问题描述】:
我需要使用 ansible 剧本删除文件和文件夹。我将文件/foler 路径作为变量从 Groovy 脚本传递给 Ansible 剧本。
变量在一个特性文件名为删除.properties.我将文件/文件夹路径分别存储在一个变量中,以便将来可以根据需要更改路径。
删除.properties:
delete_files=/home/new-user/myfolder/dltfolder1 /home/new-user/myfolder/dltfolder2 /home/new-user/myfolder/dltfolder3
常规脚本:
stage("Read variable"){
steps{
script{
def propertifile = readFile(properti file path)
deleteParams = new Properties()
deleteParams.load(new StringReader(propertifile))
}
}
}
stage("Delete files/folders"){
steps{
script{
sh script: """cd ansible code path && \
export ANSIBLE_HOST_KEY_CHECKING=False && \
ansible-playbook delete.yml \
--extra-vars"dete_files=${deleteParams.delete_files}" --user user"""
}
}
}
Ansible 剧本:
---
- name: delete files
hosts: localhost
tasks:
- name: delete files
file:
path: "{{ delete_files }}"
state: absent
由于上述代码,只有delete_files中的第一个文件路径(/home/new-user/myfolder/dltfolder1) 中的变量删除.properties文件被删除。
我还需要删除 delete_files 变量中包含的其他文件/文件夹路径。
【问题讨论】:
-
您至少有两个问题:首先(从 Ansible 的角度来看):文件模块将无法在没有循环的情况下删除文件。其次(但可能对您来说更重要):
--extra-vars"dete_files=${deleteParams.delete_files}"将呈现为--extra-vars"delete_files=a b c",并且最终将变为delete_files == 'a',因为 k=v 无法处理这些空间。 -
愚蠢的问题:为什么要将其作为
extra-vars传递?为什么不从 Ansible 剧本中读取文件?