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.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.yardopts +5 -0
- data/CHANGELOG.md +18 -0
- data/LICENSE.txt +202 -0
- data/NOTICE +16 -0
- data/README.md +3 -0
- data/Rakefile +12 -0
- data/exe/glazed +8 -0
- data/lib/glazed/cli_session.rb +178 -0
- data/lib/glazed/collector.rb +113 -0
- data/lib/glazed/command/base.rb +146 -0
- data/lib/glazed/command/orchestrate.rb +78 -0
- data/lib/glazed/command/run.rb +51 -0
- data/lib/glazed/command/send_signal.rb +69 -0
- data/lib/glazed/command/status.rb +179 -0
- data/lib/glazed/command/version.rb +23 -0
- data/lib/glazed/command.rb +39 -0
- data/lib/glazed/command_result.rb +26 -0
- data/lib/glazed/dialect/actions.rb +95 -0
- data/lib/glazed/dialect/communication_config.rb +63 -0
- data/lib/glazed/dialect/interaction.rb +32 -0
- data/lib/glazed/dialect/run.rb +84 -0
- data/lib/glazed/dialect/runbook.rb +97 -0
- data/lib/glazed/dialect/sensitive_pattern.rb +31 -0
- data/lib/glazed/dialect.rb +12 -0
- data/lib/glazed/dialects/awplus.rb +84 -0
- data/lib/glazed/dialects/base.rb +246 -0
- data/lib/glazed/dialects/ios.rb +173 -0
- data/lib/glazed/dialects/junos.rb +78 -0
- data/lib/glazed/dialects/nec_ix.rb +71 -0
- data/lib/glazed/dialects/wlc.rb +56 -0
- data/lib/glazed/dialects.rb +65 -0
- data/lib/glazed/finder.rb +62 -0
- data/lib/glazed/must.rb +54 -0
- data/lib/glazed/orchestrator/policy.rb +184 -0
- data/lib/glazed/orchestrator.rb +288 -0
- data/lib/glazed/plugin_registry.rb +70 -0
- data/lib/glazed/proto.rb +20 -0
- data/lib/glazed/proto_json.rb +34 -0
- data/lib/glazed/redactor.rb +158 -0
- data/lib/glazed/runner.rb +176 -0
- data/lib/glazed/secret.rb +74 -0
- data/lib/glazed/secrets.rb +59 -0
- data/lib/glazed/shell_command.rb +90 -0
- data/lib/glazed/sources/base.rb +79 -0
- data/lib/glazed/sources/command.rb +67 -0
- data/lib/glazed/sources/inline.rb +56 -0
- data/lib/glazed/sources/json_files.rb +87 -0
- data/lib/glazed/sources.rb +105 -0
- data/lib/glazed/state_backends/base.rb +72 -0
- data/lib/glazed/state_backends/sqlite.rb +299 -0
- data/lib/glazed/state_backends.rb +75 -0
- data/lib/glazed/step_context.rb +65 -0
- data/lib/glazed/steps/base.rb +89 -0
- data/lib/glazed/steps/batch_shell.rb +57 -0
- data/lib/glazed/steps/fetch.rb +67 -0
- data/lib/glazed/steps/publish.rb +94 -0
- data/lib/glazed/steps/redact.rb +77 -0
- data/lib/glazed/steps/shell.rb +107 -0
- data/lib/glazed/steps.rb +83 -0
- data/lib/glazed/storages/base.rb +167 -0
- data/lib/glazed/storages/filesystem.rb +144 -0
- data/lib/glazed/storages/git.rb +181 -0
- data/lib/glazed/storages/github.rb +269 -0
- data/lib/glazed/storages/memory.rb +125 -0
- data/lib/glazed/storages.rb +88 -0
- data/lib/glazed/transports/base.rb +103 -0
- data/lib/glazed/transports/ssh.rb +177 -0
- data/lib/glazed/transports/telnet.rb +100 -0
- data/lib/glazed/transports.rb +28 -0
- data/lib/glazed/v1/config_pb.rb +25 -0
- data/lib/glazed/v1/inventory_pb.rb +27 -0
- data/lib/glazed/v1/orchestrator_pb.rb +27 -0
- data/lib/glazed/v1/redaction_pb.rb +23 -0
- data/lib/glazed/v1/secret_pb.rb +22 -0
- data/lib/glazed/v1/state_pb.rb +25 -0
- data/lib/glazed/v1/steps_pb.rb +25 -0
- data/lib/glazed/v1/storage_pb.rb +34 -0
- data/lib/glazed/v1/workflow_pb.rb +29 -0
- data/lib/glazed/validation.rb +31 -0
- data/lib/glazed/version.rb +9 -0
- data/lib/glazed/workflow.rb +70 -0
- data/lib/glazed.rb +18 -0
- 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
|