refactorings, reformats, minor fixes, update docs
This commit is contained in:
parent
277302d0ee
commit
469f864339
7 changed files with 93 additions and 69 deletions
|
@ -6,7 +6,10 @@
|
|||
## Purpose
|
||||
|
||||
provs provides cli-based tools for
|
||||
* provisioning a desktop (various kinds)
|
||||
* provisioning desktop software for different desktop types:
|
||||
* basic
|
||||
* office
|
||||
* IDE
|
||||
* provisioning a k3s server
|
||||
* performing system checks
|
||||
|
||||
|
|
|
@ -18,39 +18,10 @@ fun Prov.installDevOps() = task {
|
|||
installGraalVM()
|
||||
}
|
||||
|
||||
fun Prov.installGraalVM():ProvResult = task{
|
||||
val version = "21.0.2"
|
||||
val tmpDir = "~/tmp"
|
||||
val filename = "graalvm-community-jdk-"
|
||||
val additionalPartFilename = "_linux-x64_bin"
|
||||
val packedFilename = "$filename$version$additionalPartFilename.tar.gz"
|
||||
val extractedFilenameHunch = "graalvm-community-openjdk-"
|
||||
val installationPath = "/usr/lib/jvm/"
|
||||
|
||||
if ( !chk("/usr/local/bin/native-image --version") || version != cmd("/usr/local/bin/native-image --version|awk 'NR==1 {print $2}").out?.trim() || !chk("ls -d $installationPath$extractedFilenameHunch$version*")) {
|
||||
downloadFromURL(
|
||||
"https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-$version/$packedFilename",
|
||||
path = tmpDir,
|
||||
sha256sum = "b048069aaa3a99b84f5b957b162cc181a32a4330cbc35402766363c5be76ae48"
|
||||
)
|
||||
if (!chk("ls -d $installationPath"))
|
||||
cmd("sudo mkdir $installationPath")
|
||||
else {
|
||||
ProvResult(true, out = "$installationPath just exists, mkdir not necessary.")
|
||||
}
|
||||
cmd("sudo tar -C $installationPath -xzf $packedFilename", tmpDir)
|
||||
val graalInstPath = installationPath + (cmd("ls /usr/lib/jvm/|grep -e graalvm-community-openjdk-$version").out?.replace("\n", ""))
|
||||
cmd("sudo ln -s $graalInstPath/lib/svm/bin/native-image /usr/local/bin/native-image")
|
||||
cmd("/usr/local/bin/native-image --version")
|
||||
} else {
|
||||
ProvResult(true, out = "GraalVM $version already installed")
|
||||
}
|
||||
}
|
||||
|
||||
fun Prov.installYq(
|
||||
version: String = "4.13.2",
|
||||
sha256sum: String = "d7c89543d1437bf80fee6237eadc608d1b121c21a7cbbe79057d5086d74f8d79"
|
||||
): ProvResult = task {
|
||||
) = task {
|
||||
val path = "/usr/bin/"
|
||||
val filename = "yq"
|
||||
if (!checkFile(path + filename)) {
|
||||
|
@ -67,7 +38,7 @@ fun Prov.installYq(
|
|||
}
|
||||
}
|
||||
|
||||
fun Prov.installKubectlAndTools(): ProvResult = task {
|
||||
fun Prov.installKubectlAndTools() = task {
|
||||
|
||||
task("installKubectl") {
|
||||
if (!checkFile(KUBE_CONFIG_CONTEXT_SCRIPT)) {
|
||||
|
@ -105,7 +76,7 @@ fun Prov.installKubeconform() = task {
|
|||
}
|
||||
}
|
||||
|
||||
fun Prov.installKubectl(): ProvResult = task {
|
||||
fun Prov.installKubectl() = task {
|
||||
|
||||
// see https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
|
||||
val kubectlVersion = "1.27.4"
|
||||
|
@ -126,13 +97,13 @@ fun Prov.installKubectl(): ProvResult = task {
|
|||
cmd("sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl", dir = tmpDir)
|
||||
}
|
||||
|
||||
fun Prov.configureKubectlBashCompletion(): ProvResult = task {
|
||||
fun Prov.configureKubectlBashCompletion() = task {
|
||||
cmd("kubectl completion bash >> /etc/bash_completion.d/kubernetes", sudo = true)
|
||||
createDir(".bashrc.d")
|
||||
createFileFromResource(KUBE_CONFIG_CONTEXT_SCRIPT, "kubectl.sh", RESOURCE_PATH)
|
||||
}
|
||||
|
||||
fun Prov.installDevopsScripts() {
|
||||
fun Prov.installDevopsScripts() = task {
|
||||
|
||||
task("install ssh helper") {
|
||||
createFileFromResource(
|
||||
|
@ -174,7 +145,7 @@ fun Prov.installDevopsScripts() {
|
|||
}
|
||||
}
|
||||
|
||||
fun Prov.installTerraform(): ProvResult = task {
|
||||
fun Prov.installTerraform() = task {
|
||||
val dir = "/usr/lib/tfenv/"
|
||||
|
||||
if (!checkDir(dir)) {
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
package org.domaindrivenarchitecture.provs.desktop.infrastructure
|
||||
|
||||
import org.domaindrivenarchitecture.provs.framework.core.Prov
|
||||
import org.domaindrivenarchitecture.provs.framework.core.ProvResult
|
||||
import org.domaindrivenarchitecture.provs.framework.ubuntu.web.base.downloadFromURL
|
||||
|
||||
const val GRAAL_VM_VERSION = "21.0.2"
|
||||
|
||||
|
||||
fun Prov.installGraalVM() = taskWithResult {
|
||||
val tmpDir = "~/tmp"
|
||||
val filename = "graalvm-community-jdk-"
|
||||
val additionalPartFilename = "_linux-x64_bin"
|
||||
val packedFilename = "$filename$GRAAL_VM_VERSION$additionalPartFilename.tar.gz"
|
||||
val extractedFilenameHunch = "graalvm-community-openjdk-"
|
||||
val installationPath = "/usr/lib/jvm/"
|
||||
|
||||
if ( GRAAL_VM_VERSION != graalVMVersion() || !chk("ls -d $installationPath$extractedFilenameHunch$GRAAL_VM_VERSION*")) {
|
||||
downloadFromURL(
|
||||
"https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-$GRAAL_VM_VERSION/$packedFilename",
|
||||
path = tmpDir,
|
||||
sha256sum = "b048069aaa3a99b84f5b957b162cc181a32a4330cbc35402766363c5be76ae48"
|
||||
)
|
||||
if (!chk("ls -d $installationPath"))
|
||||
cmd("sudo mkdir $installationPath")
|
||||
else {
|
||||
ProvResult(true, out = "$installationPath just exists, mkdir not necessary.")
|
||||
}
|
||||
cmd("sudo tar -C $installationPath -xzf $packedFilename", tmpDir)
|
||||
val graalInstPath = installationPath + (cmd("ls /usr/lib/jvm/|grep -e graalvm-community-openjdk-$GRAAL_VM_VERSION").out?.replace("\n", ""))
|
||||
cmd("sudo ln -sf $graalInstPath/lib/svm/bin/native-image /usr/local/bin/native-image")
|
||||
cmd("/usr/local/bin/native-image --version")
|
||||
} else {
|
||||
ProvResult(true, out = "GraalVM $GRAAL_VM_VERSION already installed")
|
||||
}
|
||||
}
|
||||
|
||||
fun Prov.graalVMVersion(): String {
|
||||
return cmdNoEval("/usr/local/bin/native-image --version|awk 'NR==1 {print $2}'").out?.trim() ?: ""
|
||||
}
|
|
@ -80,8 +80,8 @@ open class Prov protected constructor(
|
|||
}
|
||||
|
||||
/**
|
||||
* A task is the base execution unit in provs. In the results overview it is represented by one line resp. result (of either success or failure).
|
||||
* Returns success if no sub-tasks are called or if all subtasks finish with success.
|
||||
* A task is the fundamental execution unit. In the results overview it is represented by one line with a success or failure result.
|
||||
* Returns success if all sub-tasks finished with success or if no sub-tasks are called at all.
|
||||
*/
|
||||
fun task(name: String? = null, taskLambda: Prov.() -> Unit): ProvResult {
|
||||
printDeprecationWarningIfLevel0("task")
|
||||
|
@ -89,8 +89,10 @@ open class Prov protected constructor(
|
|||
}
|
||||
|
||||
/**
|
||||
* Same as task but the provided lambda is explicitly required to provide a ProvResult to be returned.
|
||||
* The returned result is included in the evaluation.
|
||||
* Same as task above but the lambda parameter must have a ProvResult as return type.
|
||||
* The returned ProvResult is included in the success resp. failure evaluation,
|
||||
* i.e. if the returned ProvResult from the lambda fails, the returned ProvResult from
|
||||
* taskWithResult also fails, else success depends on potentially called sub-tasks.
|
||||
*/
|
||||
fun taskWithResult(name: String? = null, taskLambda: Prov.() -> ProvResult): ProvResult {
|
||||
printDeprecationWarningIfLevel0("taskWithResult")
|
||||
|
@ -98,27 +100,27 @@ open class Prov protected constructor(
|
|||
}
|
||||
|
||||
/**
|
||||
* defines a task, which returns the returned result, the results of sub-tasks are not considered
|
||||
* defines a task, which returns the returned result from the lambda, the results of sub-tasks are not considered
|
||||
*/
|
||||
fun requireLast(name: String? = null, a: Prov.() -> ProvResult): ProvResult {
|
||||
fun requireLast(name: String? = null, taskLambda: Prov.() -> ProvResult): ProvResult {
|
||||
printDeprecationWarningIfLevel0("requireLast")
|
||||
return evaluate(ResultMode.LAST, name) { a() }
|
||||
return evaluate(ResultMode.LAST, name) { taskLambda() }
|
||||
}
|
||||
|
||||
/**
|
||||
* defines a task, which always returns success
|
||||
* Defines a task, which always returns success.
|
||||
*/
|
||||
fun optional(name: String? = null, a: Prov.() -> ProvResult): ProvResult {
|
||||
fun optional(name: String? = null, taskLambda: Prov.() -> ProvResult): ProvResult {
|
||||
printDeprecationWarningIfLevel0("optional")
|
||||
return evaluate(ResultMode.OPTIONAL, name) { a() }
|
||||
return evaluate(ResultMode.OPTIONAL, name) { taskLambda() }
|
||||
}
|
||||
|
||||
/**
|
||||
* defines a task, which exits the overall execution on failure
|
||||
* Defines a task, which exits the overall execution on failure result of the taskLambda.
|
||||
*/
|
||||
fun exitOnFailure(a: Prov.() -> ProvResult): ProvResult {
|
||||
fun exitOnFailure(taskLambda: Prov.() -> ProvResult): ProvResult {
|
||||
printDeprecationWarningIfLevel0("exitOnFailure")
|
||||
return evaluate(ResultMode.FAILEXIT) { a() }
|
||||
return evaluate(ResultMode.FAILEXIT) { taskLambda() }
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package org.domaindrivenarchitecture.provs.server.infrastructure
|
||||
|
||||
import org.domaindrivenarchitecture.provs.framework.core.Prov
|
||||
import org.domaindrivenarchitecture.provs.framework.core.ProvResult
|
||||
import org.domaindrivenarchitecture.provs.framework.ubuntu.filesystem.base.*
|
||||
import org.domaindrivenarchitecture.provs.framework.ubuntu.web.base.downloadFromURL
|
||||
|
||||
|
@ -12,10 +11,8 @@ const val K9S_VERSION = "v0.32.5"
|
|||
// ----------------------------------- public functions --------------------------------
|
||||
|
||||
|
||||
fun Prov.installK9s(): ProvResult {
|
||||
return taskWithResult {
|
||||
createDir("/tmp", sudo = true)
|
||||
downloadFromURL( "https://github.com/derailed/k9s/releases/download/" + K9S_VERSION + "/k9s_linux_amd64.deb", "k9s_linux_amd64.deb", "/tmp")
|
||||
cmd("sudo dpkg -i k9s_linux_amd64.deb", "/tmp")
|
||||
}
|
||||
fun Prov.installK9s() = task {
|
||||
createDir("/tmp", sudo = true)
|
||||
downloadFromURL("https://github.com/derailed/k9s/releases/download/" + K9S_VERSION + "/k9s_linux_amd64.deb", "k9s_linux_amd64.deb", "/tmp")
|
||||
cmd("sudo dpkg -i k9s_linux_amd64.deb", "/tmp")
|
||||
}
|
||||
|
|
|
@ -59,17 +59,4 @@ internal class DevOpsKtTest {
|
|||
assertTrue(res.success)
|
||||
assertTrue(prov.checkFile("/usr/local/bin/kubeconform"))
|
||||
}
|
||||
|
||||
@ContainerTest
|
||||
fun installGraalVM() {
|
||||
// given
|
||||
val prov = defaultTestContainer()
|
||||
|
||||
// when
|
||||
val res = prov.installGraalVM()
|
||||
|
||||
// then
|
||||
assertTrue(res.success)
|
||||
assertTrue(prov.checkFile("/usr/local/bin/native-image"))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package org.domaindrivenarchitecture.provs.desktop.infrastructure
|
||||
|
||||
import org.domaindrivenarchitecture.provs.framework.ubuntu.filesystem.base.checkFile
|
||||
import org.domaindrivenarchitecture.provs.test.defaultTestContainer
|
||||
import org.domaindrivenarchitecture.provs.test.tags.ContainerTest
|
||||
|
||||
import org.junit.jupiter.api.Assertions.*
|
||||
|
||||
class GraalVMKtTest {
|
||||
|
||||
@ContainerTest
|
||||
fun installGraalVM() {
|
||||
// given
|
||||
val prov = defaultTestContainer()
|
||||
|
||||
// when
|
||||
val res = prov.installGraalVM()
|
||||
|
||||
// then
|
||||
assertTrue(res.success)
|
||||
assertTrue(GRAAL_VM_VERSION == prov.graalVMVersion())
|
||||
assertTrue(prov.checkFile("/usr/local/bin/native-image"))
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue