module Cvprac::Api::Configlet

CVP Configlet api methods rubocop:disable Metrics/ModuleLength

Public Instance Methods

add_configlet(name, config) click to toggle source

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_device(app_name, device, new_configlets) click to toggle source

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(name, key) click to toggle source

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_by_name(name) click to toggle source

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_configlets(start_i = 0, end_i = 0, type = 'Configlet') click to toggle source

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_by_configlet_name(name, **opts) click to toggle source

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_device(app_name, device, configlets) click to toggle source

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(name, key, config) click to toggle source

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