Class: ChefSpec::Server
- Inherits:
-
Object
- Object
- ChefSpec::Server
- Includes:
- Singleton
- Defined in:
- lib/chefspec/server.rb
Instance Attribute Summary collapse
-
#server ⇒ Object
readonly
Returns the value of attribute server.
Class Method Summary collapse
- .entity(method, klass, key) ⇒ Object
-
.method_missing(m, *args, &block) ⇒ Object
Delegate all methods to the singleton instance.
Instance Method Summary collapse
-
#client(name) ⇒ Chef::Client?
Find a client at the given name.
-
#client_key ⇒ String
The path to the insecure Chef Zero private key on disk.
-
#clients ⇒ Array<Hash>
The list of client on the Chef Server.
-
#create_client(name, data = {}) ⇒ Object
Create a new client on the Chef Server.
-
#create_data_bag(name, data = {}) ⇒ Object
Create a new data_bag on the Chef Server.
-
#create_environment(name, data = {}) ⇒ Object
Create a new environment on the Chef Server.
-
#create_node(name, data = {}) ⇒ Object
Create a new node on the Chef Server.
-
#create_role(name, data = {}) ⇒ Object
Create a new role on the Chef Server.
-
#data ⇒ Array<Hash>
The list of data_bag on the Chef Server.
-
#data_bag(name) ⇒ Chef::DataBag?
Find a data_bag at the given name.
-
#environment(name) ⇒ Chef::Environment?
Find a environment at the given name.
-
#environments ⇒ Array<Hash>
The list of environment on the Chef Server.
-
#has_client?(name) ⇒ Boolean
Determine if the Chef Server has the given client.
-
#has_data_bag?(name) ⇒ Boolean
Determine if the Chef Server has the given data_bag.
-
#has_environment?(name) ⇒ Boolean
Determine if the Chef Server has the given environment.
-
#has_node?(name) ⇒ Boolean
Determine if the Chef Server has the given node.
-
#has_role?(name) ⇒ Boolean
Determine if the Chef Server has the given role.
-
#initialize ⇒ Server
constructor
Create a new instance of the
ChefSpec::Serversingleton. -
#node(name) ⇒ Chef::Node?
Find a node at the given name.
-
#nodes ⇒ Array<Hash>
The list of node on the Chef Server.
-
#reset! ⇒ Object
Clear the contents of the server (used between examples).
-
#role(name) ⇒ Chef::Role?
Find a role at the given name.
-
#roles ⇒ Array<Hash>
The list of role on the Chef Server.
-
#start! ⇒ Object
Start the Chef Zero server in the background, updating the
Chef::Configwith the properchef_server_url. -
#stop! ⇒ Object
Stop the Chef Zero server, if it is running.
Constructor Details
#initialize ⇒ Server
Create a new instance of the ChefSpec::Server singleton. This method also starts the Chef Zero server in the background.
146 147 148 149 150 |
# File 'lib/chefspec/server.rb', line 146 def initialize @server = ChefZero::Server.new( log_level: RSpec.configuration.log_level || :warn, ) end |
Instance Attribute Details
#server ⇒ Object (readonly)
Returns the value of attribute server.
140 141 142 |
# File 'lib/chefspec/server.rb', line 140 def server @server end |
Class Method Details
.entity(method, klass, key) ⇒ Object
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/chefspec/server.rb', line 99 def self.entity(method, klass, key) class_eval " def create_\#{method}(name, data = {})\n unless '\#{key}' == 'data'\n # Automatically set the \"name\" if no explicit one was given\n data[:name] ||= name\n\n # Convert it to JSON\n data = JSON.fast_generate(data)\n end\n\n @server.load_data('\#{key}' => { name => data })\n end\n\n def \#{method}(name)\n data = @server.data_store.get(['\#{key}', name])\n json = JSON.parse(data)\n\n if \#{klass}.respond_to?(:json_create)\n \#{klass}.json_create(json)\n else\n \#{klass}.new(json)\n end\n rescue ChefZero::DataStore::DataNotFoundError\n nil\n end\n\n def \#{key}\n @server.data_store.list(['\#{key}'])\n end\n\n def has_\#{method}?(name)\n [email protected]_store.get(['\#{key}', name]).nil?\n rescue ChefZero::DataStore::DataNotFoundError\n false\n end\n EOH\nend\n", __FILE__, __LINE__ + 1 |
.method_missing(m, *args, &block) ⇒ Object
Delegate all methods to the singleton instance.
60 61 62 |
# File 'lib/chefspec/server.rb', line 60 def self.method_missing(m, *args, &block) instance.send(m, *args, &block) end |
Instance Method Details
#client(name) ⇒ Chef::Client?
Find a client at the given name
152 |
# File 'lib/chefspec/server.rb', line 152 entity :client, Chef::Client, 'clients' |
#client_key ⇒ String
The path to the insecure Chef Zero private key on disk. Because Chef requires the path to a file instead of the contents of the key (why), this method dynamically writes the ChefZero::PRIVATE_KEY to disk and then returns that path.
167 168 169 170 171 172 173 |
# File 'lib/chefspec/server.rb', line 167 def client_key @client_key ||= begin path = File.join(cache_dir, 'client.pem') File.open(path, 'w') { |f| f.write(ChefZero::PRIVATE_KEY) } path end end |
#clients ⇒ Array<Hash>
The list of client on the Chef Server
152 |
# File 'lib/chefspec/server.rb', line 152 entity :client, Chef::Client, 'clients' |
#create_client(name, data = {}) ⇒ Object
Create a new client on the Chef Server
152 |
# File 'lib/chefspec/server.rb', line 152 entity :client, Chef::Client, 'clients' |
#create_data_bag(name, data = {}) ⇒ Object
Create a new data_bag on the Chef Server
153 |
# File 'lib/chefspec/server.rb', line 153 entity :data_bag, Chef::DataBag, 'data' |
#create_environment(name, data = {}) ⇒ Object
Create a new environment on the Chef Server
154 |
# File 'lib/chefspec/server.rb', line 154 entity :environment, Chef::Environment, 'environments' |
#create_node(name, data = {}) ⇒ Object
Create a new node on the Chef Server
155 |
# File 'lib/chefspec/server.rb', line 155 entity :node, Chef::Node, 'nodes' |
#create_role(name, data = {}) ⇒ Object
Create a new role on the Chef Server
156 |
# File 'lib/chefspec/server.rb', line 156 entity :role, Chef::Role, 'roles' |
#data ⇒ Array<Hash>
The list of data_bag on the Chef Server
153 |
# File 'lib/chefspec/server.rb', line 153 entity :data_bag, Chef::DataBag, 'data' |
#data_bag(name) ⇒ Chef::DataBag?
Find a data_bag at the given name
153 |
# File 'lib/chefspec/server.rb', line 153 entity :data_bag, Chef::DataBag, 'data' |
#environment(name) ⇒ Chef::Environment?
Find a environment at the given name
154 |
# File 'lib/chefspec/server.rb', line 154 entity :environment, Chef::Environment, 'environments' |
#environments ⇒ Array<Hash>
The list of environment on the Chef Server
154 |
# File 'lib/chefspec/server.rb', line 154 entity :environment, Chef::Environment, 'environments' |
#has_client?(name) ⇒ Boolean
Determine if the Chef Server has the given client
152 |
# File 'lib/chefspec/server.rb', line 152 entity :client, Chef::Client, 'clients' |
#has_data_bag?(name) ⇒ Boolean
Determine if the Chef Server has the given data_bag
153 |
# File 'lib/chefspec/server.rb', line 153 entity :data_bag, Chef::DataBag, 'data' |
#has_environment?(name) ⇒ Boolean
Determine if the Chef Server has the given environment
154 |
# File 'lib/chefspec/server.rb', line 154 entity :environment, Chef::Environment, 'environments' |
#has_node?(name) ⇒ Boolean
Determine if the Chef Server has the given node
155 |
# File 'lib/chefspec/server.rb', line 155 entity :node, Chef::Node, 'nodes' |
#has_role?(name) ⇒ Boolean
Determine if the Chef Server has the given role
156 |
# File 'lib/chefspec/server.rb', line 156 entity :role, Chef::Role, 'roles' |
#node(name) ⇒ Chef::Node?
Find a node at the given name
155 |
# File 'lib/chefspec/server.rb', line 155 entity :node, Chef::Node, 'nodes' |
#nodes ⇒ Array<Hash>
The list of node on the Chef Server
155 |
# File 'lib/chefspec/server.rb', line 155 entity :node, Chef::Node, 'nodes' |
#reset! ⇒ Object
Clear the contents of the server (used between examples)
189 190 191 |
# File 'lib/chefspec/server.rb', line 189 def reset! @server.clear_data end |
#role(name) ⇒ Chef::Role?
Find a role at the given name
156 |
# File 'lib/chefspec/server.rb', line 156 entity :role, Chef::Role, 'roles' |
#roles ⇒ Array<Hash>
The list of role on the Chef Server
156 |
# File 'lib/chefspec/server.rb', line 156 entity :role, Chef::Role, 'roles' |
#start! ⇒ Object
Start the Chef Zero server in the background, updating the Chef::Config with the proper chef_server_url.
179 180 181 182 183 184 |
# File 'lib/chefspec/server.rb', line 179 def start! unless @server.running? @server.start_background Chef::Config[:chef_server_url] = @server.url end end |
#stop! ⇒ Object
Stop the Chef Zero server, if it is running. This method also runs any cleanup hooks, such as clearing the cache directories.
197 198 199 200 |
# File 'lib/chefspec/server.rb', line 197 def stop! @server.stop if @server.running? FileUtils.rm_rf(cache_dir) end |