WIP
This commit is contained in:
39
cmd/role.go
39
cmd/role.go
@@ -8,6 +8,10 @@ import (
|
|||||||
"playbookctl/internal/utils/logger"
|
"playbookctl/internal/utils/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
flagBackupAdd bool
|
||||||
|
)
|
||||||
|
|
||||||
func NewCommandRole() *cobra.Command {
|
func NewCommandRole() *cobra.Command {
|
||||||
roleCmd := &cobra.Command{
|
roleCmd := &cobra.Command{
|
||||||
Use: "role",
|
Use: "role",
|
||||||
@@ -22,6 +26,7 @@ func NewCommandRole() *cobra.Command {
|
|||||||
//roleCmd.AddCommand(newCommandRoleAdd())
|
//roleCmd.AddCommand(newCommandRoleAdd())
|
||||||
roleCmd.AddCommand(newCommandRoleList())
|
roleCmd.AddCommand(newCommandRoleList())
|
||||||
//roleCmd.AddCommand(newCommandRoleExport())
|
//roleCmd.AddCommand(newCommandRoleExport())
|
||||||
|
roleCmd.AddCommand(newCommandRoleModify())
|
||||||
|
|
||||||
return roleCmd
|
return roleCmd
|
||||||
}
|
}
|
||||||
@@ -54,7 +59,7 @@ func roleCreateRunE(_ *cobra.Command, args []string) error {
|
|||||||
|
|
||||||
func newCommandRoleRemove() *cobra.Command {
|
func newCommandRoleRemove() *cobra.Command {
|
||||||
createCmd := &cobra.Command{
|
createCmd := &cobra.Command{
|
||||||
Use: "remove",
|
Use: "remove <name>",
|
||||||
Aliases: []string{"delete", "rm", "del"},
|
Aliases: []string{"delete", "rm", "del"},
|
||||||
Short: "удаляет роль из пространства",
|
Short: "удаляет роль из пространства",
|
||||||
Args: cobra.ExactArgs(1),
|
Args: cobra.ExactArgs(1),
|
||||||
@@ -117,6 +122,8 @@ func roleAddRunE(_ *cobra.Command, args []string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
func newCommandRoleExport() *cobra.Command {
|
func newCommandRoleExport() *cobra.Command {
|
||||||
createCmd := &cobra.Command{
|
createCmd := &cobra.Command{
|
||||||
Use: "export",
|
Use: "export",
|
||||||
@@ -134,3 +141,33 @@ func roleExportRunE(_ *cobra.Command, args []string) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
func newCommandRoleModify() *cobra.Command {
|
||||||
|
modifyCmd := &cobra.Command{
|
||||||
|
Use: "modify <name>",
|
||||||
|
Short: "модифицировать роль",
|
||||||
|
Args: cobra.ExactArgs(1),
|
||||||
|
ValidArgsFunction: ArgRoleCompletion,
|
||||||
|
RunE: roleModifyRunE,
|
||||||
|
}
|
||||||
|
|
||||||
|
modifyCmd.Flags().BoolVar(&flagBackupAdd, "backup-add", false, "добавить backup функцию")
|
||||||
|
|
||||||
|
return modifyCmd
|
||||||
|
}
|
||||||
|
|
||||||
|
func roleModifyRunE(_ *cobra.Command, args []string) error {
|
||||||
|
workDir, err := filepath.Abs(flagWorkdir)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
spaceWorker := sw.NewSpaceWorker(logger.LogVerbose(flagVerbose), workDir)
|
||||||
|
if flagBackupAdd {
|
||||||
|
return spaceWorker.ModifyRoleBackupAdd(args[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ func (app *SpaceWorker) CreateRole(name string) error {
|
|||||||
|
|
||||||
{ // tasks dir
|
{ // tasks dir
|
||||||
app.log.Trace("generate main task")
|
app.log.Trace("generate main task")
|
||||||
if err := generateMainTask(name, rolePath); err != nil {
|
if err := generateMainTask(name, rolePath, false); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,17 +100,42 @@ func (app *SpaceWorker) CreateRole(name string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateMainTask(name string, path string) error {
|
func generateMainTask(name string, path string, withBackup bool) error {
|
||||||
buffer := &bytes.Buffer{}
|
var mainTask []types.MainTask
|
||||||
|
|
||||||
buffer.WriteString(utils.YamlHeader())
|
if withBackup {
|
||||||
buffer.WriteString(`- include_tasks: install.yml
|
mainTask = make([]types.MainTask, 4)
|
||||||
when: >
|
} else {
|
||||||
(dd_install is defined and dd_install)
|
mainTask = make([]types.MainTask, 1)
|
||||||
`)
|
}
|
||||||
buffer.WriteString(fmt.Sprintf(" or (dd_install_%s is defined and dd_install_%s)\n", name, name))
|
|
||||||
|
|
||||||
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 {
|
func generateReadme(name string, path string) error {
|
||||||
@@ -174,6 +199,38 @@ func (app *SpaceWorker) ListRoles() error {
|
|||||||
return nil
|
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 {
|
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)
|
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 {
|
func RemoveFile(path string) error {
|
||||||
return os.Remove(path)
|
return os.Remove(path)
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user