glazed 0.1.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 (85) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.yardopts +5 -0
  4. data/CHANGELOG.md +18 -0
  5. data/LICENSE.txt +202 -0
  6. data/NOTICE +16 -0
  7. data/README.md +3 -0
  8. data/Rakefile +12 -0
  9. data/exe/glazed +8 -0
  10. data/lib/glazed/cli_session.rb +178 -0
  11. data/lib/glazed/collector.rb +113 -0
  12. data/lib/glazed/command/base.rb +146 -0
  13. data/lib/glazed/command/orchestrate.rb +78 -0
  14. data/lib/glazed/command/run.rb +51 -0
  15. data/lib/glazed/command/send_signal.rb +69 -0
  16. data/lib/glazed/command/status.rb +179 -0
  17. data/lib/glazed/command/version.rb +23 -0
  18. data/lib/glazed/command.rb +39 -0
  19. data/lib/glazed/command_result.rb +26 -0
  20. data/lib/glazed/dialect/actions.rb +95 -0
  21. data/lib/glazed/dialect/communication_config.rb +63 -0
  22. data/lib/glazed/dialect/interaction.rb +32 -0
  23. data/lib/glazed/dialect/run.rb +84 -0
  24. data/lib/glazed/dialect/runbook.rb +97 -0
  25. data/lib/glazed/dialect/sensitive_pattern.rb +31 -0
  26. data/lib/glazed/dialect.rb +12 -0
  27. data/lib/glazed/dialects/awplus.rb +84 -0
  28. data/lib/glazed/dialects/base.rb +246 -0
  29. data/lib/glazed/dialects/ios.rb +173 -0
  30. data/lib/glazed/dialects/junos.rb +78 -0
  31. data/lib/glazed/dialects/nec_ix.rb +71 -0
  32. data/lib/glazed/dialects/wlc.rb +56 -0
  33. data/lib/glazed/dialects.rb +65 -0
  34. data/lib/glazed/finder.rb +62 -0
  35. data/lib/glazed/must.rb +54 -0
  36. data/lib/glazed/orchestrator/policy.rb +184 -0
  37. data/lib/glazed/orchestrator.rb +288 -0
  38. data/lib/glazed/plugin_registry.rb +70 -0
  39. data/lib/glazed/proto.rb +20 -0
  40. data/lib/glazed/proto_json.rb +34 -0
  41. data/lib/glazed/redactor.rb +158 -0
  42. data/lib/glazed/runner.rb +176 -0
  43. data/lib/glazed/secret.rb +74 -0
  44. data/lib/glazed/secrets.rb +59 -0
  45. data/lib/glazed/shell_command.rb +90 -0
  46. data/lib/glazed/sources/base.rb +79 -0
  47. data/lib/glazed/sources/command.rb +67 -0
  48. data/lib/glazed/sources/inline.rb +56 -0
  49. data/lib/glazed/sources/json_files.rb +87 -0
  50. data/lib/glazed/sources.rb +105 -0
  51. data/lib/glazed/state_backends/base.rb +72 -0
  52. data/lib/glazed/state_backends/sqlite.rb +299 -0
  53. data/lib/glazed/state_backends.rb +75 -0
  54. data/lib/glazed/step_context.rb +65 -0
  55. data/lib/glazed/steps/base.rb +89 -0
  56. data/lib/glazed/steps/batch_shell.rb +57 -0
  57. data/lib/glazed/steps/fetch.rb +67 -0
  58. data/lib/glazed/steps/publish.rb +94 -0
  59. data/lib/glazed/steps/redact.rb +77 -0
  60. data/lib/glazed/steps/shell.rb +107 -0
  61. data/lib/glazed/steps.rb +83 -0
  62. data/lib/glazed/storages/base.rb +167 -0
  63. data/lib/glazed/storages/filesystem.rb +144 -0
  64. data/lib/glazed/storages/git.rb +181 -0
  65. data/lib/glazed/storages/github.rb +269 -0
  66. data/lib/glazed/storages/memory.rb +125 -0
  67. data/lib/glazed/storages.rb +88 -0
  68. data/lib/glazed/transports/base.rb +103 -0
  69. data/lib/glazed/transports/ssh.rb +177 -0
  70. data/lib/glazed/transports/telnet.rb +100 -0
  71. data/lib/glazed/transports.rb +28 -0
  72. data/lib/glazed/v1/config_pb.rb +25 -0
  73. data/lib/glazed/v1/inventory_pb.rb +27 -0
  74. data/lib/glazed/v1/orchestrator_pb.rb +27 -0
  75. data/lib/glazed/v1/redaction_pb.rb +23 -0
  76. data/lib/glazed/v1/secret_pb.rb +22 -0
  77. data/lib/glazed/v1/state_pb.rb +25 -0
  78. data/lib/glazed/v1/steps_pb.rb +25 -0
  79. data/lib/glazed/v1/storage_pb.rb +34 -0
  80. data/lib/glazed/v1/workflow_pb.rb +29 -0
  81. data/lib/glazed/validation.rb +31 -0
  82. data/lib/glazed/version.rb +9 -0
  83. data/lib/glazed/workflow.rb +70 -0
  84. data/lib/glazed.rb +18 -0
  85. metadata +245 -0
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: glazed/v1/workflow.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'buf/validate/validate_pb'
8
+ require 'glazed/v1/redaction_pb'
9
+ require 'google/protobuf/any_pb'
10
+
11
+
12
+ descriptor_data = "\n\x18glazed/v1/workflow.proto\x12\tglazed.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x19glazed/v1/redaction.proto\x1a\x19google/protobuf/any.proto\"\x9d\x01\n\x08Workflow\x12/\n\x05steps\x18\x01 \x03(\x0b\x32\x0f.glazed.v1.StepB\x08\xbaH\x05\x92\x01\x02\x08\x01R\x05steps:`\xbaH]\x1a[\n\x1aworkflow.unique_step_names\x12\x19step names must be unique\x1a\"this.steps.map(s, s.name).unique()\"\xe3\x02\n\x04Step\x12\x1b\n\x04name\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04name\x12,\n\x05\x66\x65tch\x18\x02 \x01(\x0b\x32\x14.glazed.v1.FetchStepH\x00R\x05\x66\x65tch\x12/\n\x06redact\x18\x03 \x01(\x0b\x32\x15.glazed.v1.RedactStepH\x00R\x06redact\x12\x32\n\x07publish\x18\x04 \x01(\x0b\x32\x16.glazed.v1.PublishStepH\x00R\x07publish\x12,\n\x05shell\x18\x05 \x01(\x0b\x32\x14.glazed.v1.ShellStepH\x00R\x05shell\x12<\n\x0b\x62\x61tch_shell\x18\x06 \x01(\x0b\x32\x19.glazed.v1.BatchShellStepH\x00R\nbatchShell\x12.\n\x06plugin\x18\x07 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00R\x06pluginB\x0f\n\x06\x61\x63tion\x12\x05\xbaH\x02\x08\x01\"x\n\tFetchStep\x12\x1f\n\x06output\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06output\x12!\n\x07storage\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07storage\x12\'\n\x0ftimeout_seconds\x18\x03 \x01(\rR\x0etimeoutSeconds\"\xa3\x01\n\nRedactStep\x12\x1d\n\x05input\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05input\x12\x1f\n\x06output\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06output\x12!\n\x07storage\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07storage\x12\x32\n\tredaction\x18\x04 \x01(\x0b\x32\x14.glazed.v1.RedactionR\tredaction\"g\n\x0bPublishStep\x12\x1d\n\x05input\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x05input\x12!\n\x07storage\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07storage\x12\x16\n\x06output\x18\x03 \x01(\tR\x06output\"\x86\x02\n\tShellStep\x12\x19\n\x03run\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x03run\x12\x14\n\x05input\x18\x02 \x01(\tR\x05input\x12\x16\n\x06output\x18\x03 \x01(\tR\x06output\x12\x18\n\x07storage\x18\x04 \x01(\tR\x07storage\x12\'\n\x0ftimeout_seconds\x18\x05 \x01(\rR\x0etimeoutSeconds:m\xbaHj\x1ah\n\x19shell_step.output_storage\x12\x1eoutput and storage go together\x1a+(this.output == \'\') == (this.storage == \'\')\"T\n\x0e\x42\x61tchShellStep\x12\x19\n\x03run\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x03run\x12\'\n\x0ftimeout_seconds\x18\x02 \x01(\rR\x0etimeoutSecondsB\x14\xea\x02\x11Glazed::Proto::V1b\x06proto3"
13
+
14
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
15
+ pool.add_serialized_file(descriptor_data)
16
+
17
+ module Glazed
18
+ module Proto
19
+ module V1
20
+ Workflow = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Workflow").msgclass
21
+ Step = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Step").msgclass
22
+ FetchStep = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.FetchStep").msgclass
23
+ RedactStep = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.RedactStep").msgclass
24
+ PublishStep = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.PublishStep").msgclass
25
+ ShellStep = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.ShellStep").msgclass
26
+ BatchShellStep = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.BatchShellStep").msgclass
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,31 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ require 'google/protobuf'
7
+ require 'protovalidate'
8
+ require 'glazed'
9
+
10
+ module Glazed
11
+ # Raised when a message breaks the buf.validate rules of its schema.
12
+ class InvalidMessage < Error; end
13
+
14
+ # Checks messages against the buf.validate rules declared in their schema,
15
+ # including rules plugin gems declare for their settings.
16
+ module Validation
17
+ # @param message [Google::Protobuf::MessageExts] message to check
18
+ # @param origin [String, nil] where the message comes from, for the error message
19
+ # @return [void]
20
+ # @raise [InvalidMessage] listing every violation
21
+ # @example
22
+ # Glazed::Validation.validate!(config, origin: 'glazed.json')
23
+ #: (Google::Protobuf::MessageExts message, ?origin: String?) -> void
24
+ def self.validate!(message, origin: nil)
25
+ Protovalidate.validate(message)
26
+ rescue Protovalidate::ValidationError => e
27
+ details = e.violations.join('; ')
28
+ raise InvalidMessage, origin ? "#{origin}: #{details}" : details
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ module Glazed
7
+ # Gem version.
8
+ VERSION = '0.1.0' #: String
9
+ end
@@ -0,0 +1,70 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ require 'glazed'
7
+ require 'glazed/proto'
8
+ require 'glazed/steps'
9
+ require 'glazed/validation'
10
+
11
+ module Glazed
12
+ # Ordered, validated steps built from a {Proto::V1::Workflow}.
13
+ #
14
+ # @example
15
+ # context = Glazed::StepContext.from_proto(config.storages)
16
+ # workflow = Glazed::Workflow.from_proto(config.workflows.fetch('backup'), context:)
17
+ class Workflow
18
+ # Raised when steps are wired inconsistently.
19
+ class Invalid < Glazed::Error; end
20
+
21
+ # @param steps [Array<Steps::Base>] steps in order
22
+ # @raise [Invalid] when there are no steps, step names repeat, an input is
23
+ # not produced by an earlier step, or an output is produced twice
24
+ #: (steps: Array[Steps::Base]) -> void
25
+ def initialize(steps:)
26
+ @steps = steps.freeze #: Array[Steps::Base]
27
+ validate
28
+ end
29
+
30
+ # Builds every step of a workflow definition.
31
+ #
32
+ # @param workflow [Proto::V1::Workflow] workflow definition
33
+ # @param context [StepContext] named storages
34
+ # @return [Workflow] the workflow
35
+ # @raise [InvalidMessage] when the definition breaks the rules of its schema
36
+ # @raise [Invalid] when steps are wired inconsistently
37
+ # @raise [StepContext::UnknownStorage] when a step names an unknown storage
38
+ #: (Proto::V1::Workflow workflow, context: StepContext) -> Workflow
39
+ def self.from_proto(workflow, context:)
40
+ Validation.validate!(workflow)
41
+ new(steps: workflow.steps.map { Steps.build(it, context:) })
42
+ end
43
+
44
+ # @return [Array<Steps::Base>] steps in order
45
+ #: Array[Steps::Base]
46
+ attr_reader :steps
47
+
48
+ # @return [void]
49
+ # @raise [Invalid] when steps are wired inconsistently
50
+ #: () -> void
51
+ private def validate
52
+ raise Invalid, 'workflow has no steps' if steps.empty?
53
+
54
+ names = steps.map(&:name)
55
+ duplicated = names.select { names.count(it) > 1 }.uniq
56
+ raise Invalid, "step names repeat: #{duplicated.join(', ')}" unless duplicated.empty?
57
+
58
+ available = [] #: Array[String]
59
+ steps.each do |step|
60
+ missing = step.inputs - available
61
+ raise Invalid, "#{step.name}: no earlier step produces #{missing.join(', ')}" unless missing.empty?
62
+
63
+ repeated = step.outputs & available
64
+ raise Invalid, "#{step.name}: #{repeated.join(', ')} is already produced" unless repeated.empty?
65
+
66
+ available.concat(step.outputs)
67
+ end
68
+ end
69
+ end
70
+ end
data/lib/glazed.rb ADDED
@@ -0,0 +1,18 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ require_relative 'glazed/version'
7
+
8
+ # Network device configuration scraper.
9
+ module Glazed
10
+ # Base class for errors raised by glazed.
11
+ class Error < StandardError; end
12
+ # Raised when a device does not produce expected output in time.
13
+ class TimeoutError < Error; end
14
+ # Raised when a device closes the connection unexpectedly.
15
+ class ConnectionClosed < Error; end
16
+ # Raised when collected configuration is not valid UTF-8.
17
+ class InvalidEncoding < Error; end
18
+ end
metadata ADDED
@@ -0,0 +1,245 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: glazed
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sorah Fukumori
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: dry-cli
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: google-protobuf
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: httpx
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: logger
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ - !ruby/object:Gem::Dependency
69
+ name: net-ssh
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: net-telnet
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: protovalidate
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 0.1.0.beta3
103
+ - - "<"
104
+ - !ruby/object:Gem::Version
105
+ version: '0.2'
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 0.1.0.beta3
113
+ - - "<"
114
+ - !ruby/object:Gem::Version
115
+ version: '0.2'
116
+ - !ruby/object:Gem::Dependency
117
+ name: sqlite3
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '2.0'
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '2.0'
130
+ email:
131
+ - her@sorah.jp
132
+ executables:
133
+ - glazed
134
+ extensions: []
135
+ extra_rdoc_files: []
136
+ files:
137
+ - ".rspec"
138
+ - ".yardopts"
139
+ - CHANGELOG.md
140
+ - LICENSE.txt
141
+ - NOTICE
142
+ - README.md
143
+ - Rakefile
144
+ - exe/glazed
145
+ - lib/glazed.rb
146
+ - lib/glazed/cli_session.rb
147
+ - lib/glazed/collector.rb
148
+ - lib/glazed/command.rb
149
+ - lib/glazed/command/base.rb
150
+ - lib/glazed/command/orchestrate.rb
151
+ - lib/glazed/command/run.rb
152
+ - lib/glazed/command/send_signal.rb
153
+ - lib/glazed/command/status.rb
154
+ - lib/glazed/command/version.rb
155
+ - lib/glazed/command_result.rb
156
+ - lib/glazed/dialect.rb
157
+ - lib/glazed/dialect/actions.rb
158
+ - lib/glazed/dialect/communication_config.rb
159
+ - lib/glazed/dialect/interaction.rb
160
+ - lib/glazed/dialect/run.rb
161
+ - lib/glazed/dialect/runbook.rb
162
+ - lib/glazed/dialect/sensitive_pattern.rb
163
+ - lib/glazed/dialects.rb
164
+ - lib/glazed/dialects/awplus.rb
165
+ - lib/glazed/dialects/base.rb
166
+ - lib/glazed/dialects/ios.rb
167
+ - lib/glazed/dialects/junos.rb
168
+ - lib/glazed/dialects/nec_ix.rb
169
+ - lib/glazed/dialects/wlc.rb
170
+ - lib/glazed/finder.rb
171
+ - lib/glazed/must.rb
172
+ - lib/glazed/orchestrator.rb
173
+ - lib/glazed/orchestrator/policy.rb
174
+ - lib/glazed/plugin_registry.rb
175
+ - lib/glazed/proto.rb
176
+ - lib/glazed/proto_json.rb
177
+ - lib/glazed/redactor.rb
178
+ - lib/glazed/runner.rb
179
+ - lib/glazed/secret.rb
180
+ - lib/glazed/secrets.rb
181
+ - lib/glazed/shell_command.rb
182
+ - lib/glazed/sources.rb
183
+ - lib/glazed/sources/base.rb
184
+ - lib/glazed/sources/command.rb
185
+ - lib/glazed/sources/inline.rb
186
+ - lib/glazed/sources/json_files.rb
187
+ - lib/glazed/state_backends.rb
188
+ - lib/glazed/state_backends/base.rb
189
+ - lib/glazed/state_backends/sqlite.rb
190
+ - lib/glazed/step_context.rb
191
+ - lib/glazed/steps.rb
192
+ - lib/glazed/steps/base.rb
193
+ - lib/glazed/steps/batch_shell.rb
194
+ - lib/glazed/steps/fetch.rb
195
+ - lib/glazed/steps/publish.rb
196
+ - lib/glazed/steps/redact.rb
197
+ - lib/glazed/steps/shell.rb
198
+ - lib/glazed/storages.rb
199
+ - lib/glazed/storages/base.rb
200
+ - lib/glazed/storages/filesystem.rb
201
+ - lib/glazed/storages/git.rb
202
+ - lib/glazed/storages/github.rb
203
+ - lib/glazed/storages/memory.rb
204
+ - lib/glazed/transports.rb
205
+ - lib/glazed/transports/base.rb
206
+ - lib/glazed/transports/ssh.rb
207
+ - lib/glazed/transports/telnet.rb
208
+ - lib/glazed/v1/config_pb.rb
209
+ - lib/glazed/v1/inventory_pb.rb
210
+ - lib/glazed/v1/orchestrator_pb.rb
211
+ - lib/glazed/v1/redaction_pb.rb
212
+ - lib/glazed/v1/secret_pb.rb
213
+ - lib/glazed/v1/state_pb.rb
214
+ - lib/glazed/v1/steps_pb.rb
215
+ - lib/glazed/v1/storage_pb.rb
216
+ - lib/glazed/v1/workflow_pb.rb
217
+ - lib/glazed/validation.rb
218
+ - lib/glazed/version.rb
219
+ - lib/glazed/workflow.rb
220
+ homepage: https://github.com/sorah/glazed
221
+ licenses:
222
+ - Apache-2.0
223
+ metadata:
224
+ homepage_uri: https://github.com/sorah/glazed
225
+ source_code_uri: https://github.com/sorah/glazed/tree/main/glazed
226
+ changelog_uri: https://github.com/sorah/glazed/blob/main/glazed/CHANGELOG.md
227
+ rubygems_mfa_required: 'true'
228
+ rdoc_options: []
229
+ require_paths:
230
+ - lib
231
+ required_ruby_version: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: 3.4.0
236
+ required_rubygems_version: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ requirements: []
242
+ rubygems_version: 4.0.20
243
+ specification_version: 4
244
+ summary: Network device configuration scraper, a modern successor of oxidized
245
+ test_files: []