我正在使用Terraform自动化基于AWS EC2的docker主机的构建,然后使用其远程exec选项下载docker文件,进行构建和运行。
我希望将其与Serverspec集成在一起,但正在努力解决两件事:
我通常会使用预定义的密钥对连接到EC2实例,并且从不使用密码,但是ServerSpec似乎在服务器上以sudo -p格式运行命令。
任何建议,不胜感激。
spec_helper.rb的内容
require 'serverspec'
require 'net/ssh'
set :ssh_options, :user => 'ec2-user'
同样使用如下编辑的rakefile强制更正EC2外部dns(已屏蔽):
require 'rake'
require 'rspec/core/rake_task'
hosts = %w(
ec2-nn-nn-nn-nnn.eu-west-1.compute.amazonaws.com
)
set :ssh_options, :user => 'ec2-user'
task :spec => 'spec:all'
namespace :spec do
task :all => hosts.map {|h| 'spec:' + h.split('.')[0] }
hosts.each do |host|
short_name = host.split('.')[0]
role = short_name.match(/[^0-9]+/)[0]
desc "Run serverspec to #{host}"
RSpec::Core::RakeTask.new(short_name) do |t|
ENV['TARGET_HOST'] = host
t.pattern = "spec/Nexus/*_spec.rb"
end
end
end
最佳答案
web
:output "address" {
value = "${aws_instance.web.public_dns}"
}
然后,您可以在使用
terraform apply
的terraform output address
之后从命令行获取此值。 关于ssh - 集成Terraform和Serverspec,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37844113/