与Chef进行集成测试

时间:2014-04-04 22:14:30

标签: chef

我没有在其他地方找到一个很好的解决方案,我认为集成测试是必要的,因为:

  1. Chef solo不支持加密数据库等所有功能,这是Chef对其他配置管理的重要优势。
  2. ChefSpec适用于单元测试,但不适用于集成测试。
  3. 使用生产Chef服务器进行测试会产生生产机器运行chef-client并获得错误配置的风险

3 个答案:

答案 0 :(得分:4)

您可能正在寻找linting +集成测试。

  1. Linting:使用Foodcritic。它也适用于您的CI工具。如果您想要更具冒险精神,并希望针对ruby最佳实践进行测试,请使用Rubocop。

  2. 单元测试:您提到的Chef Spec

  3. 测试厨房:这是纯粹的集成测试。它实际上是一个框架,你可以选择使用哪个驱动程序(vm,云等)使用哪个供应商(厨师,pupept,ansible等),以及使用哪个测试套件(bash / bats,serverspec)等。

  4. 除此之外,当您无法访问真实服务器时,Chef Zero非常适合测试厨师服务器。它在内存中,逻辑上类型的短暂服务器模拟器。

答案 1 :(得分:1)

主厨零是这个非常古老的问题的答案。它确实处理加密的数据库。

在套件中,您可以提供以下

data_bags_path: <<Data_Bags_PATH>>
encrypted_data_bag_secret_key_path: <<Secret_Key_PATH>>

答案 2 :(得分:0)

  1. 在opscode.com上设置免费的厨师测试服务器(下载入门套件)。
  2. 根据简单的环境变量改变你的knife.rb连接到不同的服务器,即CHEF_TEST=true
  3. 在使用vagrant或其他测试环境进行测试时,export CHEF_TEST=true
  4. 使用您的厨师资料./update_all.bash
  5. 更新您的新测试服务器
  6. 按照惯例运行knife bootstrap以测试流浪者。
  7. <强> knife.rb

    current_dir = File.dirname(__FILE__)
    log_level :info
    log_location STDOUT
    
    if ENV['CHEF_TEST'] == 'true'
      puts 'Running knife on test chef server...'
      node_name                "acmetest"
      client_key               "#{current_dir}/acmetest.pem"
      validation_client_name   "acmetest-validator"
      validation_key           "#{current_dir}/acmetest-validator.pem"
      chef_server_url          "https://api.opscode.com/organizations/acmetest"
      cache_type               'BasicFile'
      cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
      cookbook_path            ["#{current_dir}/../cookbooks"]
    else
      puts 'Running knife on production chef server...'
      node_name                "acme"
      client_key               "#{current_dir}/acme.pem"
      validation_client_name   "acme-validator"
      validation_key           "#{current_dir}/acme-validator.pem"
      chef_server_url          "https://api.opscode.com/organizations/acme"
      cache_type               'BasicFile'
      cache_options            path: "#{ENV['HOME']}/.chef/checksums"
      cookbook_path            ["#{current_dir}/../cookbooks"]
    end
    

    <强> update_all.bash

    #!/bin/bash
    knife cookbook upload --all
    knife role from file roles/*.rb
    knife data bag from file --all
    knife environment from file --all