ridley 0.11.0.rc1 → 0.11.1

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 (42) hide show
  1. data/.travis.yml +3 -2
  2. data/Gemfile +1 -0
  3. data/Guardfile +2 -2
  4. data/Thorfile +2 -2
  5. data/lib/ridley/chef.rb +1 -0
  6. data/lib/ridley/chef/chefignore.rb +76 -0
  7. data/lib/ridley/chef/cookbook.rb +17 -7
  8. data/lib/ridley/chef/cookbook/metadata.rb +8 -0
  9. data/lib/ridley/chef_objects/cookbook_object.rb +21 -37
  10. data/lib/ridley/chef_objects/data_bag_item_obect.rb +9 -0
  11. data/lib/ridley/client.rb +2 -2
  12. data/lib/ridley/connection.rb +12 -6
  13. data/lib/ridley/errors.rb +14 -0
  14. data/lib/ridley/host_connector.rb +10 -3
  15. data/lib/ridley/resource.rb +25 -5
  16. data/lib/ridley/resources/cookbook_resource.rb +19 -9
  17. data/lib/ridley/resources/data_bag_item_resource.rb +8 -4
  18. data/lib/ridley/resources/search_resource.rb +5 -5
  19. data/lib/ridley/sandbox_uploader.rb +6 -0
  20. data/lib/ridley/version.rb +1 -1
  21. data/ridley.gemspec +1 -1
  22. data/spec/acceptance/client_resource_spec.rb +44 -62
  23. data/spec/acceptance/cookbook_resource_spec.rb +27 -0
  24. data/spec/acceptance/data_bag_item_resource_spec.rb +36 -54
  25. data/spec/acceptance/data_bag_resource_spec.rb +9 -21
  26. data/spec/acceptance/environment_resource_spec.rb +34 -63
  27. data/spec/acceptance/node_resource_spec.rb +27 -47
  28. data/spec/acceptance/role_resource_spec.rb +27 -67
  29. data/spec/acceptance/sandbox_resource_spec.rb +3 -13
  30. data/spec/acceptance/search_resource_spec.rb +5 -15
  31. data/spec/fixtures/chefignore +8 -0
  32. data/spec/spec_helper.rb +15 -1
  33. data/spec/support/chef_server.rb +77 -0
  34. data/spec/unit/ridley/chef/chefignore_spec.rb +40 -0
  35. data/spec/unit/ridley/chef/cookbook_spec.rb +30 -2
  36. data/spec/unit/ridley/chef_objects/cookbook_object_spec.rb +3 -3
  37. data/spec/unit/ridley/connection_spec.rb +1 -2
  38. data/spec/unit/ridley/resources/cookbook_resource_spec.rb +85 -48
  39. data/spec/unit/ridley/resources/data_bag_resource_spec.rb +1 -1
  40. data/spec/unit/ridley/resources/search_resource_spec.rb +39 -2
  41. data/spec/unit/ridley/sandbox_uploader_spec.rb +25 -0
  42. metadata +19 -7
@@ -1,24 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "DataBag API operations", type: "acceptance" do
4
- let(:server_url) { "https://api.opscode.com/organizations/ridley" }
4
+ let(:server_url) { Ridley::RSpec::ChefServer.server_url }
5
5
  let(:client_name) { "reset" }
6
- let(:client_key) { "/Users/reset/.chef/reset.pem" }
7
-
8
- let(:connection) do
9
- Ridley.new(
10
- server_url: server_url,
11
- client_name: client_name,
12
- client_key: client_key
13
- )
14
- end
15
-
16
- before(:all) { WebMock.allow_net_connect! }
17
- after(:all) { WebMock.disable_net_connect! }
18
-
19
- before(:each) do
20
- connection.data_bag.delete_all
21
- end
6
+ let(:client_key) { fixtures_path.join('reset.pem').to_s }
7
+ let(:connection) { Ridley.new(server_url: server_url, client_name: client_name, client_key: client_key) }
22
8
 
23
9
  describe "listing data bags" do
24
10
  context "when no data bags exist" do
@@ -28,9 +14,9 @@ describe "DataBag API operations", type: "acceptance" do
28
14
  end
29
15
 
30
16
  context "when the server has data bags" do
31
- before(:each) do
32
- connection.data_bag.create(name: "ridley-one")
33
- connection.data_bag.create(name: "ridley-two")
17
+ before do
18
+ chef_data_bag("ridley-one")
19
+ chef_data_bag("ridley-two")
34
20
  end
35
21
 
36
22
  it "returns an array of data bags" do
@@ -44,6 +30,8 @@ describe "DataBag API operations", type: "acceptance" do
44
30
  end
45
31
 
46
32
  describe "creating a data bag" do
47
- pending
33
+ it "returns a Ridley::DataBagObject" do
34
+ connection.data_bag.create(name: "ridley-one").should be_a(Ridley::DataBagObject)
35
+ end
48
36
  end
49
37
  end
@@ -1,63 +1,46 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Environment API operations", type: "acceptance" do
4
- let(:server_url) { "https://api.opscode.com/organizations/ridley" }
4
+ let(:server_url) { Ridley::RSpec::ChefServer.server_url }
5
5
  let(:client_name) { "reset" }
6
- let(:client_key) { "/Users/reset/.chef/reset.pem" }
7
- let(:resource) { double('environment-resource') }
8
-
9
- let(:connection) do
10
- Ridley.new(
11
- server_url: server_url,
12
- client_name: client_name,
13
- client_key: client_key
14
- )
15
- end
16
-
17
- before(:all) { WebMock.allow_net_connect! }
18
- after(:all) { WebMock.disable_net_connect! }
19
-
20
- before(:each) do
21
- connection.environment.delete_all
22
- end
6
+ let(:client_key) { fixtures_path.join('reset.pem').to_s }
7
+ let(:connection) { Ridley.new(server_url: server_url, client_name: client_name, client_key: client_key) }
23
8
 
24
9
  describe "finding an environment" do
25
- let(:target) { Ridley::EnvironmentObject.new(resource, name: "ridley-test-env") }
10
+ before { chef_environment("ridley-test-env") }
26
11
 
27
- before(:each) do
28
- connection.environment.create(target)
12
+ it "returns a valid Ridley::EnvironmentObject object" do
13
+ connection.environment.find("ridley-test-env").should be_a(Ridley::EnvironmentObject)
29
14
  end
15
+ end
30
16
 
17
+ describe "creating an environment" do
31
18
  it "returns a valid Ridley::EnvironmentObject object" do
32
- connection.sync do
33
- obj = environment.find(target)
19
+ obj = connection.environment.create(name: "ridley-test-env", description: "a testing env for ridley")
34
20
 
35
- obj.should be_a(Ridley::EnvironmentObject)
36
- obj.should be_valid
37
- end
21
+ obj.should be_a(Ridley::EnvironmentObject)
22
+ end
23
+
24
+ it "adds an environment to the chef server" do
25
+ old = connection.environment.all.length
26
+ connection.environment.create(name: "ridley")
27
+ connection.environment.all.should have(old + 1).item
38
28
  end
39
29
  end
40
30
 
41
- describe "creating an environment" do
42
- let(:target) do
43
- Ridley::EnvironmentObject.new(
44
- resource,
45
- name: "ridley-test-env",
46
- description: "a testing environment for ridley"
47
- )
31
+ describe "deleting an environment" do
32
+ before { chef_environment("ridley-env") }
33
+
34
+ it "returns a Ridley::EnvironmentObject object" do
35
+ connection.environment.delete("ridley-env").should be_a(Ridley::EnvironmentObject)
48
36
  end
49
37
 
50
- it "returns a valid Ridley::EnvironmentObject object" do
51
- connection.sync do
52
- obj = environment.create(target)
38
+ it "removes the environment from the server" do
39
+ connection.environment.delete("ridley-env")
53
40
 
54
- obj.should be_a(Ridley::EnvironmentObject)
55
- obj.should be_valid
56
- end
41
+ connection.environment.find("ridley-env").should be_nil
57
42
  end
58
- end
59
43
 
60
- describe "deleting an environment" do
61
44
  it "raises Ridley::Errors::HTTPMethodNotAllowed when attempting to delete the '_default' environment" do
62
45
  lambda {
63
46
  connection.environment.delete("_default")
@@ -66,11 +49,9 @@ describe "Environment API operations", type: "acceptance" do
66
49
  end
67
50
 
68
51
  describe "deleting all environments" do
69
- before(:each) do
70
- connection.sync do
71
- environment.create(name: "ridley-one")
72
- environment.create(name: "ridley-two")
73
- end
52
+ before do
53
+ chef_environment("ridley-one")
54
+ chef_environment("ridley-two")
74
55
  end
75
56
 
76
57
  it "returns an array of Ridley::EnvironmentObject objects" do
@@ -78,12 +59,9 @@ describe "Environment API operations", type: "acceptance" do
78
59
  end
79
60
 
80
61
  it "deletes all environments but '_default' from the remote" do
81
- connection.sync do
82
- environment.delete_all
62
+ connection.environment.delete_all
83
63
 
84
- environment.all.should have(1).clients
85
- environment.find("_default").should_not be_nil
86
- end
64
+ connection.environment.all.should have(1).item
87
65
  end
88
66
  end
89
67
 
@@ -94,21 +72,14 @@ describe "Environment API operations", type: "acceptance" do
94
72
  end
95
73
 
96
74
  describe "updating an environment" do
97
- let(:target) { Ridley::EnvironmentObject.new(resource, name: "ridley-test-env") }
75
+ before { chef_environment("ridley-env") }
76
+ let(:target ) { connection.environment.find("ridley-env") }
98
77
 
99
- before(:each) do
100
- connection.environment.create(target)
101
- end
102
-
103
- it "saves a new 'description'" do
78
+ it "saves a new #description" do
104
79
  target.description = description = "ridley testing environment"
105
80
 
106
- connection.sync do
107
- environment.update(target)
108
- obj = environment.find(target)
109
-
110
- obj.description.should eql(description)
111
- end
81
+ connection.environment.update(target)
82
+ target.reload.description.should eql(description)
112
83
  end
113
84
 
114
85
  it "saves a new set of 'default_attributes'" do
@@ -1,48 +1,30 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Node API operations", type: "acceptance" do
4
- let(:server_url) { "https://api.opscode.com/organizations/ridley" }
4
+ let(:server_url) { Ridley::RSpec::ChefServer.server_url }
5
5
  let(:client_name) { "reset" }
6
- let(:client_key) { "/Users/reset/.chef/reset.pem" }
7
- let(:resource) { double('node-resource') }
8
-
9
- let(:connection) do
10
- Ridley.new(
11
- server_url: server_url,
12
- client_name: client_name,
13
- client_key: client_key
14
- )
15
- end
16
-
17
- before(:all) { WebMock.allow_net_connect! }
18
- after(:all) { WebMock.disable_net_connect! }
19
-
20
- before(:each) do
21
- connection.node.delete_all
22
- end
6
+ let(:client_key) { fixtures_path.join('reset.pem').to_s }
7
+ let(:connection) { Ridley.new(server_url: server_url, client_name: client_name, client_key: client_key) }
23
8
 
24
9
  describe "finding a node" do
25
- let(:target) { Ridley::NodeObject.new(resource, name: "ridley-one") }
10
+ let(:node_name) { "ridley.localhost" }
11
+ before { chef_node(node_name) }
26
12
 
27
- before(:each) do
28
- connection.node.create(target)
29
- end
30
-
31
- it "returns a Ridley::NodeResource object" do
32
- connection.node.find(target.name).should eql(target)
13
+ it "returns a Ridley::NodeObject" do
14
+ connection.node.find(node_name).should be_a(Ridley::NodeObject)
33
15
  end
34
16
  end
35
17
 
36
18
  describe "creating a node" do
37
- let(:target) { Ridley::NodeObject.new(resource, name: "ridley-one") }
19
+ let(:node_name) { "ridley.localhost" }
38
20
 
39
21
  it "returns a new Ridley::NodeObject object" do
40
- connection.node.create(target).should eql(target)
22
+ connection.node.create(name: node_name).should be_a(Ridley::NodeObject)
41
23
  end
42
24
 
43
25
  it "adds a new node to the server" do
44
26
  connection.sync do
45
- node.create(target)
27
+ node.create(name: node_name)
46
28
 
47
29
  node.all.should have(1).node
48
30
  end
@@ -50,26 +32,28 @@ describe "Node API operations", type: "acceptance" do
50
32
  end
51
33
 
52
34
  describe "deleting a node" do
53
- let(:target) { Ridley::NodeObject.new(resource, name: "ridley-one") }
54
-
55
- before(:each) do
56
- connection.node.create(target)
57
- end
35
+ let(:node_name) { "ridley.localhost" }
36
+ before { chef_node(node_name) }
58
37
 
59
- it "returns the deleted object" do
60
- connection.node.delete(target).should eql(target)
38
+ it "returns a Ridley::NodeObject" do
39
+ connection.node.delete(node_name).should be_a(Ridley::NodeObject)
61
40
  end
62
41
 
63
42
  it "removes the node from the server" do
64
43
  connection.sync do
65
- node.delete(target)
44
+ node.delete(node_name)
66
45
 
67
- node.find(target).should be_nil
46
+ node.find(node_name).should be_nil
68
47
  end
69
48
  end
70
49
  end
71
50
 
72
51
  describe "deleting all nodes" do
52
+ before do
53
+ chef_node("ridley.localhost")
54
+ chef_node("motherbrain.localhost")
55
+ end
56
+
73
57
  it "deletes all nodes from the remote server" do
74
58
  connection.sync do
75
59
  node.delete_all
@@ -80,11 +64,9 @@ describe "Node API operations", type: "acceptance" do
80
64
  end
81
65
 
82
66
  describe "listing all nodes" do
83
- before(:each) do
84
- connection.sync do
85
- node.create(name: "ridley-one")
86
- node.create(name: "ridley-two")
87
- end
67
+ before do
68
+ chef_node("ridley.localhost")
69
+ chef_node("motherbrain.localhost")
88
70
  end
89
71
 
90
72
  it "returns an array of Ridley::NodeObject" do
@@ -98,11 +80,9 @@ describe "Node API operations", type: "acceptance" do
98
80
  end
99
81
 
100
82
  describe "updating a node" do
101
- let(:target) { Ridley::NodeObject.new(resource, name: "ridley-one") }
102
-
103
- before(:each) do
104
- connection.node.create(target)
105
- end
83
+ let(:node_name) { "ridley.localhost" }
84
+ before { chef_node(node_name) }
85
+ let(:target) { connection.node.find(node_name) }
106
86
 
107
87
  it "returns the updated node" do
108
88
  connection.node.update(target).should eql(target)
@@ -1,58 +1,30 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe "Role API operations", type: "acceptance" do
4
- let(:server_url) { "https://api.opscode.com/organizations/ridley" }
4
+ let(:server_url) { Ridley::RSpec::ChefServer.server_url }
5
5
  let(:client_name) { "reset" }
6
- let(:client_key) { "/Users/reset/.chef/reset.pem" }
7
- let(:resource) { double('role-resource') }
8
-
9
- let(:connection) do
10
- Ridley.new(
11
- server_url: server_url,
12
- client_name: client_name,
13
- client_key: client_key
14
- )
15
- end
16
-
17
- before(:all) { WebMock.allow_net_connect! }
18
- after(:all) { WebMock.disable_net_connect! }
19
-
20
- before(:each) { connection.role.delete_all }
6
+ let(:client_key) { fixtures_path.join('reset.pem').to_s }
7
+ let(:connection) { Ridley.new(server_url: server_url, client_name: client_name, client_key: client_key) }
21
8
 
22
9
  describe "finding a role" do
23
- let(:target) do
24
- Ridley::RoleObject.new(
25
- resource,
26
- name: "ridley-test",
27
- description: "a testing role for ridley"
28
- )
29
- end
10
+ let(:role_name) { "ridley-role" }
11
+ before { chef_role(role_name) }
30
12
 
31
- before(:each) do
32
- connection.role.create(target)
33
- end
34
-
35
- it "returns the target Ridley::RoleObject from the server" do
36
- connection.role.find(target.name).should eql(target)
13
+ it "returns a Ridley::RoleObject" do
14
+ connection.role.find(role_name).should be_a(Ridley::RoleObject)
37
15
  end
38
16
  end
39
17
 
40
18
  describe "creating a role" do
41
- let(:target) do
42
- Ridley::RoleObject.new(
43
- resource,
44
- name: "ridley-test",
45
- description: "a testing role for ridley"
46
- )
47
- end
19
+ let(:role_name) { "ridley-role" }
48
20
 
49
21
  it "returns a new Ridley::RoleObject" do
50
- connection.role.create(target).should eql(target)
22
+ connection.role.create(name: role_name).should be_a(Ridley::RoleObject)
51
23
  end
52
24
 
53
25
  it "adds a new role to the server" do
54
26
  connection.sync do
55
- role.create(target)
27
+ role.create(name: role_name)
56
28
 
57
29
  role.all.should have(1).role
58
30
  end
@@ -60,31 +32,28 @@ describe "Role API operations", type: "acceptance" do
60
32
  end
61
33
 
62
34
  describe "deleting a role" do
63
- let(:target) do
64
- Ridley::RoleObject.new(
65
- resource,
66
- name: "ridley-role-one"
67
- )
68
- end
69
-
70
- before(:each) do
71
- connection.role.create(target)
72
- end
35
+ let(:role_name) { "ridley-role" }
36
+ before { chef_role(role_name) }
73
37
 
74
38
  it "returns the deleted Ridley::RoleObject resource" do
75
- connection.role.delete(target).should eql(target)
39
+ connection.role.delete(role_name).should be_a(Ridley::RoleObject)
76
40
  end
77
41
 
78
42
  it "removes the role from the server" do
79
43
  connection.sync do
80
- role.delete(target)
44
+ role.delete(role_name)
81
45
 
82
- role.find(target).should be_nil
46
+ role.find(role_name).should be_nil
83
47
  end
84
48
  end
85
49
  end
86
50
 
87
51
  describe "deleting all roles" do
52
+ before do
53
+ chef_role("role_one")
54
+ chef_role("role_two")
55
+ end
56
+
88
57
  it "deletes all nodes from the remote server" do
89
58
  connection.sync do
90
59
  role.delete_all
@@ -95,14 +64,12 @@ describe "Role API operations", type: "acceptance" do
95
64
  end
96
65
 
97
66
  describe "listing all roles" do
98
- before(:each) do
99
- connection.sync do
100
- role.create(name: "jamie")
101
- role.create(name: "winsor")
102
- end
67
+ before do
68
+ chef_role("role_one")
69
+ chef_role("role_two")
103
70
  end
104
71
 
105
- it "should return an array of Ridley::RoleResource objects" do
72
+ it "should return an array of Ridley::RoleObject" do
106
73
  connection.sync do
107
74
  obj = role.all
108
75
 
@@ -113,16 +80,9 @@ describe "Role API operations", type: "acceptance" do
113
80
  end
114
81
 
115
82
  describe "updating a role" do
116
- let(:target) do
117
- Ridley::RoleObject.new(
118
- resource,
119
- name: "ridley-role-one"
120
- )
121
- end
122
-
123
- before(:each) do
124
- connection.role.create(target)
125
- end
83
+ let(:role_name) { "ridley-role" }
84
+ before { chef_role(role_name) }
85
+ let(:target) { connection.role.find(role_name) }
126
86
 
127
87
  it "returns an updated Ridley::RoleObject object" do
128
88
  connection.role.update(target).should eql(target)