Enhancing NetApp Puppet library - implementing netapp_snmp_community_delete

14 views
Skip to first unread message

nidhi mittal hada

unread,
Jun 29, 2017, 1:53:02 AM6/29/17
to Puppet Users
Hello All,

I am working on netapp puppet module enhancment present here https://github.com/puppetlabs/puppetlabs-netapp/

I have a doubt here regarding community acceptance to a thought flow.  


=============================================================================
I have got limitation of NETAPP API, i am using to interact with underlying system through my provider file.


I DO NOT have an available api "to obtain state of all resources of this type from underlying system."
Hence i do not have any way to populate my hash table in self.instances() function at all.
in result , "property hash" is not created properly.

WorkAround
I thought of a workaround, to set all properties as None in has and use name as @resource[:name]

  def self.instances
    Puppet.debug("Puppet::Provider::Netapp_snmp_community.cmode self.instances: Got to self.instances.")
    snmp_community_info = []
    snmp_community_info_hash = {
      :name           => @resource[:name]  >> for this particular resource
      :access_control => None,   >>>>>>>>>>>>>>>>.returning property as NOne
      :ensure         => :present
    }
    Puppet.debug("Puppet::Provider::Netapp_aggregate.cmode self.instances: aggr_info = #{snmp_community_info_hash}.")
    snmp_community_info << new(snmp_community_info_hash)
    Puppet.debug("Puppet:: returning instance .")
    snmp_community_info
  end

But i guess in self.instances @resource[:name] is not accessible.

Alternative
Finally i understood i can not use property hash in this situation.
I used just getter setter methods to code such case.
getter method
where AGAIN i do not have an API to obtain this resource properties from underlying system.

Hence i have implemented it this way.


===============================================================================
require_relative '../netapp_cmode'

Puppet::Type.type(:netapp_snmp_community_delete).provide(:cmode, :parent => Puppet::Provider::NetappCmode) do
  @doc = "Manage Netapp SNMP community [Family: vserver]"

  confine    :feature => :posix
  defaultfor :feature => :posix

  netapp_commands :snmpcommunitydelete    => 'snmp-community-delete'
  netapp_commands :snmpcommunitydeleteall => 'snmp-community-delete-all'



  def community_name 
    community_name = @resource[:community_name] + "1234"    >>>>>>>>>>>>>>> returning some value which will never be same as desired value asked in puppet manifest file
    community_name
  end


  def community_name=(value)
    if @resource[:community_name] == 'all'
      result = snmpcommunitydeleteall()
    else
      result = snmpcommunitydelete('access-control', 'ro', 'community', @resource[:community_name])
    end
  end
end

One more thing here .
There is no modify api at all 
And MUST requirement from this provider is to give delete capability.
Hence i placed delete / deleteall in setter method !!!!!!!!!

Here in setter method - i am calling delete or delete all 

Result
1) Its fulfilling my purpose well, expected goals i had are being met well.
2) But will such code be accepted by community ?
3) Or is there any other approach to handle such situation ?

Community opinion is most sought here please .. 

Thanks
Nidhi


Reply all
Reply to author
Forward
0 new messages