Class: ZabbixManager::Hosts
- Defined in:
- lib/zabbix_manager/classes/hosts.rb
Instance Method Summary collapse
-
#create_or_update(data) ⇒ Object
使用 Zabbix API 创建或更新 Zabbix 对象.
-
#default_options ⇒ Object
在通过 Zabbix API 创建主机对象时使用的默认选项.
-
#dump_by_id(data) ⇒ Object
通过 Zabbix API 从指定的 key 值获取主机对象数据.
-
#get_ids_by_name(data) ⇒ Object
通过 Zabbix API 根据名称获取 Zabbix 对象的 ID.
-
#get_interfaceid(hostid) ⇒ Object
从 API 中基于提供的 hostid 获取 Zabbix interface 的 id.
-
#identify ⇒ Object
用于通过 Zabbix API 标识特定主机对象的 id 字段名称.
-
#method_name ⇒ Object
与 Zabbix API 交互的主机方法名称.
-
#unlink_templates(data) ⇒ Object
在 Hosts 中使用 Zabbix API 取消关联/移除模板.
Methods inherited from Basic
#add, #all, #create, #delete, #destroy, #get, #get_full_data, #get_id, #get_ids, #get_ids_by_identify, #get_key_ids, #get_key_ids_by_identify, #get_or_create, #get_or_create_keys, #get_raw, #hash_equals?, #initialize, #key, #keys, #log, #merge_hashes, #normalize_array, #normalize_hash, #parse_keys, #request_raw, #symbolize_keys, #update
Constructor Details
This class inherits a constructor from ZabbixManager::Basic
Instance Method Details
#create_or_update(data) ⇒ Object
使用 Zabbix API 创建或更新 Zabbix 对象
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/zabbix_manager/classes/hosts.rb', line 66 def create_or_update(data) # 输出调试日志,显示方法调用和参数信息 log "[DEBUG] 调用 #{method_name}.create_or_update 方法,参数: #{data.inspect}" # 获取 Zabbix 对象的 ID hostid = get_id(identify.to_sym => data[identify.to_sym]) # 如果不存在对应的对象ID,则创建新对象 return create(data) unless hostid # 获取对象的接口 ID interface_id = get_interfaceid(hostid) # 如果接口 ID 不存在,抛出异常 raise ZbxError, "#{data.inspect} get_interfaceid 查无记录" unless interface_id # 复制数据以避免修改原始数据 dump_data = data.dup # 从数据中提取并删除 interfaces,并合并接口 ID interfaces = dump_data.delete(:interfaces)&.merge(interfaceid: interface_id) # 构建参数,包括 interfaces 和 Zabbix 对象的键值对 params = dump_data.merge(interfaces: interfaces).merge(key.to_sym => hostid.to_s) # 更新对象 update(params) end |
#default_options ⇒ Object
在通过 Zabbix API 创建主机对象时使用的默认选项
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/zabbix_manager/classes/hosts.rb', line 16 def { host: nil, interfaces: { main: 1, useip: 1, type: 2, ip: nil, dns: "", port: 161, details: { version: 2, community: "public" } }, status: 0, available: 1, groups: [], proxy_hostid: nil, inventory_mode: 1 } end |
#dump_by_id(data) ⇒ Object
通过 Zabbix API 从指定的 key 值获取主机对象数据
40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/zabbix_manager/classes/hosts.rb', line 40 def dump_by_id(data) log "[DEBUG] 调用 dump_by_id 方法,参数: #{data.inspect}" get_raw({ filter: { key.to_sym => data[key.to_sym] }, output: "extend", selectHosts: "shorten" } ) end |
#get_ids_by_name(data) ⇒ Object
通过 Zabbix API 根据名称获取 Zabbix 对象的 ID
54 55 56 57 58 59 60 61 62 63 |
# File 'lib/zabbix_manager/classes/hosts.rb', line 54 def get_ids_by_name(data) log "[DEBUG] 调用 #{method_name}.get_ids_by_name 方法,参数: #{data.inspect}" result = get_raw({ filter: { name: [data].flatten }, output: [key] } ) result.empty? ? nil : result.map { |i| { key.to_sym => i[key] } } end |
#get_interfaceid(hostid) ⇒ Object
从 API 中基于提供的 hostid 获取 Zabbix interface 的 id
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/zabbix_manager/classes/hosts.rb', line 94 def get_interfaceid(hostid) log "[DEBUG] 调用 #{method_name}.get_interfaceid 方法,参数: #{hostid.inspect}" result = @client.api_request( method: "hostinterface.get", params: { output: "interfaceid", hostids: hostid } ) # 使用 dig 方法获取深层嵌套的值 interface_id = result&.dig(0, "interfaceid")&.to_i # 如果获取接口 ID 失败,提供更具体的错误信息 raise ZbxError, "无法获取 #{hostid} 的接口 ID" if interface_id.nil? interface_id end |
#identify ⇒ Object
用于通过 Zabbix API 标识特定主机对象的 id 字段名称
11 12 13 |
# File 'lib/zabbix_manager/classes/hosts.rb', line 11 def identify "host" end |
#method_name ⇒ Object
与 Zabbix API 交互的主机方法名称
6 7 8 |
# File 'lib/zabbix_manager/classes/hosts.rb', line 6 def method_name "host" end |
#unlink_templates(data) ⇒ Object
在 Hosts 中使用 Zabbix API 取消关联/移除模板
112 113 114 115 116 117 118 119 120 121 |
# File 'lib/zabbix_manager/classes/hosts.rb', line 112 def unlink_templates(data) result = @client.api_request( method: "host.massRemove", params: { hostids: data[:hosts_id], templates: data[:templates_id] } ) result.empty? ? false : true end |