ogre 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +20 -0
  4. data/.rubocop.yml +16 -0
  5. data/.travis.yml +3 -0
  6. data/Gemfile +4 -0
  7. data/README.md +102 -0
  8. data/Rakefile +18 -0
  9. data/bin/ogre +4 -0
  10. data/lib/ogre.rb +44 -0
  11. data/lib/ogre/associate.rb +57 -0
  12. data/lib/ogre/base.rb +21 -0
  13. data/lib/ogre/config.rb +18 -0
  14. data/lib/ogre/messages.rb +84 -0
  15. data/lib/ogre/org-create.rb +96 -0
  16. data/lib/ogre/org-delete.rb +29 -0
  17. data/lib/ogre/runner.rb +40 -0
  18. data/lib/ogre/set-private-key.rb +57 -0
  19. data/lib/ogre/skeletons/code_generator/files/default/chefignore +95 -0
  20. data/lib/ogre/skeletons/code_generator/files/default/cookbook_readmes/README-policy.md +9 -0
  21. data/lib/ogre/skeletons/code_generator/files/default/cookbook_readmes/README.md +54 -0
  22. data/lib/ogre/skeletons/code_generator/files/default/gitignore +16 -0
  23. data/lib/ogre/skeletons/code_generator/files/default/repo/README.md +66 -0
  24. data/lib/ogre/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +7 -0
  25. data/lib/ogre/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +3 -0
  26. data/lib/ogre/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +8 -0
  27. data/lib/ogre/skeletons/code_generator/files/default/repo/data_bags/README.md +58 -0
  28. data/lib/ogre/skeletons/code_generator/files/default/repo/data_bags/example/example_item.json +4 -0
  29. data/lib/ogre/skeletons/code_generator/files/default/repo/environments/README.md +9 -0
  30. data/lib/ogre/skeletons/code_generator/files/default/repo/environments/_default.json +9 -0
  31. data/lib/ogre/skeletons/code_generator/files/default/repo/environments/dev.json +21 -0
  32. data/lib/ogre/skeletons/code_generator/files/default/repo/environments/example.json +13 -0
  33. data/lib/ogre/skeletons/code_generator/files/default/repo/environments/int.json +21 -0
  34. data/lib/ogre/skeletons/code_generator/files/default/repo/environments/prod.json +21 -0
  35. data/lib/ogre/skeletons/code_generator/files/default/repo/environments/qa.json +21 -0
  36. data/lib/ogre/skeletons/code_generator/files/default/repo/environments/stage.json +21 -0
  37. data/lib/ogre/skeletons/code_generator/files/default/repo/roles/README.md +9 -0
  38. data/lib/ogre/skeletons/code_generator/files/default/repo/roles/active-base.json +12 -0
  39. data/lib/ogre/skeletons/code_generator/files/default/repo/roles/example.json +13 -0
  40. data/lib/ogre/skeletons/code_generator/files/default/repo/roles/loc_caeast.json +13 -0
  41. data/lib/ogre/skeletons/code_generator/files/default/repo/roles/loc_canada.json +13 -0
  42. data/lib/ogre/skeletons/code_generator/files/default/repo/roles/loc_cawest.json +13 -0
  43. data/lib/ogre/skeletons/code_generator/files/default/repo/roles/loc_useast.json +13 -0
  44. data/lib/ogre/skeletons/code_generator/files/default/repo/roles/loc_uswest.json +13 -0
  45. data/lib/ogre/skeletons/code_generator/metadata.rb +8 -0
  46. data/lib/ogre/skeletons/code_generator/recipes/repo.rb +52 -0
  47. data/lib/ogre/skeletons/code_generator/templates/default/LICENSE.all_rights.erb +3 -0
  48. data/lib/ogre/skeletons/code_generator/templates/default/LICENSE.apache2.erb +201 -0
  49. data/lib/ogre/skeletons/code_generator/templates/default/LICENSE.gplv2.erb +339 -0
  50. data/lib/ogre/skeletons/code_generator/templates/default/LICENSE.gplv3.erb +674 -0
  51. data/lib/ogre/skeletons/code_generator/templates/default/LICENSE.mit.erb +21 -0
  52. data/lib/ogre/skeletons/code_generator/templates/default/README.md.erb +4 -0
  53. data/lib/ogre/skeletons/code_generator/templates/default/cookbook_file.erb +0 -0
  54. data/lib/ogre/skeletons/code_generator/templates/default/knife.rb.erb +44 -0
  55. data/lib/ogre/skeletons/code_generator/templates/default/metadata.rb.erb +8 -0
  56. data/lib/ogre/skeletons/code_generator/templates/default/repo/gitignore.erb +11 -0
  57. data/lib/ogre/user-create.rb +40 -0
  58. data/lib/ogre/user-delete.rb +39 -0
  59. data/lib/ogre/version.rb +5 -0
  60. data/ogre.gemspec +45 -0
  61. data/spec/fixtures/client_key/dummy.pem +27 -0
  62. data/spec/fixtures/vcr_cassettes/associate-no-org.yml +65 -0
  63. data/spec/fixtures/vcr_cassettes/associate-no-user.yml +65 -0
  64. data/spec/fixtures/vcr_cassettes/associate-user-exists.yml +135 -0
  65. data/spec/fixtures/vcr_cassettes/associate.yml +406 -0
  66. data/spec/fixtures/vcr_cassettes/org-create-exists.yml +69 -0
  67. data/spec/fixtures/vcr_cassettes/org-create.yml +71 -0
  68. data/spec/fixtures/vcr_cassettes/org-delete-no-org.yml +61 -0
  69. data/spec/fixtures/vcr_cassettes/org-delete.yml +68 -0
  70. data/spec/fixtures/vcr_cassettes/set-private-key.yml +239 -0
  71. data/spec/fixtures/vcr_cassettes/user-create-bad-email.yml +66 -0
  72. data/spec/fixtures/vcr_cassettes/user-create-exists.yml +70 -0
  73. data/spec/fixtures/vcr_cassettes/user-create-short-password.yml +66 -0
  74. data/spec/fixtures/vcr_cassettes/user-create.yml +72 -0
  75. data/spec/fixtures/vcr_cassettes/user-delete-not-found.yml +61 -0
  76. data/spec/fixtures/vcr_cassettes/user-delete.yml +136 -0
  77. data/spec/ogre/associate_spec.rb +67 -0
  78. data/spec/ogre/org-create_spec.rb +52 -0
  79. data/spec/ogre/org-delete_spec.rb +34 -0
  80. data/spec/ogre/set-private-key_spec.rb +16 -0
  81. data/spec/ogre/user-create_spec.rb +58 -0
  82. data/spec/ogre/user-delete_spec.rb +34 -0
  83. data/spec/spec_helper.rb +16 -0
  84. metadata +349 -0
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) <%= year %> <%= copyright_holder %>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,4 @@
1
+ # <%= cookbook_name %>
2
+
3
+ TODO: Enter the cookbook description here.
4
+
@@ -0,0 +1,44 @@
1
+ #=====================================================================
2
+ # <%= org %>-chef/.chef/knife.rb
3
+ #
4
+ # <%= org %> Chef Knife Configuration
5
+ #
6
+ #---------------------------------------------------------------------
7
+ # Useful variables
8
+ #
9
+ current_dir = File.dirname(__FILE__)
10
+ user_email = `git config --get user.email`.delete!("\n")
11
+ home_dir = ENV['HOME'] || ENV['HOMEDRIVE']
12
+ org = "<%= org %>"
13
+ chef_server = "<%= chef_server_url %>"
14
+
15
+ knife_override = "#{home_dir}/.chef/knife_override.rb"
16
+
17
+ #---------------------------------------------------------------------
18
+ # Configuration directives
19
+ #
20
+
21
+ # Where is the chef server?
22
+ chef_server_url "#{chef_server}/organizations/#{org}"
23
+
24
+ # Logging defaults
25
+ log_level :info
26
+ log_location STDOUT
27
+
28
+ # USERNAME is UPPERCASE in Windows, but lowercase in the Chef server,
29
+ # so `downcase` it.
30
+ node_name ( ENV['USER'] || ENV['USERNAME'] ).downcase
31
+ client_key "#{home_dir}/.chef/#{node_name}_#{org}.pem"
32
+ cache_type 'BasicFile'
33
+ cache_options( :path => "#{home_dir}/.chef/checksums" )
34
+
35
+ # Validation, for use when bootstrapping nodes
36
+ validation_client_name "#{org}-validator"
37
+ validation_key "#{current_dir}/#{validation_client_name}.pem"
38
+
39
+ # We keep our cookbooks in separate repos under a ~/chef/cookbooks dir
40
+ cookbook_path [ "#{current_dir}/../../../cookbooks",
41
+ "#{current_dir}/../../../community" ]
42
+ cookbook_copyright <%=copyright_holder%>
43
+ cookbook_license "<%=license%>"
44
+ cookbook_email "<%=email%>"
@@ -0,0 +1,8 @@
1
+ name '<%= cookbook_name %>'
2
+ maintainer '<%= copyright_holder %>'
3
+ maintainer_email '<%= email %>'
4
+ license '<%= license %>'
5
+ description 'Installs/Configures <%= cookbook_name %>'
6
+ long_description 'Installs/Configures <%= cookbook_name %>'
7
+ version '0.1.0'
8
+
@@ -0,0 +1,11 @@
1
+ .rake_test_cache
2
+
3
+ ###
4
+ # Ignore Chef key files and secrets
5
+ ###
6
+ .chef/*.pem
7
+ .chef/encrypted_data_bag_secret
8
+ <%- if policy_only -%>
9
+ cookbooks/**
10
+ !cookbooks/README.md
11
+ <%- end -%>
@@ -0,0 +1,40 @@
1
+ module Ogre
2
+ # This is used to create a user in enterprise chef
3
+ class UserCreate < Ogre::Base
4
+ include Thor::Actions
5
+
6
+ # required
7
+ argument :username, type: :string
8
+ argument :first_name, type: :string
9
+ argument :last_name, type: :string
10
+ argument :email, type: :string
11
+ argument :password, type: :string
12
+
13
+ # Create chef user
14
+ def user_create
15
+ # create user
16
+ user_json = {
17
+ username: username,
18
+ first_name: first_name,
19
+ last_name: last_name,
20
+ display_name: "#{first_name} #{last_name}",
21
+ email: email,
22
+ password: password
23
+ }
24
+
25
+ chef_rest.post_rest('/users', user_json)
26
+
27
+ puts "'#{username}' has been created."
28
+
29
+ # TODO: print/save pem key?
30
+
31
+ rescue Net::HTTPServerException => e
32
+ # already exists -- i will allow it
33
+ if e.response.code == '409'
34
+ puts "'#{username}' already exists."
35
+ else
36
+ raise e
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,39 @@
1
+ module Ogre
2
+ # This is used to delete a user from enterprise chef
3
+ class UserDelete < Ogre::Base
4
+ include Thor::Actions
5
+
6
+ # required
7
+ argument :username, type: :string
8
+
9
+ # optional
10
+ class_option :force, aliases: '-f', default: false, type: :boolean, desc: DESC_FORCE
11
+
12
+ # Delete user from enterprise chef
13
+ def user_delete
14
+ # prompt user
15
+ # rubocop:disable LineLength
16
+ exit unless options[:force] || HighLine.agree("Deleting '#{username}' is permanent. Do you want to proceed? (y/n)")
17
+ # rubocop:enable LineLength
18
+
19
+ # disassociate from all orgs
20
+ orgs = chef_rest.get_rest("users/#{username}/organizations")
21
+ org_names = orgs.map { |o| o['organization']['name'] }
22
+ org_names.each do |org|
23
+ puts chef_rest.delete_rest("organizations/#{org}/users/#{username}")
24
+ end
25
+
26
+ # delete user
27
+ chef_rest.delete_rest("users/#{username}")
28
+ puts "'#{username}' has been deleted."
29
+
30
+ rescue Net::HTTPServerException => e
31
+ # user not found -- i will allow it
32
+ if e.response.code == '404'
33
+ puts "'#{username}' not found."
34
+ else
35
+ raise e
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,5 @@
1
+ # simple gem version number tracking
2
+ module Ogre
3
+ # version
4
+ VERSION = '0.1.0'
5
+ end
data/ogre.gemspec ADDED
@@ -0,0 +1,45 @@
1
+ # rubocop:disable all
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ogre/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'ogre'
8
+ spec.version = Ogre::VERSION
9
+ spec.authors = %w('Joe Nguyen')
10
+ spec.email = %w('joe.nguyen@activenetwork.com')
11
+ spec.summary = 'Automated generation of enterprise chef organizations'
12
+ spec.description = 'Command line tool to automate creation of chef orgs, chef policy repositories, and validation key integration with vco'
13
+ spec.homepage = 'https://github.com/activenetwork-automation/ogre'
14
+ spec.license = 'Apache 2.0'
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.7.4'
22
+ spec.add_development_dependency 'rake', '~> 10.0'
23
+ spec.add_development_dependency 'rubocop', '~> 0.30.1'
24
+ # spec.add_development_dependency 'aruba', '>= 0.6'
25
+ spec.add_development_dependency 'rspec', '>= 3.0'
26
+ spec.add_development_dependency 'coveralls', '>= 0.7.9'
27
+ spec.add_development_dependency 'guard', '>= 2.10.0'
28
+ spec.add_development_dependency 'guard-rubocop', '>= 1.1.0'
29
+ # growl functionality in Guardfile depends on growl-notify
30
+ spec.add_development_dependency 'growl', '>= 1.0'
31
+ spec.add_development_dependency 'yard', '>= 0.8'
32
+ spec.add_development_dependency 'webmock', '>= 1.21.0'
33
+ spec.add_development_dependency 'vcr', '>= 2.9.3'
34
+
35
+ spec.add_dependency 'thor', '~> 0.19.1'
36
+ spec.add_dependency 'chef-dk', '~> 0.5.1'
37
+ spec.add_dependency 'vcoworkflows', '~> 0.1.2'
38
+ end
39
+ # rubocop:enable all
40
+
41
+ # spec.add_development_dependency('chef')
42
+ # spec.add_development_dependency('knife-vsphere')
43
+ #
44
+ # spec.add_dependency('open4')
45
+ # spec.add_dependency('english')
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEowIBAAKCAQEA3SqsHlVmqP6OxcMBZm96sObwGHK3pM7LHl6F8TZ3poPzFgut
3
+ SVt2sBfHQZC2vXIN/lnwlExtixzttgd9F4VkGij5LX/crLZ8JV7he0/+c0Y/slAg
4
+ dqe2AMRNuxAL+s/FpqVnB7iiePIxlA9sDFhsYyHz6QtwzIRAaxnlC/ZWzJCYRHxE
5
+ hIwZMC1oZsPdSc9k5D60vIxJLHwQ/OOIhVjk6h+szS3uRUYpHiyywF09lwaCeKR0
6
+ FqxqSBb5yJv9lzLqhJkhHM6t0y88rNWggwj3nE3YmlCHcp/B81BTbyXT2EpF6mbt
7
+ CQbmDO118YHDDuXGiTuSimGx9oFyw9tMe8Nx/QIBIwKCAQEAl6g7goO0HBxEpN19
8
+ TY5FgJ5bfnqMjkSoidpqeYRvTZxO6ouqBmqah2DDJaUPl9kuKsFUgvKUQiJ3Hbv+
9
+ AYAKIJEf5K9yv5MTTNNYyZXwTwuZZFQzhJBCSast/J1KCxIhIdCBKd2xPP3Y2o47
10
+ di4BLginQLdjSmlQvngoCDPjv3fRNhvyoTNvKoiCXWFbw+Rnax1UpzAGL1u6JHjE
11
+ dfLfRmJNdnOQVpnfUQ2ELoF6iTTB2/mJsbDcfAmKIGeWmXFa006f1RO3YxS+925t
12
+ /7eoyPEAJ/fRBBzUZrkhoVjGaZXgEgmOw3k3rVQFbixZf0FXQpehwXyE4WCkY3rc
13
+ F1AZawKBgQD6Rq/u9S8xhR9nvibntCqko/jBhqqBD2hhXh+w0WWSZcISLPoKNC1F
14
+ L3ThiuBEm/jRpbxWJtfMNd0jcd4Nad8EoAHDxI7VYfsoYwVm2xnUe5ynAtpReOCC
15
+ 2t6xMNdYIy4X+CtkM/1uYFZkGAb3nN1a9ZvQoh1Crb+5pxcIKsYuTwKBgQDiOY4+
16
+ ZEc64lxCixmlF/epbrstF2Zpwq3q1D5j3UZ3kw4+/iCxks3TmIQbHFV7naDAx3GK
17
+ d11ciAFCPNGJ4uPsGxoJlthtALXTIPnZPa33plG8B9d6fmqJV/j73a0FBcxHLULt
18
+ 9/ixJSc0mM9zmHPMUoKgrhmC1WoetlvDWahz8wKBgQDzIBie/M7CZA/hHx56rwTa
19
+ c2atXj87i090h1H8OSDXW4lTfCYYinUeoyEVnNncP76Cg75FD8pRWOVy46SCDxMp
20
+ EHa+LKgCfHBTHl0E1NdDcMQP9CSJqJ+VDyF47Z392Qg0iq3PDe7gQFPsNJkNy5Uz
21
+ ygUT0K61zVspYHzGGuxnfwKBgQCbICcGNiI3AZ5Zg/RT8y17fyFDfcKRqhDbijlp
22
+ DMKbIwJ0VnzRiTyuWfQv2Ooo4R3GBRqoF1X2TqHHBSH4Jo2pNyfMD6pZX5KfZxG5
23
+ iWFZXBrKFAF4kTMcWZTJ9xeOamAwzpRLaDWAyQTw3dAUwE9niQkduTYQkldlhFwu
24
+ LtnpGwKBgHblG0jaKbPGeE2QANZ1koiOoOHV007tGunmq/Bv2paRpgn/yzjpU/l8
25
+ oLWSvbabIU3ANxu6Ich6OGTikQqo+b+Pi0v5lv66nSb1lZSGk2NIll3SEF4/rmx/
26
+ 5ijGogq7y/I62ZoYUy4oZ/tKVQMqIgn3tGJ3sGImxeSwfKzxfLer
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,65 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://chef.server/organizations/non-existent-org/association_requests
6
+ body:
7
+ encoding: ASCII-8BIT
8
+ string: '{"user":"test"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ Accept:
13
+ - application/json
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ X-Ops-Sign:
17
+ - algorithm=sha1;version=1.0;
18
+ X-Ops-Userid: pivotal
19
+ X-Ops-Timestamp:
20
+ - '2015-04-29T17:35:33Z'
21
+ X-Ops-Content-Hash:
22
+ - "{{X-Ops-Content-Hash}}"
23
+ X-Ops-Authorization-1:
24
+ - "{{X-Ops-Authorization-1}}"
25
+ X-Ops-Authorization-2:
26
+ - "{{X-Ops-Authorization-2}}"
27
+ X-Ops-Authorization-3:
28
+ - "{{X-Ops-Authorization-3}}"
29
+ X-Ops-Authorization-4:
30
+ - "{{X-Ops-Authorization-4}}"
31
+ X-Ops-Authorization-5:
32
+ - "{{X-Ops-Authorization-5}}"
33
+ X-Ops-Authorization-6:
34
+ - "{{X-Ops-Authorization-6}}"
35
+ Host:
36
+ - chef.server:443
37
+ X-Remote-Request-Id:
38
+ - 6c5bd7e8-44f4-4aab-aaa3-c05d6376bb3f
39
+ Content-Length:
40
+ - '15'
41
+ X-Chef-Version:
42
+ - 12.3.0
43
+ User-Agent:
44
+ - ruby
45
+ response:
46
+ status:
47
+ code: 404
48
+ message: Object Not Found
49
+ headers:
50
+ Server:
51
+ - ngx_openresty/1.4.3.6
52
+ Date:
53
+ - Wed, 29 Apr 2015 17:35:32 GMT
54
+ Content-Length:
55
+ - '61'
56
+ Connection:
57
+ - keep-alive
58
+ X-Ops-Api-Info:
59
+ - flavor=cs;version=12.0.0;oc_erchef=1.5.0
60
+ body:
61
+ encoding: UTF-8
62
+ string: '{"error":["organization ''non-existent-org'' does not exist."]}'
63
+ http_version:
64
+ recorded_at: Wed, 29 Apr 2015 17:35:33 GMT
65
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,65 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://chef.server/organizations/my-org-name/association_requests
6
+ body:
7
+ encoding: ASCII-8BIT
8
+ string: '{"user":"non-existent-user"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ Accept:
13
+ - application/json
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ X-Ops-Sign:
17
+ - algorithm=sha1;version=1.0;
18
+ X-Ops-Userid: pivotal
19
+ X-Ops-Timestamp:
20
+ - '2015-04-29T17:41:28Z'
21
+ X-Ops-Content-Hash:
22
+ - "{{X-Ops-Content-Hash}}"
23
+ X-Ops-Authorization-1:
24
+ - "{{X-Ops-Authorization-1}}"
25
+ X-Ops-Authorization-2:
26
+ - "{{X-Ops-Authorization-2}}"
27
+ X-Ops-Authorization-3:
28
+ - "{{X-Ops-Authorization-3}}"
29
+ X-Ops-Authorization-4:
30
+ - "{{X-Ops-Authorization-4}}"
31
+ X-Ops-Authorization-5:
32
+ - "{{X-Ops-Authorization-5}}"
33
+ X-Ops-Authorization-6:
34
+ - "{{X-Ops-Authorization-6}}"
35
+ Host:
36
+ - chef.server:443
37
+ X-Remote-Request-Id:
38
+ - c2f3113f-655f-4ecb-baa5-e572f0d1aa9e
39
+ Content-Length:
40
+ - '28'
41
+ X-Chef-Version:
42
+ - 12.3.0
43
+ User-Agent:
44
+ - ruby
45
+ response:
46
+ status:
47
+ code: 404
48
+ message: Object Not Found
49
+ headers:
50
+ Server:
51
+ - ngx_openresty/1.4.3.6
52
+ Date:
53
+ - Wed, 29 Apr 2015 17:41:27 GMT
54
+ Content-Length:
55
+ - '49'
56
+ Connection:
57
+ - keep-alive
58
+ X-Ops-Api-Info:
59
+ - flavor=cs;version=12.0.0;oc_erchef=1.5.0
60
+ body:
61
+ encoding: UTF-8
62
+ string: '{"error":"Could not find user non-existent-user"}'
63
+ http_version:
64
+ recorded_at: Wed, 29 Apr 2015 17:41:28 GMT
65
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,135 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://chef.server/organizations/my-org-name/association_requests
6
+ body:
7
+ encoding: ASCII-8BIT
8
+ string: '{"user":"test"}'
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ Accept:
13
+ - application/json
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
16
+ X-Ops-Sign:
17
+ - algorithm=sha1;version=1.0;
18
+ X-Ops-Userid: pivotal
19
+ X-Ops-Timestamp:
20
+ - '2015-04-29T17:19:58Z'
21
+ X-Ops-Content-Hash:
22
+ - "{{X-Ops-Content-Hash}}"
23
+ X-Ops-Authorization-1:
24
+ - "{{X-Ops-Authorization-1}}"
25
+ X-Ops-Authorization-2:
26
+ - "{{X-Ops-Authorization-2}}"
27
+ X-Ops-Authorization-3:
28
+ - "{{X-Ops-Authorization-3}}"
29
+ X-Ops-Authorization-4:
30
+ - "{{X-Ops-Authorization-4}}"
31
+ X-Ops-Authorization-5:
32
+ - "{{X-Ops-Authorization-5}}"
33
+ X-Ops-Authorization-6:
34
+ - "{{X-Ops-Authorization-6}}"
35
+ Host:
36
+ - chef.server:443
37
+ X-Remote-Request-Id:
38
+ - d32e6397-0c4a-4649-813d-25efddacc6ce
39
+ Content-Length:
40
+ - '15'
41
+ X-Chef-Version:
42
+ - 12.3.0
43
+ User-Agent:
44
+ - ruby
45
+ response:
46
+ status:
47
+ code: 409
48
+ message: Conflict
49
+ headers:
50
+ Server:
51
+ - ngx_openresty/1.4.3.6
52
+ Date:
53
+ - Wed, 29 Apr 2015 17:19:57 GMT
54
+ Content-Type:
55
+ - application/json
56
+ Content-Length:
57
+ - '43'
58
+ Connection:
59
+ - keep-alive
60
+ X-Ops-Api-Info:
61
+ - flavor=cs;version=12.0.0;oc_erchef=1.5.0
62
+ Location:
63
+ - http://chef.server/organizations/my-org-name/association_requests/invalid_path
64
+ body:
65
+ encoding: UTF-8
66
+ string: '{"error":"The association already exists."}'
67
+ http_version:
68
+ recorded_at: Wed, 29 Apr 2015 17:19:58 GMT
69
+ - request:
70
+ method: get
71
+ uri: https://chef.server/organizations/my-org-name/groups/users
72
+ body:
73
+ encoding: US-ASCII
74
+ string: ''
75
+ headers:
76
+ Accept:
77
+ - application/json
78
+ Accept-Encoding:
79
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
80
+ X-Ops-Sign:
81
+ - algorithm=sha1;version=1.0;
82
+ X-Ops-Userid: pivotal
83
+ X-Ops-Timestamp:
84
+ - '2015-04-29T17:19:58Z'
85
+ X-Ops-Content-Hash:
86
+ - "{{X-Ops-Content-Hash}}"
87
+ X-Ops-Authorization-1:
88
+ - "{{X-Ops-Authorization-1}}"
89
+ X-Ops-Authorization-2:
90
+ - "{{X-Ops-Authorization-2}}"
91
+ X-Ops-Authorization-3:
92
+ - "{{X-Ops-Authorization-3}}"
93
+ X-Ops-Authorization-4:
94
+ - "{{X-Ops-Authorization-4}}"
95
+ X-Ops-Authorization-5:
96
+ - "{{X-Ops-Authorization-5}}"
97
+ X-Ops-Authorization-6:
98
+ - "{{X-Ops-Authorization-6}}"
99
+ Host:
100
+ - chef.server:443
101
+ X-Remote-Request-Id:
102
+ - d32e6397-0c4a-4649-813d-25efddacc6ce
103
+ X-Chef-Version:
104
+ - 12.3.0
105
+ User-Agent:
106
+ - ruby
107
+ response:
108
+ status:
109
+ code: 200
110
+ message: OK
111
+ headers:
112
+ Server:
113
+ - ngx_openresty/1.4.3.6
114
+ Date:
115
+ - Wed, 29 Apr 2015 17:19:57 GMT
116
+ Content-Type:
117
+ - application/json
118
+ Transfer-Encoding:
119
+ - chunked
120
+ Connection:
121
+ - keep-alive
122
+ X-Ops-Api-Info:
123
+ - flavor=cs;version=12.0.0;oc_erchef=1.5.0
124
+ Content-Encoding:
125
+ - gzip
126
+ body:
127
+ encoding: ASCII-8BIT
128
+ string: !binary |-
129
+ H4sIAAAAAAAAA32OQQrCMBBF7zLrFpwGovYq4iKTzJRC25QkLYh4d5Poom6c
130
+ zed/Hrx5grHJhwj9DdZx98lM0EDimHJskQPcP/mfsNPISypMxofgt7Xyp8Oh
131
+ c/asiNAZTfoqyFZnxxHpBBU7QUISEtGduuji92FYzMzQw/xoc2lra+A7ljdj
132
+ rtX7s73e4g3mO98AAAA=
133
+ http_version:
134
+ recorded_at: Wed, 29 Apr 2015 17:19:58 GMT
135
+ recorded_with: VCR 2.9.3