Files
kube-forge/pkg/kubespray/utility.go

76 lines
1.8 KiB
Go

package kubespray
import (
"context"
"io"
"kube-forge/pkg/config"
"os"
"path/filepath"
"github.com/apenella/go-ansible/v2/pkg/execute"
"github.com/apenella/go-ansible/v2/pkg/execute/stdoutcallback"
"github.com/apenella/go-ansible/v2/pkg/playbook"
)
func getPlaybookParameters(tags string) playbook.AnsiblePlaybookOptions {
cfg := config.GetConfig()
ansiblePlaybookOptions := playbook.AnsiblePlaybookOptions{
Inventory: filepath.Join(cfg.WorkDir, "kubespray/inventory/hosts"),
Tags: tags,
User: cfg.Credentials.User,
Become: true,
}
if cfg.Credentials.PrivateKeyFile != "" {
ansiblePlaybookOptions.PrivateKey = cfg.Credentials.PrivateKeyFile
}
if cfg.Credentials.AskSudoPassword {
ansiblePlaybookOptions.AskBecomePass = true
}
return ansiblePlaybookOptions
}
func CopyK8SAdminConfig(pathInDataDir string) {
config := config.GetConfig()
dataDir := config.WorkDir
var adminDefaultConfigPath = filepath.Join(dataDir, "kubespray/inventory/artifacts/admin.conf")
var adminOutConfigPath = filepath.Join(dataDir, pathInDataDir)
source, err := os.Open(adminDefaultConfigPath)
if err != nil {
panic(err)
}
defer source.Close()
destination, err := os.Create(adminOutConfigPath)
if err != nil {
panic(err)
}
defer destination.Close()
_, err = io.Copy(destination, source)
if err != nil {
panic(err)
}
}
func runPlaybook(playbookPath string, tags string) {
playbookOptions := getPlaybookParameters(tags)
playbookCmd := playbook.NewAnsiblePlaybookCmd(
playbook.WithPlaybooks(playbookPath),
playbook.WithPlaybookOptions(&playbookOptions),
)
exec := stdoutcallback.NewDenseStdoutCallbackExecute(
execute.NewDefaultExecute(
execute.WithCmd(playbookCmd),
execute.WithErrorEnrich(playbook.NewAnsiblePlaybookErrorEnrich()),
),
)
err := exec.Execute(context.Background())
if err != nil {
panic(err)
}
}