puppet-resource_api 1.0.2 → 1.0.3
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -0
- data/README.md +15 -4
- data/lib/puppet/resource_api.rb +83 -61
- data/lib/puppet/resource_api/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 3c0802c277632a57802c1b44466a56470474357dea596c39472c7e23a592aab9
         | 
| 4 | 
            +
              data.tar.gz: 66b3de030a9a2b91a2abac411d46e803152e973a10235eaf09c1b3381b41a184
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c16aea1e79a69f0c6112812c1f5e89884899064ffdcf31c7c2a9567e776435244646a3d0111c3c29acf64cfee8ce061f3684ef012edb7af574615aef910b2cb2
         | 
| 7 | 
            +
              data.tar.gz: 7e719c49452ddea14cabddaf3702eac1e15da5717138ce732be25c0f57b6c649df1f2702869adf3265b002fb83ca78f6df7b5671350119ea8b6fdc62f9eb2415
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -3,6 +3,25 @@ | |
| 3 3 | 
             
            All significant changes to this repo will be summarized in this file.
         | 
| 4 4 |  | 
| 5 5 |  | 
| 6 | 
            +
            ## [v1.0.3](https://github.com/puppetlabs/puppet-resource_api/tree/v1.0.3) (2018-04-06)
         | 
| 7 | 
            +
            [Full Changelog](https://github.com/puppetlabs/puppet-resource_api/compare/v1.0.2...v1.0.3)
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            **Implemented enhancements:**
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            - \(PDK-887\) Add checks for read\_only values being set or modified [\#54](https://github.com/puppetlabs/puppet-resource_api/pull/54) ([da-ar](https://github.com/da-ar))
         | 
| 12 | 
            +
            - \(PDK-885\) Add support for init\_only attributes [\#52](https://github.com/puppetlabs/puppet-resource_api/pull/52) ([da-ar](https://github.com/da-ar))
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            **Fixed bugs:**
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            - \(PDK-911\) Fix handling of `ensure` values from symbols to strings [\#55](https://github.com/puppetlabs/puppet-resource_api/pull/55) ([DavidS](https://github.com/DavidS))
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            **Merged pull requests:**
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            - Misc fixes [\#56](https://github.com/puppetlabs/puppet-resource_api/pull/56) ([DavidS](https://github.com/DavidS))
         | 
| 21 | 
            +
            - \(PDK-890\) document current constraints on possible data types  [\#53](https://github.com/puppetlabs/puppet-resource_api/pull/53) ([DavidS](https://github.com/DavidS))
         | 
| 22 | 
            +
            - Update release prep notes [\#51](https://github.com/puppetlabs/puppet-resource_api/pull/51) ([DavidS](https://github.com/DavidS))
         | 
| 23 | 
            +
            - Release prep for v1.0.2 [\#50](https://github.com/puppetlabs/puppet-resource_api/pull/50) ([DavidS](https://github.com/DavidS))
         | 
| 24 | 
            +
             | 
| 6 25 | 
             
            ## [v1.0.2](https://github.com/puppetlabs/puppet-resource_api/tree/v1.0.2) (2018-03-26)
         | 
| 7 26 | 
             
            [Full Changelog](https://github.com/puppetlabs/puppet-resource_api/compare/v1.0.1...v1.0.2)
         | 
| 8 27 |  | 
    
        data/README.md
    CHANGED
    
    | @@ -55,6 +55,8 @@ pdk (INFO): Creating '.../example/spec/unit/puppet/provider/foo/foo_spec.rb' fro | |
| 55 55 | 
             
            $
         | 
| 56 56 | 
             
            ```
         | 
| 57 57 |  | 
| 58 | 
            +
            Note that the templates released with PDK 1.4 suffer from the fallout of [PDK-911](https://tickets.puppetlabs.com/browse/PDK-911), and need all occurrences of `:present` changed to `'present'`. This will be fixed in PDK 1.5.
         | 
| 59 | 
            +
             | 
| 58 60 | 
             
            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:
         | 
| 59 61 |  | 
| 60 62 | 
             
            ```
         | 
| @@ -118,11 +120,11 @@ class Puppet::Provider::Foo::Foo < Puppet::ResourceApi::SimpleProvider | |
| 118 120 | 
             
                [
         | 
| 119 121 | 
             
                  {
         | 
| 120 122 | 
             
                    name: 'foo',
         | 
| 121 | 
            -
                    ensure:  | 
| 123 | 
            +
                    ensure: 'present',
         | 
| 122 124 | 
             
                  },
         | 
| 123 125 | 
             
                  {
         | 
| 124 126 | 
             
                    name: 'bar',
         | 
| 125 | 
            -
                    ensure:  | 
| 127 | 
            +
                    ensure: 'present',
         | 
| 126 128 | 
             
                  },
         | 
| 127 129 | 
             
                ]
         | 
| 128 130 | 
             
              end
         | 
| @@ -188,6 +190,12 @@ This gem is still under heavy development. This section is a living document of | |
| 188 190 |  | 
| 189 191 | 
             
            Currently working:
         | 
| 190 192 | 
             
            * Basic type and provider definition, using `name`, `desc`, and `attributes`.
         | 
| 193 | 
            +
            * Scalar puppet 4 [data types](https://puppet.com/docs/puppet/5.3/lang_data_type.html#core-data-types):
         | 
| 194 | 
            +
              * String
         | 
| 195 | 
            +
              * Integer, Float, Numeric
         | 
| 196 | 
            +
              * Boolean
         | 
| 197 | 
            +
              * Enum[absent, present]
         | 
| 198 | 
            +
              * simple Optionals
         | 
| 191 199 | 
             
            * The `canonicalize`, `simple_get_filter`, and `remote_resource` features.
         | 
| 192 200 | 
             
            * All the logging facilities.
         | 
| 193 201 | 
             
            * Executing the new provider under the following commands:
         | 
| @@ -197,8 +205,8 @@ Currently working: | |
| 197 205 | 
             
              * `puppet device` (if applicable)
         | 
| 198 206 |  | 
| 199 207 | 
             
            There are still a few notable gaps between the implementation and the specification:
         | 
| 208 | 
            +
            * Complex data types, like Array, Hash, Tuple or Struct are not yet implemented.
         | 
| 200 209 | 
             
            * Only a single runtime environment (the Puppet commands) is currently implemented.
         | 
| 201 | 
            -
            * The `:init_only` behaviour is not yet implemented ([PDK-885](https://tickets.puppetlabs.com/browse/PDK-885))
         | 
| 202 210 |  | 
| 203 211 | 
             
            Restrictions of running under puppet:
         | 
| 204 212 | 
             
            * `supports_noop` is not effective, as puppet doesn't call into the type under noop.
         | 
| @@ -222,6 +230,7 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/puppet | |
| 222 230 |  | 
| 223 231 | 
             
            To cut a new release, from a current `master` checkout:
         | 
| 224 232 |  | 
| 233 | 
            +
            * Start the release branch with `git checkout -b release-prep`
         | 
| 225 234 | 
             
            * Update `lib/puppet/resource_api/version.rb` to the new version
         | 
| 226 235 | 
             
            * Update the CHANGELOG
         | 
| 227 236 | 
             
              * Have a [CHANGELOG_GITHUB_TOKEN](https://github.com/skywinder/github-changelog-generator#github-token) set in your environment
         | 
| @@ -229,7 +238,9 @@ To cut a new release, from a current `master` checkout: | |
| 229 238 | 
             
              * double check the PRs to make sure they're all tagged correctly (using the new CHANGELOG for cross-checking)
         | 
| 230 239 | 
             
            * Check README and other materials for up-to-date-ness
         | 
| 231 240 | 
             
            * Commit changes with title "Release prep for v<VERSION>"
         | 
| 232 | 
            -
            * Upload and PR the release prep to github  | 
| 241 | 
            +
            * Upload and PR the release prep to github through the main repo starting with `git push upstream`
         | 
| 242 | 
            +
              * make sure to use the name of your git remote pointing to main repo instead of "upstream"
         | 
| 233 243 | 
             
            * Check that CI is green and merge the PR
         | 
| 234 244 | 
             
            * Run `rake release[upstream]` to release from your checkout
         | 
| 235 245 | 
             
              * make sure to use the name of your git remote pointing to main repo instead of "upstream"
         | 
| 246 | 
            +
            * Remove the release-prep branch
         | 
    
        data/lib/puppet/resource_api.rb
    CHANGED
    
    | @@ -85,7 +85,7 @@ module Puppet::ResourceApi | |
| 85 85 |  | 
| 86 86 | 
             
                      # skip properties if the resource is being deleted
         | 
| 87 87 | 
             
                      next if definition[:attributes][:ensure] &&
         | 
| 88 | 
            -
                              value(:ensure) ==  | 
| 88 | 
            +
                              value(:ensure) == 'absent' &&
         | 
| 89 89 | 
             
                              options[:behaviour].nil?
         | 
| 90 90 |  | 
| 91 91 | 
             
                      if value(name).nil? && !(type.instance_of? Puppet::Pops::Types::POptionalType)
         | 
| @@ -96,7 +96,7 @@ module Puppet::ResourceApi | |
| 96 96 | 
             
                    missing_attrs -= [:ensure] if @called_from_resource
         | 
| 97 97 |  | 
| 98 98 | 
             
                    if missing_attrs.any?
         | 
| 99 | 
            -
                      error_msg = "The following mandatory attributes  | 
| 99 | 
            +
                      error_msg = "The following mandatory attributes were not provided:\n    *  " + missing_attrs.join(", \n    *  ")
         | 
| 100 100 | 
             
                      raise Puppet::ResourceError, error_msg
         | 
| 101 101 | 
             
                    end
         | 
| 102 102 | 
             
                  end
         | 
| @@ -105,7 +105,7 @@ module Puppet::ResourceApi | |
| 105 105 | 
             
                    # puts "#{name}: #{options.inspect}"
         | 
| 106 106 |  | 
| 107 107 | 
             
                    if options[:behaviour]
         | 
| 108 | 
            -
                      unless [:read_only, :namevar, :parameter].include? options[:behaviour]
         | 
| 108 | 
            +
                      unless [:read_only, :namevar, :parameter, :init_only].include? options[:behaviour]
         | 
| 109 109 | 
             
                        raise Puppet::ResourceError, "`#{options[:behaviour]}` is not a valid behaviour value"
         | 
| 110 110 | 
             
                      end
         | 
| 111 111 | 
             
                    end
         | 
| @@ -142,72 +142,80 @@ module Puppet::ResourceApi | |
| 142 142 | 
             
                        if options.key? :default
         | 
| 143 143 | 
             
                          defaultto options[:default]
         | 
| 144 144 | 
             
                        end
         | 
| 145 | 
            +
                      end
         | 
| 145 146 |  | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 147 | 
            +
                      type = Puppet::Pops::Types::TypeParser.singleton.parse(options[:type])
         | 
| 148 | 
            +
                      validate do |value|
         | 
| 149 | 
            +
                        if options[:behaviour] == :read_only
         | 
| 150 | 
            +
                          raise Puppet::ResourceError, "Attempting to set `#{name}` read_only attribute value to `#{value}`"
         | 
| 151 | 
            +
                        end
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                        return true if type.instance?(value)
         | 
| 149 154 |  | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 157 | 
            -
                            end
         | 
| 158 | 
            -
                            return true if type.instance?(value)
         | 
| 159 | 
            -
             | 
| 160 | 
            -
                            inferred_type = Puppet::Pops::Types::TypeCalculator.infer_set(value)
         | 
| 161 | 
            -
                            error_msg = Puppet::Pops::Types::TypeMismatchDescriber.new.describe_mismatch("#{definition[:name]}.#{name}", type, inferred_type)
         | 
| 162 | 
            -
                            raise Puppet::ResourceError, error_msg
         | 
| 155 | 
            +
                        if value.is_a? String
         | 
| 156 | 
            +
                          # when running under `puppet resource`, we need to try to coerce from strings to the real type
         | 
| 157 | 
            +
                          case value
         | 
| 158 | 
            +
                          when %r{^-?\d+$}, Puppet::Pops::Patterns::NUMERIC
         | 
| 159 | 
            +
                            value = Puppet::Pops::Utils.to_n(value)
         | 
| 160 | 
            +
                          when %r{\Atrue|false\Z}
         | 
| 161 | 
            +
                            value = value == 'true'
         | 
| 163 162 | 
             
                          end
         | 
| 164 | 
            -
             | 
| 163 | 
            +
                          return true if type.instance?(value)
         | 
| 165 164 |  | 
| 166 | 
            -
             | 
| 167 | 
            -
                           | 
| 165 | 
            +
                          inferred_type = Puppet::Pops::Types::TypeCalculator.infer_set(value)
         | 
| 166 | 
            +
                          error_msg = Puppet::Pops::Types::TypeMismatchDescriber.new.describe_mismatch("#{definition[:name]}.#{name}", type, inferred_type)
         | 
| 167 | 
            +
                          raise Puppet::ResourceError, error_msg
         | 
| 168 168 | 
             
                        end
         | 
| 169 | 
            +
                      end
         | 
| 169 170 |  | 
| 170 | 
            -
             | 
| 171 | 
            -
                         | 
| 172 | 
            -
             | 
| 173 | 
            -
             | 
| 174 | 
            -
             | 
| 175 | 
            -
             | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 180 | 
            -
             | 
| 181 | 
            -
             | 
| 182 | 
            -
             | 
| 183 | 
            -
             | 
| 184 | 
            -
             | 
| 185 | 
            -
             | 
| 186 | 
            -
             | 
| 187 | 
            -
             | 
| 188 | 
            -
             | 
| 189 | 
            -
             | 
| 190 | 
            -
             | 
| 191 | 
            -
             | 
| 192 | 
            -
             | 
| 193 | 
            -
             | 
| 194 | 
            -
             | 
| 195 | 
            -
                          Puppet::ResourceApi.def_newvalues(self, param_or_property, %r{^-?\d+$})
         | 
| 196 | 
            -
                          munge do |v|
         | 
| 197 | 
            -
                            Puppet::Pops::Utils.to_n(v)
         | 
| 198 | 
            -
                          end
         | 
| 199 | 
            -
                        when Puppet::Pops::Types::PFloatType, Puppet::Pops::Types::PNumericType
         | 
| 200 | 
            -
                          Puppet::ResourceApi.def_newvalues(self, param_or_property, Puppet::Pops::Patterns::NUMERIC)
         | 
| 201 | 
            -
                          munge do |v|
         | 
| 202 | 
            -
                            Puppet::Pops::Utils.to_n(v)
         | 
| 171 | 
            +
                      if type.instance_of? Puppet::Pops::Types::POptionalType
         | 
| 172 | 
            +
                        type = type.type
         | 
| 173 | 
            +
                      end
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                      # provide better handling of the standard types
         | 
| 176 | 
            +
                      case type
         | 
| 177 | 
            +
                      when Puppet::Pops::Types::PStringType
         | 
| 178 | 
            +
                        # require any string value
         | 
| 179 | 
            +
                        Puppet::ResourceApi.def_newvalues(self, param_or_property, %r{})
         | 
| 180 | 
            +
                      # rubocop:disable Lint/BooleanSymbol
         | 
| 181 | 
            +
                      when Puppet::Pops::Types::PBooleanType
         | 
| 182 | 
            +
                        Puppet::ResourceApi.def_newvalues(self, param_or_property, 'true', 'false')
         | 
| 183 | 
            +
                        aliasvalue true, 'true'
         | 
| 184 | 
            +
                        aliasvalue false, 'false'
         | 
| 185 | 
            +
                        aliasvalue :true, 'true'
         | 
| 186 | 
            +
                        aliasvalue :false, 'false'
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                        munge do |v|
         | 
| 189 | 
            +
                          case v
         | 
| 190 | 
            +
                          when 'true', :true
         | 
| 191 | 
            +
                            true
         | 
| 192 | 
            +
                          when 'false', :false
         | 
| 193 | 
            +
                            false
         | 
| 194 | 
            +
                          else
         | 
| 195 | 
            +
                            v
         | 
| 203 196 | 
             
                          end
         | 
| 204 197 | 
             
                        end
         | 
| 205 | 
            -
             | 
| 206 | 
            -
             | 
| 207 | 
            -
                         | 
| 208 | 
            -
             | 
| 198 | 
            +
                      # rubocop:enable Lint/BooleanSymbol
         | 
| 199 | 
            +
                      when Puppet::Pops::Types::PIntegerType
         | 
| 200 | 
            +
                        Puppet::ResourceApi.def_newvalues(self, param_or_property, %r{^-?\d+$})
         | 
| 201 | 
            +
                        munge do |v|
         | 
| 202 | 
            +
                          Puppet::Pops::Utils.to_n(v)
         | 
| 203 | 
            +
                        end
         | 
| 204 | 
            +
                      when Puppet::Pops::Types::PFloatType, Puppet::Pops::Types::PNumericType
         | 
| 205 | 
            +
                        Puppet::ResourceApi.def_newvalues(self, param_or_property, Puppet::Pops::Patterns::NUMERIC)
         | 
| 206 | 
            +
                        munge do |v|
         | 
| 207 | 
            +
                          Puppet::Pops::Utils.to_n(v)
         | 
| 209 208 | 
             
                        end
         | 
| 210 209 | 
             
                      end
         | 
| 210 | 
            +
             | 
| 211 | 
            +
                      case options[:type]
         | 
| 212 | 
            +
                      when 'Enum[present, absent]'
         | 
| 213 | 
            +
                        Puppet::ResourceApi.def_newvalues(self, param_or_property, 'absent', 'present')
         | 
| 214 | 
            +
                        # puppet symbolizes these values through puppet/paramter/value.rb (see .convert()), but Enums are strings
         | 
| 215 | 
            +
                        # specifying a munge block here skips the value_collection fallback in puppet/parameter.rb's
         | 
| 216 | 
            +
                        # default .unsafe_munge() implementation
         | 
| 217 | 
            +
                        munge { |v| v }
         | 
| 218 | 
            +
                      end
         | 
| 211 219 | 
             
                    end
         | 
| 212 220 | 
             
                  end
         | 
| 213 221 |  | 
| @@ -248,7 +256,7 @@ module Puppet::ResourceApi | |
| 248 256 | 
             
                      end
         | 
| 249 257 | 
             
                    else
         | 
| 250 258 | 
             
                      result[namevar_name] = title
         | 
| 251 | 
            -
                      result[:ensure] =  | 
| 259 | 
            +
                      result[:ensure] = 'absent'
         | 
| 252 260 | 
             
                    end
         | 
| 253 261 |  | 
| 254 262 | 
             
                    @rapi_current_state = current_state
         | 
| @@ -270,6 +278,20 @@ module Puppet::ResourceApi | |
| 270 278 |  | 
| 271 279 | 
             
                    Puppet.debug("Target State: #{target_state.inspect}")
         | 
| 272 280 |  | 
| 281 | 
            +
                    # enforce init_only attributes
         | 
| 282 | 
            +
                    if Puppet.settings[:strict] != :off && @rapi_current_state && (@rapi_current_state[:ensure] == 'present' && target_state[:ensure] == 'present')
         | 
| 283 | 
            +
                      target_state.each do |name, value|
         | 
| 284 | 
            +
                        next unless definition[:attributes][name][:behaviour] == :init_only && value != @rapi_current_state[name]
         | 
| 285 | 
            +
                        message = "Attempting to change `#{name}` init_only attribute value from `#{@rapi_current_state[name]}` to `#{value}`"
         | 
| 286 | 
            +
                        case Puppet.settings[:strict]
         | 
| 287 | 
            +
                        when :warning
         | 
| 288 | 
            +
                          Puppet.warning(message)
         | 
| 289 | 
            +
                        when :error
         | 
| 290 | 
            +
                          raise Puppet::ResourceError, message
         | 
| 291 | 
            +
                        end
         | 
| 292 | 
            +
                      end
         | 
| 293 | 
            +
                    end
         | 
| 294 | 
            +
             | 
| 273 295 | 
             
                    if feature_support?('supports_noop')
         | 
| 274 296 | 
             
                      my_provider.set(context, { title => { is: @rapi_current_state, should: target_state } }, noop: noop?)
         | 
| 275 297 | 
             
                    else
         | 
| @@ -302,7 +324,7 @@ MESSAGE | |
| 302 324 | 
             
                    when :warning
         | 
| 303 325 | 
             
                      Puppet.warning(message)
         | 
| 304 326 | 
             
                    when :error
         | 
| 305 | 
            -
                      raise Puppet:: | 
| 327 | 
            +
                      raise Puppet::DevError, message
         | 
| 306 328 | 
             
                    end
         | 
| 307 329 |  | 
| 308 330 | 
             
                    return nil
         | 
    
        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: 1.0. | 
| 4 | 
            +
              version: 1.0.3
         | 
| 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- | 
| 11 | 
            +
            date: 2018-04-06 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: hocon
         |