gpt4 book ai didi

ssh - 集成 Terraform 和 Serverspec

转载 作者:行者123 更新时间:2023-12-02 14:02:19 26 4
gpt4 key购买 nike

我正在使用 Terraform 自动构建基于 AWS EC2 的 docker 主机,然后使用其远程 exec 选项下载 docker 文件,构建并运行它。

我希望将其与 Serverspec 集成,但我正在努力解决两件事:

  • 将新创建的 AWS EC2 实例的外部 dns 传递给 Serverspec 的最佳方式。
  • 如何为 Serverspec 配置 SSH 选项,以便它使用 ec2-user 账户在 Amazon Linux AMI 上正确执行。

  • 我通常会使用预定义的 key 对连接到 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

    最佳答案

  • 您可以将 IP 地址设为 output in Terraform .实际上,该链接提供了一个示例,用于获取名为 web 的 AWS 实例的 IP 地址。在这种情况下:
    output "address" {
    value = "${aws_instance.web.public_dns}"
    }

    然后你可以在 terraform apply 之后从命令行获取这个值。与 terraform output address .
  • 您可以使用配置选项 :sudo_password 设置 sudo 密码。如果 ec2 用户可以在没有密码的情况下运行 sudo,请将其设置为 ''。 (参见 this blog post 的示例。)或者将其传递到 SUDO_PASSWORD 环境变量中,如下所述:http://serverspec.org/tutorial.html
  • 关于ssh - 集成 Terraform 和 Serverspec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37844113/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com