Added 'only' option and ms-teams

This commit is contained in:
Clemens Geibel 2022-06-10 11:10:02 +02:00
parent 3b77038bd4
commit f219e70d83
7 changed files with 84 additions and 1 deletions

View file

@ -6,6 +6,7 @@ import org.domaindrivenarchitecture.provs.configuration.application.CliTargetPar
import org.domaindrivenarchitecture.provs.configuration.domain.ConfigFileName import org.domaindrivenarchitecture.provs.configuration.domain.ConfigFileName
import org.domaindrivenarchitecture.provs.configuration.domain.TargetCliCommand import org.domaindrivenarchitecture.provs.configuration.domain.TargetCliCommand
import org.domaindrivenarchitecture.provs.desktop.domain.DesktopCliCommand import org.domaindrivenarchitecture.provs.desktop.domain.DesktopCliCommand
import org.domaindrivenarchitecture.provs.desktop.domain.DesktopSubmodule
import org.domaindrivenarchitecture.provs.desktop.domain.DesktopType import org.domaindrivenarchitecture.provs.desktop.domain.DesktopType
@ -44,10 +45,17 @@ open class CliArgumentsParser(name: String) : CliTargetParser(name) {
"c", "c",
"the filename containing the yaml config", "the filename containing the yaml config",
) )
val only by option(
ArgType.Choice<DesktopSubmodule>(),
"only",
"o",
"provisions only parts ",
)
override fun execute() { override fun execute() {
configFileName = cliConfigFileName?.let { ConfigFileName(it) } configFileName = cliConfigFileName?.let { ConfigFileName(it) }
parsed = true parsed = true
submodules = if (only != null) listOf(only!!.name.lowercase()) else null
} }
} }

View file

@ -15,9 +15,15 @@ import org.domaindrivenarchitecture.provs.framework.ubuntu.user.base.whoami
fun provisionDesktop(prov: Prov, cmd: DesktopCliCommand) { fun provisionDesktop(prov: Prov, cmd: DesktopCliCommand) {
val submodules = cmd.submodules
// retrieve config // retrieve config
val conf = if (cmd.configFile != null) getConfig(cmd.configFile.fileName) else DesktopConfig() val conf = if (cmd.configFile != null) getConfig(cmd.configFile.fileName) else DesktopConfig()
if (submodules == null) {
prov.provisionWorkplace(cmd.type, conf.ssh?.keyPair(), conf.gpg?.keyPair(), conf.gitUserName, conf.gitEmail) prov.provisionWorkplace(cmd.type, conf.ssh?.keyPair(), conf.gpg?.keyPair(), conf.gitUserName, conf.gitEmail)
} else {
prov.provisionDesktopSubmodules(submodules)
}
} }
@ -111,3 +117,12 @@ fun Prov.provisionWorkplace(
} }
ProvResult(true) ProvResult(true)
} }
private fun Prov.provisionDesktopSubmodules(
submodules: List<String>,
) = task {
if (submodules.contains(DesktopSubmodule.TEAMS.name.lowercase())) {
installMsTeams()
}
}

View file

@ -0,0 +1,5 @@
package org.domaindrivenarchitecture.provs.desktop.domain
enum class DesktopSubmodule {
TEAMS
}

View file

@ -0,0 +1,14 @@
package org.domaindrivenarchitecture.provs.desktop.infrastructure
import org.domaindrivenarchitecture.provs.framework.core.Prov
import org.domaindrivenarchitecture.provs.framework.ubuntu.filesystem.base.createDir
import org.domaindrivenarchitecture.provs.framework.ubuntu.web.base.downloadFromURL
/**
* ATTENTION: Download URL might be only valid for a limited time and thus might not be working.
*/
fun Prov.installCitrixWorkspaceApp() = task {
downloadFromURL("https://downloads.citrix.com/20976/linuxx64-22.5.0.16.tar.gz?__gda__=exp=1654847726~acl=/*~hmac=be248338ecd7c7de50950ff7825fc0a80577fef7d3610988c64391cff8eaca16", "xitrix.tar.gz", "/tmp")
createDir("xitrix", "/tmp")
cmd("tar -xf xitrix.tar.gz -C /tmp/xitrix")
}

View file

@ -0,0 +1,13 @@
package org.domaindrivenarchitecture.provs.desktop.infrastructure
import org.domaindrivenarchitecture.provs.framework.core.Prov
import org.domaindrivenarchitecture.provs.framework.ubuntu.install.base.aptInstall
fun Prov.installMsTeams() = task {
aptInstall("curl")
cmd("curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -")
cmd("sudo sh -c 'echo \"deb [arch=amd64] https://packages.microsoft.com/repos/ms-teams stable main\" > /etc/apt/sources.list.d/teams.list'")
//cmd("sudo apt update")
aptInstall("teams")
//cmd("sudo apt install teams")
}

View file

@ -14,4 +14,13 @@ internal class CliArgumentsParserTest {
assertEquals(null, cli.configFile) assertEquals(null, cli.configFile)
assertEquals(true, cli.target.isValidLocalhost()) assertEquals(true, cli.target.isValidLocalhost())
} }
@Test
fun parse_cliCommand_with_only_submodule_teams_and_local_target() {
val cli = CliArgumentsParser("test").parseCommand(args = arrayOf("ide", "local", "-o", "teams"))
assertTrue(cli.isValid())
assertEquals(true, cli.target.isValidLocalhost())
assertEquals(true, cli.submodules?.contains("teams"))
}
} }

View file

@ -0,0 +1,19 @@
package org.domaindrivenarchitecture.provs.desktop.infrastructure
import org.domaindrivenarchitecture.provs.test.defaultTestContainer
import org.domaindrivenarchitecture.provs.test.tags.ContainerTest
import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Test
class MsTeamsTest {
@ContainerTest
fun installMsTeams() {
// given
val a = defaultTestContainer()
// when
val res = a.task { installMsTeams() }
// then
assertTrue(res.success)
}
}