@@ -365,6 +365,12 @@ enum ProfileInfo {
365
365
pub enum DeployDataDefsError {
366
366
#[ error( "Neither `user` nor `sshUser` are set for profile {0} of node {1}" ) ]
367
367
NoProfileUser ( String , String ) ,
368
+ #[ error( "No sudo path set but sudo secret for profile {0} of node {1}" ) ]
369
+ NoSopsFile ( String , String ) ,
370
+ #[ error( "No sudo secret but sudo path set for profile {0} of node {1}" ) ]
371
+ NoSopsSecret ( String , String ) ,
372
+ #[ error( "Interactive Sudo set but sudo secret set as well for profile {0} of node {1}" ) ]
373
+ SopsButInteractive ( String , String ) ,
368
374
}
369
375
370
376
impl < ' a > DeployData < ' a > {
@@ -381,6 +387,31 @@ impl<'a> DeployData<'a> {
381
387
_ => None ,
382
388
} ;
383
389
390
+ // Check if one of sudo_file or sudo_secret is missing
391
+ if self . merged_settings . sudo_file . is_some ( ) && self . merged_settings . sudo_secret . is_none ( ) {
392
+ return Err ( DeployDataDefsError :: NoSopsSecret (
393
+ self . profile_name . to_owned ( ) ,
394
+ self . node_name . to_owned ( ) ,
395
+ ) ) ;
396
+ }
397
+
398
+ if self . merged_settings . sudo_file . is_none ( ) && self . merged_settings . sudo_secret . is_some ( ) {
399
+ return Err ( DeployDataDefsError :: NoSopsFile (
400
+ self . profile_name . to_owned ( ) ,
401
+ self . node_name . to_owned ( ) ,
402
+ ) ) ;
403
+ }
404
+
405
+ // Check that only either sudo_secret or interactive sudo is set
406
+ if self . merged_settings . interactive_sudo . is_some ( )
407
+ && self . merged_settings . sudo_secret . is_some ( )
408
+ {
409
+ return Err ( DeployDataDefsError :: SopsButInteractive (
410
+ self . profile_name . to_owned ( ) ,
411
+ self . node_name . to_owned ( ) ,
412
+ ) ) ;
413
+ }
414
+
384
415
Ok ( DeployDefs {
385
416
ssh_user,
386
417
profile_user,
0 commit comments