Hello All,
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