@@ -728,31 +728,13 @@ function update_indices() {
728
728
}
729
729
730
730
client . blocks_stratis_stopped_pool = { } ;
731
- client . stratis_stopped_pool_key_description = { } ;
732
- client . stratis_stopped_pool_clevis_info = { } ;
733
731
for ( const uuid in client . stratis_manager . StoppedPools ) {
734
732
const devs = client . stratis_manager . StoppedPools [ uuid ] . devs . v ;
735
733
for ( const d of devs ) {
736
734
block = client . slashdevs_block [ d . devnode ] ;
737
735
if ( block )
738
736
client . blocks_stratis_stopped_pool [ block . path ] = uuid ;
739
737
}
740
- const kinfo = client . stratis_manager . StoppedPools [ uuid ] . key_description ;
741
- if ( kinfo &&
742
- kinfo . t == "(bv)" &&
743
- kinfo . v [ 0 ] &&
744
- kinfo . v [ 1 ] . t == "(bs)" &&
745
- kinfo . v [ 1 ] . v [ 0 ] ) {
746
- client . stratis_stopped_pool_key_description [ uuid ] = kinfo . v [ 1 ] . v [ 1 ] ;
747
- }
748
- const cinfo = client . stratis_manager . StoppedPools [ uuid ] . clevis_info ;
749
- if ( cinfo &&
750
- cinfo . t == "(bv)" &&
751
- cinfo . v [ 0 ] &&
752
- cinfo . v [ 1 ] . t == "(b(ss))" &&
753
- cinfo . v [ 1 ] . v [ 0 ] ) {
754
- client . stratis_stopped_pool_clevis_info [ uuid ] = cinfo . v [ 1 ] . v [ 1 ] ;
755
- }
756
738
}
757
739
758
740
client . stratis_pool_stats = { } ;
@@ -1432,62 +1414,63 @@ client.stratis_start = () => {
1432
1414
// not allowed. If we need to bump it, it should be bumped here for all
1433
1415
// of them at the same time.
1434
1416
//
1435
- const stratis3_interface_revision = "r6" ;
1417
+ const stratis3_interface_revisions = [ 8 , 6 ] ;
1436
1418
1437
- function stratis3_start ( ) {
1419
+ async function stratis3_start ( ) {
1438
1420
const stratis = cockpit . dbus ( "org.storage.stratis3" , { superuser : "try" } ) ;
1439
- client . stratis_manager = stratis . proxy ( "org.storage.stratis3.Manager." + stratis3_interface_revision ,
1440
- "/org/storage/stratis3" ) ;
1441
1421
1442
1422
// The rest of the code expects these to be initialized even if no
1443
1423
// stratisd is found.
1444
1424
client . stratis_pools = { } ;
1445
1425
client . stratis_blockdevs = { } ;
1446
1426
client . stratis_filesystems = { } ;
1447
- client . stratis_manager . StoppedPools = { } ;
1448
1427
1449
- return client . stratis_manager . wait ( )
1450
- . then ( ( ) => {
1451
- client . stratis_store_passphrase = ( desc , passphrase ) => {
1452
- return python . spawn ( stratis3_set_key_py , [ desc ] , { superuser : "require" } )
1453
- . input ( passphrase ) ;
1454
- } ;
1428
+ for ( const rev of stratis3_interface_revisions ) {
1429
+ client . stratis_manager = stratis . proxy ( "org.storage.stratis3.Manager.r" + rev , "/org/storage/stratis3" ) ;
1430
+ client . stratis_manager . StoppedPools = { } ;
1431
+ try {
1432
+ await client . stratis_manager . wait ( ) ;
1433
+ client . stratis_interface_revision = rev ;
1434
+ break ;
1435
+ } catch {
1436
+ }
1437
+ }
1455
1438
1456
- client . stratis_set_property = ( proxy , prop , sig , value ) => {
1457
- // DBusProxy is smart enough to allow "proxy.Prop
1458
- // = value" to just work, but we want to catch any
1459
- // error ourselves, and we want to wait for the
1460
- // method call to complete.
1461
- return stratis . call ( proxy . path , "org.freedesktop.DBus.Properties" , "Set" ,
1462
- [ proxy . iface , prop , cockpit . variant ( sig , value ) ] ) ;
1463
- } ;
1439
+ if ( ! client . stratis_interface_revision )
1440
+ throw new Error ( "No supported stratisd API revision found" ) ;
1464
1441
1465
- client . features . stratis = true ;
1466
- client . stratis_pools = client . stratis_manager . client . proxies ( "org.storage.stratis3.pool." +
1467
- stratis3_interface_revision ,
1468
- "/org/storage/stratis3" ,
1469
- { watch : false } ) ;
1470
- client . stratis_blockdevs = client . stratis_manager . client . proxies ( "org.storage.stratis3.blockdev." +
1471
- stratis3_interface_revision ,
1472
- "/org/storage/stratis3" ,
1473
- { watch : false } ) ;
1474
- client . stratis_filesystems = client . stratis_manager . client . proxies ( "org.storage.stratis3.filesystem." +
1475
- stratis3_interface_revision ,
1476
- "/org/storage/stratis3" ,
1477
- { watch : false } ) ;
1478
-
1479
- // HACK - give us a sneak preview of the "r8"
1480
- // manager. It is used to start V2 pools.
1481
- client . stratis_manager_r8 = stratis . proxy (
1482
- "org.storage.stratis3.Manager.r8" ,
1483
- "/org/storage/stratis3" ) ;
1484
-
1485
- return stratis . watch ( { path_namespace : "/org/storage/stratis3" } ) . then ( ( ) => {
1486
- client . stratis_manager . client . addEventListener ( 'notify' , ( event , data ) => {
1487
- client . update ( ) ;
1488
- } ) ;
1489
- } ) ;
1490
- } ) ;
1442
+ client . stratis_store_passphrase = ( desc , passphrase ) => {
1443
+ return python . spawn ( stratis3_set_key_py , [ desc ] , { superuser : "require" } )
1444
+ . input ( passphrase ) ;
1445
+ } ;
1446
+
1447
+ client . stratis_set_property = ( proxy , prop , sig , value ) => {
1448
+ // DBusProxy is smart enough to allow "proxy.Prop
1449
+ // = value" to just work, but we want to catch any
1450
+ // error ourselves, and we want to wait for the
1451
+ // method call to complete.
1452
+ return stratis . call ( proxy . path , "org.freedesktop.DBus.Properties" , "Set" ,
1453
+ [ proxy . iface , prop , cockpit . variant ( sig , value ) ] ) ;
1454
+ } ;
1455
+
1456
+ client . features . stratis = true ;
1457
+ client . stratis_pools = client . stratis_manager . client . proxies ( "org.storage.stratis3.pool.r" +
1458
+ client . stratis_interface_revision ,
1459
+ "/org/storage/stratis3" ,
1460
+ { watch : false } ) ;
1461
+ client . stratis_blockdevs = client . stratis_manager . client . proxies ( "org.storage.stratis3.blockdev.r" +
1462
+ client . stratis_interface_revision ,
1463
+ "/org/storage/stratis3" ,
1464
+ { watch : false } ) ;
1465
+ client . stratis_filesystems = client . stratis_manager . client . proxies ( "org.storage.stratis3.filesystem.r" +
1466
+ client . stratis_interface_revision ,
1467
+ "/org/storage/stratis3" ,
1468
+ { watch : false } ) ;
1469
+
1470
+ await stratis . watch ( { path_namespace : "/org/storage/stratis3" } ) ;
1471
+ client . stratis_manager . client . addEventListener ( 'notify' , ( event , data ) => {
1472
+ client . update ( ) ;
1473
+ } ) ;
1491
1474
}
1492
1475
1493
1476
function init_client ( manager , callback ) {
0 commit comments