warg 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/warg.rb +111 -31
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1dae787424c000c9f5503d44a1a0f4653c5f2ae9fcc50e0afe24a030de34716b
|
4
|
+
data.tar.gz: 925e761cbb6409606f42791bd5c18c8cfc2c7648f996ace762d01201eca527c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3604a78c642404593ca9ee445e6cf8e861b688ac6df2aeadb700f21dafa20ad283adf4a05d0d375cecc854d3a93d20966656fcdede08c2b49b5a74574ad914ec
|
7
|
+
data.tar.gz: 0f8557c8b1ab338728813b6d4b4da8ccaa8629f47ee381d0585c4efe011741943edfdc0fdd84cf6539ab0ab46429388783a06e6b81d7fc067edc73861fc75c44
|
data/lib/warg.rb
CHANGED
@@ -1159,22 +1159,8 @@ module Warg
|
|
1159
1159
|
@hosts.length
|
1160
1160
|
end
|
1161
1161
|
|
1162
|
-
def
|
1163
|
-
|
1164
|
-
host.create_file_from(content, path: path, mode: mode)
|
1165
|
-
end
|
1166
|
-
end
|
1167
|
-
|
1168
|
-
def upload(file, to:)
|
1169
|
-
each do |host|
|
1170
|
-
host.upload(file, to: to)
|
1171
|
-
end
|
1172
|
-
end
|
1173
|
-
|
1174
|
-
def download(path)
|
1175
|
-
map do |host|
|
1176
|
-
host.download(path)
|
1177
|
-
end
|
1162
|
+
def lazy
|
1163
|
+
LazilyFilteredHostCollection.new(self)
|
1178
1164
|
end
|
1179
1165
|
|
1180
1166
|
def each
|
@@ -1187,24 +1173,46 @@ module Warg
|
|
1187
1173
|
self
|
1188
1174
|
end
|
1189
1175
|
|
1190
|
-
|
1191
|
-
|
1192
|
-
|
1176
|
+
module Interaction
|
1177
|
+
def create_file_from(content, path:, mode: 0644)
|
1178
|
+
each do |host|
|
1179
|
+
host.create_file_from(content, path: path, mode: mode)
|
1180
|
+
end
|
1193
1181
|
end
|
1194
|
-
end
|
1195
1182
|
|
1196
|
-
|
1197
|
-
|
1198
|
-
|
1183
|
+
def upload(file, to:)
|
1184
|
+
each do |host|
|
1185
|
+
host.upload(file, to: to)
|
1186
|
+
end
|
1187
|
+
end
|
1188
|
+
|
1189
|
+
def download(path)
|
1190
|
+
map do |host|
|
1191
|
+
host.download(path)
|
1192
|
+
end
|
1193
|
+
end
|
1194
|
+
|
1195
|
+
def run_script(script, order: :parallel, &setup)
|
1196
|
+
run(order: order) do |host, result|
|
1197
|
+
result.update host.run_script(script, &setup)
|
1198
|
+
end
|
1199
1199
|
end
|
1200
|
-
end
|
1201
1200
|
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1201
|
+
def run_command(command, order: :parallel, &setup)
|
1202
|
+
run(order: order) do |host, result|
|
1203
|
+
result.update host.run_command(command, &setup)
|
1204
|
+
end
|
1205
|
+
end
|
1206
|
+
|
1207
|
+
def run(order:, &block)
|
1208
|
+
strategy = Executor.for(order)
|
1209
|
+
executor = strategy.new(self)
|
1210
|
+
executor.run(&block)
|
1211
|
+
end
|
1206
1212
|
end
|
1207
1213
|
|
1214
|
+
include Interaction
|
1215
|
+
|
1208
1216
|
def to_a
|
1209
1217
|
@hosts.dup
|
1210
1218
|
end
|
@@ -1214,6 +1222,78 @@ module Warg
|
|
1214
1222
|
attr_reader :hosts
|
1215
1223
|
end
|
1216
1224
|
|
1225
|
+
class LazilyFilteredHostCollection
|
1226
|
+
include Enumerable
|
1227
|
+
include HostCollection::Interaction
|
1228
|
+
|
1229
|
+
attr_reader :filters
|
1230
|
+
|
1231
|
+
def self.from(value)
|
1232
|
+
new HostCollection.from(value)
|
1233
|
+
end
|
1234
|
+
|
1235
|
+
def initialize(hosts)
|
1236
|
+
@hosts = hosts
|
1237
|
+
@filters = {}
|
1238
|
+
end
|
1239
|
+
|
1240
|
+
def one
|
1241
|
+
host = to_a.sample
|
1242
|
+
|
1243
|
+
if host.nil?
|
1244
|
+
raise "no hosts matched `#{inspect}'"
|
1245
|
+
else
|
1246
|
+
HostCollection.from(host)
|
1247
|
+
end
|
1248
|
+
end
|
1249
|
+
|
1250
|
+
def add(host_data)
|
1251
|
+
host = Host.from(host_data)
|
1252
|
+
|
1253
|
+
if host.matches?(**@filters)
|
1254
|
+
@hosts.add(host)
|
1255
|
+
self
|
1256
|
+
else
|
1257
|
+
false
|
1258
|
+
end
|
1259
|
+
end
|
1260
|
+
|
1261
|
+
def with(**filters)
|
1262
|
+
combined = @filters.merge(filters)
|
1263
|
+
|
1264
|
+
HostCollection.new(@hosts.select { |host| host.matches?(combined) })
|
1265
|
+
end
|
1266
|
+
|
1267
|
+
def ==(other)
|
1268
|
+
case other
|
1269
|
+
when HostCollection, LazilyFilteredHostCollection
|
1270
|
+
to_a == other.to_a
|
1271
|
+
when Enumerable
|
1272
|
+
to_a == other
|
1273
|
+
else
|
1274
|
+
super
|
1275
|
+
end
|
1276
|
+
end
|
1277
|
+
|
1278
|
+
alias eql? ==
|
1279
|
+
|
1280
|
+
def length
|
1281
|
+
count
|
1282
|
+
end
|
1283
|
+
|
1284
|
+
def each
|
1285
|
+
if block_given?
|
1286
|
+
@hosts.each do |host|
|
1287
|
+
if host.matches?(**@filters)
|
1288
|
+
yield host
|
1289
|
+
end
|
1290
|
+
end
|
1291
|
+
else
|
1292
|
+
enum_for(:each)
|
1293
|
+
end
|
1294
|
+
end
|
1295
|
+
end
|
1296
|
+
|
1217
1297
|
class Config
|
1218
1298
|
attr_accessor :default_user
|
1219
1299
|
attr_reader :hosts
|
@@ -1357,7 +1437,6 @@ module Warg
|
|
1357
1437
|
@argv = argv
|
1358
1438
|
@playlist = playlist
|
1359
1439
|
@parser = OptionParser.new
|
1360
|
-
@filters = {}
|
1361
1440
|
|
1362
1441
|
@parser.on("-t", "--target HOSTS", Array, "hosts to use") do |hosts_data|
|
1363
1442
|
hosts_data.each { |host_data| hosts.add(host_data) }
|
@@ -1366,15 +1445,16 @@ module Warg
|
|
1366
1445
|
@parser.on("-f", "--filter key=value", String, "filters to apply to hosts") do |filter|
|
1367
1446
|
key, value = filter.split("=", 2)
|
1368
1447
|
|
1369
|
-
@filters[key] = value
|
1448
|
+
@hosts.filters[key] = value
|
1370
1449
|
end
|
1371
1450
|
|
1372
1451
|
super()
|
1452
|
+
|
1453
|
+
@hosts = @hosts.lazy
|
1373
1454
|
end
|
1374
1455
|
|
1375
1456
|
def parse_options!
|
1376
1457
|
@parser.parse(@argv)
|
1377
|
-
@hosts = @hosts.with(**@filters)
|
1378
1458
|
end
|
1379
1459
|
|
1380
1460
|
def copy(config)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: warg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eduardo Gutierrez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bcrypt_pbkdf
|