builderator 0.3.15 → 1.0.0.pre.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -0
  3. data/Gemfile.lock +440 -0
  4. data/README.md +72 -18
  5. data/Rakefile +1 -2
  6. data/VERSION +1 -1
  7. data/bin/build-clean +102 -0
  8. data/bin/build-data +45 -0
  9. data/builderator.gemspec +7 -4
  10. data/docs/configuration.md +154 -0
  11. data/docs/configuration/cookbook.md +19 -0
  12. data/docs/configuration/profile.md +71 -0
  13. data/docs/versioning.md +65 -0
  14. data/lib/builderator.rb +3 -0
  15. data/lib/builderator/config.rb +93 -0
  16. data/lib/builderator/config/attributes.rb +287 -0
  17. data/lib/builderator/config/defaults.rb +163 -0
  18. data/lib/builderator/config/file.rb +336 -0
  19. data/lib/builderator/config/rash.rb +80 -0
  20. data/lib/builderator/control/cleaner.rb +138 -0
  21. data/lib/builderator/control/cookbook.rb +16 -0
  22. data/lib/builderator/control/data.rb +16 -0
  23. data/lib/builderator/control/data/image.rb +98 -0
  24. data/lib/builderator/control/version.rb +128 -0
  25. data/lib/builderator/control/version/auto.rb +48 -0
  26. data/lib/builderator/control/version/bump.rb +82 -0
  27. data/lib/builderator/control/version/comparable.rb +77 -0
  28. data/lib/builderator/control/version/git.rb +45 -0
  29. data/lib/builderator/control/version/scm.rb +92 -0
  30. data/lib/builderator/interface.rb +67 -0
  31. data/lib/builderator/interface/berkshelf.rb +38 -0
  32. data/lib/builderator/interface/packer.rb +75 -0
  33. data/lib/builderator/interface/vagrant.rb +31 -0
  34. data/lib/builderator/metadata.rb +5 -3
  35. data/lib/builderator/model/cleaner.rb +49 -0
  36. data/lib/builderator/model/cleaner/images.rb +93 -0
  37. data/lib/builderator/model/cleaner/instances.rb +58 -0
  38. data/lib/builderator/model/cleaner/launch_configs.rb +47 -0
  39. data/lib/builderator/model/cleaner/scaling_groups.rb +45 -0
  40. data/lib/builderator/model/cleaner/snapshots.rb +50 -0
  41. data/lib/builderator/model/cleaner/volumes.rb +48 -0
  42. data/lib/builderator/patch/berkshelf.rb +18 -0
  43. data/lib/builderator/patch/thor-actions.rb +47 -0
  44. data/lib/builderator/tasks.rb +127 -17
  45. data/lib/builderator/tasks/berkshelf.rb +63 -0
  46. data/lib/builderator/tasks/packer.rb +17 -56
  47. data/lib/builderator/tasks/vagrant.rb +111 -42
  48. data/lib/builderator/tasks/vendor.rb +94 -0
  49. data/lib/builderator/tasks/version.rb +58 -0
  50. data/lib/builderator/util.rb +37 -11
  51. data/lib/builderator/util/aws_exception.rb +1 -1
  52. data/lib/builderator/util/limit_exception.rb +12 -11
  53. data/lib/builderator/util/task_exception.rb +0 -2
  54. data/mkmf.log +4 -0
  55. data/spec/config_spec.rb +30 -0
  56. data/spec/data/Berksfile +6 -0
  57. data/spec/data/Buildfile +0 -0
  58. data/spec/data/Vagrantfile +0 -0
  59. data/spec/data/history.json +483 -0
  60. data/spec/data/packer.json +0 -0
  61. data/spec/interface_spec.rb +36 -0
  62. data/spec/resource/Buildfile +27 -0
  63. data/spec/spec_helper.rb +90 -0
  64. data/spec/version_spec.rb +282 -0
  65. data/template/Berksfile.erb +10 -0
  66. data/template/Buildfile.erb +28 -0
  67. data/template/Gemfile.erb +16 -0
  68. data/template/README.md.erb +61 -0
  69. data/template/Vagrantfile.erb +75 -0
  70. data/template/gitignore.erb +104 -0
  71. data/{.rubocop.yml → template/rubocop.erb} +0 -0
  72. metadata +203 -56
  73. data/.gitignore +0 -14
  74. data/lib/builderator/control/ami.rb +0 -65
  75. data/lib/builderator/control/clean.rb +0 -130
  76. data/lib/builderator/model.rb +0 -46
  77. data/lib/builderator/model/images.rb +0 -89
  78. data/lib/builderator/model/instances.rb +0 -55
  79. data/lib/builderator/model/launch_configs.rb +0 -46
  80. data/lib/builderator/model/scaling_groups.rb +0 -43
  81. data/lib/builderator/model/snapshots.rb +0 -49
  82. data/lib/builderator/model/volumes.rb +0 -48
  83. data/lib/builderator/tasks/ami.rb +0 -47
  84. data/lib/builderator/tasks/berks.rb +0 -68
  85. data/lib/builderator/tasks/clean.rb +0 -97
  86. data/lib/builderator/util/berkshim.rb +0 -34
  87. data/lib/builderator/util/cookbook.rb +0 -87
  88. data/lib/builderator/util/packer.rb +0 -39
  89. data/lib/builderator/util/shell.rb +0 -44
@@ -0,0 +1,94 @@
1
+ require 'pathname'
2
+ require 'thor'
3
+
4
+ require_relative '../patch/thor-actions'
5
+ require_relative '../util'
6
+
7
+ module Builderator
8
+ module Tasks
9
+ ##
10
+ # Tasks to fetch and clean up remote artifacts
11
+ ##
12
+ class Vendor < Thor
13
+ include Thor::Actions
14
+
15
+ def self.exit_on_failure?
16
+ true
17
+ end
18
+
19
+ desc 'all', 'Fetch all vendor sources'
20
+ def all
21
+ Config.vendor.each { |name, _| fetch(name) }
22
+ end
23
+
24
+ desc 'clean [NAME]', 'Clean up vendor directories'
25
+ def clean(name = nil)
26
+ ## Clean up all vendors
27
+ return Config.vendor.each { |n, _| clean(n) } if name.nil?
28
+
29
+ remove_dir Util.vendor(name)
30
+ end
31
+
32
+ desc 'fetch NAME', 'Fetch vendor NAME from its source'
33
+ def fetch(name = :default)
34
+ empty_directory Util::VENDOR
35
+
36
+ path = Util.vendor(name)
37
+ params = Config.vendor(name)
38
+
39
+ if params.has?(:github)
40
+ say_status :vendor, "#{ name } from GitHub repository #{ params.github }"
41
+ _fetch_github(path, params)
42
+ elsif params.has?(:git)
43
+ say_status :vendor, "#{ name } from git repository #{ params.git }"
44
+ _fetch_git(path, params)
45
+ elsif params.has?(:path)
46
+ say_status :vendor, "#{ name } from path #{ params.path }"
47
+ _fetch_path(path, params)
48
+ end
49
+
50
+ ## Include any policies embedded in this vendor
51
+ Config.recompile
52
+ end
53
+
54
+ no_commands do
55
+ def _fetch_git(path, params)
56
+ empty_directory path
57
+
58
+ inside path do
59
+ ## Initialize new repository
60
+ unless path.join('.git').exist?
61
+ run 'git init'
62
+ run "git remote add origin #{ params.git }"
63
+ end
64
+
65
+ run 'git fetch origin --tags --prune'
66
+
67
+ ## Checkout reference
68
+ if params.has?(:tag) then run "git checkout #{ params.tag }"
69
+ elsif params.has?(:ref) then run "git checkout #{ params.ref }"
70
+ else ## specified branch or master
71
+ run "git checkout #{ params.fetch(:branch, 'master') }"
72
+
73
+ ## Only pull if a tracking branch is checked out
74
+ run 'git pull'
75
+ end
76
+
77
+ ## Apply relative subdirectory
78
+ run "git filter-branch --subdirectory-filter \"#{ params.rel }\" --force" if params.has?(:rel)
79
+ end
80
+ end
81
+
82
+ def _fetch_github(path, params)
83
+ params.git = "git@github.com:#{ params.github }.git"
84
+ _fetch_git(path, params)
85
+ end
86
+
87
+ def _fetch_path(path, params)
88
+ remove_dir path.to_s if path.exist?
89
+ create_link path.to_s, params.path.to_s
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,58 @@
1
+ require 'thor'
2
+
3
+ require_relative '../patch/thor-actions'
4
+ require_relative '../control/version'
5
+ require_relative '../util'
6
+
7
+ module Builderator
8
+ module Tasks
9
+ ##
10
+ # Tasks to detect and increment package versions
11
+ ##
12
+ class Version < Thor
13
+ include Thor::Actions
14
+
15
+ def self.exit_on_failure?
16
+ true
17
+ end
18
+
19
+ desc 'current', 'Print the current version and write it to file'
20
+ def current
21
+ unless Config.autoversion.search_tags
22
+ say_status :disabled, 'Automatically detecting version informantion '\
23
+ 'from SCM tags is disabled', :red
24
+ return
25
+ end
26
+
27
+ say_status :version, "#{Control::Version.current} (#{Control::Version.current.ref})"
28
+ Control::Version.write
29
+ Control::Version.set_config_version
30
+ end
31
+
32
+ desc 'bump TYPE [PRERELEASE_NAME]', 'Increment the package version, optionally with a named prerelease'
33
+ def bump(type = :auto, prerelease_name = nil)
34
+ ## Guard: Don't try to create a new version if `create_tags` is explicitly disabled
35
+ ## or `search_tags` is disabled as we won't have a valud current version to increment
36
+ unless Config.autoversion.create_tags && Config.autoversion.search_tags
37
+ say_status :disabled, 'Tag creation is disabled for this build. Not '\
38
+ 'creating new SCM tags!', :red
39
+
40
+ ## Try to read the current version anyway, incase `search_tags == true`
41
+ current
42
+
43
+ return
44
+ end
45
+
46
+ say_status :bump, "by #{type} version"
47
+ Control::Version.bump(type, prerelease_name)
48
+
49
+ ## Print the new version and write out a VERSION file
50
+ current
51
+
52
+ ## Try to create and push a tag
53
+ run "git tag #{Control::Version.current}"
54
+ run 'git push --tags'
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,8 +1,18 @@
1
1
  require 'pathname'
2
2
 
3
3
  module Builderator
4
+ ##
5
+ # Shared helper methods
6
+ ##
4
7
  module Util
8
+ GEM_PATH = Pathname.new(__FILE__).join('../../..').expand_path
9
+ WORKSPACE = '.builderator'.freeze
10
+ VENDOR = 'vendor'.freeze
11
+
5
12
  class << self
13
+ ##
14
+ # Transform helpers
15
+ ##
6
16
  def to_array(arg)
7
17
  arg.is_a?(Array) ? arg : [arg]
8
18
  end
@@ -11,6 +21,28 @@ module Builderator
11
21
  {}.tap { |tt| aws_tags.each { |t| tt[t.key.to_s] = t.value } }
12
22
  end
13
23
 
24
+ ##
25
+ # Relative path from working directory
26
+ ##
27
+ def relative_path(*relative)
28
+ Pathname.pwd.join(*(relative.flatten.map(&:to_s))).expand_path
29
+ end
30
+
31
+ def workspace(*relative)
32
+ relative_path(WORKSPACE, relative)
33
+ end
34
+
35
+ def vendor(*relative)
36
+ workspace(VENDOR, relative)
37
+ end
38
+
39
+ def source_path(*relative)
40
+ GEM_PATH.join(*(relative.flatten.map(&:to_s))).expand_path
41
+ end
42
+
43
+ ##
44
+ # Set-filter helpers
45
+ ##
14
46
  def filter(resources, filters = {})
15
47
  resources.select do |_, r|
16
48
  _filter_reduce(r, filters)
@@ -25,21 +57,15 @@ module Builderator
25
57
  resources
26
58
  end
27
59
 
28
- def region(arg = nil)
29
- return @region || 'us-east-1' if arg.nil?
30
- @region = arg
31
- end
32
-
60
+ ##
61
+ # AWS Clients
62
+ ##
33
63
  def ec2
34
- @ec2 ||= Aws::EC2::Client.new(:region => region)
64
+ @ec2 ||= Aws::EC2::Client.new(:region => Config.aws.region)
35
65
  end
36
66
 
37
67
  def asg
38
- @asg ||= Aws::AutoScaling::Client.new(:region => region)
39
- end
40
-
41
- def working_dir(relative = '.')
42
- Pathname.pwd.join(relative).expand_path
68
+ @asg ||= Aws::AutoScaling::Client.new(:region => Config.aws.region)
43
69
  end
44
70
 
45
71
  private
@@ -23,7 +23,7 @@ module Builderator
23
23
  end
24
24
 
25
25
  def message
26
- "An error occured executing performing task #{ task }. #{ operation }"\
26
+ "An error occured performing task #{ task }. #{ operation }"\
27
27
  "(#{ JSON.generate(parameters) }): #{ exception.message }"
28
28
  end
29
29
  end
@@ -6,12 +6,15 @@ module Builderator
6
6
  # Exception raised if a safety limit is exceeded
7
7
  ##
8
8
  class LimitException < TaskException
9
+ DEFAULT_LIMIT = 4
10
+
11
+ attr_reader :resource_name
9
12
  attr_reader :resources
10
13
 
11
- def initialize(klass, task, resources)
14
+ def initialize(resource_name, task, resources)
12
15
  super(:limit, task, :yellow)
13
16
 
14
- @klass = klass
17
+ @resource_name = resource_name
15
18
  @resources = resources
16
19
  end
17
20
 
@@ -20,18 +23,16 @@ module Builderator
20
23
  end
21
24
 
22
25
  def limit
23
- @klass::LIMIT
24
- end
25
-
26
- def resource
27
- @klass.name
26
+ Config.cleaner.limits[resource_name]
28
27
  end
29
28
 
30
29
  def message
31
- "Safety limit exceeded for task `#{ task }`: Count #{ count } is"\
32
- " greater than the limit of #{ limit } set in #{ resource }. Please"\
33
- " re-run this task with the --no-limit flag if you are sure this is"\
34
- " the correct set of resources to delete."
30
+ msg = "Safety limit exceeded for task `#{task}`: Count #{count} is "
31
+ msg << "greater than the limit of #{limit} set in `cleaner.limits.#{resource_name}`. "
32
+ msg << 'Please re-run this task with the --force flag if you are sure this is '\
33
+ 'the correct set of resources to delete.' unless Config.cleaner.force
34
+
35
+ msg
35
36
  end
36
37
  end
37
38
  end
@@ -4,11 +4,9 @@ module Builderator
4
4
  # Generic wrapper for exceptions in Thor Tasks
5
5
  ##
6
6
  class TaskException < StandardError
7
- attr_reader :status
8
7
  attr_reader :task
9
8
 
10
9
  def initialize(status, task, color = :red)
11
-
12
10
  @status = status
13
11
  @task = task
14
12
  @color = color
@@ -0,0 +1,4 @@
1
+ find_executable: checking for vagrant... -------------------- yes
2
+
3
+ --------------------
4
+
@@ -0,0 +1,30 @@
1
+ require_relative './spec_helper'
2
+
3
+ # :nodoc:
4
+ module Builderator
5
+ RSpec.describe Config, '#load' do
6
+ it 'loads a DSL file' do
7
+ expect(Config.layers.length).to eq 1
8
+ end
9
+
10
+ it 'compiles loaded DSL' do
11
+ layer = Config.layers.first
12
+ layer.compile.seal
13
+
14
+ expect(layer.build_name).to eq 'builderator'
15
+ expect(layer.autoversion.create_tags).to be false
16
+
17
+ ## Collection `depends` in Namespace `cookbook`
18
+ expect(layer.cookbook.depends['apt']).to be_kind_of(Config::Attributes::Namespace)
19
+ expect(layer.cookbook.depends['etcd-v2']).to be_kind_of(Config::Attributes::Namespace)
20
+ end
21
+
22
+ it 'compiles configuration layers' do
23
+ Config.compile
24
+
25
+ ## Ensure that layer-order is respected
26
+ expect(Config.aws.region).to eq 'us-east-1'
27
+ expect(Config.build_name).to eq 'builderator'
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,6 @@
1
+ require 'builderator/patch/berkshelf'
2
+
3
+ source 'https://supermarket.chef.io'
4
+
5
+ cookbook 'apt', '>= 0.0.0', {}
6
+ cookbook 'etcd-v2', '>= 0.0.0', {}
File without changes
File without changes
@@ -0,0 +1,483 @@
1
+ [
2
+ {
3
+ "id": "d6f0ae080a484b40687350110f15795bdcde6d7e",
4
+ "message": "In reset, check for the setter-method instead of the getter-method"
5
+ },
6
+ {
7
+ "id": "506d7d8d17c49d80c7d4e72cd7ebbe67c04d679d",
8
+ "message": "Add auto-version controller"
9
+ },
10
+ {
11
+ "id": "945beb804859749706f67268229fe991f496c41a",
12
+ "message": "Merge pull request #16 from rapid7/cleaner-refactor"
13
+ },
14
+ {
15
+ "id": "0b1b7a9fe1aa840b73fe9a0b96097967027cf6ab",
16
+ "message": "Fix cleaner CLI options. Pass AWS region to COnfig argv correctly"
17
+ },
18
+ {
19
+ "id": "a1d3dcbd91a0abff829f8f09337ddc257257e730",
20
+ "message": "Merge pull request #14 from rapid7/gemspec"
21
+ },
22
+ {
23
+ "id": "c3a0b2402ddf4084c175cc69793d592f8864daf1",
24
+ "message": "Add mixlib-shellout, remove mkfifo from gemspec dependencies"
25
+ },
26
+ {
27
+ "id": "a0213856213536f4b2ea8a75543b12e35b8cc52e",
28
+ "message": "Make thor-scmversion a dev dependency"
29
+ },
30
+ {
31
+ "id": "bc8dd9b9ceac207ef9b45613f66228aeef698dd0",
32
+ "message": "Add vagrant, berkshelf, and builderator state files as well as VERSION to gitignore"
33
+ },
34
+ {
35
+ "id": "723184617c594635c5191621e3b6a519609adcaf",
36
+ "message": "Merge pull request #11 from rapid7/interface"
37
+ },
38
+ {
39
+ "id": "560cea5ea897a2c9e6a484aa5ed95e1a0d81b9c9",
40
+ "message": "Add berkshelf_config parameter to berkshelf interface, and copy tags from profile to packer-builders in the packer interface"
41
+ },
42
+ {
43
+ "id": "89403f24e8a4a82ffa67eb941d5afefe55ced37a",
44
+ "message": "Fix packer build parameter name `ami_virtualization_type`"
45
+ },
46
+ {
47
+ "id": "91c4e2aea4f391c966fe5a2f049bed29d05783aa",
48
+ "message": "Don't try to template an embedded cookbook's Berksfile in berks tasks. We may handle that in cookbook tasks later on..."
49
+ },
50
+ {
51
+ "id": "6287a49d467a0a049a59e3a6f025373b529f0578",
52
+ "message": "Add node about packer assuming ubuntu user"
53
+ },
54
+ {
55
+ "id": "cd9b9d6738b25abb80d2256c76c9b8297f07009f",
56
+ "message": "Can't test Vafrantfile generator against a file with an absolute path"
57
+ },
58
+ {
59
+ "id": "ab703a9cfb4fdeea319a0de37c258cb803bbd5a4",
60
+ "message": "Rename write to render in interface/packer"
61
+ },
62
+ {
63
+ "id": "3f785e2f9306605d4574da8384e22e1bcd8c4c33",
64
+ "message": "Remove comment cruft at the bottom of interface/packer"
65
+ },
66
+ {
67
+ "id": "d9719348b177741a18a4e064a01767d1f7dd907f",
68
+ "message": "Adds a configuration parameter for a path to Berkshelf's config.json file (defaults to localtion in HOME), and removes invalid default for tags from the default packer configuration"
69
+ },
70
+ {
71
+ "id": "6d5778ab1b7ac7a8e73287c6e1ddb783a67ec395",
72
+ "message": "Ensure that Config is compiled before trying to get values from it"
73
+ },
74
+ {
75
+ "id": "2807c5881c4aa8f6a5beef2b5ba23e83d6a7ddf4",
76
+ "message": "Add a helper method to check if the project includes a cookbook"
77
+ },
78
+ {
79
+ "id": "1fed58c680c7cfd3bc53083d97a6346b2f0aa2a6",
80
+ "message": "Add a patch for Berksfiles to add gzip middleware to Faraday"
81
+ },
82
+ {
83
+ "id": "2fa5cb96b5fb13a4e0240dede3896c8a04079a37",
84
+ "message": "Add tests for Interface"
85
+ },
86
+ {
87
+ "id": "74e666d7d7c495eb5e837959fd681962779526dd",
88
+ "message": "Add creater/getters to Interface. Fix Vagrantfile template"
89
+ },
90
+ {
91
+ "id": "0e85b3e22da561272103435e5562ec77123ad428",
92
+ "message": "Document integration file changes"
93
+ },
94
+ {
95
+ "id": "58203268e7ea1074ba5edd637b4360349d059f66",
96
+ "message": "Add configuration interfaces and templates"
97
+ },
98
+ {
99
+ "id": "8c953123b65b53544468c43bac7fa2d6d379c1f2",
100
+ "message": "Merge pull request #12 from rapid7/cleaner-refactor"
101
+ },
102
+ {
103
+ "id": "ed1422283e31c694704ba9241066a8601f88b50d",
104
+ "message": "Don't tell users to re-run with --force if Config.cleaner.force is already true"
105
+ },
106
+ {
107
+ "id": "1a5ed1d683bce8e49a03245ec2b6f944918fa009",
108
+ "message": "Refactor warning messages to print limit, force, and commit warnings and stop-waits for every task"
109
+ },
110
+ {
111
+ "id": "5e0b2b24ba49e78699656a06c179f5088246dd61",
112
+ "message": "Favor fluent Config interface over hash-getters"
113
+ },
114
+ {
115
+ "id": "1745be5b51d85f520a8d41b15ef9df6b485aeb07",
116
+ "message": "Refactor model, controller, and exceptions to use Config"
117
+ },
118
+ {
119
+ "id": "2aeda487ec631e00701529e776633a34b97386c0",
120
+ "message": "Replace - with _ in keys when merging: makes loading CLI options much simpler"
121
+ },
122
+ {
123
+ "id": "5e3401f098653678febc41659eff15d9ca728984",
124
+ "message": "Add config parameters from cleaner CLI options and sane defaults"
125
+ },
126
+ {
127
+ "id": "662ca3dffcd50c9ddc600076feedc0d6593f221a",
128
+ "message": "Fix source name for argv layer"
129
+ },
130
+ {
131
+ "id": "9a5ecc7a57a642e12ec9279616ffb01f2a3c1011",
132
+ "message": "Use configuration sys-system for limits and AWS region"
133
+ },
134
+ {
135
+ "id": "35cd14da75b83a2162ad70610be28a886423de11",
136
+ "message": "Refactor clean tasks into their own CLI"
137
+ },
138
+ {
139
+ "id": "c926b1effd1ef30b48d7331cf62eef3d8b1ab53f",
140
+ "message": "Create build-clean executable and rename clean contorller to cleaner"
141
+ },
142
+ {
143
+ "id": "ed5c8f8460accd3db414f675893a037bb506f3e4",
144
+ "message": "Move module Model into Model::Cleaner"
145
+ },
146
+ {
147
+ "id": "880d43d45846d3f422b569b7a1f7cd769933b643",
148
+ "message": "Fix grammar in exception message"
149
+ },
150
+ {
151
+ "id": "543206c0c679671360de75761664f76a447972d9",
152
+ "message": "remove shadowed getter for `status`"
153
+ },
154
+ {
155
+ "id": "5a1d6913f1a348462f336013a7557647ef6cf4cb",
156
+ "message": "Merge pull request #9 from rapid7/configuration"
157
+ },
158
+ {
159
+ "id": "8d8b08acc05c20c8acff69eafe46914930288a54",
160
+ "message": "Clean up usage of method_missing and fix/dedup some getter code in attributes"
161
+ },
162
+ {
163
+ "id": "b04825102b97285b27b98e29a76183b54bb395b7",
164
+ "message": "First pass at adding RSpec tests"
165
+ },
166
+ {
167
+ "id": "0c14d1aa7218af12e5e6d8e0771981afd61d8747",
168
+ "message": "Remove data_bag and environment paths from defaults. These should be matched with a vendor config in a site or build-specific Buildfile"
169
+ },
170
+ {
171
+ "id": "bd6331500fcd9e0eac6983faf8628a6af5f3dc08",
172
+ "message": "Spelling"
173
+ },
174
+ {
175
+ "id": "fc19a72782b83962030b6ca1ee79da6da9ede372",
176
+ "message": "Adds a central configuration layer"
177
+ },
178
+ {
179
+ "id": "50d6d78e2c0b189380714221f56e068476ed47fc",
180
+ "message": "First pass at a composite configuration layer"
181
+ },
182
+ {
183
+ "id": "3ad70114e85745fe3fe6039d5b8d23e65b4bfde5",
184
+ "message": "Merge pull request #6 from rapid7/find_amazon_windows_baseami",
185
+ "tags": [
186
+ "0.3.15"
187
+ ]
188
+ },
189
+ {
190
+ "id": "13cd4aeeca1c87c607dddc654c798b4278e80818",
191
+ "message": "Support for finding the latest Windows AMI from Amazon (defaults to 2012 R2)"
192
+ },
193
+ {
194
+ "id": "560dffc6680b6ad633352b5f06a2445602c24f67",
195
+ "message": "Merge pull request #5 from rapid7/negative-filtering"
196
+ },
197
+ {
198
+ "id": "d6a6795a268531bd56df84ef49e104f950ad969e",
199
+ "message": "Implement negative resource filtering"
200
+ },
201
+ {
202
+ "id": "145f71212a2679763f0e45ac6e0bcc0dc7795146",
203
+ "message": "Exit the clean task with a non-zero code when errors occur to make Jenkins jobs fail."
204
+ },
205
+ {
206
+ "id": "0e5ab9fd83371e725614ec73b252b70b298c8eb0",
207
+ "message": "Merge pull request #4 from rapid7/complete-cleaner",
208
+ "tags": [
209
+ "0.3.14"
210
+ ]
211
+ },
212
+ {
213
+ "id": "29149adaa2286d35466b7a77761c8d4ab6eb5765",
214
+ "message": "Add API calls to delete resources"
215
+ },
216
+ {
217
+ "id": "19bc4022fdd8acdb8f36422d5b030e05aed7b581",
218
+ "message": "returned berkshelf to 3.2"
219
+ },
220
+ {
221
+ "id": "9100add6f6defd1e523709f63ffb30eabc905bb3",
222
+ "message": "revert berkshelf to 3.2"
223
+ },
224
+ {
225
+ "id": "94e8d1784e4215459288f343e8f1ff1319ce58f2",
226
+ "message": "updated berkshelf to 4.0.1"
227
+ },
228
+ {
229
+ "id": "a2e694f8e3954b24a8269a8957b920f2a4dea837",
230
+ "message": "updated berkshelf to 4.0 as berkshelf-api-clinet required to be on 2.0.0 to run"
231
+ },
232
+ {
233
+ "id": "3c438f6f1c3e4d6da11f19e7f9355a50170a478e",
234
+ "message": "Chef::Cookbook::Medata.from_json expects JSON, not a filepath",
235
+ "tags": [
236
+ "0.3.13"
237
+ ]
238
+ },
239
+ {
240
+ "id": "1e03d71f7f93861139bfc471cecd95b4c7e721da",
241
+ "message": "Handle Pathname obects in berks tasks",
242
+ "tags": [
243
+ "0.3.12"
244
+ ]
245
+ },
246
+ {
247
+ "id": "bf9581b0efef5585a6908c13b1d6224b56d7fc7a",
248
+ "message": "Merge pull request #3 from rapid7/cookbook-push",
249
+ "tags": [
250
+ "0.3.11"
251
+ ]
252
+ },
253
+ {
254
+ "id": "ea9927b2d5d4ea07deea4909a5dd13e249e11e46",
255
+ "message": "Require thor-scmversion in the Tasks module, not Util"
256
+ },
257
+ {
258
+ "id": "6be176bc0b2f7c0cb968b5ad9a331bc43bd5ee46",
259
+ "message": "Add build and push tasks for cookbooks"
260
+ },
261
+ {
262
+ "id": "8e6be1d6ac1347e6961e0a74a13ae3639414dcef",
263
+ "message": "Extend Chef::Cookbook::Metadata"
264
+ },
265
+ {
266
+ "id": "e7584e73c56aa9b32f4f57cd3ac13e6715d9bb53",
267
+ "message": "Bring in ignorefile"
268
+ },
269
+ {
270
+ "id": "e8d9dbe9962b933eac7eeb990729a17bd709ce63",
271
+ "message": "Add homepage to gemspec",
272
+ "tags": [
273
+ "0.3.10"
274
+ ]
275
+ },
276
+ {
277
+ "id": "31ba2630e260edc8ac0db80499bb46e2f053562a",
278
+ "message": "Merge pull request #2 from rapid7/fix-cookbook-path"
279
+ },
280
+ {
281
+ "id": "f4105a9bee4aeba116c54cc05d0e8a7643f4f775",
282
+ "message": "Fix cookbook path resolution"
283
+ },
284
+ {
285
+ "id": "9303364ba5e298271e4dde6317100fe84bcd49d6",
286
+ "message": "Some opinionated changes... -> Error message when executed outside of Bundler -> Name of CONSTANT that the gem path is stored in"
287
+ },
288
+ {
289
+ "id": "20106bebfb63163bbb899b2106f1174938c805e3",
290
+ "message": "Update vagrant version in config instructions"
291
+ },
292
+ {
293
+ "id": "bae8761a1b54bd3a26a3de2b4e013b9082684c81",
294
+ "message": "Add a helper to reference files relative to pwd"
295
+ },
296
+ {
297
+ "id": "d6075989bb7b7b7d4ef21bb0ba6134a07945b8dd",
298
+ "message": "Move packer helpers into Util namespace"
299
+ },
300
+ {
301
+ "id": "773c3cdd824d2c77bba13c2f4a8116404f589487",
302
+ "message": "Merge pull request #1 from rapid7/ec2-clean-tasks"
303
+ },
304
+ {
305
+ "id": "e4cc2f2531ccbfca956666956397ddb140c1fe5e",
306
+ "message": "Whelp, the launch config cleaner seemed to work..."
307
+ },
308
+ {
309
+ "id": "2b748d8aee8d8b2de2529a1ecceb319108bf9084",
310
+ "message": "Fix packer install/build paths",
311
+ "tags": [
312
+ "0.3.9"
313
+ ]
314
+ },
315
+ {
316
+ "id": "5ba1233d6b6278777a57f7920d3d139c339464f8",
317
+ "message": "Use AwsException in Clean controller"
318
+ },
319
+ {
320
+ "id": "99ca8ec34d98beca0ded33091e311a5a83fb131b",
321
+ "message": "Fix argument lists passed to invocations in the 'all' task"
322
+ },
323
+ {
324
+ "id": "4d664756ef6d13aac9fbf3f6010d5b06c9ea41df",
325
+ "message": "Add a wrapper exception for AWS-SDK service errors"
326
+ },
327
+ {
328
+ "id": "c24a83c7a0645c76c6e39dc055cf999197a62486",
329
+ "message": "Abstract the status method from LimitException into a generic TaskException class that cen be reused for other Thor task exceptions"
330
+ },
331
+ {
332
+ "id": "072dd13091ccbac2fca30302c3a6795d1043f6ad",
333
+ "message": "Add exception handling to the Clean controller"
334
+ },
335
+ {
336
+ "id": "c32f0ea60f395226b913528263acbe9281fafd41",
337
+ "message": "Add default to reject argument"
338
+ },
339
+ {
340
+ "id": "94a41faef678fbf86a459b2922185d8b264332fc",
341
+ "message": "Fix class header comment, override the safety LIMIT constant for several resources"
342
+ },
343
+ {
344
+ "id": "e241d71098c9fdca904ff2a243bd845eab38ae7f",
345
+ "message": "Clean up data model and logic that determines if a resource is in use"
346
+ },
347
+ {
348
+ "id": "bd0b2585263d25de51d6582443fc2dd5c5602dd7",
349
+ "message": "Starting usage docs for clean tasks"
350
+ },
351
+ {
352
+ "id": "861b642a63342b4d51c5535bf419f01145cb6ecb",
353
+ "message": "First pass at tasks to clean up abandoned EC2 resources"
354
+ },
355
+ {
356
+ "id": "f0b7b990ac953eaccc5725ec498be00ffb0550fe",
357
+ "message": "Move AWS clients into util"
358
+ },
359
+ {
360
+ "id": "1d9120c0621a020fac5a65b952578031e6d0340c",
361
+ "message": "Fix AMI ID matching logic in packer:build"
362
+ },
363
+ {
364
+ "id": "bfb61e34baa264a11a9022e8867e1b1755979bea",
365
+ "message": "Bump version",
366
+ "tags": [
367
+ "0.3.8"
368
+ ]
369
+ },
370
+ {
371
+ "id": "c6893e182bf1e56766094ae5bc515e6557c1a5a9",
372
+ "message": "Add option to disable version:current task"
373
+ },
374
+ {
375
+ "id": "f490a14a428db458be63748da544547956babb36",
376
+ "message": "Bump version",
377
+ "tags": [
378
+ "0.3.7"
379
+ ]
380
+ },
381
+ {
382
+ "id": "fa6883ba10217ae8347ec90c96942814f07bc28e",
383
+ "message": "Fix berksfile finder logic"
384
+ },
385
+ {
386
+ "id": "67d8551a5a3da923ef155161e90d924a48cbeb8a",
387
+ "message": "Bump version",
388
+ "tags": [
389
+ "0.3.6"
390
+ ]
391
+ },
392
+ {
393
+ "id": "db948f53914ca08df25adb077cee6b4bfb2e8b2d",
394
+ "message": "Fix packer:find_ami task"
395
+ },
396
+ {
397
+ "id": "e231d947bcc70d4bf0fad231f8ff2a0ce520b844",
398
+ "message": "Bump version",
399
+ "tags": [
400
+ "0.3.5"
401
+ ]
402
+ },
403
+ {
404
+ "id": "b3d75ec63987368009942092de38f16dbd716e82",
405
+ "message": "Update packer:install to use 0.8.1"
406
+ },
407
+ {
408
+ "id": "468e7515ad88fa61c0f59a1a599d3da69ce549ce",
409
+ "message": "Bump version",
410
+ "tags": [
411
+ "0.3.4"
412
+ ]
413
+ },
414
+ {
415
+ "id": "671e874ef03fa9dd35f45f264a1fd60eafad5ac1",
416
+ "message": "Use Dir to find bin scripts in gemspec"
417
+ },
418
+ {
419
+ "id": "fbab43f58cc54d5ab58bd43293360b91e4b8fc49",
420
+ "message": "Add output capture from Packer to find AMI ids"
421
+ },
422
+ {
423
+ "id": "5816a03973e2c8ba734b3aea85cfda458bcdceee",
424
+ "message": "Add execution checks for Bundler and Vagrant"
425
+ },
426
+ {
427
+ "id": "52742381f8f3cfa8f5079d55439e0fa3c4b05521",
428
+ "message": "Add VERSION file to git repo while this is in development",
429
+ "tags": [
430
+ "0.3.3"
431
+ ]
432
+ },
433
+ {
434
+ "id": "d33519df2a10d134c454fa05a7a91e445cae7fb4",
435
+ "message": "Pass options from berks upload to berks local"
436
+ },
437
+ {
438
+ "id": "abafd9de16c6a77f989d33a00037060a80a73f11",
439
+ "message": "Run Berks install before upload. Upload requires a Berksfile.lock",
440
+ "tags": [
441
+ "0.3.2"
442
+ ]
443
+ },
444
+ {
445
+ "id": "6ad2938a70d3f0b1ff9578d116c88ea3e615b7e2",
446
+ "message": "Fix thor-scmversion invocation in cookbook tasks",
447
+ "tags": [
448
+ "0.3.1"
449
+ ]
450
+ },
451
+ {
452
+ "id": "51aa9de31c98873b101aeaeac3b83ce99c1169d8",
453
+ "message": "Add more tasks to wrap berkshelf, and vagrant",
454
+ "tags": [
455
+ "0.3.0"
456
+ ]
457
+ },
458
+ {
459
+ "id": "17a514cf3eedcb143472c4351cb84ca695bbd68a",
460
+ "message": "Add first packer tasks, seperate shared logic from tasks, complete ami tasks",
461
+ "tags": [
462
+ "0.2.0"
463
+ ]
464
+ },
465
+ {
466
+ "id": "7b11c43da2dd90f9cfd28f1e2d12590e716f4bfe",
467
+ "message": "Fix handling of multiple results",
468
+ "tags": [
469
+ "0.1.1"
470
+ ]
471
+ },
472
+ {
473
+ "id": "760040713d5b59981c639dd9523b7e2d8a24c8ba",
474
+ "message": "Basic Ubuntu iamge lookup",
475
+ "tags": [
476
+ "0.1.0"
477
+ ]
478
+ },
479
+ {
480
+ "id": "0893bfd3477c1373e2beeb53cf5f872ee70c0a91",
481
+ "message": "Starting Gem"
482
+ }
483
+ ]