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 <rafael.tome...@gmail.com>
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 <
> david.schm...@puppet.com> 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 <rafael.tome...@gmail.com>
>> 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: rafael.tome...@gmail.com
>>>
>>> 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 puppet-users+unsubscr...@googlegroups.com.
>>> 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 puppet-users+unsubscr...@googlegroups.com.
>>
> 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: rafael.tome...@gmail.com
>
> 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 puppet-users+unsubscr...@googlegroups.com.
> 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 puppet-users+unsubscr...@googlegroups.com.
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