首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ansible "sed:无法读取文件:没有这样的文件或目录“

ansible "sed:无法读取文件:没有这样的文件或目录“
EN

Stack Overflow用户
提问于 2018-12-10 14:45:15
回答 2查看 3.3K关注 0票数 2

我有一个可执行的剧本。此脚本应将代码行添加到文件中。请注意,剧本比这个角色更大,尽管所有其他步骤的剧本工作。脚本在傀儡服务器上直接执行时也能工作。我怀疑这是一个权限问题,虽然我不知道如何解决这个问题。

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

脚本名称:

代码语言:javascript
复制
createlines.sh

文件中添加的行:

代码语言:javascript
复制
testfile.py

东道主:

代码语言:javascript
复制
puppet

不可接受的命令:

代码语言:javascript
复制
ansible-playbook deployment-test.yml --ask-become-pass

剧本:

代码语言:javascript
复制
---
- name: add lines in file
  hosts: Puppet
  become: yes
  become_method: sudo
  become_user: root
  vars_files:
    - vars/gpv-test.yml
  roles:
    - run-script

角色/运行-脚本:

代码语言:javascript
复制
---
- name: Execute the createlines script
  command: sh /var/opt/alu/deploy/hieradata/createlines.sh

错误信息(非常大,并且不断重复):

错误消息的开始:

代码语言:javascript
复制
     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",........

错误信息结束:

代码语言:javascript
复制
........"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:

代码语言:javascript
复制
#! /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:

代码语言:javascript
复制
"some Python code(not relevant)"
trm_data_files:
"Place where lines get inserted"
"some Python code(not relevant)"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-10 15:46:17

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

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

票数 3
EN

Stack Overflow用户

发布于 2018-12-10 15:04:31

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

您应该确保py文件被复制并显示在目标主机上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53708015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档