首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集成Terraform和Serverspec

集成Terraform和Serverspec
EN

Stack Overflow用户
提问于 2016-06-15 19:24:56
回答 1查看 1.3K关注 0票数 2

我使用Terraform在基于AWS EC2的对接主机上自动构建,然后使用它的远程exec选项下载一个坞文件,构建并运行它。

我本来希望把它与Serverspec结合起来,但我很难解决两件事:

  1. 将新创建的AWS EC2实例的外部dns传递给Serverspec的最佳方法。
  2. 如何为Serverspec配置SSH选项,以便使用EC2用户帐户在Amazon上正确执行。

我通常会使用预定义的密钥对连接到EC2实例,并且从不使用密码,但是ServerSpec似乎以sudo -p格式在服务器上运行命令。

任何建议都很感激。

spec_helper.rb含量

代码语言:javascript
复制
require 'serverspec'
require 'net/ssh'

set :ssh_options, :user => 'ec2-user'

还使用以下编辑的rakefile强制正确的EC2外部dns (掩码):

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-16 02:33:18

  1. 您可以将IP地址设置为地形输出。实际上,该链接提供了一个示例,用于获取AWS实例的IP地址,在本例中名为web: 输出“地址”{ value = "${aws_instance.web.public_dns}“} 然后,您可以在terraform applyterraform output address之后从命令行获得这个值。
  2. 您可以使用配置选项:sudo_password设置sudo密码。如果EC2-用户可以在没有密码的情况下运行sudo,请将其设置为“”。(有关示例,请参见这篇博客文章。)或者在SUDO_PASSWORD环境变量中传递它,在这里描述:http://serverspec.org/tutorial.html
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37844113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档