module Cvprac::Api::Configlet
CVP Configlet
api methods rubocop:disable Metrics/ModuleLength
Public Instance Methods
Add configlet
@param [String] name The name of the desired configlet @param [String] config Multiline string of EOS configuration
@return [String, nil] The key for the new configlet. nil on failure
@raise CvpApiError
on failure. Common: errorCode: 132518: Data already
exists in Database.
@example
result = api.add_configlet('api_test_3', "interface Ethernet1\n shutdown")
# File lib/cvprac/api/configlet.rb, line 56 def add_configlet(name, config) log(Logger::DEBUG) do "add_configlet: #{name} Config: #{config.inspect}" end resp = @clnt.post('/configlet/addConfiglet.do', body: { name: name, config: config.to_s }.to_json) log(Logger::DEBUG) do "add_configlet: #{name} Response: #{resp.inspect}" end resp['data'] end
Apply configlets to a device
@param [String] app_name The name to use in the info field @param [Hash] device Device definition from get_device_by_id() @param [Hash] new_configlets List of configlet name & key pairs
@return [Hash] Hash including status and a list of task IDs created,
if any
@example
result = api.apply_configlets_to_device('test', {...}, [{'name' => 'new_configlet', 'key' => '...'}]) => {"data"=>{"taskIds"=>["8"], "status"=>"success"}}
rubocop:disable Metrics/MethodLength, Metrics/AbcSize
# File lib/cvprac/api/configlet.rb, line 181 def apply_configlets_to_device(app_name, device, new_configlets) log(Logger::DEBUG) { "apply_configlets_to_device: #{app_name}" } # get the list of existing configlets configlets = get_configlets_by_device_id(device['systemMacAddress']) # Get a list of the configlet names and keys cnames = [] ckeys = [] configlets.each do |configlet| cnames << configlet['name'] ckeys << configlet['key'] end new_configlets.each do |configlet| cnames << configlet['name'] ckeys << configlet['key'] end info = "#{app_name}: Configlet Assign: to Device #{device['fqdn']}" info_preview = "<b>Configlet Assign:</b> to Device #{device['fqdn']}" data = { data: [{ id: 1, info: info, infoPreview: info_preview, note: '', action: 'associate', nodeType: 'configlet', nodeId: '', configletList: ckeys, configletNamesList: cnames, ignoreConfigletNamesList: [], ignoreConfigletList: [], configletBuilderList: [], configletBuilderNamesList: [], ignoreConfigletBuilderList: [], ignoreConfigletBuilderNamesList: [], toId: device['systemMacAddress'], toIdType: 'netelement', fromId: '', nodeName: '', fromName: '', toName: device['fqdn'], nodeIpAddress: device['ipAddress'], nodeTargetIpAddress: device['ipAddress'], childTasks: [], parentTask: '' }] } log(Logger::DEBUG) do "#{__method__}: saveTopology data #{data['data']}" end add_temp_action(data) save_topology_v2([]) end
Delete configlet
@param [String] name The name of the desired configlet @param [String] key The configlet key
@return [String] The request result
@raise CvpApiError
on failure. Common when name or key is invalid:
errorCode: 132718: Invalid input parameters.
# File lib/cvprac/api/configlet.rb, line 98 def delete_configlet(name, key) log(Logger::DEBUG) { "delete_configlet: #{name} Key: #{key}" } resp = @clnt.post('/configlet/deleteConfiglet.do', body: [{ name: name, key: key }].to_json) resp['data'] end
Get configlet definition by configlet name
@param [String] name The name of the desired configlet
@return [Hash] configlet definition
@example
configlet = api.get_configlet_by_name('api_test_3')
# File lib/cvprac/api/configlet.rb, line 134 def get_configlet_by_name(name) log(Logger::DEBUG) { "get_configlet_by_name: #{name}" } @clnt.get('/configlet/getConfigletByName.do', data: { name: name }) end
Get all configlet definitions
@param [Fixnum] start_i (0) Start index of pagination @param [Fixnum] end_i (0) End index for pagination. 0 will get all @param [String] type ('Configlet') Possible types are All, Configlet
,
Builder, Draft, Builderwithoutdraft, Generated, IgnoreDraft
@return [Hash] configlet definitions with keys: total and data (a list
of definitions)
@example
configlet = api.get_configlets()
# File lib/cvprac/api/configlet.rb, line 117 def get_configlets(start_i = 0, end_i = 0, type = 'Configlet') log(Logger::DEBUG) do "get_configlets: start=#{start_i}, end=#{end_i}, type=#{type}" end @clnt.get('/configlet/getConfiglets.do', data: { startIndex: start_i, endIndex: end_i, type: type }) end
Get devices associated with a configlet name
@param [String] name The name of the desired configlet @param opts [Hash] Optional arguments @option opts [String] :queryparam Search string @option opts [Fixnum] :start_index (0) Start index for pagination @option opts [Fixnum] :end_index (0) End index for pagination
@return [Hash] configlet definition
@example
configlet = api.get_configlet_by_name('api_test_3')
# File lib/cvprac/api/configlet.rb, line 152 def get_devices_by_configlet_name(name, **opts) opts = { queryparam: nil, start_index: 0, end_index: 0 }.merge(opts) log(Logger::DEBUG) { "get_configlet_by_name: #{name}" } @clnt.get('/configlet/getAppliedDevices.do', data: { configletName: name, queryparam: opts[:queryparam], startIndex: opts[:start_index], endIndex: opts[:end_index] }) end
Remove configlets from a device
@param [String] app_name The name to use in the info field @param [Hash] device Device definition from get_device_by_id() @param [Hash] configlets List of configlet name & key pairs to remove
@return [Hash] Hash including status and a list of task IDs created,
if any
@example
result = api.remove_configlets_from_device('test', {...}, [{'name' => 'configlet', 'key' => '...'}]) => {"data"=>{"taskIds"=>["8"], "status"=>"success"}}
# File lib/cvprac/api/configlet.rb, line 250 def remove_configlets_from_device(app_name, device, configlets) log(Logger::DEBUG) { "#{__method__}: #{app_name}" } # get the list of existing configlets curr_cfglts = get_configlets_by_device_id(device['systemMacAddress']) # Get a list of the configlet names and keys keep_cnames = [] keep_ckeys = [] curr_cfglts.each do |configlet| next if configlets.include?('name' => configlet['name'], 'key' => configlet['key']) keep_cnames << configlet['name'] keep_ckeys << configlet['key'] end del_cnames = [] del_ckeys = [] configlets.each do |configlet| del_cnames << configlet['name'] del_ckeys << configlet['key'] end info = "#{app_name}: Configlet Remove from Device #{device['fqdn']}" info_preview = "<b>Configlet Remove:</b> from Device #{device['fqdn']}" data = { data: [{ id: 1, info: info, infoPreview: info_preview, note: '', action: 'associate', nodeType: 'configlet', nodeId: '', configletList: keep_ckeys, configletNamesList: keep_cnames, ignoreConfigletNamesList: del_cnames, ignoreConfigletList: del_ckeys, configletBuilderList: [], configletBuilderNamesList: [], ignoreConfigletBuilderList: [], ignoreConfigletBuilderNamesList: [], toId: device['systemMacAddress'], toIdType: 'netelement', fromId: '', nodeName: '', fromName: '', toName: device['fqdn'], nodeIpAddress: device['ipAddress'], nodeTargetIpAddress: device['ipAddress'], childTasks: [], parentTask: '' }] } log(Logger::DEBUG) do "#{__method__}: saveTopology data #{data['data']}" end add_temp_action(data) save_topology_v2([]) end
Update configlet
@param [String] name The name of the desired configlet @param [String] key The configlet key @param [Hash] config The configlet definition
@return [String] The key for the new configlet
@example
result = api.update_configlet('api_test_3', configlet_new['key'], "interface Ethernet1\n shutdown")
# File lib/cvprac/api/configlet.rb, line 79 def update_configlet(name, key, config) log(Logger::DEBUG) do "update_configlet: #{name} Key: #{key} Config: #{config.inspect}" end data = @clnt.post('/configlet/updateConfiglet.do', body: { name: name, key: key, config: config }.to_json) data['data'] end