chef 0.9.18 → 0.10.0.beta.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 (177) hide show
  1. data/README.rdoc +0 -3
  2. data/distro/arch/etc/rc.d/chef-server +0 -4
  3. data/distro/arch/etc/rc.d/chef-server-webui +0 -4
  4. data/distro/arch/etc/rc.d/chef-solr +0 -4
  5. data/distro/arch/etc/rc.d/chef-solr-indexer +0 -4
  6. data/lib/chef.rb +3 -3
  7. data/lib/chef/api_client.rb +1 -1
  8. data/lib/chef/application.rb +11 -1
  9. data/lib/chef/application/client.rb +18 -22
  10. data/lib/chef/application/knife.rb +28 -29
  11. data/lib/chef/application/solo.rb +14 -12
  12. data/lib/chef/client.rb +112 -54
  13. data/lib/chef/config.rb +4 -0
  14. data/lib/chef/cookbook/chefignore.rb +66 -0
  15. data/lib/chef/cookbook/cookbook_collection.rb +6 -5
  16. data/lib/chef/cookbook/cookbook_version_loader.rb +151 -0
  17. data/lib/chef/cookbook/file_system_file_vendor.rb +10 -8
  18. data/lib/chef/cookbook/metadata.rb +200 -108
  19. data/lib/chef/cookbook_loader.rb +39 -163
  20. data/lib/chef/cookbook_uploader.rb +100 -78
  21. data/lib/chef/cookbook_version.rb +92 -47
  22. data/lib/chef/cookbook_version_selector.rb +163 -0
  23. data/lib/chef/couchdb.rb +9 -1
  24. data/lib/chef/data_bag.rb +1 -1
  25. data/lib/chef/data_bag_item.rb +1 -1
  26. data/lib/chef/encrypted_data_bag_item.rb +126 -0
  27. data/lib/chef/environment.rb +386 -0
  28. data/lib/chef/exceptions.rb +82 -1
  29. data/lib/chef/index_queue/amqp_client.rb +15 -12
  30. data/lib/chef/index_queue/indexable.rb +38 -4
  31. data/lib/chef/json_compat.rb +3 -3
  32. data/lib/chef/knife.rb +97 -202
  33. data/lib/chef/knife/bootstrap.rb +27 -61
  34. data/lib/chef/knife/bootstrap/archlinux-gems.erb +4 -2
  35. data/lib/chef/knife/bootstrap/centos5-gems.erb +6 -15
  36. data/lib/chef/knife/bootstrap/fedora13-gems.erb +3 -4
  37. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +2 -2
  38. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +6 -5
  39. data/lib/chef/knife/client_bulk_delete.rb +6 -3
  40. data/lib/chef/knife/client_create.rb +13 -10
  41. data/lib/chef/knife/client_delete.rb +10 -7
  42. data/lib/chef/knife/client_edit.rb +9 -6
  43. data/lib/chef/knife/client_list.rb +8 -5
  44. data/lib/chef/knife/client_reregister.rb +9 -6
  45. data/lib/chef/knife/client_show.rb +9 -6
  46. data/lib/chef/knife/configure.rb +15 -19
  47. data/lib/chef/knife/configure_client.rb +4 -4
  48. data/lib/chef/knife/cookbook_bulk_delete.rb +11 -8
  49. data/lib/chef/knife/cookbook_create.rb +120 -55
  50. data/lib/chef/knife/cookbook_delete.rb +18 -12
  51. data/lib/chef/knife/cookbook_download.rb +10 -6
  52. data/lib/chef/knife/cookbook_list.rb +15 -6
  53. data/lib/chef/knife/cookbook_metadata.rb +41 -21
  54. data/lib/chef/knife/cookbook_metadata_from_file.rb +4 -0
  55. data/lib/chef/knife/cookbook_show.rb +16 -5
  56. data/lib/chef/knife/cookbook_site_download.rb +2 -2
  57. data/lib/chef/knife/cookbook_site_share.rb +18 -13
  58. data/lib/chef/knife/cookbook_site_unshare.rb +7 -4
  59. data/lib/chef/knife/cookbook_site_vendor.rb +21 -18
  60. data/lib/chef/knife/cookbook_test.rb +14 -14
  61. data/lib/chef/knife/cookbook_upload.rb +91 -40
  62. data/lib/chef/knife/data_bag_create.rb +41 -6
  63. data/lib/chef/knife/data_bag_delete.rb +5 -3
  64. data/lib/chef/knife/data_bag_edit.rb +55 -11
  65. data/lib/chef/knife/data_bag_from_file.rb +47 -7
  66. data/lib/chef/knife/data_bag_list.rb +4 -1
  67. data/lib/chef/knife/data_bag_show.rb +44 -4
  68. data/lib/chef/knife/environment_create.rb +53 -0
  69. data/lib/chef/knife/environment_delete.rb +45 -0
  70. data/lib/chef/knife/environment_edit.rb +45 -0
  71. data/lib/chef/knife/environment_from_file.rb +39 -0
  72. data/lib/chef/knife/environment_list.rb +42 -0
  73. data/lib/chef/knife/environment_show.rb +46 -0
  74. data/lib/chef/knife/exec.rb +1 -1
  75. data/lib/chef/knife/index_rebuild.rb +8 -9
  76. data/lib/chef/knife/node_bulk_delete.rb +9 -6
  77. data/lib/chef/knife/node_create.rb +9 -6
  78. data/lib/chef/knife/node_delete.rb +10 -7
  79. data/lib/chef/knife/node_edit.rb +129 -10
  80. data/lib/chef/knife/node_from_file.rb +10 -7
  81. data/lib/chef/knife/node_list.rb +11 -6
  82. data/lib/chef/knife/node_run_list_add.rb +10 -7
  83. data/lib/chef/knife/node_run_list_remove.rb +9 -6
  84. data/lib/chef/knife/node_show.rb +15 -7
  85. data/lib/chef/knife/recipe_list.rb +4 -3
  86. data/lib/chef/knife/role_bulk_delete.rb +9 -6
  87. data/lib/chef/knife/role_create.rb +9 -6
  88. data/lib/chef/knife/role_delete.rb +10 -7
  89. data/lib/chef/knife/role_edit.rb +11 -8
  90. data/lib/chef/knife/role_from_file.rb +10 -7
  91. data/lib/chef/knife/role_list.rb +8 -5
  92. data/lib/chef/knife/role_show.rb +11 -8
  93. data/lib/chef/knife/search.rb +33 -10
  94. data/lib/chef/knife/ssh.rb +33 -61
  95. data/lib/chef/knife/status.rb +7 -4
  96. data/lib/chef/knife/subcommand_loader.rb +101 -0
  97. data/lib/chef/knife/tag_create.rb +31 -0
  98. data/lib/chef/knife/tag_delete.rb +31 -0
  99. data/lib/chef/knife/tag_list.rb +29 -0
  100. data/lib/chef/knife/ui.rb +229 -0
  101. data/lib/chef/knife/windows_bootstrap.rb +8 -5
  102. data/lib/chef/log.rb +5 -59
  103. data/lib/chef/mash.rb +211 -0
  104. data/lib/chef/mixins.rb +1 -2
  105. data/lib/chef/nil_argument.rb +3 -0
  106. data/lib/chef/node.rb +96 -34
  107. data/lib/chef/platform.rb +27 -0
  108. data/lib/chef/provider/cookbook_file.rb +21 -20
  109. data/lib/chef/provider/deploy/revision.rb +3 -0
  110. data/lib/chef/provider/file.rb +20 -11
  111. data/lib/chef/provider/git.rb +26 -26
  112. data/lib/chef/provider/group/aix.rb +70 -0
  113. data/lib/chef/provider/group/groupadd.rb +7 -4
  114. data/lib/chef/provider/group/usermod.rb +1 -1
  115. data/lib/chef/provider/package.rb +28 -28
  116. data/lib/chef/provider/package/dpkg.rb +1 -1
  117. data/lib/chef/provider/package/portage.rb +50 -39
  118. data/lib/chef/provider/package/rubygems.rb +1 -1
  119. data/lib/chef/provider/package/zypper.rb +3 -20
  120. data/lib/chef/provider/remote_directory.rb +0 -2
  121. data/lib/chef/provider/remote_file.rb +2 -3
  122. data/lib/chef/provider/service/arch.rb +28 -35
  123. data/lib/chef/provider/service/simple.rb +1 -1
  124. data/lib/chef/provider/subversion.rb +22 -22
  125. data/lib/chef/providers.rb +1 -0
  126. data/lib/chef/recipe.rb +10 -12
  127. data/lib/chef/resource.rb +49 -42
  128. data/lib/chef/resource/gem_package.rb +7 -3
  129. data/lib/chef/resource/git.rb +5 -5
  130. data/lib/chef/resource/package.rb +7 -7
  131. data/lib/chef/resource/scm.rb +2 -1
  132. data/lib/chef/resource/solaris_package.rb +0 -1
  133. data/lib/chef/resource/yum_package.rb +0 -1
  134. data/lib/chef/rest.rb +7 -16
  135. data/lib/chef/rest/rest_request.rb +0 -16
  136. data/lib/chef/role.rb +67 -13
  137. data/lib/chef/run_context.rb +37 -21
  138. data/lib/chef/run_list.rb +30 -15
  139. data/lib/chef/run_list/run_list_expansion.rb +41 -20
  140. data/lib/chef/run_list/run_list_item.rb +20 -6
  141. data/lib/chef/run_list/versioned_recipe_list.rb +68 -0
  142. data/lib/chef/runner.rb +7 -15
  143. data/lib/chef/search/query.rb +12 -7
  144. data/lib/chef/shef.rb +6 -7
  145. data/lib/chef/shef/shef_session.rb +40 -35
  146. data/lib/chef/shell_out.rb +22 -201
  147. data/lib/chef/shell_out/unix.rb +224 -0
  148. data/lib/chef/shell_out/windows.rb +95 -0
  149. data/lib/chef/solr_query.rb +187 -0
  150. data/lib/chef/solr_query/lucene.treetop +145 -0
  151. data/lib/chef/solr_query/lucene_nodes.rb +285 -0
  152. data/lib/chef/solr_query/query_transform.rb +65 -0
  153. data/lib/chef/solr_query/solr_http_request.rb +118 -0
  154. data/lib/chef/version.rb +4 -2
  155. data/lib/chef/version_class.rb +70 -0
  156. data/lib/chef/version_constraint.rb +116 -0
  157. metadata +68 -37
  158. data/lib/chef/cookbook/metadata/version.rb +0 -87
  159. data/lib/chef/knife/bluebox_images_list.rb +0 -54
  160. data/lib/chef/knife/bluebox_server_create.rb +0 -157
  161. data/lib/chef/knife/bluebox_server_delete.rb +0 -63
  162. data/lib/chef/knife/bluebox_server_list.rb +0 -59
  163. data/lib/chef/knife/ec2_instance_data.rb +0 -46
  164. data/lib/chef/knife/ec2_server_create.rb +0 -218
  165. data/lib/chef/knife/ec2_server_delete.rb +0 -87
  166. data/lib/chef/knife/ec2_server_list.rb +0 -89
  167. data/lib/chef/knife/rackspace_server_create.rb +0 -184
  168. data/lib/chef/knife/rackspace_server_delete.rb +0 -57
  169. data/lib/chef/knife/rackspace_server_list.rb +0 -59
  170. data/lib/chef/knife/slicehost_images_list.rb +0 -53
  171. data/lib/chef/knife/slicehost_server_create.rb +0 -103
  172. data/lib/chef/knife/slicehost_server_delete.rb +0 -61
  173. data/lib/chef/knife/slicehost_server_list.rb +0 -64
  174. data/lib/chef/knife/terremark_server_create.rb +0 -152
  175. data/lib/chef/knife/terremark_server_delete.rb +0 -87
  176. data/lib/chef/knife/terremark_server_list.rb +0 -77
  177. data/lib/chef/mixin/find_preferred_file.rb +0 -92
@@ -17,13 +17,15 @@
17
17
  #
18
18
 
19
19
  require 'chef/knife'
20
- require 'chef/data_bag'
21
- require 'chef/json_compat'
22
20
 
23
21
  class Chef
24
22
  class Knife
25
23
  class DataBagDelete < Knife
26
24
 
25
+ deps do
26
+ require 'chef/data_bag'
27
+ end
28
+
27
29
  banner "knife data bag delete BAG [ITEM] (options)"
28
30
  category "data bag"
29
31
 
@@ -38,7 +40,7 @@ class Chef
38
40
  end
39
41
  else
40
42
  show_usage
41
- Chef::Log.fatal("You must specify at least a data bag name")
43
+ ui.fatal("You must specify at least a data bag name")
42
44
  exit 1
43
45
  end
44
46
  end
@@ -1,6 +1,7 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Copyright:: Copyright (c) 2009 Opscode, Inc.
3
+ # Author:: Seth Falcon (<seth@opscode.com>)
4
+ # Copyright:: Copyright (c) 2009-2010 Opscode, Inc.
4
5
  # License:: Apache License, Version 2.0
5
6
  #
6
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,30 +18,73 @@
17
18
  #
18
19
 
19
20
  require 'chef/knife'
20
- require 'chef/data_bag_item'
21
21
 
22
22
  class Chef
23
23
  class Knife
24
24
  class DataBagEdit < Knife
25
25
 
26
+ deps do
27
+ require 'chef/data_bag_item'
28
+ require 'chef/encrypted_data_bag_item'
29
+ end
30
+
26
31
  banner "knife data bag edit BAG ITEM (options)"
27
32
  category "data bag"
28
33
 
29
- def run
30
- if @name_args.length != 2
31
- Chef::Log.fatal("You must supply the data bag and an item to edit!")
32
- exit 42
34
+ option :secret,
35
+ :short => "-s SECRET",
36
+ :long => "--secret ",
37
+ :description => "The secret key to use to encrypt data bag item values"
38
+
39
+ option :secret_file,
40
+ :long => "--secret_file SECRET_FILE",
41
+ :description => "A file containing the secret key to use to encrypt data bag item values"
42
+
43
+ def read_secret
44
+ if config[:secret]
45
+ config[:secret]
33
46
  else
34
- object = Chef::DataBagItem.load(@name_args[0], @name_args[1])
47
+ Chef::EncryptedDataBagItem.load_secret(config[:secret_file])
48
+ end
49
+ end
35
50
 
36
- output = edit_data(object)
51
+ def use_encryption
52
+ if config[:secret] && config[:secret_file]
53
+ stdout.puts "please specify only one of --secret, --secret_file"
54
+ exit(1)
55
+ end
56
+ config[:secret] || config[:secret_file]
57
+ end
37
58
 
38
- rest.put_rest("data/#{@name_args[0]}/#{@name_args[1]}", output)
59
+ def load_item(bag, item_name)
60
+ item = Chef::DataBagItem.load(bag, item_name)
61
+ if use_encryption
62
+ Chef::EncryptedDataBagItem.new(item, read_secret).to_hash
63
+ else
64
+ item
65
+ end
66
+ end
39
67
 
40
- Chef::Log.info("Saved data_bag_item[#{@name_args[1]}]")
68
+ def edit_item(item)
69
+ output = edit_data(item)
70
+ if use_encryption
71
+ Chef::EncryptedDataBagItem.encrypt_data_bag_item(output, read_secret)
72
+ else
73
+ output
74
+ end
75
+ end
41
76
 
42
- output(format_for_display(object)) if config[:print_after]
77
+ def run
78
+ if @name_args.length != 2
79
+ stdout.puts "You must supply the data bag and an item to edit!"
80
+ stdout.puts opt_parser
81
+ exit 1
43
82
  end
83
+ item = load_item(@name_args[0], @name_args[1])
84
+ output = edit_item(item)
85
+ rest.put_rest("data/#{@name_args[0]}/#{@name_args[1]}", output)
86
+ stdout.puts("Saved data_bag_item[#{@name_args[1]}]")
87
+ output(format_for_display(object)) if config[:print_after]
44
88
  end
45
89
  end
46
90
  end
@@ -1,5 +1,6 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@opscode.com>)
3
+ # Author:: Seth Falcon (<seth@opscode.com>)
3
4
  # Copyright:: Copyright (c) 2010 Opscode, Inc.
4
5
  # License:: Apache License, Version 2.0
5
6
  #
@@ -17,24 +18,63 @@
17
18
  #
18
19
 
19
20
  require 'chef/knife'
20
- require 'chef/data_bag'
21
- require 'chef/data_bag_item'
22
- require 'chef/json_compat'
23
21
 
24
22
  class Chef
25
23
  class Knife
26
24
  class DataBagFromFile < Knife
27
25
 
26
+ deps do
27
+ require 'chef/data_bag'
28
+ require 'chef/data_bag_item'
29
+ require 'chef/json_compat'
30
+ require 'chef/encrypted_data_bag_item'
31
+ end
32
+
28
33
  banner "knife data bag from file BAG FILE (options)"
29
34
  category "data bag"
30
35
 
31
- def run
32
- updated = load_from_file(Chef::DataBagItem, @name_args[1], @name_args[0])
36
+ option :secret,
37
+ :short => "-s SECRET",
38
+ :long => "--secret ",
39
+ :description => "The secret key to use to encrypt data bag item values"
40
+
41
+ option :secret_file,
42
+ :long => "--secret_file SECRET_FILE",
43
+ :description => "A file containing the secret key to use to encrypt data bag item values"
44
+
45
+ def read_secret
46
+ if config[:secret]
47
+ config[:secret]
48
+ else
49
+ Chef::EncryptedDataBagItem.load_secret(config[:secret_file])
50
+ end
51
+ end
52
+
53
+ def use_encryption
54
+ if config[:secret] && config[:secret_file]
55
+ stdout.puts "please specify only one of --secret, --secret_file"
56
+ exit(1)
57
+ end
58
+ config[:secret] || config[:secret_file]
59
+ end
60
+
61
+ def run
62
+ if @name_args.size != 2
63
+ stdout.puts opt_parser
64
+ exit(1)
65
+ end
66
+ item = load_from_file(Chef::DataBagItem, @name_args[1], @name_args[0])
67
+ item = if use_encryption
68
+ secret = read_secret
69
+ Chef::EncryptedDataBagItem.encrypt_data_bag_item(item, secret)
70
+ else
71
+ item
72
+ end
33
73
  dbag = Chef::DataBagItem.new
34
74
  dbag.data_bag(@name_args[0])
35
- dbag.raw_data = updated
75
+ dbag.raw_data = item
36
76
  dbag.save
37
- Chef::Log.info("Updated data_bag_item[#{@name_args[1]}]")
77
+ ui.info("Updated data_bag_item[#{@name_args[1]}]")
38
78
  end
39
79
  end
40
80
  end
@@ -17,12 +17,15 @@
17
17
  #
18
18
 
19
19
  require 'chef/knife'
20
- require 'chef/data_bag'
21
20
 
22
21
  class Chef
23
22
  class Knife
24
23
  class DataBagList < Knife
25
24
 
25
+ deps do
26
+ require 'chef/data_bag'
27
+ end
28
+
26
29
  banner "knife data bag list (options)"
27
30
  category "data bag"
28
31
 
@@ -1,6 +1,7 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Copyright:: Copyright (c) 2009 Opscode, Inc.
3
+ # Author:: Seth Falcon (<seth@opscode.com>)
4
+ # Copyright:: Copyright (c) 2009-2010 Opscode, Inc.
4
5
  # License:: Apache License, Version 2.0
5
6
  #
6
7
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,21 +18,60 @@
17
18
  #
18
19
 
19
20
  require 'chef/knife'
20
- require 'chef/data_bag'
21
21
 
22
22
  class Chef
23
23
  class Knife
24
24
  class DataBagShow < Knife
25
25
 
26
+ deps do
27
+ require 'chef/data_bag'
28
+ require 'chef/encrypted_data_bag_item'
29
+ end
30
+
26
31
  banner "knife data bag show BAG [ITEM] (options)"
27
32
  category "data bag"
28
33
 
34
+ option :secret,
35
+ :short => "-s SECRET",
36
+ :long => "--secret ",
37
+ :description => "The secret key to use to decrypt data bag item values"
38
+
39
+ option :secret_file,
40
+ :long => "--secret_file SECRET_FILE",
41
+ :description => "A file containing the secret key to use to decrypt data bag item values"
42
+
43
+ def read_secret
44
+ if config[:secret]
45
+ config[:secret]
46
+ else
47
+ Chef::EncryptedDataBagItem.load_secret(config[:secret_file])
48
+ end
49
+ end
50
+
51
+ def use_encryption
52
+ if config[:secret] && config[:secret_file]
53
+ stdout.puts "please specify only one of --secret, --secret_file"
54
+ exit(1)
55
+ end
56
+ config[:secret] || config[:secret_file]
57
+ end
58
+
29
59
  def run
30
60
  display = case @name_args.length
31
61
  when 2
32
- format_for_display(Chef::DataBagItem.load(@name_args[0], @name_args[1]))
33
- else
62
+ if use_encryption
63
+ raw = Chef::EncryptedDataBagItem.load(@name_args[0],
64
+ @name_args[1],
65
+ read_secret)
66
+ format_for_display(raw.to_hash)
67
+ else
68
+ format_for_display(Chef::DataBagItem.load(@name_args[0], @name_args[1]))
69
+ end
70
+ when 1
34
71
  format_list_for_display(Chef::DataBag.load(@name_args[0]))
72
+ else
73
+ stdout.puts opt_parser
74
+ exit(1)
35
75
  end
36
76
  output(display)
37
77
  end
@@ -0,0 +1,53 @@
1
+ #
2
+ # Author:: Stephen Delano (<stephen@opscode.com>)
3
+ # Copyright:: Copyright (c) 2010 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+ class EnvironmentCreate < Knife
24
+
25
+ deps do
26
+ require 'chef/environment'
27
+ require 'chef/json_compat'
28
+ end
29
+
30
+ banner "knife environment create ENVIRONMENT (options)"
31
+
32
+ option :description,
33
+ :short => "-d DESCRIPTION",
34
+ :long => "--description DESCRIPTION",
35
+ :description => "The environment description"
36
+
37
+ def run
38
+ env_name = @name_args[0]
39
+
40
+ if env_name.nil?
41
+ show_usage
42
+ ui.fatal("You must specify an environment name")
43
+ exit 1
44
+ end
45
+
46
+ env = Chef::Environment.new
47
+ env.name(env_name)
48
+ env.description(config[:description]) if config[:description]
49
+ create_object(env)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,45 @@
1
+ #
2
+ # Author:: Stephen Delano (<stephen@opscode.com>)
3
+ # Copyright:: Copyright (c) 2010 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+ class EnvironmentDelete < Knife
24
+
25
+ deps do
26
+ require 'chef/environment'
27
+ require 'chef/json_compat'
28
+ end
29
+
30
+ banner "knife environment delete ENVIRONMENT (options)"
31
+
32
+ def run
33
+ env_name = @name_args[0]
34
+
35
+ if env_name.nil?
36
+ show_usage
37
+ ui.fatal("You must specify an environment name")
38
+ exit 1
39
+ end
40
+
41
+ delete_object(Chef::Environment, env_name)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,45 @@
1
+ #
2
+ # Author:: Stephen Delano (<stephen@opscode.com>)
3
+ # Copyright:: Copyright (c) 2010 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'chef/knife'
20
+
21
+ class Chef
22
+ class Knife
23
+ class EnvironmentEdit < Knife
24
+
25
+ deps do
26
+ require 'chef/environment'
27
+ require 'chef/json_compat'
28
+ end
29
+
30
+ banner "knife environment edit ENVIRONMENT (options)"
31
+
32
+ def run
33
+ env_name = @name_args[0]
34
+
35
+ if env_name.nil?
36
+ show_usage
37
+ ui.fatal("You must specify an environment name")
38
+ exit 1
39
+ end
40
+
41
+ edit_object(Chef::Environment, env_name)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,39 @@
1
+ #
2
+ # Author:: Stephen Delano (<stephen@opscode.com>)
3
+ # Copyright:: Copyright (c) 2010 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ class Chef
20
+ class Knife
21
+ class EnvironmentFromFile < Knife
22
+
23
+ banner "knife environment from file FILE (options)"
24
+
25
+ def run
26
+ if @name_args[0].nil?
27
+ show_usage
28
+ ui.fatal("You must specify a file to load")
29
+ exit 1
30
+ end
31
+
32
+ updated = load_from_file(Chef::Environment, @name_args[0])
33
+ updated.save
34
+ output(format_for_display(updated)) if config[:print_after]
35
+ ui.warn("Updated Environment #{updated.name}!")
36
+ end
37
+ end
38
+ end
39
+ end