warg 0.1.4 → 0.1.5
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 +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
         |