Skip to content

Commit d61ae84

Browse files
committed
chore: validate that both sudo_secret and sudo_path are set and that either interactive_sudo or sops decryption is used
1 parent 133de1d commit d61ae84

File tree

1 file changed

+31
-0
lines changed

1 file changed

+31
-0
lines changed

src/lib.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,12 @@ enum ProfileInfo {
365365
pub enum DeployDataDefsError {
366366
#[error("Neither `user` nor `sshUser` are set for profile {0} of node {1}")]
367367
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),
368374
}
369375

370376
impl<'a> DeployData<'a> {
@@ -381,6 +387,31 @@ impl<'a> DeployData<'a> {
381387
_ => None,
382388
};
383389

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+
384415
Ok(DeployDefs {
385416
ssh_user,
386417
profile_user,

0 commit comments

Comments
 (0)