puppet-resource_api 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6885a4eb2643ce21da775818fc1893aa6f0900a
4
- data.tar.gz: 65d217361a9e1d2fecd4d504db006f6d0e63bbb8
3
+ metadata.gz: 38b8eb932adfb3053e1c50635928a012dc633d23
4
+ data.tar.gz: d26dbf883c69aab91c4966cfdda0856a8fd8cd57
5
5
  SHA512:
6
- metadata.gz: 94e6007ef84f8c91fa08beb9c529acc5d48dc063aa6c4fdff3318b5f32abb4d2fdaac3e296725d22b7db854f6a63ebd6a5145ceb8adc9e7e5ea86f527178ccad
7
- data.tar.gz: a353e3a609fb63ab9ffdba14296f27ba55d3c9fc74ebf46c076701e0c109461865fce8b7b2364445241086cc55b08531356a71f35c63a6d7e92737999e6ff9b9
6
+ metadata.gz: 583c982b7c88fc4d000c9b42f883f7996b0afac1375ea2b178b7fc6c377091b40da40a5295214fea2d10f29f1ec253fb8d36a048febb14df57aea5932b186398
7
+ data.tar.gz: d3856e0fb094b7c944a6ea773a19106f67f269476f56e0a22a2f7fe8376270a639fdecaff575926033778532f0b533563bf28c757f826e3ebb8e1be6643bd33e
data/CHANGELOG.md CHANGED
@@ -3,6 +3,19 @@
3
3
  All significant changes to this repo will be summarized in this file.
4
4
 
5
5
 
6
+ ## [v0.3.0](https://github.com/puppetlabs/puppet-resource_api/tree/v0.3.0) (2018-02-21)
7
+ [Full Changelog](https://github.com/puppetlabs/puppet-resource_api/compare/v0.2.2...v0.3.0)
8
+
9
+ **Implemented enhancements:**
10
+
11
+ - \(FM-6797\) Add debug logging of current and target states [\#21](https://github.com/puppetlabs/puppet-resource_api/pull/21) ([da-ar](https://github.com/da-ar))
12
+ - \(PDK-803\) Add YAML output for resources [\#19](https://github.com/puppetlabs/puppet-resource_api/pull/19) ([shermdog](https://github.com/shermdog))
13
+ - Edits on resource api readme [\#17](https://github.com/puppetlabs/puppet-resource_api/pull/17) ([clairecadman](https://github.com/clairecadman))
14
+
15
+ **Fixed bugs:**
16
+
17
+ - \(PDK-569\) `puppet resource` now displays type name correctly [\#18](https://github.com/puppetlabs/puppet-resource_api/pull/18) ([tphoney](https://github.com/tphoney))
18
+
6
19
  ## [v0.2.2](https://github.com/puppetlabs/puppet-resource_api/tree/v0.2.2) (2018-01-25)
7
20
  [Full Changelog](https://github.com/puppetlabs/puppet-resource_api/compare/v0.2.1...v0.2.2)
8
21
 
@@ -10,6 +23,10 @@ All significant changes to this repo will be summarized in this file.
10
23
 
11
24
  - make the server parts JRuby compatible [\#15](https://github.com/puppetlabs/puppet-resource_api/pull/15) ([DavidS](https://github.com/DavidS))
12
25
 
26
+ **Merged pull requests:**
27
+
28
+ - Release prep v0.2.2 [\#16](https://github.com/puppetlabs/puppet-resource_api/pull/16) ([DavidS](https://github.com/DavidS))
29
+
13
30
  ## [v0.2.1](https://github.com/puppetlabs/puppet-resource_api/tree/v0.2.1) (2018-01-24)
14
31
  [Full Changelog](https://github.com/puppetlabs/puppet-resource_api/compare/v0.2.0...v0.2.1)
15
32
 
data/README.md CHANGED
@@ -6,7 +6,7 @@ This is an implementation of the [Resource API](https://github.com/DavidS/puppet
6
6
  ## Getting started
7
7
 
8
8
  * Install the [PDK](https://puppet.com/download-puppet-development-kit).
9
- * As of Jan 2018, the required PDK features are still in development.
9
+ * As of January 2018, the required PDK features are still in development.
10
10
  See [PDK-506](https://tickets.puppetlabs.com/browse/PDK-506) for progress.
11
11
 
12
12
  * Create a [new module](https://puppet.com/docs/pdk/latest/pdk_generating_modules.html) with the PDK, or work with an existing PDK-enabled module.
@@ -58,7 +58,7 @@ pdk (INFO): Creating '/home/david/git/example/spec/unit/puppet/provider/foo/foo_
58
58
  ~/git/example$
59
59
  ```
60
60
 
61
- The three generated files are the type, the actual implementation, and unit tests. The default template contains a trivial example, to demonstrate the basic workings of the Resource API. This allows the unit tests to run immediately after creating the provider:
61
+ The three generated files are the type, the implementation, and the unit tests. The default template contains an example that demonstrates the basic workings of the Resource API. This allows the unit tests to run immediately after creating the provider:
62
62
 
63
63
  ```
64
64
  ~/git/example$ pdk test unit
@@ -72,7 +72,7 @@ The three generated files are the type, the actual implementation, and unit test
72
72
 
73
73
  ### Writing the Type
74
74
 
75
- The type contains the shape of your resources. The template renders the minimally necessary `name`, and `ensure` attributes. You can modify their description and the name's type to match your resource. Add more attributes as you see fit.
75
+ The type contains the shape of your resources. The template provides the necessary `name` and `ensure` attributes. You can modify their description and the name's type to match your resource. Add more attributes as you need.
76
76
 
77
77
  ```ruby
78
78
  # lib/puppet/type/foo.rb
@@ -99,18 +99,18 @@ Puppet::ResourceApi.register_type(
99
99
  ```
100
100
 
101
101
  The following keys are available for defining attributes:
102
- * `type`: the puppet 4 data type allowed in this attribute. You can use all [data types](https://puppet.com/docs/puppet/latest/lang_data_abstract.html#parent-types) matching `Scalar` and `Data`.
102
+ * `type`: the Puppet 4 data type allowed in this attribute. You can use all [data types](https://puppet.com/docs/puppet/latest/lang_data_abstract.html#parent-types) matching `Scalar` and `Data`.
103
103
  * `desc`: a string describing this attribute. This is used in creating the automated API docs with [puppet-strings](https://github.com/puppetlabs/puppet-strings).
104
- * `default`: a default value that will be used by the runtime environment, whenever the caller doesn't specify a value for this attribute.
105
- * `behaviour`/`behavior`: how the attribute behaves. Currently available values:
106
- * `namevar`: marks an attribute as part of the "primary key", or "identity" of the resource. A given set of namevar values needs to distinctively identify a instance.
107
- * `init_only`: this attribute can only be set during creation of the resource. Its value will be reported going forward, but trying to change it later will lead to an error. For example, the base image for a VM, or the UID of a user.
108
- * `read_only`: values for this attribute will be returned by `get()`, but `set()` is not able to change them. Values for this should never be specified in a manifest. For example the checksum of a file, or the MAC address of a network interface.
109
- * `parameter`: these attributes influence how the provider behaves, and cannot be read from the target system. For example, the target file on inifile, or credentials to access an API.
104
+ * `default`: a default value used by the runtime environment; when the caller does not specify a value for this attribute.
105
+ * `behaviour`/`behavior`: how the attribute behaves. The current available values include:
106
+ * `namevar`: marks an attribute as part of the "primary key" or "identity" of the resource. A given set of `namevar` values needs to distinctively identify an instance.
107
+ * `init_only`: this attribute can only be set during the creation of the resource. Its value will be reported going forward, but trying to change it later leads to an error. For example, the base image for a VM or the UID of a user.
108
+ * `read_only`: values for this attribute will be returned by `get()`, but `set()` is not able to change them. Values for this should never be specified in a manifest. For example, the checksum of a file, or the MAC address of a network interface.
109
+ * `parameter`: these attributes influence how the provider behaves, and cannot be read from the target system. For example, the target file on inifile, or the credentials to access an API.
110
110
 
111
111
  ### Writing the Provider
112
112
 
113
- The provider is the meat and bone of your new resource. It contains all the intelligence to read and enforce state. Here's the example generated by `pdk new provider`:
113
+ The provider is the most important part of your new resource, as it reads and enforces state. Here is the example generated by `pdk new provider`:
114
114
 
115
115
  ```ruby
116
116
  require 'puppet/resource_api'
@@ -152,7 +152,7 @@ end
152
152
 
153
153
  The optional `initialize` method can be used to set up state that is available throughout the execution of the catalog. This is most often used for locally acting providers to set up command helpers, or to establish a connection, when talking to a service (e.g. when managing a database).
154
154
 
155
- The `get(context)` method returns a list of hashes describing the resources that are currently on the target system. The basic example would always return an empty list. Here is an example of some resources that could be returned from this:
155
+ The `get(context)` method returns a list of hashes describing the resources that are currently on the target system. The basic example would always return an empty list. Here is an example of resources that could be returned from this:
156
156
 
157
157
  ```ruby
158
158
  [
@@ -167,7 +167,7 @@ The `get(context)` method returns a list of hashes describing the resources that
167
167
  ]
168
168
  ```
169
169
 
170
- The `create`/`update`/`delete` methods get called by the `SimpleProvider` base-class to change the system as requested by the catalog. The `name` argument is the name of the resource being processed. `should` contains the attribute hash - in the same format as `get` returns - with the values in the catalog.
170
+ The `create`/`update`/`delete` methods get called by the `SimpleProvider` base-class to change the system as requested by the catalog. The `name` argument is the name of the resource that is being processed. `should` contains the attribute hash - in the same format as `get` returns - with the values in the catalog.
171
171
 
172
172
  ### Unit testing
173
173
 
@@ -175,33 +175,33 @@ The generated unit tests in `spec/unit/puppet/provider/foo_spec.rb` get automati
175
175
 
176
176
  ### Further Reading
177
177
 
178
- The [Resource API](https://github.com/DavidS/puppet-specifications/blob/resourceapi/language/resource-api/README.md) describes the gory details of all capabilities of this gem.
178
+ The [Resource API](https://github.com/DavidS/puppet-specifications/blob/resourceapi/language/resource-api/README.md) describes details of all the capabilities of this gem.
179
179
 
180
180
  This [Introduction to Testing Puppet Modules](https://www.netways.de/index.php?id=3445#c44135) talk describes rspec usage in more detail.
181
181
 
182
- The [RSpec docs](https://relishapp.com/rspec) give a great overview over all the capabilities of rspec.
182
+ The [RSpec docs](https://relishapp.com/rspec) provide an overview of the capabilities of rspec.
183
183
 
184
- Read [betterspecs](http://www.betterspecs.org/) for general guidelines on what's considered good specs.
184
+ Read [betterspecs](http://www.betterspecs.org/) for general guidelines on what is considered good specs.
185
185
 
186
186
  ## Known Issues
187
187
 
188
- This gem is still under heavy development. This section is a living document of what's already done, and what items are still outstanding.
188
+ This gem is still under heavy development. This section is a living document of what is already done, and what items are still outstanding.
189
189
 
190
- Already working:
191
- * basic type and provider definition, using `name`, `desc`, and `attributes`
192
- * the `canonicalize` and `remote_resource` features
193
- * all the logging facilities
194
- * executing the new provider under any of the following commands:
190
+ Currently working:
191
+ * Basic type and provider definition, using `name`, `desc`, and `attributes`.
192
+ * The `canonicalize` and `remote_resource` features.
193
+ * All the logging facilities.
194
+ * Executing the new provider under the following commands:
195
195
  * `puppet apply`
196
196
  * `puppet resource`
197
197
  * `puppet agent`
198
198
  * `puppet device` (if applicable)
199
199
 
200
200
 
201
- There are still a few notable gaps between the implementation, and the specification:
202
- * Only a single runtime environment (the puppet commands) is currently implemented.
203
- * `auto*` definitions
204
- * the Commands API is mostly implemented, but deployment is blocked on upstream work (PDK-580). You can use regular Ruby `system()` calls as a workaround, with all their underlying encoding, and safety issues.
201
+ There are still a few notable gaps between the implementation and the specification:
202
+ * Only a single runtime environment (the Puppet commands) is currently implemented.
203
+ * `auto*` definitions.
204
+ * The Commands API is mostly implemented, but deployment is blocked on upstream work (PDK-580). Use regular Ruby `system()` calls as a workaround, with their underlying encoding and safety issues.
205
205
 
206
206
  ## Development
207
207
 
@@ -156,7 +156,7 @@ module Puppet::ResourceApi
156
156
  # force autoloading of the provider
157
157
  provider(name)
158
158
  my_provider.get(context).map do |resource_hash|
159
- Puppet::ResourceApi::TypeShim.new(resource_hash[namevar_name], resource_hash)
159
+ Puppet::ResourceApi::TypeShim.new(resource_hash[namevar_name], resource_hash, name)
160
160
  end
161
161
  end
162
162
 
@@ -176,9 +176,8 @@ module Puppet::ResourceApi
176
176
  result[:ensure] = :absent
177
177
  end
178
178
 
179
- # puts "retrieved #{current_state.inspect}"
180
-
181
179
  @rapi_current_state = current_state
180
+ Puppet.debug("Current State: #{@rapi_current_state.inspect}")
182
181
  result
183
182
  end
184
183
 
@@ -195,8 +194,7 @@ module Puppet::ResourceApi
195
194
  # require 'pry'; binding.pry
196
195
  return if @rapi_current_state == target_state
197
196
 
198
- # puts "@rapi_current_state: #{@rapi_current_state.inspect}"
199
- # puts "target_state: #{target_state.inspect}"
197
+ Puppet.debug("Target State: #{target_state.inspect}")
200
198
 
201
199
  my_provider.set(context, title => { is: @rapi_current_state, should: target_state })
202
200
  raise 'Execution encountered an error' if context.failed?
@@ -2,18 +2,19 @@
2
2
  module Puppet::ResourceApi
3
3
  # A trivial class to provide the functionality required to push data through the existing type/provider parts of puppet
4
4
  class TypeShim
5
- attr_reader :values
5
+ attr_reader :values, :typename
6
6
 
7
- def initialize(title, resource_hash)
7
+ def initialize(title, resource_hash, typename)
8
8
  # internalize and protect - needs to go deeper
9
9
  @values = resource_hash.dup
10
10
  # "name" is a privileged key
11
11
  @values[:name] = title
12
+ @typename = typename
12
13
  @values.freeze
13
14
  end
14
15
 
15
16
  def to_resource
16
- ResourceShim.new(@values)
17
+ ResourceShim.new(@values, @typename)
17
18
  end
18
19
 
19
20
  def name
@@ -23,10 +24,11 @@ module Puppet::ResourceApi
23
24
 
24
25
  # A trivial class to provide the functionality required to push data through the existing type/provider parts of puppet
25
26
  class ResourceShim
26
- attr_reader :values
27
+ attr_reader :values, :typename
27
28
 
28
- def initialize(resource_hash)
29
+ def initialize(resource_hash, typename)
29
30
  @values = resource_hash.dup.freeze # whatevs
31
+ @typename = typename
30
32
  end
31
33
 
32
34
  def title
@@ -39,8 +41,12 @@ module Puppet::ResourceApi
39
41
  end
40
42
 
41
43
  def to_manifest
42
- # TODO: get the correct typename here
43
- (["SOMETYPE { #{values[:name].inspect}: "] + values.keys.reject { |k| k == :name }.map { |k| " #{k} => #{values[k].inspect}," } + ['}']).join("\n")
44
+ (["#{@typename} { #{values[:name].inspect}: "] + values.keys.reject { |k| k == :name }.map { |k| " #{k} => #{values[k].inspect}," } + ['}']).join("\n")
45
+ end
46
+
47
+ # Convert our resource to yaml for Hiera purposes.
48
+ def to_hierayaml
49
+ ([" #{values[:name]}: "] + values.keys.reject { |k| k == :name }.map { |k| " #{k}: #{Puppet::Parameter.format_value_for_display(values[k])}" }).join("\n") + "\n"
44
50
  end
45
51
  end
46
52
  end
@@ -1,5 +1,5 @@
1
1
  module Puppet
2
2
  module ResourceApi
3
- VERSION = '0.2.2'.freeze
3
+ VERSION = '0.3.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-resource_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Schmitt
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-25 00:00:00.000000000 Z
11
+ date: 2018-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: childprocess