ansible "sed: не могу прочитать файл: нет такого файла или каталога" - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть Ansible playbook, который должен выполнить скрипт.Этот скрипт должен добавить строки кода в файл.Обратите внимание, что playbook больше, чем эта роль, хотя все остальные этапы работы с ansible-playbook работают.Сценарий также работает, когда выполняется непосредственно на марионеточном сервере.Я подозреваю, что это проблема с разрешениями, хотя я не уверен, как решить эту проблему.

Примечание: сборник рассылок исполняется от имени пользователя.Скрипт и файл с добавленными строками принадлежат usr ansible и grp ansible.Права: 0755. Файл, который необходимо изменить, также находится в том же месте, что и скрипт.

имя скрипта:

createlines.sh

файл с добавленными строками:

testfile.py

хосты:

puppet

ответная команда:

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": []}

Кто-товидите, что может быть не так?


Редактировать: 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)"

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Пожалуйста, убедитесь, что вы используете полный путь к скрипту testfile.py в вашем скрипте оболочки.Когда Ansible запускает команды оболочки, он делает это из другого места, например, из каталога /tmp.Использование полного, абсолютного пути к вашему скрипту Python гарантирует, что его можно найти в этом случае.

Вы можете запустить Ansible с параметром -vvv, чтобы увидеть местоположение скрипта, когда он исполняется Ansible..

0 голосов
/ 10 декабря 2018

createlines.sh, кажется, присутствует на целевом хосте, но не в файле py.

вы должны убедиться, что py-файл либо скопирован и присутствует на целевом хосте.

...