pinning version of kubectl

This commit is contained in:
az 2023-03-31 20:31:18 +02:00
parent 44deb79865
commit 075fe6cae1
2 changed files with 50 additions and 19 deletions

View file

@ -7,7 +7,9 @@ import org.domaindrivenarchitecture.provs.framework.ubuntu.install.base.aptInsta
import org.domaindrivenarchitecture.provs.framework.ubuntu.web.base.downloadFromURL import org.domaindrivenarchitecture.provs.framework.ubuntu.web.base.downloadFromURL
private const val resourcePath = "org/domaindrivenarchitecture/provs/desktop/infrastructure" private const val RESOURCE_PATH = "org/domaindrivenarchitecture/provs/desktop/infrastructure"
private const val KUBE_CONFIG_CONTEXT_SCRIPT = ".bashrc.d/kubectl.sh"
fun Prov.installDevOps() = task { fun Prov.installDevOps() = task {
installTerraform() installTerraform()
@ -41,20 +43,9 @@ fun Prov.installYq(
fun Prov.installKubectlAndTools(): ProvResult = task { fun Prov.installKubectlAndTools(): ProvResult = task {
task("installKubectl") { task("installKubectl") {
val kubeConfigFile = ".bashrc.d/kubectl.sh" if (!checkFile(KUBE_CONFIG_CONTEXT_SCRIPT)) {
if (!checkFile(kubeConfigFile)) { installKubectl()
// prerequisites -- see https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/ configureKubectlBashCompletion()
cmd("sudo apt-get update")
aptInstall("apt-transport-https ca-certificates curl")
cmd("sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg")
cmd("echo \"deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main\" | sudo tee /etc/apt/sources.list.d/kubernetes.list")
// kubectl and bash completion
cmd("sudo apt update")
aptInstall("kubectl")
cmd("kubectl completion bash >> /etc/bash_completion.d/kubernetes", sudo = true)
createDir(".bashrc.d")
createFileFromResource(kubeConfigFile, "kubectl.sh", resourcePath)
} else { } else {
ProvResult(true, out = "Kubectl already installed") ProvResult(true, out = "Kubectl already installed")
} }
@ -63,20 +54,45 @@ fun Prov.installKubectlAndTools(): ProvResult = task {
installDevopsScripts() installDevopsScripts()
} }
fun Prov.installKubectl(): ProvResult = task {
// see https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
val kubectlVersion = "1.23.0"
val tmpDir = "~/tmp"
// prerequisites -- see https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/
cmd("sudo apt-get update")
aptInstall("apt-transport-https ca-certificates curl")
createDir(tmpDir)
downloadFromURL(
"https://dl.k8s.io/release/v$kubectlVersion/bin/linux/amd64/kubectl",
path = tmpDir,
// from https://dl.k8s.io/v1.23.0/bin/linux/amd64/kubectl.sha256
sha256sum = "2d0f5ba6faa787878b642c151ccb2c3390ce4c1e6c8e2b59568b3869ba407c4f"
)
cmd("sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl", dir = tmpDir)
}
fun Prov.configureKubectlBashCompletion(): ProvResult = 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("install ssh helper") { task("install ssh helper") {
createFileFromResource( createFileFromResource(
"/usr/local/bin/sshu.sh", "/usr/local/bin/sshu.sh",
"sshu.sh", "sshu.sh",
resourcePath, RESOURCE_PATH,
"555", "555",
sudo = true sudo = true
) )
createFileFromResource( createFileFromResource(
"/usr/local/bin/ssht.sh", "/usr/local/bin/ssht.sh",
"ssht.sh", "ssht.sh",
resourcePath, RESOURCE_PATH,
"555", "555",
sudo = true sudo = true
) )
@ -87,7 +103,7 @@ fun Prov.installDevopsScripts() {
createFileFromResource( createFileFromResource(
k3sContextFile, k3sContextFile,
"k3s-create-context.sh", "k3s-create-context.sh",
resourcePath, RESOURCE_PATH,
"555", "555",
sudo = true sudo = true
) )
@ -98,12 +114,13 @@ fun Prov.installDevopsScripts() {
createFileFromResource( createFileFromResource(
k3sConnectFile, k3sConnectFile,
"k3s-connect.sh", "k3s-connect.sh",
resourcePath, RESOURCE_PATH,
"555", "555",
sudo = true sudo = true
) )
} }
} }
fun Prov.installTerraform(): ProvResult = task { fun Prov.installTerraform(): ProvResult = task {
val dir = "/usr/lib/tfenv/" val dir = "/usr/lib/tfenv/"

View file

@ -8,6 +8,7 @@ import org.domaindrivenarchitecture.provs.framework.ubuntu.filesystem.base.fileC
import org.domaindrivenarchitecture.provs.test.defaultTestContainer import org.domaindrivenarchitecture.provs.test.defaultTestContainer
import org.domaindrivenarchitecture.provs.test.tags.ExtensiveContainerTest import org.domaindrivenarchitecture.provs.test.tags.ExtensiveContainerTest
import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Disabled
internal class DevOpsKtTest { internal class DevOpsKtTest {
@ -34,4 +35,17 @@ internal class DevOpsKtTest {
defaultTestContainer().checkFile("/etc/bash_completion.d/kubernetes", sudo = true) defaultTestContainer().checkFile("/etc/bash_completion.d/kubernetes", sudo = true)
) )
} }
@ExtensiveContainerTest
@Disabled("Part of test installKubectlAndTools, but can be tested separately by this test if required")
fun installKubectl() {
// given
val prov = defaultTestContainer()
// when
val res = prov.installKubectl()
// then
assertTrue(res.success)
}
} }