mirror of
https://github.com/thegeeklab/wp-ansible.git
synced 2024-11-23 06:10:39 +00:00
126 lines
2.5 KiB
Go
126 lines
2.5 KiB
Go
package plugin
|
|
|
|
import (
|
|
"errors"
|
|
"os"
|
|
|
|
"github.com/urfave/cli/v2"
|
|
"golang.org/x/sys/execabs"
|
|
)
|
|
|
|
// Settings for the Plugin.
|
|
type Settings struct {
|
|
Requirements string
|
|
Galaxy string
|
|
Inventories cli.StringSlice
|
|
Playbooks cli.StringSlice
|
|
Limit string
|
|
SkipTags string
|
|
StartAtTask string
|
|
Tags string
|
|
ExtraVars cli.StringSlice
|
|
ModulePath cli.StringSlice
|
|
Check bool
|
|
Diff bool
|
|
FlushCache bool
|
|
ForceHandlers bool
|
|
ListHosts bool
|
|
ListTags bool
|
|
ListTasks bool
|
|
SyntaxCheck bool
|
|
Forks int
|
|
VaultID string
|
|
VaultPassword string
|
|
VaultPasswordFile string
|
|
Verbose int
|
|
PrivateKey string
|
|
PrivateKeyFile string
|
|
User string
|
|
Connection string
|
|
Timeout int
|
|
SSHCommonArgs string
|
|
SFTPExtraArgs string
|
|
SCPExtraArgs string
|
|
SSHExtraArgs string
|
|
Become bool
|
|
BecomeMethod string
|
|
BecomeUser string
|
|
}
|
|
|
|
var (
|
|
ErrPluginPlaybookNotSet = errors.New("playbook is required")
|
|
ErrPluginInventoryNotSet = errors.New("inventory is required")
|
|
)
|
|
|
|
// Validate handles the settings validation of the plugin.
|
|
func (p *Plugin) Validate() error {
|
|
if len(p.settings.Playbooks.Value()) == 0 {
|
|
return ErrPluginPlaybookNotSet
|
|
}
|
|
|
|
if len(p.settings.Inventories.Value()) == 0 {
|
|
return ErrPluginInventoryNotSet
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// Execute provides the implementation of the plugin.
|
|
func (p *Plugin) Execute() error {
|
|
if err := p.playbooks(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := p.ansibleConfig(); err != nil {
|
|
return err
|
|
}
|
|
|
|
if p.settings.PrivateKey != "" {
|
|
if err := p.privateKey(); err != nil {
|
|
return err
|
|
}
|
|
|
|
defer os.Remove(p.settings.PrivateKeyFile)
|
|
}
|
|
|
|
if p.settings.VaultPassword != "" {
|
|
if err := p.vaultPass(); err != nil {
|
|
return err
|
|
}
|
|
|
|
defer os.Remove(p.settings.VaultPasswordFile)
|
|
}
|
|
|
|
commands := []*execabs.Cmd{
|
|
p.versionCommand(),
|
|
}
|
|
|
|
if p.settings.Requirements != "" {
|
|
commands = append(commands, p.requirementsCommand())
|
|
}
|
|
|
|
if p.settings.Galaxy != "" {
|
|
commands = append(commands, p.galaxyCommand())
|
|
}
|
|
|
|
for _, inventory := range p.settings.Inventories.Value() {
|
|
commands = append(commands, p.ansibleCommand(inventory))
|
|
}
|
|
|
|
for _, cmd := range commands {
|
|
cmd.Stdout = os.Stdout
|
|
cmd.Stderr = os.Stderr
|
|
|
|
cmd.Env = os.Environ()
|
|
cmd.Env = append(cmd.Env, "ANSIBLE_FORCE_COLOR=1")
|
|
|
|
trace(cmd)
|
|
|
|
if err := cmd.Run(); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|