oxidized 0.29.1 → 0.37.0

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.
Files changed (236) hide show
  1. checksums.yaml +4 -4
  2. data/.coderabbit.yaml +21 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +45 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  5. data/.github/ISSUE_TEMPLATE/support-request.md +39 -0
  6. data/.github/workflows/codeql.yml +4 -4
  7. data/.github/workflows/publishdocker.yml +108 -13
  8. data/.github/workflows/ruby.yml +3 -12
  9. data/.github/workflows/stale.yml +6 -1
  10. data/.gitignore +2 -0
  11. data/.rubocop.yml +69 -13
  12. data/.rubocop_todo.yml +13 -143
  13. data/CHANGELOG.md +431 -4
  14. data/CONTRIBUTING.md +189 -0
  15. data/Dockerfile +89 -34
  16. data/README.md +59 -188
  17. data/Rakefile +58 -12
  18. data/bin/oxidized +2 -5
  19. data/docs/Configuration.md +382 -149
  20. data/docs/Creating-Models.md +262 -10
  21. data/docs/DeviceSimulation.md +196 -0
  22. data/docs/Docker.md +246 -0
  23. data/docs/Hooks.md +146 -51
  24. data/docs/Inputs.md +237 -0
  25. data/docs/Issues.md +123 -0
  26. data/docs/Model-Notes/APC.md +72 -0
  27. data/docs/Model-Notes/Cumulus.md +5 -0
  28. data/docs/Model-Notes/EatonNetwork.md +18 -0
  29. data/docs/Model-Notes/ExaLink.md +43 -0
  30. data/docs/Model-Notes/FSOS.md +17 -0
  31. data/docs/Model-Notes/Fortinet.md +75 -0
  32. data/docs/Model-Notes/GrandstreamHT8xx.md +8 -0
  33. data/docs/Model-Notes/HPEAruba.md +32 -0
  34. data/docs/Model-Notes/IvantiConnectSecure.md +59 -0
  35. data/docs/Model-Notes/OS6.md +10 -0
  36. data/docs/Model-Notes/README.md +1 -20
  37. data/docs/Model-Notes/RouterOS.md +28 -0
  38. data/docs/Model-Notes/SikluMHTG.md +7 -0
  39. data/docs/Model-Notes/TrueNAS.md +23 -0
  40. data/docs/Model-Notes/XGS4600-Zyxel.md +5 -0
  41. data/docs/ModelUnitTests.md +219 -0
  42. data/docs/Outputs.md +102 -5
  43. data/docs/Release.md +102 -0
  44. data/docs/Ruby-API.md +135 -2
  45. data/docs/Sources.md +34 -0
  46. data/docs/Supported-OS-Types.md +207 -270
  47. data/docs/Troubleshooting.md +43 -1
  48. data/extra/device2yaml.rb +259 -0
  49. data/extra/gitdiff-msteams.sh +32 -5
  50. data/extra/hooks/modelrules.rb +55 -0
  51. data/extra/hooks/modelrulesadvanced.rb +167 -0
  52. data/extra/hooks/srcipmap.rb +54 -0
  53. data/extra/nagios_check_failing_nodes.rb +1 -1
  54. data/extra/oxidized.runit +1 -1
  55. data/extra/rest_client.rb +5 -4
  56. data/extra/syslog.rb +11 -6
  57. data/lib/oxidized/cli/support.rb +152 -0
  58. data/lib/oxidized/cli.rb +21 -6
  59. data/lib/oxidized/config/vars.rb +33 -14
  60. data/lib/oxidized/config.rb +28 -17
  61. data/lib/oxidized/core.rb +50 -8
  62. data/lib/oxidized/hook/ciscosparkdiff.rb +11 -9
  63. data/lib/oxidized/hook/exec.rb +5 -4
  64. data/lib/oxidized/hook/githubrepo.rb +55 -18
  65. data/lib/oxidized/hook/noophook.rb +2 -2
  66. data/lib/oxidized/hook/slackdiff.rb +50 -14
  67. data/lib/oxidized/hook/xmppdiff.rb +9 -9
  68. data/lib/oxidized/hook.rb +68 -16
  69. data/lib/oxidized/input/cli.rb +8 -3
  70. data/lib/oxidized/input/debugtext.rb +40 -0
  71. data/lib/oxidized/input/debugyaml.rb +82 -0
  72. data/lib/oxidized/input/exec.rb +2 -11
  73. data/lib/oxidized/input/ftp.rb +2 -19
  74. data/lib/oxidized/input/http.rb +67 -17
  75. data/lib/oxidized/input/input.rb +35 -14
  76. data/lib/oxidized/input/scp.rb +27 -0
  77. data/lib/oxidized/input/ssh.rb +59 -83
  78. data/lib/oxidized/input/sshbase.rb +102 -0
  79. data/lib/oxidized/input/telnet.rb +20 -19
  80. data/lib/oxidized/input/tftp.rb +8 -8
  81. data/lib/oxidized/job.rb +18 -7
  82. data/lib/oxidized/jobs.rb +11 -1
  83. data/lib/oxidized/logger.rb +51 -0
  84. data/lib/oxidized/manager.rb +18 -17
  85. data/lib/oxidized/model/acos.rb +2 -1
  86. data/lib/oxidized/model/addpack.rb +26 -0
  87. data/lib/oxidized/model/adtran.rb +5 -1
  88. data/lib/oxidized/model/adva.rb +3 -3
  89. data/lib/oxidized/model/airfiber.rb +1 -1
  90. data/lib/oxidized/model/aos7.rb +11 -0
  91. data/lib/oxidized/model/aoscx.rb +37 -29
  92. data/lib/oxidized/model/aosw.rb +39 -29
  93. data/lib/oxidized/model/apc_aos.rb +7 -2
  94. data/lib/oxidized/model/apcaos.rb +39 -0
  95. data/lib/oxidized/model/aricentiss.rb +9 -2
  96. data/lib/oxidized/model/arubainstant.rb +93 -0
  97. data/lib/oxidized/model/asa.rb +11 -10
  98. data/lib/oxidized/model/asternos.rb +22 -0
  99. data/lib/oxidized/model/asyncos.rb +3 -3
  100. data/lib/oxidized/model/audiocodes.rb +2 -2
  101. data/lib/oxidized/model/awplus.rb +15 -12
  102. data/lib/oxidized/model/axos.rb +1 -1
  103. data/lib/oxidized/model/bdcom.rb +1 -0
  104. data/lib/oxidized/model/c4cmts.rb +1 -2
  105. data/lib/oxidized/model/ciscosma.rb +1 -1
  106. data/lib/oxidized/model/ciscosmb.rb +6 -1
  107. data/lib/oxidized/model/cnos.rb +13 -10
  108. data/lib/oxidized/model/comtrol.rb +1 -1
  109. data/lib/oxidized/model/comware.rb +5 -3
  110. data/lib/oxidized/model/cumulus.rb +14 -2
  111. data/lib/oxidized/model/defacto.rb +26 -0
  112. data/lib/oxidized/model/dellx.rb +1 -1
  113. data/lib/oxidized/model/dlink.rb +5 -2
  114. data/lib/oxidized/model/dlinknextgen.rb +55 -0
  115. data/lib/oxidized/model/dnos.rb +3 -0
  116. data/lib/oxidized/model/dslcommands.rb +93 -0
  117. data/lib/oxidized/model/dslsetup.rb +102 -0
  118. data/lib/oxidized/model/eatonnetwork.rb +70 -0
  119. data/lib/oxidized/model/edgecos.rb +3 -1
  120. data/lib/oxidized/model/edgeos.rb +7 -6
  121. data/lib/oxidized/model/edgeswitch.rb +3 -1
  122. data/lib/oxidized/model/efos.rb +41 -0
  123. data/lib/oxidized/model/eltex.rb +4 -2
  124. data/lib/oxidized/model/enterasys800.rb +2 -2
  125. data/lib/oxidized/model/enterprise_sonic.rb +46 -0
  126. data/lib/oxidized/model/eos.rb +3 -1
  127. data/lib/oxidized/model/exalink.rb +36 -0
  128. data/lib/oxidized/model/f5os.rb +17 -0
  129. data/lib/oxidized/model/fabricos.rb +2 -2
  130. data/lib/oxidized/model/fastiron.rb +5 -3
  131. data/lib/oxidized/model/firebrick.rb +2 -2
  132. data/lib/oxidized/model/firelinuxos.rb +13 -6
  133. data/lib/oxidized/model/firewareos.rb +10 -1
  134. data/lib/oxidized/model/fortigate.rb +160 -0
  135. data/lib/oxidized/model/fortios.rb +38 -48
  136. data/lib/oxidized/model/fsos.rb +46 -0
  137. data/lib/oxidized/model/gaiaos.rb +4 -4
  138. data/lib/oxidized/model/garderos.rb +38 -0
  139. data/lib/oxidized/model/grandstreamht8xx.rb +19 -0
  140. data/lib/oxidized/model/h3c.rb +1 -1
  141. data/lib/oxidized/model/ibos.rb +1 -0
  142. data/lib/oxidized/model/ingate.rb +47 -0
  143. data/lib/oxidized/model/ios.rb +57 -30
  144. data/lib/oxidized/model/iosxr.rb +2 -2
  145. data/lib/oxidized/model/ironware.rb +7 -5
  146. data/lib/oxidized/model/ivanti.rb +54 -0
  147. data/lib/oxidized/model/junos.rb +12 -5
  148. data/lib/oxidized/model/kornfeldos.rb +33 -0
  149. data/lib/oxidized/model/lenovonos.rb +2 -0
  150. data/lib/oxidized/model/linksyssrw.rb +3 -3
  151. data/lib/oxidized/model/linuxgeneric.rb +4 -2
  152. data/lib/oxidized/model/macros.rb +60 -0
  153. data/lib/oxidized/model/mimosab11.rb +34 -0
  154. data/lib/oxidized/model/ml66.rb +33 -0
  155. data/lib/oxidized/model/mlnxos.rb +18 -14
  156. data/lib/oxidized/model/model.rb +98 -103
  157. data/lib/oxidized/model/mtrlrfs.rb +1 -0
  158. data/lib/oxidized/model/ndms.rb +6 -0
  159. data/lib/oxidized/model/netgear.rb +14 -3
  160. data/lib/oxidized/model/netonix.rb +1 -1
  161. data/lib/oxidized/model/netscaler.rb +1 -1
  162. data/lib/oxidized/model/nodegrid.rb +1 -1
  163. data/lib/oxidized/model/nsxdfw.rb +31 -0
  164. data/lib/oxidized/model/nsxfirewall.rb +2 -1
  165. data/lib/oxidized/model/nxos.rb +20 -15
  166. data/lib/oxidized/model/ocnos.rb +42 -0
  167. data/lib/oxidized/model/onefinity.rb +18 -0
  168. data/lib/oxidized/model/openbsd.rb +1 -1
  169. data/lib/oxidized/model/opengear.rb +36 -1
  170. data/lib/oxidized/model/openwrt.rb +6 -6
  171. data/lib/oxidized/model/opnsense.rb +9 -1
  172. data/lib/oxidized/model/os6.rb +48 -0
  173. data/lib/oxidized/model/outputs.rb +5 -0
  174. data/lib/oxidized/model/panos.rb +2 -0
  175. data/lib/oxidized/model/perle.rb +41 -0
  176. data/lib/oxidized/model/pfsense.rb +9 -0
  177. data/lib/oxidized/model/powerconnect.rb +32 -11
  178. data/lib/oxidized/model/procurve.rb +6 -2
  179. data/lib/oxidized/model/qtech.rb +3 -1
  180. data/lib/oxidized/model/quantaos.rb +8 -6
  181. data/lib/oxidized/model/rgos.rb +33 -0
  182. data/lib/oxidized/model/riverbed.rb +104 -0
  183. data/lib/oxidized/model/routeros.rb +18 -11
  184. data/lib/oxidized/model/saos.rb +18 -1
  185. data/lib/oxidized/model/saos10.rb +38 -0
  186. data/lib/oxidized/model/siklu.rb +1 -1
  187. data/lib/oxidized/model/siklumhtg.rb +22 -0
  188. data/lib/oxidized/model/sixwind.rb +28 -0
  189. data/lib/oxidized/model/slxos.rb +3 -3
  190. data/lib/oxidized/model/smartbyte.rb +48 -0
  191. data/lib/oxidized/model/sonicos.rb +27 -20
  192. data/lib/oxidized/model/speedtouch.rb +1 -1
  193. data/lib/oxidized/model/sros.rb +3 -3
  194. data/lib/oxidized/model/srosmd.rb +1 -1
  195. data/lib/oxidized/model/supermicro.rb +1 -1
  196. data/lib/oxidized/model/telco.rb +1 -1
  197. data/lib/oxidized/model/tmos.rb +1 -0
  198. data/lib/oxidized/model/tnsr.rb +57 -0
  199. data/lib/oxidized/model/tplink.rb +5 -5
  200. data/lib/oxidized/model/trango.rb +4 -2
  201. data/lib/oxidized/model/truenas.rb +64 -3
  202. data/lib/oxidized/model/ucs.rb +1 -1
  203. data/lib/oxidized/model/unifiap.rb +144 -0
  204. data/lib/oxidized/model/uplinkolt.rb +46 -0
  205. data/lib/oxidized/model/voltaire.rb +1 -1
  206. data/lib/oxidized/model/voss.rb +3 -0
  207. data/lib/oxidized/model/vrp.rb +5 -1
  208. data/lib/oxidized/model/vyatta.rb +9 -3
  209. data/lib/oxidized/model/vyos.rb +37 -0
  210. data/lib/oxidized/model/xos.rb +10 -1
  211. data/lib/oxidized/model/zhoneolt.rb +4 -2
  212. data/lib/oxidized/model/zynos.rb +67 -3
  213. data/lib/oxidized/model/zynosadsl.rb +14 -0
  214. data/lib/oxidized/model/zynoscli.rb +1 -1
  215. data/lib/oxidized/model/zynosgs.rb +2 -0
  216. data/lib/oxidized/model/zynosmgs.rb +32 -0
  217. data/lib/oxidized/node.rb +99 -64
  218. data/lib/oxidized/nodes.rb +40 -19
  219. data/lib/oxidized/output/file.rb +80 -43
  220. data/lib/oxidized/output/git.rb +295 -151
  221. data/lib/oxidized/output/gitcrypt.rb +193 -185
  222. data/lib/oxidized/output/http.rb +63 -51
  223. data/lib/oxidized/output/output.rb +20 -4
  224. data/lib/oxidized/signals.rb +44 -0
  225. data/lib/oxidized/source/csv.rb +49 -49
  226. data/lib/oxidized/source/http.rb +76 -63
  227. data/lib/oxidized/source/jsonfile.rb +68 -0
  228. data/lib/oxidized/source/source.rb +73 -18
  229. data/lib/oxidized/source/sql.rb +71 -59
  230. data/lib/oxidized/version.rb +6 -4
  231. data/lib/oxidized/worker.rb +57 -29
  232. data/lib/oxidized.rb +4 -24
  233. data/lib/refinements.rb +21 -1
  234. data/oxidized.gemspec +45 -21
  235. metadata +248 -41
  236. data/lib/oxidized/model/timos.rb +0 -10
data/docs/Ruby-API.md CHANGED
@@ -2,11 +2,45 @@
2
2
 
3
3
  The following objects exist in Oxidized.
4
4
 
5
+ ## Index
6
+ - [Input](#input)
7
+ - [http](#http)
8
+ - [Output](#output)
9
+ - [Source](#source)
10
+ - [Model](#model)
11
+ - [At the top level](#at-the-top-level)
12
+ - [cfg](#cfg)
13
+ - [inputs](#inputs)
14
+ - [cmd](#cmd)
15
+ - [comment](#comment)
16
+ - [prompt](#prompt)
17
+ - [expect](#expect)
18
+ - [pre / post](#pre--post)
19
+ - [macro :enable](#macro-enable)
20
+ - [clean :escape_codes](#clean-escape_codes)
21
+ - [clean :cut](#clean-cut)
22
+ - [At the second level](#at-the-second-level)
23
+ - [comment](#comment-1)
24
+ - [password](#password)
25
+ - [post_login](#post_login)
26
+ - [pre_logout](#pre_logout)
27
+ - [send](#send)
28
+ - [cmd](#cmd-1)
29
+ - [Monkey patching](#monkey-patching)
30
+ - [clear: true](#clear-true)
31
+ - [prepend: true](#prepend-true)
32
+ - [Refinements - String Convenience Methods](#refinements)
33
+ - [cut_tail](#cut_tail)
34
+ - [cut_head](#cut_head)
35
+ - [cut_both](#cut_both)
36
+ - [keep_lines](#keep_lines)
37
+ - [reject_lines](#reject_lines)
38
+
5
39
  ## Input
6
40
 
7
41
  * gets config from nodes
8
42
  * must implement 'connect', 'get', 'cmd'
9
- * 'ssh', 'telnet', 'ftp', 'tftp', 'http' implemented
43
+ * 'ssh', 'telnet', 'ftp', 'tftp', 'scp', 'http' implemented
10
44
 
11
45
  ### http
12
46
 
@@ -59,6 +93,40 @@ The block may contain commands to change some behaviour for the given methods
59
93
 
60
94
  Supports [monkey patching](#monkey-patching).
61
95
 
96
+ #### 'inputs'
97
+ `inputs` can be used to specify multiple inputs to be run on the model. It
98
+ takes a list of either input symbols or lists of input symbols:
99
+ ```ruby
100
+ inputs [:ssh, %i[scp ftp]]
101
+ inputs [:ssh, :scp]
102
+ ```
103
+
104
+ Oxidized will run the model against each item of `inputs`. If an item is a
105
+ list of symbols (`%i[scp ftp]`), it will try each input in the order
106
+ configured in the `input/default` section of the oxidized configuration file.
107
+
108
+ If `inputs` is not specified, Oxidized will try each input that has a `cfg`
109
+ section in the model, in the order configured in the `input/default` section
110
+ of the oxidized configuration file.
111
+
112
+ To specify which command is to run against which input, use the `input`
113
+ parameter of the `cmd` configuration:
114
+ ```ruby
115
+ cmd 'upsabout', input: :ssh do |cfg|
116
+ comment cfg
117
+ end
118
+
119
+ cmd 'config.ini', input: %i[scp ftp] do |cfg|
120
+ "; ========== config.ini ==========\n" + cfg
121
+ end
122
+ ```
123
+
124
+ `cmd` without `input` parameter will run against every input.
125
+
126
+
127
+ See the [ApcAos model](/lib/oxidized/model/apcaos.rb) for a full example.
128
+
129
+
62
130
  #### `cmd`
63
131
 
64
132
  Is used to specify commands that should be executed on a model in order to
@@ -68,6 +136,7 @@ gather its configuration. It can be called with:
68
136
  * A string and a block
69
137
  * `:all` and a block
70
138
  * `:secret` and a block
139
+ * `:significant_changes` and a block
71
140
 
72
141
  The block takes a single parameter `cfg` containing the output of the command
73
142
  being processed.
@@ -88,11 +157,44 @@ given block before emitting it to hide secrets if secret hiding is enabled. The
88
157
  block should replace any secrets with `'<hidden>'` and return the resulting
89
158
  string.
90
159
 
160
+ Calling `cmd` with `:significant_changes` and a block will pass the final
161
+ configuration to the given block. The resulting string should contain
162
+ significant changes only and will be used to
163
+ [decide if the configuration should be stored](Configuration.md#store-configuration-only-on-significant-changes).
164
+
91
165
  Execution order is `:all`, `:secret`, and lastly the command specific block, if
92
166
  given.
93
167
 
168
+ The `cmd "string"` method accepts a lambda function via the `:if` argument
169
+ to execute the command only when the lambda evaluates to true.
170
+ The lambda function is evaluated at runtime in the instance context.
171
+ See [Conditional `cmd`](Creating-Models.md#conditional-cmd) for details.
172
+
173
+ The `cmd "string"` method accepts a list of supported inputs via the `:input`
174
+ argument to limit this command to specific inputs.
175
+ ```ruby
176
+ cmd 'config.ini', input: %i[scp ftp] do |cfg|
177
+ "; ========== config.ini ==========\n" + cfg
178
+ end
179
+ ```
180
+
94
181
  Supports [monkey patching](#monkey-patching).
95
182
 
183
+ #### pre / post
184
+ After all `cmd` have been run, the blocks defined in pre and post are called. The
185
+ output of pre will be prepended to the output of the model, The output of post
186
+ will be appended.
187
+
188
+ ```ruby
189
+ pre do
190
+ "Prepended output after cmd blocks have been run\n"
191
+ end
192
+
193
+ post do
194
+ "Appended output after cmd blocks have been run\n"
195
+ end
196
+ ```
197
+
96
198
  #### `comment`
97
199
 
98
200
  Called with a single string containing the string to prepend for comments in
@@ -119,6 +221,28 @@ it's further processed.
119
221
 
120
222
  Supports [monkey patching](#monkey-patching).
121
223
 
224
+ #### `macro :enable`
225
+ Implements an [handling of enable](Creating-Models.md#handling-enable-mode) for the model.
226
+
227
+ #### `clean :escape_codes`
228
+ [Remove ANSI escape codes](Creating-Models.md#remove-ansi-escape-codes) from the output.
229
+
230
+ #### `clean :cut`
231
+ Removes (default) the first and last line of the outputs (most of the time
232
+ command echo and prompt).
233
+ Arguments: head (default: 1), tail (default: 1)
234
+ ```ruby
235
+ clean :cut, head: 2, tail: 0
236
+ ```
237
+
238
+ Equivalent to:
239
+ ```ruby
240
+ cmd :all do |cfg|
241
+ cfg.cut_both(2, 0)
242
+ end
243
+ ```
244
+
245
+
122
246
  ### At the second level
123
247
 
124
248
  The following methods are available:
@@ -161,6 +285,10 @@ Supports [monkey patching](#monkey-patching).
161
285
  Usually used inside `expect` or blocks passed to `post_login`/`pre_logout`.
162
286
  Takes a single parameter: a string to be sent to the device.
163
287
 
288
+ #### `cmd`
289
+ You can nest a `cmd` block inside first level blocks. It will be executed at
290
+ runtime.
291
+
164
292
  ### Monkey patching
165
293
 
166
294
  Several model blocks accept behavior-modifying arguments that make monkey
@@ -171,7 +299,6 @@ This functionality is supported by `cfg`, `cmd`, `pre_*`, `post_*`, and `expect`
171
299
  blocks.
172
300
 
173
301
  #### `clear: true`
174
-
175
302
  Resets the existing block, allowing the user to completely override its contents.
176
303
 
177
304
  #### `prepend: true`
@@ -201,3 +328,9 @@ single line was present.
201
328
 
202
329
  Returns a multi-line string without the first and last lines, or an empty string
203
330
  if fewer than three lines were present.
331
+
332
+ #### `keep_lines`
333
+ Returns a multi-line string with only the lines matching any pattern (String or Regexp) given in an array.
334
+
335
+ #### `reject_lines`
336
+ Returns a multi-line string without the lines matching any pattern (String or Regexp) given in an array.
data/docs/Sources.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Sources
2
2
 
3
+ Note: in all sources, the map attribute `name` is mandatory. It is used to identify the node and
4
+ for example choose the filename for the configuration output.
5
+
3
6
  ## Source: CSV
4
7
 
5
8
  One line per device, colon separated. If `ip` isn't present, a DNS lookup will be done against `name`. For large installations, setting `ip` will dramatically reduce startup time.
@@ -55,6 +58,24 @@ and within: `~/.gnupg/gpg.conf`
55
58
  pinentry-mode loopback
56
59
  ```
57
60
 
61
+ ## Source: JSONFile
62
+
63
+ One object per device. Supports GPG encryption like the CSV Source.
64
+
65
+ ```yaml
66
+ source:
67
+ default: jsonfile
68
+ jsonfile:
69
+ file: /var/lib/oxidized/router.json
70
+ map:
71
+ name: hostname
72
+ model: os
73
+ username: username
74
+ password: password
75
+ vars_map:
76
+ enable: enable
77
+ ```
78
+
58
79
  ## Source: SQL
59
80
 
60
81
  Oxidized uses the `sequel` ruby gem. You can use a variety of databases that aren't explicitly listed. For more information visit https://github.com/jeremyevans/sequel Make sure you have the correct adapter!
@@ -187,3 +208,16 @@ source:
187
208
  scheme: https
188
209
  secure: false
189
210
  ```
211
+
212
+ HTTP source also supports pagination. Two settings must be enabled. (`pagination` as a bool and `pagination_key_name` as a string)
213
+ The `pagination_key_name` setting is the key name that an api returns to find the url of the next page.
214
+
215
+ **Disclaimer**: currently only tested with netbox as the source
216
+
217
+ ```yaml
218
+ source:
219
+ default: http
220
+ http:
221
+ pagination: true
222
+ pagination_key_name: 'next'
223
+ ```