[skip ci] refactor for ssh does not need to reconnect after user is sudoer without pw required
This commit is contained in:
parent
b36f2f965a
commit
cdb4281c72
3 changed files with 11 additions and 33 deletions
|
@ -1,32 +1,21 @@
|
||||||
package org.domaindrivenarchitecture.provs.configuration.application
|
package org.domaindrivenarchitecture.provs.configuration.application
|
||||||
|
|
||||||
import org.domaindrivenarchitecture.provs.configuration.domain.TargetCliCommand
|
|
||||||
import org.domaindrivenarchitecture.provs.framework.core.Prov
|
import org.domaindrivenarchitecture.provs.framework.core.Prov
|
||||||
import org.domaindrivenarchitecture.provs.framework.core.cli.createRemoteProvInstance
|
import org.domaindrivenarchitecture.provs.framework.core.Secret
|
||||||
import org.domaindrivenarchitecture.provs.framework.core.cli.getPasswordToConfigureSudoWithoutPassword
|
import org.domaindrivenarchitecture.provs.framework.core.cli.getPasswordToConfigureSudoWithoutPassword
|
||||||
import org.domaindrivenarchitecture.provs.framework.ubuntu.user.base.currentUserCanSudoWithoutPassword
|
import org.domaindrivenarchitecture.provs.framework.ubuntu.user.base.currentUserCanSudoWithoutPassword
|
||||||
import org.domaindrivenarchitecture.provs.framework.ubuntu.user.base.makeCurrentUserSudoerWithoutPasswordRequired
|
import org.domaindrivenarchitecture.provs.framework.ubuntu.user.base.makeCurrentUserSudoerWithoutPasswordRequired
|
||||||
|
|
||||||
|
|
||||||
fun ensureSudoWithoutPassword(prov: Prov, targetCommand: TargetCliCommand): Prov {
|
fun Prov.ensureSudoWithoutPassword(password: Secret?) {
|
||||||
|
|
||||||
return if (prov.currentUserCanSudoWithoutPassword()) {
|
if (!currentUserCanSudoWithoutPassword()) {
|
||||||
prov
|
val passwordNonNull = password ?: getPasswordToConfigureSudoWithoutPassword()
|
||||||
} else {
|
|
||||||
val password = targetCommand.remoteTarget()?.password ?: getPasswordToConfigureSudoWithoutPassword()
|
|
||||||
|
|
||||||
val result = prov.makeCurrentUserSudoerWithoutPasswordRequired(password)
|
val result = makeCurrentUserSudoerWithoutPasswordRequired(passwordNonNull)
|
||||||
|
|
||||||
check(result.success) {
|
check(result.success) {
|
||||||
"Could not make user a sudoer without password required. (E.g. the password provided may be incorrect.)"
|
"Could not make user a sudoer without password required. (E.g. the password provided may be incorrect.)"
|
||||||
}
|
}
|
||||||
|
|
||||||
return if (targetCommand.isValidRemote()) {
|
|
||||||
// return a new instance as for remote instances a new ssh client is required after user was made sudoer without password
|
|
||||||
createRemoteProvInstance(targetCommand.remoteTarget())
|
|
||||||
} else {
|
|
||||||
prov
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -19,10 +19,10 @@ fun main(args: Array<String>) {
|
||||||
}
|
}
|
||||||
|
|
||||||
val prov = createProvInstance(cmd.target)
|
val prov = createProvInstance(cmd.target)
|
||||||
val provWithSudo = ensureSudoWithoutPassword(prov, cmd.target)
|
prov.ensureSudoWithoutPassword(cmd.target.remoteTarget()?.password)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
provisionDesktopCommand(provWithSudo, cmd)
|
provisionDesktopCommand(prov, cmd)
|
||||||
} catch (e: SerializationException) {
|
} catch (e: SerializationException) {
|
||||||
println(
|
println(
|
||||||
"Error: File \"${cmd.configFile?.fileName}\" has an invalid format and or invalid data.\n"
|
"Error: File \"${cmd.configFile?.fileName}\" has an invalid format and or invalid data.\n"
|
||||||
|
|
|
@ -3,7 +3,6 @@ package org.domaindrivenarchitecture.provs.configuration.application
|
||||||
import io.mockk.every
|
import io.mockk.every
|
||||||
import io.mockk.mockkStatic
|
import io.mockk.mockkStatic
|
||||||
import io.mockk.unmockkStatic
|
import io.mockk.unmockkStatic
|
||||||
import org.domaindrivenarchitecture.provs.configuration.domain.TargetCliCommand
|
|
||||||
import org.domaindrivenarchitecture.provs.framework.core.*
|
import org.domaindrivenarchitecture.provs.framework.core.*
|
||||||
import org.domaindrivenarchitecture.provs.framework.core.cli.getPasswordToConfigureSudoWithoutPassword
|
import org.domaindrivenarchitecture.provs.framework.core.cli.getPasswordToConfigureSudoWithoutPassword
|
||||||
import org.domaindrivenarchitecture.provs.framework.core.docker.provideContainer
|
import org.domaindrivenarchitecture.provs.framework.core.docker.provideContainer
|
||||||
|
@ -43,10 +42,8 @@ class ProvWithSudoKtTest {
|
||||||
|
|
||||||
// when
|
// when
|
||||||
val canSudo1 = prov.currentUserCanSudoWithoutPassword()
|
val canSudo1 = prov.currentUserCanSudoWithoutPassword()
|
||||||
val provWithSudo = ensureSudoWithoutPassword(
|
prov.ensureSudoWithoutPassword(null)
|
||||||
prov, TargetCliCommand("local")
|
val canSudo2 = prov.currentUserCanSudoWithoutPassword()
|
||||||
)
|
|
||||||
val canSudo2 = provWithSudo.currentUserCanSudoWithoutPassword()
|
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertFalse(canSudo1)
|
assertFalse(canSudo1)
|
||||||
|
@ -58,14 +55,10 @@ class ProvWithSudoKtTest {
|
||||||
@ExtensiveContainerTest
|
@ExtensiveContainerTest
|
||||||
fun test_ensureSudoWithoutPassword_remote_Prov() {
|
fun test_ensureSudoWithoutPassword_remote_Prov() {
|
||||||
|
|
||||||
// mockkStatic(::getPasswordToConfigureSudoWithoutPassword)
|
|
||||||
// every { getPasswordToConfigureSudoWithoutPassword() } returns Secret("testuserpw")
|
|
||||||
|
|
||||||
// given
|
// given
|
||||||
val containerName = "prov-test-sudo-no-pw-ssh"
|
val containerName = "prov-test-sudo-no-pw-ssh"
|
||||||
val password = Secret("testuserpw")
|
val password = Secret("testuserpw")
|
||||||
|
|
||||||
// local().provideContainer(containerName, "ubuntu_plus_user", options = "")
|
|
||||||
val prov = Prov.newInstance(
|
val prov = Prov.newInstance(
|
||||||
ContainerUbuntuHostProcessor(
|
ContainerUbuntuHostProcessor(
|
||||||
containerName,
|
containerName,
|
||||||
|
@ -88,15 +81,11 @@ class ProvWithSudoKtTest {
|
||||||
|
|
||||||
// when
|
// when
|
||||||
val canSudo1 = remoteProvBySsh.currentUserCanSudoWithoutPassword()
|
val canSudo1 = remoteProvBySsh.currentUserCanSudoWithoutPassword()
|
||||||
val provWithSudo = ensureSudoWithoutPassword(
|
prov.ensureSudoWithoutPassword(password)
|
||||||
remoteProvBySsh, TargetCliCommand("testuser:${password.plain()}@$ip")
|
val canSudo2 = prov.currentUserCanSudoWithoutPassword()
|
||||||
)
|
|
||||||
val canSudo2 = provWithSudo.currentUserCanSudoWithoutPassword()
|
|
||||||
|
|
||||||
// then
|
// then
|
||||||
assertFalse(canSudo1)
|
assertFalse(canSudo1)
|
||||||
assertTrue(canSudo2)
|
assertTrue(canSudo2)
|
||||||
|
|
||||||
// unmockkStatic(::getPasswordToConfigureSudoWithoutPassword)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue