[英]Chef Kitchen (kitchen-ec2) serverspec spec failing and causing error
我正在學習Chef和使用ec2驅動程序的Kitchen的測試過程,並且具有以下serverspec文件:
require "serverspec"
set :backend, :exec
describe "rbenv" do
describe file("/home/ec2-user/.rbenv") do
it { should be_directory }
end
describe command("rbenv versions") do
its(:exit_status) { should eq 0 }
end
end
當我運行kitchen verify amazon-linux
,第一個測試通過了,但是第二個測試失敗並導致了錯誤:
rbenv
File "/home/ec2-user/.rbenv"
should be directory
Command "rbenv versions"
exit_status
should eq 0 (FAILED - 1)
Failures:
1) rbenv Command "rbenv versions" exit_status should eq 0
Failure/Error: its(:exit_status) { should eq 0 }
expected: 0
got: 127
(compared using ==)
/bin/sh -c rbenv\ versions
# /tmp/verifier/suites/serverspec/rbenv_spec.rb:11:in `block (3 levels) in <top (required)>'
Finished in 0.05481 seconds (files took 0.30304 seconds to load)
2 examples, 1 failure
Failed examples:
rspec /tmp/verifier/suites/serverspec/rbenv_spec.rb:11 # rbenv Command "rbenv versions" exit_status should eq 0
/opt/chef/embedded/bin/ruby -I/tmp/verifier/suites/serverspec -I/tmp/verifier/gems/gems/rspec-support-3.4.1/lib:/tmp/ver
ifier/gems/gems/rspec-core-3.4.4/lib /opt/chef/embedded/bin/rspec --pattern /tmp/verifier/suites/serverspec/\*\*/\*_spec.rb --c
olor --format documentation --default-path /tmp/verifier/suites/serverspec failed
!!!!!! Ruby Script [/tmp/verifier/gems/gems/busser-serverspec-0.5.9/lib/busser/runner_plugin/../serverspec/runner.rb /tm
p/verifier/suites/serverspec] exit code was 1
>>>>>> Verify failed on instance <default-amazon-linux>.
>>>>>> Please see .kitchen/logs/default-amazon-linux.log for more details
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: SSH exited (1) for command: [sh -c '
BUSSER_ROOT="/tmp/verifier"; export BUSSER_ROOT
GEM_HOME="/tmp/verifier/gems"; export GEM_HOME
GEM_PATH="/tmp/verifier/gems"; export GEM_PATH
GEM_CACHE="/tmp/verifier/gems/cache"; export GEM_CACHE
sudo -E /tmp/verifier/bin/busser test
']
>>>>>> ----------------------
我手動登錄服務器,並運行相同的命令/bin/sh -c rbenv\\ versions
,它運行良好。
誰能告訴我我在做錯什么嗎?
編輯1
我剛剛發現,當serverspec運行命令時, $PATH
變量與手動登錄時的變量不同。 我在測試中添加puts ENV['PATH']
,結果如下:
/sbin:/bin:/usr/sbin:/usr/bin
但是,當我手動登錄時,得到以下信息:
/home/ec2-user/.rbenv/shims:/home/ec2-user/.rbenv/bin:/home/ec2-user/.rbenv/shims:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/.local/bin:/home/ec2-user/bin
我將測試中的命令更改為/home/ec2-user/.rbenv/rbenv versions
,並通過了。 知道我需要做什么才能使路徑在這里正常工作嗎?
編輯2
因此,我發現serverspec以root
身份運行命令,這意味着在kitchen converge
期間對ec2-user
的路徑所做的更改不可用。
我不知道是否有使用serverspec的更慣用的方法,但是我將命令更改為此,現在測試通過了:
runuser -l ec2-user -c 'rbenv versions'
這允許root
用戶以另一個用戶身份運行命令。 除非有人知道做這種測試的更好方法,否則我將其添加為問題的答案。
serverspec以root用戶身份運行其命令,因此在融合過程中對其他任何用戶的路徑所做的更改都是無關緊要的。
使用Linux runuser
命令將允許root
用戶以另一個用戶身份運行命令,從而獲得對該用戶$PATH
訪問權限:
runuser -l ec2-user -c 'rbenv versions'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.