Reputation: 311
I have an Ansible playbook that should execute a script. This Script should add lines of code to a file. Note that the playbook is bigger then this one role though all other steps of the ansible-playbook work. The script also works when executed directly on the puppet server. I suspect that it is a permissions issue, though i am not sure how to solve the problem.
Note: The ansible playbook is getting executed as ansible user. The script and the file with the added lines are owned by usr ansible and grp ansible. Rights are: 0755. The file to be changed is also at the same location as the script.
script name:
createlines.sh
file with the added lines:
testfile.py
hosts:
puppet
ansible command:
ansible-playbook deployment-test.yml --ask-become-pass
playbook:
---
- name: add lines in file
hosts: Puppet
become: yes
become_method: sudo
become_user: root
vars_files:
- vars/gpv-test.yml
roles:
- run-script
roles/run-script:
---
- name: Execute the createlines script
command: sh /var/opt/alu/deploy/hieradata/createlines.sh
Error message(is extremly big and constantly repeats itself):
Start of error message:
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",........
End of error message:
........"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": []}
Does someone see what could be wrong?
Edit: 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)"
Upvotes: 2
Views: 4448
Reputation: 54457
Please make sure that you are using the full path to the testfile.py
script in your shell script. When Ansible runs shell commands, it does this from a different location, e.g. the /tmp
directory. Using the full, absolute path to your Python script will ensure that it can be found in this case.
You can run Ansible with the -vvv
parameter to see the location of the script when it gets executed by Ansible.
Upvotes: 3
Reputation: 513
the createlines.sh seems to be present on targeted host but not the py file.
you should ensure that the py file is either copied and present on the target host.
Upvotes: 1