ansible“sed:无法读取文件:没有此类文件或目录”

ansible“sed:无法读取文件:没有此类文件或目录”,ansible,file-permissions,Ansible,File Permissions,我有一本Ansible剧本,可以执行脚本。此脚本应向文件中添加代码行。请注意,尽管ansible剧本的所有其他步骤都很有效,但剧本要比这个角色大。当直接在puppet服务器上执行时,脚本也可以工作。我怀疑这是一个权限问题,尽管我不知道如何解决这个问题 注意:ansible剧本将作为ansible用户执行。带有添加行的脚本和文件归usr ansible和grp ansible所有。权利是:0755。 要更改的文件也与脚本位于同一位置 脚本名称: createlines.sh 文件中添加了以下行:

我有一本Ansible剧本,可以执行脚本。此脚本应向文件中添加代码行。请注意,尽管ansible剧本的所有其他步骤都很有效,但剧本要比这个角色大。当直接在puppet服务器上执行时,脚本也可以工作。我怀疑这是一个权限问题,尽管我不知道如何解决这个问题

注意:ansible剧本将作为ansible用户执行。带有添加行的脚本和文件归usr ansible和grp ansible所有。权利是:0755。 要更改的文件也与脚本位于同一位置

脚本名称:

createlines.sh
文件中添加了以下行:

testfile.py
主持人:

puppet
ansible命令:

ansible-playbook deployment-test.yml --ask-become-pass
剧本:

---
- name: add lines in file
  hosts: Puppet
  become: yes
  become_method: sudo
  become_user: root
  vars_files:
    - vars/gpv-test.yml
  roles:
    - run-script
角色/运行脚本:

---
- name: Execute the createlines script
  command: sh /var/opt/alu/deploy/hieradata/createlines.sh
错误消息非常大,并且不断重复:

错误消息的开始:

     fatal: [puppet]: FAILED! => {"changed": true, "cmd": ["sh", "/var/opt/alu/deploy/hieradata/createlines.sh"], "delta": "0:00:00.467213", "end": "2018-12-10 15:33:25.429726", "msg": "non-zero return code", "rc": 2, "start": "2018-12-10 15:33:24.962513", "stderr": "sed: can't read testfile.py: No such file or directory\nsed: can't read testfile.py: No such file or directory\nsed: can't read testfile.py: No such file or directory\nsed: can't read testfile.py........
.....can't read gen_prod_trm_test_yaml.py: No such file or directory", "stderr_lines": ["sed: can't read testfile.py: No such file or directory", "sed: can't read testfile.py: No such file or directory", "sed: can't read testfile.py: No such file or directory", "sed: can't read testfile.py: No such file or directory",........
........"sed: can't read testfile.py: No such file or directory", "sed: can't read testfile.py: No such file or directory"], "stdout": "", "stdout_lines": []}
错误消息结束:

     fatal: [puppet]: FAILED! => {"changed": true, "cmd": ["sh", "/var/opt/alu/deploy/hieradata/createlines.sh"], "delta": "0:00:00.467213", "end": "2018-12-10 15:33:25.429726", "msg": "non-zero return code", "rc": 2, "start": "2018-12-10 15:33:24.962513", "stderr": "sed: can't read testfile.py: No such file or directory\nsed: can't read testfile.py: No such file or directory\nsed: can't read testfile.py: No such file or directory\nsed: can't read testfile.py........
.....can't read gen_prod_trm_test_yaml.py: No such file or directory", "stderr_lines": ["sed: can't read testfile.py: No such file or directory", "sed: can't read testfile.py: No such file or directory", "sed: can't read testfile.py: No such file or directory", "sed: can't read testfile.py: No such file or directory",........
........"sed: can't read testfile.py: No such file or directory", "sed: can't read testfile.py: No such file or directory"], "stdout": "", "stdout_lines": []}
有人知道可能出了什么问题吗

编辑: createlines.sh:

#! /bin/bash
today=`date +%Y-%m-%d`
group_2=(/tmp/${today}/group-2/*)
group_3=(/tmp/${today}/group-3/*)
group_4=(/tmp/${today}/group-4/*)
group_5=(/tmp/${today}/group-5/*)
file="testfile.py"
#filessha1="../../../testfolder/testfolder/group-2/"
#sha1keyy=`sha1sum "${filesha1}"`
#echo "${sha1key}"
#echo "$today"
######GROUP-2
for i in ${group_2[@]}; do
   #echo $i
   #echo ${i##*/}
   sed -i "/trm_data_file/a  \   ensure: present" "$file"
   sed -i "/trm_data_file/a  \   dest_folder: group-2" "$file"
   sed -i "/trm_data_file/a  \     sha1: `(cd /tmp/$today/group-2/; sha1sum ${i##*/} | awk '{ print $1 }')`" "$file"
   sed -i "/trm_data_file/a  \     url: filestore://testfolder/testfolder/${today}/group-2/${i##*/}" "$file"
   sed -i "/trm_data_file/a -  file:" "$file"
done

######GROUP-3
for i in ${group_3[@]}; do
   #echo $i
   #echo ${i##*/}
   sed -i "/trm_data_file/a  \   ensure: present" "$file"
   sed -i "/trm_data_file/a  \   dest_folder: group-3" "$file"
   sed -i "/trm_data_file/a  \     sha1: `(cd /tmp/$today/group-3/; sha1sum ${i##*/} | awk '{ print $1 }')`" "$file"
   sed -i "/trm_data_file/a  \     url: filestore://testfolder/testfoldedf/${today}/group-3/${i##*/}" "$file"
   sed -i "/trm_data_file/a -  file:" "$file"
done

######GROUP-4
for i in ${group_4[@]}; do
   #echo $i
   #echo ${i##*/}
   sed -i "/trm_data_file/a  \   ensure: present" "$file"
   sed -i "/trm_data_file/a  \   dest_folder: group-4" "$file"
   sed -i "/trm_data_file/a  \     sha1: `(cd /tmp/$today/group-4/; sha1sum ${i##*/} | awk '{ print $1 }')`" "$file"
   sed -i "/trm_data_file/a  \     url: filestore://testfolder/testfolder/${today}/group-4/${i##*/}" "$file"
   sed -i "/trm_data_file/a -  file:" "$file"
done

######GROUP-5
for i in ${group_5[@]}; do
   #echo $i
   #echo ${i##*/}
   sed -i "/trm_data_file/a  \   ensure: present" "$file"
   sed -i "/trm_data_file/a  \   dest_folder: group-5" "$file"
   sed -i "/trm_data_file/a  \     sha1: `(cd /tmp/$today/group-5/; sha1sum ${i##*/} | awk '{ print $1 }')`" "$file"
   sed -i "/trm_data_file/a  \     url: filestore://testfolder/testfolder/${today}/group-5/${i##*/}" "$file"
   sed -i "/trm_data_file/a -  file:" "$file"
done
testfile.py:

"some Python code(not relevant)"
trm_data_files:
"Place where lines get inserted"
"some Python code(not relevant)"

createlines.sh似乎存在于目标主机上,但不存在于py文件上


您应该确保py文件已复制并存在于目标主机上。

请确保在shell脚本中使用testfile.py脚本的完整路径。当Ansible运行shell命令时,它会从不同的位置执行此操作,例如/tmp目录。使用Python脚本的完整、绝对路径将确保在本例中可以找到它


您可以使用-vvv参数运行Ansible,以查看Ansible执行脚本时脚本的位置。

请显示.sh和.py文件的摘录,以帮助理解/var/opt/alu/deploy/hieradata/testfile.py。我就在屏幕上。文件是100%的。您可以尝试在脚本中使用testfile.py文件的完整路径吗?只是为了确保它能被找到…@nwinkler这个脚本工作正常,做了它应该做的一切。它会正确地添加行并查找文件。只有在我播放ansible-playbook时,它才会遇到问题。脚本也与testfile位于同一目录中。pyAnsible有时会从不同的目录运行脚本-如果使用-vvv标志运行ansible,您应该会看到这一点。尝试绝对路径并不意味着永久修复,只是为了验证是否可以找到脚本。我会试试看。。。