pytbox 0.0.9__tar.gz → 0.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pytbox might be problematic. Click here for more details.

Files changed (80) hide show
  1. {pytbox-0.0.9/src/pytbox.egg-info → pytbox-0.1.1}/PKG-INFO +4 -3
  2. {pytbox-0.0.9 → pytbox-0.1.1}/pyproject.toml +17 -4
  3. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/base.py +19 -3
  4. pytbox-0.1.1/src/pytbox/categraf/build_config.py +148 -0
  5. pytbox-0.1.1/src/pytbox/categraf/instances.toml +36 -0
  6. pytbox-0.1.1/src/pytbox/categraf/jinja2/input.dns_query/dns_query.toml.j2 +12 -0
  7. pytbox-0.1.1/src/pytbox/categraf/jinja2/input.net_response/net_response.toml.j2 +9 -0
  8. pytbox-0.1.1/src/pytbox/categraf/jinja2/input.snmp/cisco_interface.toml.j2 +96 -0
  9. pytbox-0.1.1/src/pytbox/categraf/jinja2/input.snmp/cisco_system.toml.j2 +41 -0
  10. pytbox-0.1.1/src/pytbox/categraf/jinja2/input.snmp/h3c_interface.toml.j2 +96 -0
  11. pytbox-0.1.1/src/pytbox/categraf/jinja2/input.snmp/h3c_system.toml.j2 +41 -0
  12. pytbox-0.1.1/src/pytbox/categraf/jinja2/input.snmp/huawei_interface.toml.j2 +96 -0
  13. pytbox-0.1.1/src/pytbox/categraf/jinja2/input.snmp/huawei_system.toml.j2 +41 -0
  14. pytbox-0.1.1/src/pytbox/categraf/jinja2/input.snmp/ruijie_interface.toml.j2 +96 -0
  15. pytbox-0.1.1/src/pytbox/categraf/jinja2/input.snmp/ruijie_system.toml.j2 +41 -0
  16. pytbox-0.1.1/src/pytbox/mail/alimail.py +129 -0
  17. pytbox-0.1.1/src/pytbox/mail/client.py +221 -0
  18. pytbox-0.1.1/src/pytbox/network/meraki.py +169 -0
  19. pytbox-0.1.1/src/pytbox/win/ad.py +30 -0
  20. {pytbox-0.0.9 → pytbox-0.1.1/src/pytbox.egg-info}/PKG-INFO +4 -3
  21. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox.egg-info/SOURCES.txt +12 -0
  22. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox.egg-info/requires.txt +3 -2
  23. pytbox-0.0.9/src/pytbox/categraf/build_config.py +0 -91
  24. pytbox-0.0.9/src/pytbox/categraf/instances.toml +0 -16
  25. pytbox-0.0.9/src/pytbox/categraf/jinja2/input.dns_query/dns_query.toml.j2 +0 -0
  26. pytbox-0.0.9/src/pytbox/categraf/jinja2/input.net_response/net_response.toml.j2 +0 -0
  27. {pytbox-0.0.9 → pytbox-0.1.1}/MANIFEST.in +0 -0
  28. {pytbox-0.0.9 → pytbox-0.1.1}/README.md +0 -0
  29. {pytbox-0.0.9 → pytbox-0.1.1}/setup.cfg +0 -0
  30. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/alert/alert_handler.py +0 -0
  31. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/alert/ping.py +0 -0
  32. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/alicloud/sls.py +0 -0
  33. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/categraf/jinja2/__init__.py +0 -0
  34. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/categraf/jinja2/input.cpu/cpu.toml.j2 +0 -0
  35. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/categraf/jinja2/input.disk/disk.toml.j2 +0 -0
  36. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/categraf/jinja2/input.diskio/diskio.toml.j2 +0 -0
  37. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/categraf/jinja2/input.http_response/http_response.toml.j2 +0 -0
  38. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/categraf/jinja2/input.mem/mem.toml.j2 +0 -0
  39. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/categraf/jinja2/input.net/net.toml.j2 +0 -0
  40. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/categraf/jinja2/input.ping/ping.toml.j2 +0 -0
  41. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/categraf/jinja2/input.prometheus/prometheus.toml.j2 +0 -0
  42. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/categraf/jinja2/input.vsphere/vsphere.toml.j2 +0 -0
  43. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/cli/__init__.py +0 -0
  44. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/cli/categraf/__init__.py +0 -0
  45. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/cli/categraf/commands.py +0 -0
  46. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/cli/common/__init__.py +0 -0
  47. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/cli/common/options.py +0 -0
  48. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/cli/common/utils.py +0 -0
  49. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/cli/formatters/__init__.py +0 -0
  50. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/cli/formatters/output.py +0 -0
  51. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/cli/main.py +0 -0
  52. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/cli.py +0 -0
  53. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/common/__init__.py +0 -0
  54. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/database/mongo.py +0 -0
  55. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/database/victoriametrics.py +0 -0
  56. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/dida365.py +0 -0
  57. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/feishu/client.py +0 -0
  58. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/feishu/endpoints.py +0 -0
  59. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/feishu/errors.py +0 -0
  60. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/feishu/helpers.py +0 -0
  61. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/feishu/typing.py +0 -0
  62. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/log/logger.py +0 -0
  63. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/log/victorialog.py +0 -0
  64. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/onepassword_connect.py +0 -0
  65. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/onepassword_sa.py +0 -0
  66. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/utils/env.py +0 -0
  67. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/utils/load_config.py +0 -0
  68. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/utils/ping_checker.py +0 -0
  69. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/utils/response.py +0 -0
  70. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/utils/richutils.py +0 -0
  71. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox/utils/timeutils.py +0 -0
  72. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox.egg-info/dependency_links.txt +0 -0
  73. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox.egg-info/entry_points.txt +0 -0
  74. {pytbox-0.0.9 → pytbox-0.1.1}/src/pytbox.egg-info/top_level.txt +0 -0
  75. {pytbox-0.0.9 → pytbox-0.1.1}/tests/test_base.py +0 -0
  76. {pytbox-0.0.9 → pytbox-0.1.1}/tests/test_feishu.py +0 -0
  77. {pytbox-0.0.9 → pytbox-0.1.1}/tests/test_logger.py +0 -0
  78. {pytbox-0.0.9 → pytbox-0.1.1}/tests/test_onepassword_connect.py +0 -0
  79. {pytbox-0.0.9 → pytbox-0.1.1}/tests/test_onepassword_sa.py +0 -0
  80. {pytbox-0.0.9 → pytbox-0.1.1}/tests/test_victoriametrics.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytbox
3
- Version: 0.0.9
3
+ Version: 0.1.1
4
4
  Summary: A collection of Python integrations and utilities (Feishu, Dida365, VictoriaMetrics, ...)
5
5
  Author-email: mingming hou <houm01@foxmail.com>
6
6
  License-Expression: MIT
@@ -13,15 +13,16 @@ Requires-Dist: loguru>=0.7.3
13
13
  Requires-Dist: chinese_calendar>=1.10.0
14
14
  Requires-Dist: click>=8.0.0
15
15
  Requires-Dist: rich>=12.0.0
16
+ Requires-Dist: jinja2>=3.0.0
17
+ Requires-Dist: toml>=0.10.0
18
+ Requires-Dist: ldap3>=2.9.1
16
19
  Provides-Extra: dev
17
20
  Requires-Dist: pytest; extra == "dev"
18
21
  Requires-Dist: black; extra == "dev"
19
22
  Requires-Dist: ruff; extra == "dev"
20
23
  Requires-Dist: python-dotenv; extra == "dev"
21
24
  Provides-Extra: cli
22
- Requires-Dist: jinja2>=3.0.0; extra == "cli"
23
25
  Requires-Dist: pyyaml>=6.0; extra == "cli"
24
- Requires-Dist: toml>=0.10.0; extra == "cli"
25
26
 
26
27
  # PytBox
27
28
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pytbox"
7
- version = "0.0.9"
7
+ version = "0.1.1"
8
8
  description = "A collection of Python integrations and utilities (Feishu, Dida365, VictoriaMetrics, ...)"
9
9
  authors = [{ name = "mingming hou", email = "houm01@foxmail.com" }]
10
10
  license = "MIT"
@@ -21,6 +21,9 @@ dependencies = [
21
21
  "chinese_calendar>=1.10.0",
22
22
  "click>=8.0.0", # 添加 click 依赖
23
23
  "rich>=12.0.0", # 添加 rich 依赖
24
+ "jinja2>=3.0.0", # 模板渲染
25
+ "toml>=0.10.0", # TOML 输出支持
26
+ "ldap3>=2.9.1", # LDAP 支持
24
27
  ]
25
28
 
26
29
  [project.scripts]
@@ -29,9 +32,7 @@ pytbox = "pytbox.cli:main" # 添加命令行入口点
29
32
  [project.optional-dependencies]
30
33
  dev = ["pytest", "black", "ruff", "python-dotenv"]
31
34
  cli = [
32
- "jinja2>=3.0.0", # 模板渲染
33
- "pyyaml>=6.0", # YAML 输出支持
34
- "toml>=0.10.0", # TOML 输出支持
35
+ "pyyaml>=6.0", # YAML 输出支持
35
36
  ]
36
37
 
37
38
  [tool.setuptools]
@@ -39,3 +40,15 @@ include-package-data = true
39
40
 
40
41
  [tool.setuptools.packages.find]
41
42
  where = ["src"]
43
+
44
+ [tool.pytest.ini_options]
45
+ filterwarnings = [
46
+ "ignore::DeprecationWarning:pyasn1.*",
47
+ "ignore:tagMap is deprecated:DeprecationWarning",
48
+ "ignore:typeMap is deprecated:DeprecationWarning",
49
+ ]
50
+ # 显示日志输出
51
+ log_cli = true
52
+ log_cli_level = "INFO"
53
+ log_cli_format = "%(asctime)s [%(levelname)8s] %(name)s: %(message)s"
54
+ log_cli_date_format = "%Y-%m-%d %H:%M:%S"
@@ -8,11 +8,11 @@ from pytbox.feishu.client import Client as FeishuClient
8
8
  from pytbox.dida365 import Dida365
9
9
  from pytbox.alert.alert_handler import AlertHandler
10
10
  from pytbox.log.logger import AppLogger
11
-
11
+ from pytbox.win.ad import ADClient
12
+ from pytbox.network.meraki import Meraki
12
13
 
13
14
  config = load_config_by_file(path='/workspaces/pytbox/tests/alert/config_dev.toml', oc_vault_id=os.environ.get('oc_vault_id'))
14
15
 
15
-
16
16
  def get_mongo(collection):
17
17
  return Mongo(
18
18
  host=config['mongo']['host'],
@@ -45,4 +45,20 @@ def get_logger(app):
45
45
  feishu=feishu,
46
46
  dida=dida,
47
47
  mongo=get_mongo('alert_program')
48
- )
48
+ )
49
+
50
+ # ad_dev = ADClient(
51
+ # server=config['ad']['dev']['AD_SERVER'],
52
+ # base_dn=config['ad']['dev']['BASE_DN'],
53
+ # username=config['ad']['dev']['AD_USERNAME'],
54
+ # password=config['ad']['dev']['AD_PASSWORD']
55
+ # )
56
+
57
+ # ad_prod = ADClient(
58
+ # server=config['ad']['prod']['AD_SERVER'],
59
+ # base_dn=config['ad']['prod']['BASE_DN'],
60
+ # username=config['ad']['prod']['AD_USERNAME'],
61
+ # password=config['ad']['prod']['AD_PASSWORD']
62
+ # )
63
+
64
+ meraki = Meraki(api_key=config['meraki']['api_key'], organization_id=config['meraki']['organization_id'])
@@ -0,0 +1,148 @@
1
+ #!/usr/bin/env python3
2
+
3
+ import os
4
+ from pathlib import Path
5
+ from pytbox.utils.load_config import load_config_by_file
6
+ from glob import glob
7
+ import os
8
+ from jinja2 import Environment, FileSystemLoader
9
+
10
+
11
+ jinja2_path = Path(__file__).parent / 'jinja2'
12
+ env = Environment(loader=FileSystemLoader(jinja2_path))
13
+
14
+ ping_template = env.get_template('input.ping/ping.toml.j2')
15
+ prometheus_template = env.get_template('input.prometheus/prometheus.toml.j2')
16
+
17
+
18
+ class BuildConfig:
19
+ '''
20
+ 生成配置
21
+
22
+ Args:
23
+ instances (_type_): _description_
24
+ output_dir (_type_): _description_
25
+ '''
26
+ def __init__(self, instances, output_dir):
27
+ self.instances = load_config_by_file(instances)
28
+ self.output_dir = output_dir
29
+
30
+ def _get_template(self, template_name):
31
+ return env.get_template(template_name)
32
+
33
+ def common(self, input_name):
34
+ template = self._get_template(f'input.{input_name}/{input_name}.toml.j2')
35
+ render_data = template.render()
36
+ target_dir = Path(self.output_dir) / f'input.{input_name}'
37
+ if not target_dir.exists():
38
+ target_dir.mkdir(parents=True, exist_ok=True)
39
+
40
+ with open(Path(self.output_dir) / f'input.{input_name}' / f'{input_name}.toml', 'w', encoding='utf-8') as f:
41
+ f.write(render_data)
42
+
43
+ def ping(self):
44
+ if self.instances.get('ping'):
45
+ instances = self.instances['ping']['instance']
46
+ render_data = ping_template.render(instances=instances)
47
+ target_dir = Path(self.output_dir) / 'input.ping'
48
+ if not target_dir.exists():
49
+ target_dir.mkdir(parents=True, exist_ok=True)
50
+
51
+ with open(Path(self.output_dir) / 'input.ping' / 'ping.toml', 'w', encoding='utf-8') as f:
52
+ f.write(render_data)
53
+
54
+ def prometheus(self):
55
+ if self.instances.get('prometheus'):
56
+ instances = self.instances['prometheus']['urls']
57
+ render_data = prometheus_template.render(instances=instances)
58
+ target_dir = Path(self.output_dir) / 'input.prometheus'
59
+ if not target_dir.exists():
60
+ target_dir.mkdir(parents=True, exist_ok=True)
61
+ with open(Path(self.output_dir) / 'input.prometheus' / 'prometheus.toml', 'w', encoding='utf-8') as f:
62
+ f.write(render_data)
63
+
64
+ def vsphere(self):
65
+ if self.instances.get('vsphere'):
66
+ template = self._get_template('input.vsphere/vsphere.toml.j2')
67
+ instances = self.instances['vsphere']['instance']
68
+ render_data = template.render(instances=instances)
69
+ target_dir = Path(self.output_dir) / 'input.vsphere'
70
+ if not target_dir.exists():
71
+ target_dir.mkdir(parents=True, exist_ok=True)
72
+ with open(Path(self.output_dir) / 'input.vsphere' / 'vsphere.toml', 'w', encoding='utf-8') as f:
73
+ f.write(render_data)
74
+
75
+ def http_response(self):
76
+ template = self._get_template('input.http_response/http_response.toml.j2')
77
+ if self.instances.get('http_response'):
78
+ instances = self.instances['http_response']['instance']
79
+ render_data = template.render(instances=instances)
80
+ target_dir = Path(self.output_dir) / 'input.http_response'
81
+ if not target_dir.exists():
82
+ target_dir.mkdir(parents=True, exist_ok=True)
83
+ with open(Path(self.output_dir) / 'input.http_response' / 'http_response.toml', 'w', encoding='utf-8') as f:
84
+ f.write(render_data)
85
+
86
+ def net_response(self):
87
+ template = self._get_template('input.net_response/net_response.toml.j2')
88
+ if self.instances.get('net_response'):
89
+ instances = self.instances['net_response']['instance']
90
+ render_data = template.render(instances=instances)
91
+ target_dir = Path(self.output_dir) / 'input.net_response'
92
+ if not target_dir.exists():
93
+ target_dir.mkdir(parents=True, exist_ok=True)
94
+ with open(Path(self.output_dir) / 'input.net_response' / 'net_response.toml', 'w', encoding='utf-8') as f:
95
+ f.write(render_data)
96
+
97
+ def dns_query(self):
98
+ template = self._get_template('input.dns_query/dns_query.toml.j2')
99
+ if self.instances.get('dns_query'):
100
+ instances = self.instances['dns_query']['instance']
101
+ render_data = template.render(instances=instances)
102
+ target_dir = Path(self.output_dir) / 'input.dns_query'
103
+ if not target_dir.exists():
104
+ target_dir.mkdir(parents=True, exist_ok=True)
105
+ with open(Path(self.output_dir) / 'input.dns_query' / 'dns_query.toml', 'w', encoding='utf-8') as f:
106
+ f.write(render_data)
107
+
108
+ def snmp(self):
109
+ if self.instances.get('snmp'):
110
+ device_types = self.instances['snmp']['instances']
111
+ for device_type in device_types:
112
+ instances = self.instances['snmp']['instances'][device_type]
113
+ jinja2_dir = Path(jinja2_path) / 'input.snmp'
114
+ device_templates = glob(str(jinja2_dir / f'{device_type}_*.toml.j2'))
115
+ if not device_templates:
116
+ continue
117
+
118
+ for tmpl_path in device_templates:
119
+ tmpl_name = os.path.basename(tmpl_path)
120
+ # 例如 h3c_system.toml.j2 -> h3c_system
121
+ base_name = tmpl_name.replace('.toml.j2', '')
122
+
123
+ template = self._get_template(f'input.snmp/{tmpl_name}')
124
+ # 修复数据结构:模板期望的是数组,每个元素是字典
125
+ # instances 是 [{"udp://10.1.1.1:161": {...}, "udp://10.1.1.2:161": {...}}, ...]
126
+ render_data = template.render(instances=instances)
127
+
128
+ target_dir = Path(self.output_dir) / 'input.snmp'
129
+ if not target_dir.exists():
130
+ target_dir.mkdir(parents=True, exist_ok=True)
131
+
132
+ output_file = target_dir / f'{base_name}.toml'
133
+ with open(output_file, 'w', encoding='utf-8') as f:
134
+ f.write(render_data)
135
+
136
+ def run(self):
137
+ self.common('cpu')
138
+ self.common('mem')
139
+ self.common('net')
140
+ self.common('disk')
141
+ self.common('diskio')
142
+ self.vsphere()
143
+ self.ping()
144
+ self.prometheus()
145
+ self.http_response()
146
+ self.net_response()
147
+ self.dns_query()
148
+ self.snmp()
@@ -0,0 +1,36 @@
1
+ [ping]
2
+ [[ping.instance]]
3
+ "10.1.1.1" = { name = "x", env = "prod" }
4
+ "10.1.1.2" = { name = "demo02", env = "dev" }
5
+
6
+ [prometheus]
7
+ [[prometheus.urls]]
8
+ "http://10.1.1.1:9100" = { name = "x", env = "prod" }
9
+
10
+ [vsphere]
11
+ [[vsphere.instance]]
12
+ "test" = { vcenter = "https://10.1.1.1/sdk", username = "categraf@vsphere.local", password = "xxx" }
13
+
14
+ [http_response]
15
+ [[http_response.instance]]
16
+ "https://www.baidu.com" = { name = "x", env = "prod" }
17
+
18
+
19
+ [net_response]
20
+ [[net_response.instance]]
21
+ "124.74.245.90:8443" = { name = "x", env = "prod" }
22
+
23
+ [dns_query]
24
+ [[dns_query.instance]]
25
+ "119.29.29.29_baidu.com" = { dns_server = "119.29.29.29", domains = "www.baidu.com", labels = { name = "x", env = "prod" } }
26
+
27
+ [snmp]
28
+ # 支持 h3c,huawei,cisco,ruijie
29
+ [[snmp.instances.h3c]]
30
+ "10.1.1.1:161" = { version = 2, community = "public" }
31
+ "10.1.1.2:161" = { version = 2, community = "public" }
32
+ "10.1.1.3:161" = { version = 3, sec_name = "sec", auth_protocol = "SHA", auth_password = "pass01", priv_protocol = "AES", priv_password = "pass02", sec_level = "authPriv" }
33
+
34
+ # [[snmp.instances.huawei]]
35
+ # "udp://172.16.1.1:161" = { version = 2, community = "public"}
36
+ # "udp://172.16.1.2:161" = { version = 2, community = "public"}
@@ -0,0 +1,12 @@
1
+ {% for instance in instances %}
2
+ {% for name, data in instance.items() %}
3
+ [[instances]]
4
+ # append some labels for series
5
+ labels = { {% for k, v in data['labels'].items() %}{% if not loop.first %}, {% endif %}{% if k.isidentifier() %}{{ k }}{% else %}"{{ k }}"{% endif %} = "{{ v }}"{% endfor %} }
6
+ servers = ["{{ data['dns_server'] }}"]
7
+ ## Domains or subdomains to query.
8
+ domains = ["{{ data['domains'] }}"]
9
+ record_type = "A"
10
+ timeout = 2
11
+ {% endfor %}
12
+ {% endfor %}
@@ -0,0 +1,9 @@
1
+ {% for instance in instances %}
2
+ {% for target, labels in instance.items() %}
3
+ [[instances]]
4
+ targets = [
5
+ "{{ target }}"
6
+ ]
7
+ labels = { {% for k, v in labels.items() %}{% if not loop.first %}, {% endif %}{% if k.isidentifier() %}{{ k }}{% else %}"{{ k }}"{% endif %} = "{{ v }}"{% endfor %} }
8
+ {% endfor %}
9
+ {% endfor %}
@@ -0,0 +1,96 @@
1
+ {% for instance in instances %}
2
+ {% for agent, detail in instance.items() %}
3
+ [[instances]]
4
+ agents = [
5
+ "udp://{{agent}}"
6
+ ]
7
+ {% if detail.version == 2 %}
8
+ version = {{detail.version}}
9
+ community = "{{detail.community}}"
10
+ {% endif %}
11
+ {% if detail.version == 3 %}
12
+ version = {{detail.version}}
13
+ sec_name = "{{detail.sec_name}}"
14
+ auth_protocol = "{{detail.auth_protocol}}"
15
+ auth_password = "{{detail.auth_password}}"
16
+ priv_protocol = "{{detail.priv_protocol}}"
17
+ priv_password = "{{detail.priv_password}}"
18
+ sec_level = "{{detail.sec_level}}"
19
+ {% endif %}
20
+ timeout = "5s"
21
+ retries = 3
22
+ path = ["/usr/share/snmp/mibs"]
23
+ translator = "gosmi"
24
+ max_repetitions = 50
25
+
26
+ [[instances.field]]
27
+ name = "sysName"
28
+ oid = "1.3.6.1.2.1.1.5.0"
29
+ is_tag = true
30
+
31
+ [[instances.table]]
32
+ name = "interface"
33
+ inherit_tags = ["sysName"]
34
+ index_as_tag = true
35
+
36
+ [[instances.table.field]]
37
+ name = "ifIndex"
38
+ oid = "1.3.6.1.2.1.2.2.1.1"
39
+ is_tag = true
40
+
41
+ [[instances.table.field]]
42
+ name = "ifName"
43
+ oid = "1.3.6.1.2.1.31.1.1.1.1"
44
+ is_tag = true
45
+
46
+ [[instances.table.field]]
47
+ name = "ifDescr"
48
+ oid = "1.3.6.1.2.1.2.2.1.2"
49
+ is_tag = true
50
+
51
+ [[instances.table.field]]
52
+ name = "ifSpeed"
53
+ oid = "1.3.6.1.2.1.2.2.1.5"
54
+ # is_tag = true
55
+
56
+ [[instances.table.field]]
57
+ name = "ifAdminStatus"
58
+ oid = "1.3.6.1.2.1.2.2.1.7"
59
+ # is_tag = true
60
+
61
+ [[instances.table.field]]
62
+ name = "ifOperStatus"
63
+ oid = "1.3.6.1.2.1.2.2.1.8"
64
+ # is_tag = true
65
+
66
+ [[instances.table.field]]
67
+ name = "ifInDiscards"
68
+ oid = "1.3.6.1.2.1.2.2.1.13"
69
+
70
+ [[instances.table.field]]
71
+ name = "ifInErrors"
72
+ oid = "1.3.6.1.2.1.2.2.1.14"
73
+
74
+ [[instances.table.field]]
75
+ name = "ifOutDiscards"
76
+ oid = "1.3.6.1.2.1.2.2.1.19"
77
+
78
+ [[instances.table.field]]
79
+ name = "ifOutErrors"
80
+ oid = "1.3.6.1.2.1.2.2.1.20"
81
+
82
+ [[instances.table.field]]
83
+ name = "ifAlias"
84
+ oid = "1.3.6.1.2.1.31.1.1.1.18"
85
+ is_tag = true
86
+
87
+ [[instances.table.field]]
88
+ name = "ifHCInOctets"
89
+ oid = "1.3.6.1.2.1.31.1.1.1.6"
90
+
91
+ [[instances.table.field]]
92
+ name = "ifHCOutOctets"
93
+ oid = "1.3.6.1.2.1.31.1.1.1.10"
94
+
95
+ {% endfor %}
96
+ {% endfor %}
@@ -0,0 +1,41 @@
1
+ {% for instance in instances %}
2
+ {% for agent, detail in instance.items() %}
3
+ [[instances]]
4
+ agents = [
5
+ "udp://{{agent}}"
6
+ ]
7
+ {% if detail.version == 2 %}
8
+ version = {{detail.version}}
9
+ community = "{{detail.community}}"
10
+ {% endif %}
11
+ {% if detail.version == 3 %}
12
+ version = {{detail.version}}
13
+ sec_name = "{{detail.sec_name}}"
14
+ auth_protocol = "{{detail.auth_protocol}}"
15
+ auth_password = "{{detail.auth_password}}"
16
+ priv_protocol = "{{detail.priv_protocol}}"
17
+ priv_password = "{{detail.priv_password}}"
18
+ sec_level = "{{detail.sec_level}}"
19
+ {% endif %}
20
+ timeout = "5s"
21
+ retries = 3
22
+ path = ["/usr/share/snmp/mibs"]
23
+ translator = "gosmi"
24
+ max_repetitions = 50
25
+
26
+ [[instances.field]]
27
+ name = "sysName"
28
+ oid = "1.3.6.1.2.1.1.5.0"
29
+ is_tag = true
30
+
31
+ [[instances.field]]
32
+ oid = "1.3.6.1.2.1.1.1.0"
33
+ name = "sysDescr"
34
+ is_tag = true
35
+
36
+ [[instances.field]]
37
+ oid = "1.3.6.1.2.1.1.3.0"
38
+ name = "sysUpTime"
39
+ conversion = "float(2)"
40
+ {% endfor %}
41
+ {% endfor %}
@@ -0,0 +1,96 @@
1
+ {% for instance in instances %}
2
+ {% for agent, detail in instance.items() %}
3
+ [[instances]]
4
+ agents = [
5
+ "udp://{{agent}}"
6
+ ]
7
+ {% if detail.version == 2 %}
8
+ version = {{detail.version}}
9
+ community = "{{detail.community}}"
10
+ {% endif %}
11
+ {% if detail.version == 3 %}
12
+ version = {{detail.version}}
13
+ sec_name = "{{detail.sec_name}}"
14
+ auth_protocol = "{{detail.auth_protocol}}"
15
+ auth_password = "{{detail.auth_password}}"
16
+ priv_protocol = "{{detail.priv_protocol}}"
17
+ priv_password = "{{detail.priv_password}}"
18
+ sec_level = "{{detail.sec_level}}"
19
+ {% endif %}
20
+ timeout = "5s"
21
+ retries = 3
22
+ path = ["/usr/share/snmp/mibs"]
23
+ translator = "gosmi"
24
+ max_repetitions = 50
25
+
26
+ [[instances.field]]
27
+ name = "sysName"
28
+ oid = "1.3.6.1.2.1.1.5.0"
29
+ is_tag = true
30
+
31
+ [[instances.table]]
32
+ name = "interface"
33
+ inherit_tags = ["sysName"]
34
+ index_as_tag = true
35
+
36
+ [[instances.table.field]]
37
+ name = "ifIndex"
38
+ oid = "1.3.6.1.2.1.2.2.1.1"
39
+ is_tag = true
40
+
41
+ [[instances.table.field]]
42
+ name = "ifName"
43
+ oid = "1.3.6.1.2.1.31.1.1.1.1"
44
+ is_tag = true
45
+
46
+ [[instances.table.field]]
47
+ name = "ifDescr"
48
+ oid = "1.3.6.1.2.1.2.2.1.2"
49
+ is_tag = true
50
+
51
+ [[instances.table.field]]
52
+ name = "ifSpeed"
53
+ oid = "1.3.6.1.2.1.2.2.1.5"
54
+ # is_tag = true
55
+
56
+ [[instances.table.field]]
57
+ name = "ifAdminStatus"
58
+ oid = "1.3.6.1.2.1.2.2.1.7"
59
+ # is_tag = true
60
+
61
+ [[instances.table.field]]
62
+ name = "ifOperStatus"
63
+ oid = "1.3.6.1.2.1.2.2.1.8"
64
+ # is_tag = true
65
+
66
+ [[instances.table.field]]
67
+ name = "ifInDiscards"
68
+ oid = "1.3.6.1.2.1.2.2.1.13"
69
+
70
+ [[instances.table.field]]
71
+ name = "ifInErrors"
72
+ oid = "1.3.6.1.2.1.2.2.1.14"
73
+
74
+ [[instances.table.field]]
75
+ name = "ifOutDiscards"
76
+ oid = "1.3.6.1.2.1.2.2.1.19"
77
+
78
+ [[instances.table.field]]
79
+ name = "ifOutErrors"
80
+ oid = "1.3.6.1.2.1.2.2.1.20"
81
+
82
+ [[instances.table.field]]
83
+ name = "ifAlias"
84
+ oid = "1.3.6.1.2.1.31.1.1.1.18"
85
+ is_tag = true
86
+
87
+ [[instances.table.field]]
88
+ name = "ifHCInOctets"
89
+ oid = "1.3.6.1.2.1.31.1.1.1.6"
90
+
91
+ [[instances.table.field]]
92
+ name = "ifHCOutOctets"
93
+ oid = "1.3.6.1.2.1.31.1.1.1.10"
94
+
95
+ {% endfor %}
96
+ {% endfor %}
@@ -0,0 +1,41 @@
1
+ {% for instance in instances %}
2
+ {% for agent, detail in instance.items() %}
3
+ [[instances]]
4
+ agents = [
5
+ "udp://{{agent}}"
6
+ ]
7
+ {% if detail.version == 2 %}
8
+ version = {{detail.version}}
9
+ community = "{{detail.community}}"
10
+ {% endif %}
11
+ {% if detail.version == 3 %}
12
+ version = {{detail.version}}
13
+ sec_name = "{{detail.sec_name}}"
14
+ auth_protocol = "{{detail.auth_protocol}}"
15
+ auth_password = "{{detail.auth_password}}"
16
+ priv_protocol = "{{detail.priv_protocol}}"
17
+ priv_password = "{{detail.priv_password}}"
18
+ sec_level = "{{detail.sec_level}}"
19
+ {% endif %}
20
+ timeout = "5s"
21
+ retries = 3
22
+ path = ["/usr/share/snmp/mibs"]
23
+ translator = "gosmi"
24
+ max_repetitions = 50
25
+
26
+ [[instances.field]]
27
+ name = "sysName"
28
+ oid = "1.3.6.1.2.1.1.5.0"
29
+ is_tag = true
30
+
31
+ [[instances.field]]
32
+ oid = "1.3.6.1.2.1.1.1.0"
33
+ name = "sysDescr"
34
+ is_tag = true
35
+
36
+ [[instances.field]]
37
+ oid = "1.3.6.1.2.1.1.3.0"
38
+ name = "sysUpTime"
39
+ conversion = "float(2)"
40
+ {% endfor %}
41
+ {% endfor %}
@@ -0,0 +1,96 @@
1
+ {% for instance in instances %}
2
+ {% for agent, detail in instance.items() %}
3
+ [[instances]]
4
+ agents = [
5
+ "udp://{{agent}}"
6
+ ]
7
+ {% if detail.version == 2 %}
8
+ version = {{detail.version}}
9
+ community = "{{detail.community}}"
10
+ {% endif %}
11
+ {% if detail.version == 3 %}
12
+ version = {{detail.version}}
13
+ sec_name = "{{detail.sec_name}}"
14
+ auth_protocol = "{{detail.auth_protocol}}"
15
+ auth_password = "{{detail.auth_password}}"
16
+ priv_protocol = "{{detail.priv_protocol}}"
17
+ priv_password = "{{detail.priv_password}}"
18
+ sec_level = "{{detail.sec_level}}"
19
+ {% endif %}
20
+ timeout = "5s"
21
+ retries = 3
22
+ path = ["/usr/share/snmp/mibs"]
23
+ translator = "gosmi"
24
+ max_repetitions = 50
25
+
26
+ [[instances.field]]
27
+ name = "sysName"
28
+ oid = "1.3.6.1.2.1.1.5.0"
29
+ is_tag = true
30
+
31
+ [[instances.table]]
32
+ name = "interface"
33
+ inherit_tags = ["sysName"]
34
+ index_as_tag = true
35
+
36
+ [[instances.table.field]]
37
+ name = "ifIndex"
38
+ oid = "1.3.6.1.2.1.2.2.1.1"
39
+ is_tag = true
40
+
41
+ [[instances.table.field]]
42
+ name = "ifName"
43
+ oid = "1.3.6.1.2.1.31.1.1.1.1"
44
+ is_tag = true
45
+
46
+ [[instances.table.field]]
47
+ name = "ifDescr"
48
+ oid = "1.3.6.1.2.1.2.2.1.2"
49
+ is_tag = true
50
+
51
+ [[instances.table.field]]
52
+ name = "ifSpeed"
53
+ oid = "1.3.6.1.2.1.2.2.1.5"
54
+ # is_tag = true
55
+
56
+ [[instances.table.field]]
57
+ name = "ifAdminStatus"
58
+ oid = "1.3.6.1.2.1.2.2.1.7"
59
+ # is_tag = true
60
+
61
+ [[instances.table.field]]
62
+ name = "ifOperStatus"
63
+ oid = "1.3.6.1.2.1.2.2.1.8"
64
+ # is_tag = true
65
+
66
+ [[instances.table.field]]
67
+ name = "ifInDiscards"
68
+ oid = "1.3.6.1.2.1.2.2.1.13"
69
+
70
+ [[instances.table.field]]
71
+ name = "ifInErrors"
72
+ oid = "1.3.6.1.2.1.2.2.1.14"
73
+
74
+ [[instances.table.field]]
75
+ name = "ifOutDiscards"
76
+ oid = "1.3.6.1.2.1.2.2.1.19"
77
+
78
+ [[instances.table.field]]
79
+ name = "ifOutErrors"
80
+ oid = "1.3.6.1.2.1.2.2.1.20"
81
+
82
+ [[instances.table.field]]
83
+ name = "ifAlias"
84
+ oid = "1.3.6.1.2.1.31.1.1.1.18"
85
+ is_tag = true
86
+
87
+ [[instances.table.field]]
88
+ name = "ifHCInOctets"
89
+ oid = "1.3.6.1.2.1.31.1.1.1.6"
90
+
91
+ [[instances.table.field]]
92
+ name = "ifHCOutOctets"
93
+ oid = "1.3.6.1.2.1.31.1.1.1.10"
94
+
95
+ {% endfor %}
96
+ {% endfor %}