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,103 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ require 'glazed'
7
+ require 'glazed/secret'
8
+
9
+ module Glazed
10
+ module Transports
11
+ # Byte stream to a device. Subclasses implement the abstract methods.
12
+ class Base
13
+ # Default seconds to wait for a connection.
14
+ DEFAULT_CONNECT_TIMEOUT = 15 #: Integer
15
+
16
+ # @param host [String] hostname or address
17
+ # @param port [Integer, nil] port, or nil for the transport's default
18
+ # @param username [String] login user name
19
+ # @param password [Secret, nil] login password
20
+ # @param connect_timeout [Numeric] seconds to wait for a connection
21
+ #: (host: String, port: Integer?, username: String, password: Secret?, ?connect_timeout: Numeric) -> void
22
+ def initialize(host:, port:, username:, password:, connect_timeout: DEFAULT_CONNECT_TIMEOUT)
23
+ @host = host #: String
24
+ @port = port #: Integer?
25
+ @username = username #: String
26
+ @password = password #: Secret?
27
+ @connect_timeout = connect_timeout #: Numeric
28
+ @pty_options = {} #: Hash[Symbol, untyped]
29
+ end
30
+
31
+ # @return [String] hostname or address
32
+ #: String
33
+ attr_reader :host
34
+ # @return [Integer, nil] port, or nil for the transport's default
35
+ #: Integer?
36
+ attr_reader :port
37
+ # @return [String] login user name
38
+ #: String
39
+ attr_reader :username
40
+ # @return [Secret, nil] login password
41
+ #: Secret?
42
+ attr_reader :password
43
+ # @return [Numeric] seconds to wait for a connection
44
+ #: Numeric
45
+ attr_reader :connect_timeout
46
+ # @return [Hash{Symbol => Object}] terminal settings overriding the transport's defaults; ignored by transports without a PTY
47
+ #: Hash[Symbol, untyped]
48
+ attr_accessor :pty_options
49
+
50
+ # Connects to the device.
51
+ #
52
+ # @return [void]
53
+ #: () -> void
54
+ def open = raise NotImplementedError
55
+
56
+ # Sends data to the interactive session.
57
+ #
58
+ # @param data [String] bytes to send
59
+ # @return [void]
60
+ #: (String data) -> void
61
+ def write(data) = raise NotImplementedError
62
+
63
+ # Receives data from the interactive session.
64
+ #
65
+ # @param timeout [Numeric] seconds to wait for data
66
+ # @return [String, nil] received data, empty when none arrived in time, nil at end of stream
67
+ #: (timeout: Numeric) -> String?
68
+ def read(timeout:) = raise NotImplementedError
69
+
70
+ # Closes the connection. Safe to call more than once.
71
+ #
72
+ # @return [void]
73
+ #: () -> void
74
+ def close = raise NotImplementedError
75
+
76
+ # Whether the transport authenticates the user itself, so no login
77
+ # prompts are expected in the session.
78
+ #
79
+ # @return [Boolean]
80
+ #: () -> bool
81
+ def authenticates? = false
82
+
83
+ # Whether {#exec} is supported.
84
+ #
85
+ # @return [Boolean]
86
+ #: () -> bool
87
+ def exec? = false
88
+
89
+ # Runs one command outside the interactive session.
90
+ #
91
+ # @param command [String] command line
92
+ # @param timeout [Numeric] seconds to wait for the command to finish
93
+ # @return [String] command output
94
+ # @raise [NotImplementedError] when the transport has no exec
95
+ #: (String command, timeout: Numeric) -> String
96
+ def exec(command, timeout:) = raise NotImplementedError, "#{self.class} does not support exec"
97
+
98
+ # @return [Float] monotonic clock reading in seconds
99
+ #: () -> Float
100
+ private def now = Process.clock_gettime(Process::CLOCK_MONOTONIC).to_f
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,177 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ require 'net/ssh'
7
+ require 'glazed'
8
+ require 'glazed/must'
9
+ require 'glazed/transports/base'
10
+
11
+ module Glazed
12
+ module Transports
13
+ # SSH transport with an interactive PTY shell and exec channels.
14
+ class Ssh < Base
15
+ # Standard SSH port.
16
+ DEFAULT_PORT = 22 #: Integer
17
+ # PTY requested for the shell, wide enough to avoid line wrapping.
18
+ DEFAULT_PTY_OPTIONS = {term: 'vt100', chars_wide: 512}.freeze #: Hash[Symbol, untyped]
19
+ # Seconds {#close} waits for the device to acknowledge closing channels.
20
+ CLOSE_TIMEOUT = 5 #: Integer
21
+
22
+ # @param host [String] hostname or address
23
+ # @param port [Integer, nil] port, or nil for 22
24
+ # @param username [String] login user name
25
+ # @param password [Secret, nil] login password
26
+ # @param connect_timeout [Numeric] seconds to wait for a connection
27
+ #: (host: String, port: Integer?, username: String, password: Secret?, ?connect_timeout: Numeric) -> void
28
+ def initialize(host:, port:, username:, password:, connect_timeout: DEFAULT_CONNECT_TIMEOUT)
29
+ super
30
+ @session = nil #: Net::SSH::Connection::Session?
31
+ @shell = nil #: Net::SSH::Connection::Channel?
32
+ @inbox = +'' #: String
33
+ @eof = false #: bool
34
+ end
35
+
36
+ # Connects and authenticates.
37
+ #
38
+ # @return [void]
39
+ # @raise [Net::SSH::Exception] when the connection or authentication fails
40
+ #: () -> void
41
+ def open
42
+ @session = Net::SSH.start(
43
+ host, username,
44
+ port: port || DEFAULT_PORT,
45
+ password: password&.value,
46
+ timeout: connect_timeout,
47
+ non_interactive: true,
48
+ )
49
+ end
50
+
51
+ # Sends data to the shell, opening it on first use.
52
+ #
53
+ # @param data [String] bytes to send
54
+ # @return [void]
55
+ #: (String data) -> void
56
+ def write(data)
57
+ shell.send_data(data)
58
+ session.process(0)
59
+ end
60
+
61
+ # Receives data from the shell, opening it on first use.
62
+ #
63
+ # @param timeout [Numeric] seconds to wait for data
64
+ # @return [String, nil] received data, empty when none arrived in time, nil once the shell closed
65
+ #: (timeout: Numeric) -> String?
66
+ def read(timeout:)
67
+ shell
68
+ deadline = now + timeout.to_f
69
+ while @inbox.empty? && !@eof && (remaining = deadline - now).positive?
70
+ session.process([remaining, 0.1].min)
71
+ end
72
+ return nil if @inbox.empty? && @eof
73
+
74
+ data = @inbox
75
+ @inbox = +''
76
+ data
77
+ end
78
+
79
+ # @return [Boolean] always true; SSH authenticates during {#open}
80
+ #: () -> bool
81
+ def authenticates? = true
82
+
83
+ # @return [Boolean] always true
84
+ #: () -> bool
85
+ def exec? = true
86
+
87
+ # Runs a command on its own exec channel.
88
+ #
89
+ # @param command [String] command line
90
+ # @param timeout [Numeric] seconds to wait for the channel to close
91
+ # @return [String] combined stdout and stderr
92
+ # @raise [Glazed::Error] when the device refuses the exec request
93
+ # @raise [Glazed::TimeoutError] when the command does not finish in time
94
+ #: (String command, timeout: Numeric) -> String
95
+ def exec(command, timeout:)
96
+ output = +''
97
+ closed = false #: bool
98
+ session.open_channel do |channel|
99
+ channel.exec(command) do |_, success|
100
+ raise Glazed::Error, "#{host}: exec request refused for #{command.inspect}" unless success
101
+ end
102
+ channel.on_data { |_, data| output << data }
103
+ channel.on_extended_data { |_, _, data| output << data }
104
+ channel.on_close { closed = true }
105
+ end
106
+ deadline = now + timeout.to_f
107
+ session.loop(0.1) do
108
+ raise Glazed::TimeoutError, "#{host}: #{command.inspect} did not finish in #{timeout}s" if !closed && now > deadline
109
+
110
+ !closed
111
+ end
112
+ output
113
+ end
114
+
115
+ # Closes the shell and the session. The connection is dropped when the
116
+ # device does not acknowledge closing the channels within {CLOSE_TIMEOUT}.
117
+ #
118
+ # @return [void]
119
+ #: () -> void
120
+ def close
121
+ session = @session
122
+ return unless session
123
+
124
+ @session = nil
125
+ @shell = nil
126
+ return if session.closed?
127
+
128
+ session.channels.each_value(&:close)
129
+ deadline = now + CLOSE_TIMEOUT
130
+ session.loop(0.1) { session.channels.any? && now < deadline }
131
+ session.channels.empty? ? session.close : session.shutdown!
132
+ rescue IOError, SystemCallError, Net::SSH::Disconnect
133
+ # The device may already have dropped the connection after logout.
134
+ nil
135
+ end
136
+
137
+ # @return [Net::SSH::Connection::Session] the open session
138
+ # @raise [Must::Violation] before {#open}
139
+ #: () -> Net::SSH::Connection::Session
140
+ private def session = Must.because(@session) { 'open is called before using the transport' }
141
+
142
+ # @return [Net::SSH::Connection::Channel] the shell channel, opened on first use
143
+ #: () -> Net::SSH::Connection::Channel
144
+ private def shell
145
+ @shell ||= open_shell
146
+ end
147
+
148
+ # @return [Net::SSH::Connection::Channel] a channel running a PTY shell
149
+ # @raise [Glazed::Error] when the device refuses the PTY or shell
150
+ # @raise [Glazed::TimeoutError] when the device does not answer within the connect timeout
151
+ #: () -> Net::SSH::Connection::Channel
152
+ private def open_shell
153
+ ready = false #: bool
154
+ channel = session.open_channel do |ch|
155
+ ch.request_pty(DEFAULT_PTY_OPTIONS.merge(pty_options)) do |_, success|
156
+ raise Glazed::Error, "#{host}: PTY request refused" unless success
157
+ end
158
+ ch.send_channel_request('shell') do |_, success|
159
+ raise Glazed::Error, "#{host}: shell request refused" unless success
160
+
161
+ ready = true
162
+ end
163
+ ch.on_data { |_, data| @inbox << data }
164
+ ch.on_extended_data { |_, _, data| @inbox << data }
165
+ ch.on_close { @eof = true }
166
+ end
167
+ deadline = now + connect_timeout.to_f
168
+ session.loop(0.1) do
169
+ raise Glazed::TimeoutError, "#{host}: shell did not open in #{connect_timeout}s" if !ready && now > deadline
170
+
171
+ !ready && !@eof
172
+ end
173
+ channel
174
+ end
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,100 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ require 'net/telnet'
7
+ require 'glazed'
8
+ require 'glazed/must'
9
+ require 'glazed/transports/base'
10
+
11
+ module Glazed
12
+ module Transports
13
+ # Telnet transport. Login prompts are left to the session.
14
+ class Telnet < Base
15
+ # Standard Telnet port.
16
+ DEFAULT_PORT = 23 #: Integer
17
+ # Bytes read from the socket at once.
18
+ READ_SIZE = 65_536 #: Integer
19
+
20
+ # @param host [String] hostname or address
21
+ # @param port [Integer, nil] port, or nil for 23
22
+ # @param username [String] login user name
23
+ # @param password [Secret, nil] login password
24
+ # @param connect_timeout [Numeric] seconds to wait for a connection
25
+ #: (host: String, port: Integer?, username: String, password: Secret?, ?connect_timeout: Numeric) -> void
26
+ def initialize(host:, port:, username:, password:, connect_timeout: DEFAULT_CONNECT_TIMEOUT)
27
+ super
28
+ @telnet = nil #: Net::Telnet?
29
+ @rest = +'' #: String
30
+ end
31
+
32
+ # Connects to the device.
33
+ #
34
+ # @return [void]
35
+ # @raise [Net::OpenTimeout] when the connection is not established in time
36
+ #: () -> void
37
+ def open
38
+ @telnet = Net::Telnet.new(
39
+ 'Host' => host,
40
+ 'Port' => port || DEFAULT_PORT,
41
+ 'Timeout' => connect_timeout,
42
+ 'Telnetmode' => true,
43
+ 'Binmode' => false,
44
+ )
45
+ end
46
+
47
+ # Sends data, translating newlines as negotiated.
48
+ #
49
+ # @param data [String] bytes to send
50
+ # @return [void]
51
+ #: (String data) -> void
52
+ def write(data)
53
+ telnet.print(data)
54
+ end
55
+
56
+ # Receives data with Telnet commands processed.
57
+ #
58
+ # @param timeout [Numeric] seconds to wait for data
59
+ # @return [String, nil] received data, empty when none arrived in time, nil at end of stream
60
+ #: (timeout: Numeric) -> String?
61
+ def read(timeout:)
62
+ sock = telnet.sock
63
+ return +'' unless sock.wait_readable(timeout)
64
+
65
+ data = @rest + sock.readpartial(READ_SIZE)
66
+ # Same split as Net::Telnet#waitfor, which keeps an unfinished
67
+ # command or CR for the next read.
68
+ cut = if (sb = data.rindex(/#{Net::Telnet::IAC}#{Net::Telnet::SB}/no)) &&
69
+ sb > (data.rindex(/#{Net::Telnet::IAC}#{Net::Telnet::SE}/no) || 0)
70
+ sb
71
+ else
72
+ data.rindex(/#{Net::Telnet::IAC}[^#{Net::Telnet::IAC}#{Net::Telnet::AO}#{Net::Telnet::AYT}#{Net::Telnet::DM}#{Net::Telnet::IP}#{Net::Telnet::NOP}]?\z/no) ||
73
+ data.rindex(/\r\z/no)
74
+ end
75
+ @rest = cut ? (data[cut..] || +'') : +''
76
+ telnet.preprocess(cut ? (data[0...cut] || +'') : data)
77
+ rescue EOFError
78
+ nil
79
+ end
80
+
81
+ # Closes the connection.
82
+ #
83
+ # @return [void]
84
+ #: () -> void
85
+ def close
86
+ telnet = @telnet
87
+ @telnet = nil
88
+ telnet&.close
89
+ rescue IOError, SystemCallError
90
+ # The device may already have dropped the connection after logout.
91
+ nil
92
+ end
93
+
94
+ # @return [Net::Telnet] the open connection
95
+ # @raise [Must::Violation] before {#open}
96
+ #: () -> Net::Telnet
97
+ private def telnet = Must.because(@telnet) { 'open is called before using the transport' }
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,28 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ # SPDX-License-Identifier: Apache-2.0
5
+
6
+ require 'glazed'
7
+ require 'glazed/finder'
8
+ require 'glazed/must'
9
+ require 'glazed/transports/base'
10
+
11
+ module Glazed
12
+ # Namespace of transport implementations, looked up by name.
13
+ module Transports
14
+ # Finds a transport class by snake_case name.
15
+ #
16
+ # @param name [String, Symbol] transport name, such as "ssh"
17
+ # @return [Class<Base>] the transport class
18
+ # @raise [Finder::NotFound] when there is none
19
+ # @raise [Must::Violation] when the name resolves to something other than a transport
20
+ #: (String | Symbol name) -> singleton(Base)
21
+ def self.find(name)
22
+ found = Finder.find(self, 'glazed/transports', name)
23
+ return found if found.is_a?(Class) && found < Base
24
+
25
+ raise Must::Violation, "#{found} is not a transport"
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: glazed/v1/config.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'buf/validate/validate_pb'
8
+ require 'glazed/v1/inventory_pb'
9
+ require 'glazed/v1/orchestrator_pb'
10
+ require 'glazed/v1/storage_pb'
11
+ require 'glazed/v1/workflow_pb'
12
+
13
+
14
+ descriptor_data = "\n\x16glazed/v1/config.proto\x12\tglazed.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x19glazed/v1/inventory.proto\x1a\x1cglazed/v1/orchestrator.proto\x1a\x17glazed/v1/storage.proto\x1a\x18glazed/v1/workflow.proto\"\x80\x04\n\x06\x43onfig\x12\x38\n\tinventory\x18\x01 \x03(\x0b\x32\x1a.glazed.v1.InventorySourceR\tinventory\x12I\n\x08storages\x18\x02 \x03(\x0b\x32\x1f.glazed.v1.Config.StoragesEntryB\x0c\xbaH\t\x9a\x01\x06\"\x04r\x02\x10\x01R\x08storages\x12L\n\tworkflows\x18\x03 \x03(\x0b\x32 .glazed.v1.Config.WorkflowsEntryB\x0c\xbaH\t\x9a\x01\x06\"\x04r\x02\x10\x01R\tworkflows\x12\x12\n\x04jobs\x18\x04 \x01(\rR\x04jobs\x12(\n\x08requires\x18\x05 \x03(\tB\x0c\xbaH\t\x92\x01\x06\"\x04r\x02\x10\x01R\x08requires\x12;\n\x0corchestrator\x18\x06 \x01(\x0b\x32\x17.glazed.v1.OrchestratorR\x0corchestrator\x1aU\n\rStoragesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x18.glazed.v1.StorageConfigR\x05value:\x02\x38\x01\x1aQ\n\x0eWorkflowsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x13.glazed.v1.WorkflowR\x05value:\x02\x38\x01\x42\x14\xea\x02\x11Glazed::Proto::V1b\x06proto3"
15
+
16
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
17
+ pool.add_serialized_file(descriptor_data)
18
+
19
+ module Glazed
20
+ module Proto
21
+ module V1
22
+ Config = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Config").msgclass
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: glazed/v1/inventory.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'buf/validate/validate_pb'
8
+ require 'glazed/v1/secret_pb'
9
+ require 'google/protobuf/any_pb'
10
+
11
+
12
+ descriptor_data = "\n\x19glazed/v1/inventory.proto\x12\tglazed.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x16glazed/v1/secret.proto\x1a\x19google/protobuf/any.proto\"\xec\x04\n\x04Node\x12)\n\x04name\x18\x01 \x01(\tB\x15\xbaH\x12r\x10\x32\x07^[^/]*$Z\x01.Z\x02..R\x04name\x12\x30\n\x05group\x18\x02 \x01(\tB\x1a\xbaH\x17r\x15\x32\x13^([^/]+(/[^/]+)*)?$R\x05group\x12\x12\n\x04host\x18\x03 \x01(\tR\x04host\x12\x1d\n\x04port\x18\x04 \x01(\rB\t\xbaH\x06*\x04\x18\xff\xff\x03R\x04port\x12\x35\n\x07\x64ialect\x18\x05 \x01(\tB\x1b\xbaH\x18r\x16\x32\x14^([a-z][a-z0-9_]*)?$R\x07\x64ialect\x12\x39\n\ttransport\x18\x06 \x01(\tB\x1b\xbaH\x18r\x16\x32\x14^([a-z][a-z0-9_]*)?$R\ttransport\x12\x1a\n\x08username\x18\x07 \x01(\tR\x08username\x12\x30\n\x08password\x18\x08 \x01(\x0b\x32\x14.glazed.v1.SecretRefR\x08password\x12\x41\n\x06params\x18\t \x03(\x0b\x32\x1b.glazed.v1.Node.ParamsEntryB\x0c\xbaH\t\x9a\x01\x06\"\x04r\x02\x10\x01R\x06params\x12\x44\n\x07secrets\x18\n \x03(\x0b\x32\x1c.glazed.v1.Node.SecretsEntryB\x0c\xbaH\t\x9a\x01\x06\"\x04r\x02\x10\x01R\x07secrets\x1a\x39\n\x0bParamsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x1aP\n\x0cSecretsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12*\n\x05value\x18\x02 \x01(\x0b\x32\x14.glazed.v1.SecretRefR\x05value:\x02\x38\x01\"\x89\x04\n\rInventoryFile\x12+\n\x08\x64\x65\x66\x61ults\x18\x01 \x01(\x0b\x32\x0f.glazed.v1.NodeR\x08\x64\x65\x66\x61ults\x12%\n\x05nodes\x18\x02 \x03(\x0b\x32\x0f.glazed.v1.NodeR\x05nodes:\xa3\x03\xbaH\x9f\x03\x1aP\n\x14inventory_file.names\x12\x17\x65very node needs a name\x1a\x1fthis.nodes.all(n, n.name != \'\')\x1aV\n\x1cinventory_file.defaults_name\x12\x1c\x64\x65\x66\x61ults must not set a name\x1a\x18this.defaults.name == \'\'\x1a\\\n\x1binventory_file.unique_names\x12\x19node names must be unique\x1a\"this.nodes.map(n, n.name).unique()\x1a\x94\x01\n\x16inventory_file.dialect\x12\x37\x65very node needs a dialect, from itself or the defaults\x1a\x41this.defaults.dialect != \'\' || this.nodes.all(n, n.dialect != \'\')\"\x81\x02\n\x0fInventorySource\x12>\n\njson_files\x18\x01 \x01(\x0b\x32\x1d.glazed.v1.JsonFilesInventoryH\x00R\tjsonFiles\x12\x32\n\x06inline\x18\x02 \x01(\x0b\x32\x18.glazed.v1.InventoryFileH\x00R\x06inline\x12.\n\x06plugin\x18\x03 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00R\x06plugin\x12\x37\n\x07\x63ommand\x18\x04 \x01(\x0b\x32\x1b.glazed.v1.CommandInventoryH\x00R\x07\x63ommandB\x11\n\x08provider\x12\x05\xbaH\x02\x08\x01\"V\n\x10\x43ommandInventory\x12\x19\n\x03run\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x03run\x12\'\n\x0ftimeout_seconds\x18\x02 \x01(\rR\x0etimeoutSeconds\":\n\x12JsonFilesInventory\x12$\n\x05paths\x18\x01 \x03(\tB\x0e\xbaH\x0b\x92\x01\x08\x08\x01\"\x04r\x02\x10\x01R\x05pathsB\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
+ Node = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Node").msgclass
21
+ InventoryFile = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.InventoryFile").msgclass
22
+ InventorySource = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.InventorySource").msgclass
23
+ CommandInventory = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.CommandInventory").msgclass
24
+ JsonFilesInventory = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.JsonFilesInventory").msgclass
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: glazed/v1/orchestrator.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'buf/validate/validate_pb'
8
+ require 'glazed/v1/state_pb'
9
+ require 'google/protobuf/timestamp_pb'
10
+
11
+
12
+ descriptor_data = "\n\x1cglazed/v1/orchestrator.proto\x12\tglazed.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x15glazed/v1/state.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xd8\x02\n\x0cOrchestrator\x12;\n\x05state\x18\x01 \x01(\x0b\x32\x1d.glazed.v1.StateBackendConfigB\x06\xbaH\x03\xc8\x01\x01R\x05state\x12T\n\tworkflows\x18\x02 \x03(\x0b\x32&.glazed.v1.Orchestrator.WorkflowsEntryB\x0e\xbaH\x0b\x9a\x01\x08\x08\x01\"\x04r\x02\x10\x01R\tworkflows\x12!\n\x0cpoll_seconds\x18\x03 \x01(\rR\x0bpollSeconds\x12:\n\x19inventory_refresh_seconds\x18\x04 \x01(\rR\x17inventoryRefreshSeconds\x1aV\n\x0eWorkflowsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12.\n\x05value\x18\x02 \x01(\x0b\x32\x18.glazed.v1.OrchestrationR\x05value:\x02\x38\x01\"\xb5\x01\n\rOrchestration\x12/\n\x08schedule\x18\x01 \x01(\x0b\x32\x13.glazed.v1.ScheduleR\x08schedule\x12/\n\x08\x64\x65\x62ounce\x18\x02 \x01(\x0b\x32\x13.glazed.v1.DebounceR\x08\x64\x65\x62ounce\x12\x1d\n\nbatch_size\x18\x03 \x01(\rR\tbatchSize\x12#\n\rlease_seconds\x18\x04 \x01(\rR\x0cleaseSeconds\"\x92\x01\n\x08Schedule\x12)\n\x10interval_seconds\x18\x01 \x01(\rR\x0fintervalSeconds\x12\x34\n\x16retry_interval_seconds\x18\x02 \x01(\rR\x14retryIntervalSeconds\x12%\n\x0ejitter_seconds\x18\x03 \x01(\rR\rjitterSeconds\"Y\n\x08\x44\x65\x62ounce\x12#\n\rdelay_seconds\x18\x01 \x01(\rR\x0c\x64\x65laySeconds\x12(\n\x10max_wait_seconds\x18\x02 \x01(\rR\x0emaxWaitSeconds\"\xa1\x01\n\x06Signal\x12\x1b\n\x04node\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04node\x12\x1f\n\x06source\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06source\x12;\n\x0breceived_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nreceivedAt\x12\x1c\n\timmediate\x18\x04 \x01(\x08R\timmediateB\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
+ Orchestrator = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Orchestrator").msgclass
21
+ Orchestration = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Orchestration").msgclass
22
+ Schedule = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Schedule").msgclass
23
+ Debounce = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Debounce").msgclass
24
+ Signal = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Signal").msgclass
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: glazed/v1/redaction.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'buf/validate/validate_pb'
8
+ require 'glazed/v1/secret_pb'
9
+
10
+
11
+ descriptor_data = "\n\x19glazed/v1/redaction.proto\x12\tglazed.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x16glazed/v1/secret.proto\"\x8e\x02\n\tRedaction\x12\x37\n\x04mode\x18\x01 \x01(\x0e\x32\x19.glazed.v1.Redaction.ModeB\x08\xbaH\x05\x82\x01\x02\x10\x01R\x04mode\x12/\n\x08hmac_key\x18\x02 \x01(\x0b\x32\x14.glazed.v1.SecretRefR\x07hmacKey\"<\n\x04Mode\x12\x14\n\x10MODE_UNSPECIFIED\x10\x00\x12\x0f\n\x0bMODE_REMOVE\x10\x01\x12\r\n\tMODE_HMAC\x10\x02:Y\xbaHV\x1aT\n\x12redaction.hmac_key\x12\x18MODE_HMAC needs hmac_key\x1a$this.mode != 2 || has(this.hmac_key)B\x14\xea\x02\x11Glazed::Proto::V1b\x06proto3"
12
+
13
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
14
+ pool.add_serialized_file(descriptor_data)
15
+
16
+ module Glazed
17
+ module Proto
18
+ module V1
19
+ Redaction = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Redaction").msgclass
20
+ Redaction::Mode = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Redaction.Mode").enummodule
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: glazed/v1/secret.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'buf/validate/validate_pb'
8
+ require 'google/protobuf/any_pb'
9
+
10
+
11
+ descriptor_data = "\n\x16glazed/v1/secret.proto\x12\tglazed.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x19google/protobuf/any.proto\"\xb8\x01\n\tSecretRef\x12\x16\n\x05value\x18\x01 \x01(\tH\x00R\x05value\x12\x33\n\x03\x65nv\x18\x02 \x01(\tB\x1f\xbaH\x1cr\x1a\x32\x18^[A-Za-z_][A-Za-z0-9_]*$H\x00R\x03\x65nv\x12\x1d\n\x04\x66ile\x18\x03 \x01(\tB\x07\xbaH\x04r\x02\x10\x01H\x00R\x04\x66ile\x12.\n\x06plugin\x18\x04 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00R\x06pluginB\x0f\n\x06source\x12\x05\xbaH\x02\x08\x01\x42\x14\xea\x02\x11Glazed::Proto::V1b\x06proto3"
12
+
13
+ pool = ::Google::Protobuf::DescriptorPool.generated_pool
14
+ pool.add_serialized_file(descriptor_data)
15
+
16
+ module Glazed
17
+ module Proto
18
+ module V1
19
+ SecretRef = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.SecretRef").msgclass
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: glazed/v1/state.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'buf/validate/validate_pb'
8
+ require 'google/protobuf/any_pb'
9
+ require 'google/protobuf/timestamp_pb'
10
+
11
+
12
+ descriptor_data = "\n\x15glazed/v1/state.proto\x12\tglazed.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x19google/protobuf/any.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x99\x05\n\x0cNodeSchedule\x12#\n\x08workflow\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x08workflow\x12\x1b\n\x04node\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04node\x12\x39\n\x06\x64ue_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.TimestampB\x06\xbaH\x03\xc8\x01\x01R\x05\x64ueAt\x12\x1d\n\ndue_reason\x18\x04 \x01(\tR\tdueReason\x12S\n\x18signal_window_started_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x15signalWindowStartedAt\x12\x42\n\x0flast_started_at\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\rlastStartedAt\x12\x44\n\x10last_finished_at\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0elastFinishedAt\x12\x1f\n\x0blast_failed\x18\x08 \x01(\x08R\nlastFailed\x12\x31\n\x14\x63onsecutive_failures\x18\t \x01(\rR\x13\x63onsecutiveFailures\x12\x1d\n\nlast_error\x18\n \x01(\tR\tlastError\x12\x1f\n\x0blease_owner\x18\x0b \x01(\tR\nleaseOwner\x12;\n\x0blease_until\x18\x0c \x01(\x0b\x32\x1a.google.protobuf.TimestampR\nleaseUntil\x12=\n\x0cscheduled_at\x18\r \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x0bscheduledAt\"\x8f\x01\n\x12StateBackendConfig\x12\x37\n\x06sqlite\x18\x01 \x01(\x0b\x32\x1d.glazed.v1.SqliteStateBackendH\x00R\x06sqlite\x12.\n\x06plugin\x18\x02 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00R\x06pluginB\x10\n\x07\x62\x61\x63kend\x12\x05\xbaH\x02\x08\x01\"\x8b\x02\n\x12SqliteStateBackend\x12\x12\n\x04path\x18\x01 \x01(\tR\x04path\x12\x18\n\x07storage\x18\x02 \x01(\tR\x07storage\x12\x10\n\x03key\x18\x03 \x01(\tR\x03key:\xb4\x01\xbaH\xb0\x01\x1a\xad\x01\n\x1dsqlite_state_backend.location\x12#set either path, or storage and key\x1ag(this.path != \'\') != (this.storage != \'\' && this.key != \'\') && (this.storage == \'\') == (this.key == \'\')B\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
+ NodeSchedule = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.NodeSchedule").msgclass
21
+ StateBackendConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.StateBackendConfig").msgclass
22
+ SqliteStateBackend = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.SqliteStateBackend").msgclass
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: glazed/v1/steps.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'buf/validate/validate_pb'
8
+ require 'glazed/v1/inventory_pb'
9
+ require 'glazed/v1/storage_pb'
10
+
11
+
12
+ descriptor_data = "\n\x15glazed/v1/steps.proto\x12\tglazed.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x19glazed/v1/inventory.proto\x1a\x17glazed/v1/storage.proto\"}\n\x08\x41rtifact\x12!\n\x07storage\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x07storage\x12\x34\n\x07pointer\x18\x02 \x01(\x0b\x32\x12.glazed.v1.PointerB\x06\xbaH\x03\xc8\x01\x01R\x07pointer\x12\x18\n\x07\x63hanged\x18\x03 \x01(\x08R\x07\x63hanged\"\xce\x01\n\tNodeState\x12+\n\x04node\x18\x01 \x01(\x0b\x32\x0f.glazed.v1.NodeB\x06\xbaH\x03\xc8\x01\x01R\x04node\x12\x41\n\tartifacts\x18\x02 \x03(\x0b\x32#.glazed.v1.NodeState.ArtifactsEntryR\tartifacts\x1aQ\n\x0e\x41rtifactsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x13.glazed.v1.ArtifactR\x05value:\x02\x38\x01\"8\n\nBatchState\x12*\n\x05nodes\x18\x01 \x03(\x0b\x32\x14.glazed.v1.NodeStateR\x05nodesB\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
+ Artifact = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Artifact").msgclass
21
+ NodeState = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.NodeState").msgclass
22
+ BatchState = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.BatchState").msgclass
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: glazed/v1/storage.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+ require 'buf/validate/validate_pb'
8
+ require 'glazed/v1/secret_pb'
9
+ require 'google/protobuf/any_pb'
10
+
11
+
12
+ descriptor_data = "\n\x17glazed/v1/storage.proto\x12\tglazed.v1\x1a\x1b\x62uf/validate/validate.proto\x1a\x16glazed/v1/secret.proto\x1a\x19google/protobuf/any.proto\"\xcc\x02\n\rStorageConfig\x12)\n\x03git\x18\x01 \x01(\x0b\x32\x15.glazed.v1.GitStorageH\x00R\x03git\x12\x32\n\x06github\x18\x02 \x01(\x0b\x32\x18.glazed.v1.GithubStorageH\x00R\x06github\x12&\n\x02s3\x18\x03 \x01(\x0b\x32\x14.glazed.v1.S3StorageH\x00R\x02s3\x12>\n\nfilesystem\x18\x04 \x01(\x0b\x32\x1c.glazed.v1.FilesystemStorageH\x00R\nfilesystem\x12.\n\x06plugin\x18\x05 \x01(\x0b\x32\x14.google.protobuf.AnyH\x00R\x06plugin\x12\x32\n\x06memory\x18\x06 \x01(\x0b\x32\x18.glazed.v1.MemoryStorageH\x00R\x06memoryB\x10\n\x07\x62\x61\x63kend\x12\x05\xbaH\x02\x08\x01\"0\n\x11\x46ilesystemStorage\x12\x1b\n\x04path\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04path\"\x0f\n\rMemoryStorage\"\x9d\x01\n\nGitStorage\x12\x1b\n\x04path\x18\x01 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x04path\x12\x16\n\x06\x62ranch\x18\x02 \x01(\tR\x06\x62ranch\x12\x16\n\x06remote\x18\x03 \x01(\tR\x06remote\x12\x1f\n\x0b\x61uthor_name\x18\x04 \x01(\tR\nauthorName\x12!\n\x0c\x61uthor_email\x18\x05 \x01(\tR\x0b\x61uthorEmail\"\xb9\x02\n\rGithubStorage\x12H\n\nrepository\x18\x01 \x01(\tB(\xbaH%r#2!^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$R\nrepository\x12\x1f\n\x06\x62ranch\x18\x02 \x01(\tB\x07\xbaH\x04r\x02\x10\x01R\x06\x62ranch\x12\x1f\n\x0b\x62\x61se_branch\x18\x03 \x01(\tR\nbaseBranch\x12\x32\n\x05token\x18\x04 \x01(\x0b\x32\x14.glazed.v1.SecretRefB\x06\xbaH\x03\xc8\x01\x01R\x05token\x12$\n\x07\x61pi_url\x18\x05 \x01(\tB\x0b\xbaH\x08r\x03\x88\x01\x01\xd8\x01\x01R\x06\x61piUrl\x12\x1f\n\x0b\x61uthor_name\x18\x06 \x01(\tR\nauthorName\x12!\n\x0c\x61uthor_email\x18\x07 \x01(\tR\x0b\x61uthorEmail\"^\n\tS3Storage\x12!\n\x06\x62ucket\x18\x01 \x01(\tB\t\xbaH\x06r\x04\x10\x03\x18?R\x06\x62ucket\x12\x16\n\x06prefix\x18\x02 \x01(\tR\x06prefix\x12\x16\n\x06region\x18\x03 \x01(\tR\x06region\"C\n\x07Pointer\x12\x38\n\x08location\x18\x01 \x01(\x0b\x32\x14.google.protobuf.AnyB\x06\xbaH\x03\xc8\x01\x01R\x08location\"9\n\x0bGitLocation\x12\x12\n\x04path\x18\x01 \x01(\tR\x04path\x12\x16\n\x06\x63ommit\x18\x02 \x01(\tR\x06\x63ommit\"\\\n\x0eGithubLocation\x12\x1e\n\nrepository\x18\x01 \x01(\tR\nrepository\x12\x12\n\x04path\x18\x02 \x01(\tR\x04path\x12\x16\n\x06\x63ommit\x18\x03 \x01(\tR\x06\x63ommit\"U\n\nS3Location\x12\x16\n\x06\x62ucket\x18\x01 \x01(\tR\x06\x62ucket\x12\x10\n\x03key\x18\x02 \x01(\tR\x03key\x12\x1d\n\nversion_id\x18\x03 \x01(\tR\tversionId\"@\n\x12\x46ilesystemLocation\x12\x12\n\x04path\x18\x01 \x01(\tR\x04path\x12\x16\n\x06sha256\x18\x02 \x01(\tR\x06sha256\":\n\x0eMemoryLocation\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x16\n\x06sha256\x18\x02 \x01(\tR\x06sha256B\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
+ StorageConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.StorageConfig").msgclass
21
+ FilesystemStorage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.FilesystemStorage").msgclass
22
+ MemoryStorage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.MemoryStorage").msgclass
23
+ GitStorage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.GitStorage").msgclass
24
+ GithubStorage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.GithubStorage").msgclass
25
+ S3Storage = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.S3Storage").msgclass
26
+ Pointer = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.Pointer").msgclass
27
+ GitLocation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.GitLocation").msgclass
28
+ GithubLocation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.GithubLocation").msgclass
29
+ S3Location = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.S3Location").msgclass
30
+ FilesystemLocation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.FilesystemLocation").msgclass
31
+ MemoryLocation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("glazed.v1.MemoryLocation").msgclass
32
+ end
33
+ end
34
+ end