WIP
This commit is contained in:
@@ -67,7 +67,7 @@ func (app *SpaceWorker) CreateRole(name string) error {
|
||||
|
||||
{ // tasks dir
|
||||
app.log.Trace("generate main task")
|
||||
if err := generateMainTask(name, rolePath); err != nil {
|
||||
if err := generateMainTask(name, rolePath, false); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -100,17 +100,42 @@ func (app *SpaceWorker) CreateRole(name string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func generateMainTask(name string, path string) error {
|
||||
buffer := &bytes.Buffer{}
|
||||
func generateMainTask(name string, path string, withBackup bool) error {
|
||||
var mainTask []types.MainTask
|
||||
|
||||
buffer.WriteString(utils.YamlHeader())
|
||||
buffer.WriteString(`- include_tasks: install.yml
|
||||
when: >
|
||||
(dd_install is defined and dd_install)
|
||||
`)
|
||||
buffer.WriteString(fmt.Sprintf(" or (dd_install_%s is defined and dd_install_%s)\n", name, name))
|
||||
if withBackup {
|
||||
mainTask = make([]types.MainTask, 4)
|
||||
} else {
|
||||
mainTask = make([]types.MainTask, 1)
|
||||
}
|
||||
|
||||
return os.WriteFile(filepath.Join(path, "tasks", "main.yml"), buffer.Bytes(), 0644)
|
||||
mainTask[0] = types.MainTask{
|
||||
IncludeTasks: "install.yml",
|
||||
When: fmt.Sprintf("(dd_install is defined and dd_install) "+
|
||||
"or (dd_install_%s is defined and dd_install_%s)", name, name),
|
||||
}
|
||||
|
||||
if withBackup {
|
||||
mainTask[1] = types.MainTask{
|
||||
IncludeTasks: "backup.yml",
|
||||
When: fmt.Sprintf("(dd_backup is defined and dd_backup) "+
|
||||
"or (dd_backup_%s is defined and dd_backup_%s)", name, name),
|
||||
}
|
||||
|
||||
mainTask[2] = types.MainTask{
|
||||
IncludeTasks: "pre-restore.yml",
|
||||
When: fmt.Sprintf("(dd_prerestore is defined and dd_prerestore) "+
|
||||
"or (dd_prerestore_%s is defined and dd_prerestore_%s)", name, name),
|
||||
}
|
||||
|
||||
mainTask[3] = types.MainTask{
|
||||
IncludeTasks: "restore.yml",
|
||||
When: fmt.Sprintf("(dd_restore is defined and dd_restore) "+
|
||||
"or (dd_restore_%s is defined and dd_restore_%s)", name, name),
|
||||
}
|
||||
}
|
||||
|
||||
return types.WriteMainTask(path, &mainTask)
|
||||
}
|
||||
|
||||
func generateReadme(name string, path string) error {
|
||||
@@ -174,6 +199,38 @@ func (app *SpaceWorker) ListRoles() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (app *SpaceWorker) ModifyRoleBackupAdd(name string) error {
|
||||
app.log.Debug(fmt.Sprintf("workDir: %s", app.workDir))
|
||||
app.log.Debug(fmt.Sprintf("role name: %s", name))
|
||||
|
||||
rolePath := filepath.Join(app.workDir, "roles", name)
|
||||
app.log.Debug(fmt.Sprintf("rolePath: %s", rolePath))
|
||||
|
||||
for _, file := range []string{"backup.yml", "pre-restore.yml", "restore.yml"} {
|
||||
app.log.Trace(fmt.Sprintf("try create %s", file))
|
||||
if err := utils.WriteEmptyYaml(filepath.Join(rolePath, "tasks", file)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
app.log.Trace("re-generate main task")
|
||||
if err := generateMainTask(name, rolePath, true); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
app.log.Trace("try create backups dir")
|
||||
if err := utils.CreateDirIfNotExists(filepath.Join(rolePath, "backups")); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
app.log.Trace("create .gitignore")
|
||||
if err := utils.WriteStringFile(filepath.Join(rolePath, ".gitignore"), "backups/"); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
func (app *SpaceWorker) Install(generateOnly bool, targetHost string, roles ...string) error {
|
||||
|
||||
33
internal/types/main_task.go
Normal file
33
internal/types/main_task.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package types
|
||||
|
||||
import (
|
||||
"gopkg.in/yaml.v3"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"playbookctl/internal/utils"
|
||||
)
|
||||
|
||||
type MainTask struct {
|
||||
IncludeTasks string `yaml:"include_tasks"`
|
||||
When string `yaml:"when"`
|
||||
}
|
||||
|
||||
func ReadMainTask(roleDir string) (*[]MainTask, error) {
|
||||
var mainTask []MainTask
|
||||
{
|
||||
bb, err := os.ReadFile(filepath.Join(roleDir, "tasks", "main.yml"))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := yaml.Unmarshal(bb, &mainTask); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return &mainTask, nil
|
||||
}
|
||||
|
||||
func WriteMainTask(roleDir string, mainTask *[]MainTask) error {
|
||||
return utils.WriteYaml(mainTask, filepath.Join(roleDir, "tasks", "main.yml"))
|
||||
}
|
||||
@@ -13,6 +13,32 @@ func CreateDir(path string) error {
|
||||
return os.Mkdir(path, 0755)
|
||||
}
|
||||
|
||||
func CreateDirIfNotExists(path string) error {
|
||||
exists, err := IsExistsDir(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !exists {
|
||||
if err = CreateDir(path); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func IsExistsDir(path string) (bool, error) {
|
||||
_, err := os.Stat(path)
|
||||
if err == nil {
|
||||
return true, nil
|
||||
}
|
||||
if os.IsNotExist(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
|
||||
func RemoveFile(path string) error {
|
||||
return os.Remove(path)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user