Скопируйте файл с клиентского узла шеф-повара на рабочую станцию.

Я хотел бы знать, как передать файл с клиентского узла на удаленную машину. Я проверил, есть ли какие-либо ресурсы для этого. Самое близкое, что я нашел, это remote_file, но он извлекает файл из удаленного места и передает его на клиентский узел.

Поэтому я попробовал другой вариант, написав сценарий bash, который будет выполнять автоматический scp. Но я не могу скопировать файл, но шеф-клиент работал нормально, без каких-либо ошибок.

Вот мой скрипт для копирования файла:

#!/usr/bin/expect -f

# connect via scp
spawn scp "/tmp/testfile" [email protected]:/home/chef-ws/fileserver

expect {
-re ".*es.*o.*" {
exp_send "yes\r"
exp_continue
}
-re ".*sword.*" {
exp_send "password\r"
}
}
interact

Я скопировал этот скрипт в свой каталог cookbook's templates как automatecopy.erb, а затем в default.rb у меня есть следующий код

template "/tmp/automatecopy" do
  source "automatecopy.erb"
  mode 0777
end

execute "automatecopy" do
  command "/usr/bin/expect /tmp/automatecopy"
  timeout 100
  action :run
end

Здесь шеф-клиент работает успешно, но файл не был скопирован на мою рабочую станцию. Еще одна вещь заключается в том, что когда я вошел в свой клиентский узел и запустил оттуда скрипт, он заработал. Так почему же шеф-повар не может сделать это?

Пожалуйста, помогите мне решить эту проблему, предложив, что может быть не так, или есть ли какой-либо встроенный ресурс шеф-повара, который можно использовать для копирования файлов с клиента на рабочую станцию.

P.S: И моя рабочая станция, и клиентский узел работали под управлением Ubuntu 12.04. Заранее спасибо.


person HRM    schedule 12.09.2013    source источник


Ответы (1)


Я нашел решение для этого. Благодаря этому сообщению SO что похоже на мою потребность, и там я нашел использование sshpass вместо expect. Итак, я изменил свой сценарий, как показано ниже, и теперь шеф-повар доволен и копирует его... :)

Модифицированный скрипт с использованием sshpass

#!/bin/bash

#Copy file from client's source path to workstation's dest path
sshpass -p <%= @password%> scp -o StrictHostKeyChecking=no <%= @sourcefile%> <%= @user%>@<%= @ip%>:<%= @destinationpath%>

А в default.rb

template "/tmp/automatecopy" do
  source "automatecopy.erb"
  mode 0777
  variables(
       :user=> "chef-ws",
       :ip=> "10.232.110.113",
       :sourcefile=> "/tmp/outfile",
       :destinationpath => "/home/chef-ws/fileserver",
       :password=> "pass"
  )
end
person HRM    schedule 12.09.2013