Hi Rafael,

on puppet versions prior to puppet6, you need to install the
puppet-resource_api gem to support the provider. You can use the
puppetlabs-resource_api <https://forge.puppet.com/puppetlabs/resource_api>
module for that.

Cheers, David

On Sun, Sep 23, 2018 at 3:19 AM Rafael Tomelin <[email protected]>
wrote:

> Hi David Schmitt,
>
> I create de new module, class and provider with pdk the according this
> site puppet.  My puppet is version 'puppet --version . 5.5.6'.
>
> But, the return error: *Could not autoload puppet/type/foo: no such file
> to load -- puppet/resource_api *
>
>
> *My type is:*
>
> *cat lib/puppet/type/foo.rb *
>
> require 'puppet/resource_api'
>
>
> Puppet::ResourceApi.register_type(
>
>   name: 'foo',
>
>   docs: <<-EOS,
>
>       This type provides Puppet with the capabilities to manage ...
>
>     EOS
>
>   features: [],
>
>   attributes:   {
>
>     ensure:      {
>
>       type:    'Enum[present, absent]',
>
>       desc:    'Whether this resource should be present or absent on the
> target system.',
>
>       default: 'present',
>
>     },
>
>     name:        {
>
>       type:      'String',
>
>       desc:      'The name of the resource you want to manage.',
>
>       behaviour: :namevar,
>
>     },
>
>   },
>
> )
>
>
> *My provider:*
>
> *cat lib/puppet/provider/foo/foo.rb *
>
> require 'puppet/resource_api/simple_provider'
>
>
> # Implementation for the foo type using the Resource API.
>
> class Puppet::Provider::Foo::Foo < Puppet::ResourceApi::SimpleProvider
>
>   def get(_context)
>
>     [
>
>       {
>
>         name: 'foo',
>
>         ensure: 'present',
>
>       },
>
>       {
>
>         name: 'bar',
>
>         ensure: 'present',
>
>       },
>
>     ]
>
>   end
>
>
>   def create(context, name, should)
>
>     context.notice("Creating '#{name}' with #{should.inspect}")
>
>   end
>
>
>   def update(context, name, should)
>
>     context.notice("Updating '#{name}' with #{should.inspect}")
>
>   end
>
>
>   def delete(context, name)
>
>     context.notice("Deleting '#{name}'")
>
>   end
>
> end
>
>
> *My init.pp*
>
> *class first_type {*
>
>   foo{ 'my_type':
>
>     ensure => present,
>
>   }
>
> }
>
>
> What`s problem : *Could not autoload puppet/type/foo: no such file to
> load -- puppet/resource_api *
>
> The provider write the ruby, is possible create provider with python? If
> yes, is change ruby to python?
>
>
>
> Em sáb, 22 de set de 2018 às 05:29, David Schmitt <
> [email protected]> escreveu:
>
>> Hi Rafael,
>>
>> if you are just starting out with this, I'd highly recommend looking into
>> the Resource API. It makes the development of types much easier, is a
>> supported part of this week's puppet 6 release, and available as a separate
>> download for previous puppet versions. The PDK also has support for getting
>> you started with a ready to go skeleton using 'pdk new provider'.
>>
>> See https://puppet.com/docs/puppet/6.0/custom_resources.html for all the
>> details.
>>
>> Cheers, David
>>
>> On Fri, Sep 21, 2018 at 9:34 PM Rafael Tomelin <[email protected]>
>> wrote:
>>
>>> Hi guys,
>>>
>>> I am creating a type in custom provider, but I am not able to understand
>>> the following question.
>>>
>>> I created a basic type to understand the concept of things, as follows:
>>> Puppet::Type.newtype(:mydir) do
>>>     @doc = "First custom type."
>>>
>>>     ensurable do
>>>         defaultvalues
>>>         defaultto :present
>>>     end
>>>
>>>     newparam(:name, :namevar => true) do
>>>     end
>>>
>>>     newparam(:install_location) do
>>>     end
>>> end
>>>
>>>
>>> After creating the provider, but does not recognize the same and
>>> displays the following error:
>>> Error: Could not find a suitable provider for mydir
>>> Notice: Applied catalog in 0.63 seconds
>>>
>>> Puppet::Type.type(:mydir).provide(:linux) do
>>>
>>>     defaultfor :operatingsystem => :linux
>>>     confine    :operatingsystem => :linux
>>>
>>>     commands :mkdir => "mkdir"
>>>     commands :rm => "rm"
>>>
>>>     def exists?
>>>         Puppet.info("checking if is already deployed")
>>>         deploy_dir = "#{resource[:install_location]}/#{resource[:name]}"
>>>
>>>         File.directory?(deploy_dir) and Dir.entries(deploy_dir).size > 2
>>>     end
>>>
>>>     def create
>>>         Puppet.info("Deploying the appliction")
>>>         deploy_dir = "#{resource[:install_location]}/#{resource[:name]}"
>>>
>>>         mkdir('-p', deploy_dir)
>>>     end
>>>
>>>     def destroy
>>>         Puppet.info("Removing the appliction")
>>>         deploy_dir = "#{resource[:install_location]}/#{resource[:name]}"
>>>         rm('-rf',deploy_dir)
>>>     end
>>> end
>>>
>>>   What I did not envisage is how Puppet identifies the provider to be
>>> used in the OS?
>>> --
>>>
>>> Atenciosamente,
>>>
>>> Rafael Tomelin
>>>
>>> skype: rafael.tomelin
>>>
>>> E-mail: [email protected]
>>>
>>> RHCE      - Red Hat Certified Engineer
>>> PPT-205 - Puppet Certified Professional 2017
>>> Zabbix    - ZABBIX Certified Specialist
>>> LPI3
>>> ITIL v3
>>>
>>> --
>>>
>> You received this message because you are subscribed to the Google Groups
>>> "Puppet Users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/puppet-users/CAGEUqbCtgp2bo7CN8STqDxq5L4WZLCJXNT%2Buq7-qzpvVYaL3%2Bg%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/puppet-users/CAGEUqbCtgp2bo7CN8STqDxq5L4WZLCJXNT%2Buq7-qzpvVYaL3%2Bg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
>> Cheers, David
>>
>> https://twitter.com/dev_el_ops
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Puppet Users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>>
> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/puppet-users/CALF7fHa5_QY%2BjKzW5tzw8YL4FVXSBzAvheHKp_i1VbhOLXXhhg%40mail.gmail.com
>> <https://groups.google.com/d/msgid/puppet-users/CALF7fHa5_QY%2BjKzW5tzw8YL4FVXSBzAvheHKp_i1VbhOLXXhhg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>
>
>> For more options, visit https://groups.google.com/d/optout.
>>
> --
>
> Atenciosamente,
>
> Rafael Tomelin
>
> skype: rafael.tomelin
>
> E-mail: [email protected]
>
> RHCE      - Red Hat Certified Engineer
> PPT-205 - Puppet Certified Professional 2017
> Zabbix    - ZABBIX Certified Specialist
> LPI3
> ITIL v3
>
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/puppet-users/CAGEUqbB-PsmNt0hzjoJWARd7285O%2BgHwAeqqC4qNv_zH1dWLPA%40mail.gmail.com
> <https://groups.google.com/d/msgid/puppet-users/CAGEUqbB-PsmNt0hzjoJWARd7285O%2BgHwAeqqC4qNv_zH1dWLPA%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>
-- 
Cheers, David

https://twitter.com/dev_el_ops

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/CALF7fHY-eyUzWRdTaojGU9jfFdV-5DuGLkMG4h_KoZCAw4WBRg%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to