summaryrefslogtreecommitdiff
path: root/acceptance/.shared/kitchen_acceptance/libraries/kitchen.rb
blob: d3913ebb113691fc17e1becb05ba1be0c9c3b637 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
module KitchenAcceptance
  class Kitchen < Chef::Resource
    resource_name :kitchen

    property :command, String, name_property: true
    property :driver, %w(ec2 vagrant), coerce: proc { |v| v.to_s }, default: lazy { ENV["KITCHEN_DRIVER"] || :ec2 }
    property :instances, String, default: lazy { ENV["KITCHEN_INSTANCES"] }
    property :kitchen_dir, String, default: Chef.node['chef-acceptance']['suite-dir']
    property :chef_product, String, default: lazy {
      ENV["KITCHEN_CHEF_PRODUCT"] ||
      # If we're running the chef or chefdk projects in jenkins, pick up the project name.
      (%w(chef chefdk).include?(ENV["PROJECT_NAME"]) ? ENV["PROJECT_NAME"] : "chef")
    }
    property :chef_channel, String, default: lazy {
      ENV["KITCHEN_CHEF_CHANNEL"] ||
      # Pick up current if we can't connect to artifactory
      (ENV["ARTIFACTORY_USERNAME"] ? "unstable" : "current")
    }
    property :chef_version, String, default: lazy {
      ENV["KITCHEN_CHEF_VERSION"] ||
      # If we're running the chef or chefdk projects in jenkins, pick up the project name.
      (ENV["PROJECT_NAME"] == chef_product ? ENV["OMNIBUS_BUILD_VERSION"] : nil) ||
      "latest"
    }
    property :artifactory_username, String, default: lazy { ENV["ARTIFACTORY_USERNAME"] }
    property :artifactory_password, String, default: lazy { ENV["ARTIFACTORY_PASSWORD"] }
    property :env, Hash, default: {}
    property :kitchen_options, String, default: lazy { ENV["PROJECT_NAME"] ? "-c -l debug" : "-c" }

    action :run do
      execute "bundle exec kitchen #{command}#{instances ? " #{instances}" : ""}#{kitchen_options ? " #{kitchen_options}" : ""}" do
        cwd kitchen_dir
        env({
          "KITCHEN_DRIVER" => driver,
          "KITCHEN_INSTANCES" => instances,
          "KITCHEN_LOCAL_YAML" => ::File.expand_path("../../.kitchen.#{driver}.yml", __FILE__),
          "KITCHEN_CHEF_PRODUCT" => chef_product,
          "KITCHEN_CHEF_CHANNEL" => chef_channel,
          "KITCHEN_CHEF_VERSION" => chef_version,
          "ARTIFACTORY_USERNAME" => artifactory_username,
          "ARTIFACTORY_PASSWORD" => artifactory_password
        }.merge(new_resource.env))
      end
    end
  end
end