Skip to content

Commit 32a6c95

Browse files
committed
refactor(be): move some functionality to GitRepository and AnsiblePlaybook classes
1 parent f9ea2df commit 32a6c95

File tree

5 files changed

+25
-72
lines changed

5 files changed

+25
-72
lines changed

db/AccessKey.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ const (
6666
AccessKeyRoleGit
6767
)
6868

69-
func (key AccessKey) Install(usage AccessKeyRole) error {
69+
func (key *AccessKey) Install(usage AccessKeyRole) error {
7070
rnd, err := rand.Int(rand.Reader, big.NewInt(1000000000))
7171
if err != nil {
7272
return err
@@ -143,7 +143,8 @@ func (key AccessKey) Install(usage AccessKeyRole) error {
143143

144144
func (key AccessKey) Destroy() error {
145145
path := key.GetPath()
146-
if _, err := os.Stat(path); os.IsNotExist(err) {
146+
_, err := os.Stat(path)
147+
if os.IsNotExist(err) {
147148
return nil
148149
}
149150
return os.Remove(path)

lib/AnsiblePlaybook.go

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package lib
22

33
import (
44
"bytes"
5-
"encoding/json"
65
"fmt"
76
"github.com/ansible-semaphore/semaphore/db"
87
"github.com/ansible-semaphore/semaphore/util"
@@ -13,10 +12,9 @@ import (
1312
)
1413

1514
type AnsiblePlaybook struct {
16-
TemplateID int
17-
Logger Logger
18-
Repository db.Repository
19-
Environment db.Environment
15+
TemplateID int
16+
Repository db.Repository
17+
Logger Logger
2018
}
2119

2220
func (p AnsiblePlaybook) makeCmd(command string, args []string) *exec.Cmd {
@@ -27,7 +25,6 @@ func (p AnsiblePlaybook) makeCmd(command string, args []string) *exec.Cmd {
2725
cmd.Env = append(cmd.Env, fmt.Sprintf("HOME=%s", util.Config.TmpPath))
2826
cmd.Env = append(cmd.Env, fmt.Sprintf("PWD=%s", cmd.Dir))
2927
cmd.Env = append(cmd.Env, fmt.Sprintln("PYTHONUNBUFFERED=1"))
30-
cmd.Env = append(cmd.Env, extractCommandEnvironment(p.Environment.JSON)...)
3128

3229
return cmd
3330
}
@@ -60,15 +57,16 @@ func (p AnsiblePlaybook) GetHosts(args []string) (hosts []string, err error) {
6057
return
6158
}
6259

63-
func (p AnsiblePlaybook) MakeRunCmd(args []string) (cmd *exec.Cmd, err error) {
64-
cmd = p.makeCmd("ansible-playbook", args)
60+
func (p AnsiblePlaybook) RunPlaybook(args []string, cb func(*os.Process)) error {
61+
cmd := p.makeCmd("ansible-playbook", args)
6562
p.Logger.LogCmd(cmd)
6663
cmd.Stdin = strings.NewReader("")
67-
err = cmd.Start()
64+
err := cmd.Start()
6865
if err != nil {
69-
return
66+
return err
7067
}
71-
return
68+
cb(cmd.Process)
69+
return cmd.Wait()
7270
}
7371

7472
func (p AnsiblePlaybook) RunGalaxy(args []string) error {
@@ -79,20 +77,3 @@ func (p AnsiblePlaybook) GetFullPath() (path string) {
7977
path = p.Repository.GetFullPath(p.TemplateID)
8078
return
8179
}
82-
83-
func extractCommandEnvironment(envJSON string) []string {
84-
env := make([]string, 0)
85-
var js map[string]interface{}
86-
err := json.Unmarshal([]byte(envJSON), &js)
87-
if err == nil {
88-
if cfg, ok := js["ENV"]; ok {
89-
switch v := cfg.(type) {
90-
case map[string]interface{}:
91-
for key, val := range v {
92-
env = append(env, fmt.Sprintf("%s=%s", key, val))
93-
}
94-
}
95-
}
96-
}
97-
return env
98-
}

lib/GitRepository.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ func (r GitRepository) makeCmd(targetDir GitRepositoryDirType, args ...string) *
5050
}
5151

5252
func (r GitRepository) run(targetDir GitRepositoryDirType, args ...string) error {
53+
err := r.Repository.SSHKey.Install(db.AccessKeyRoleGit)
54+
if err != nil {
55+
return err
56+
}
57+
58+
defer r.Repository.SSHKey.Destroy()
59+
5360
cmd := r.makeCmd(targetDir, args...)
5461

5562
r.Logger.LogCmd(cmd)

services/tasks/runner.go

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,6 @@ type TaskRunner struct {
3838
pool *TaskPool
3939
}
4040

41-
//func (t *TaskRunner) validate() error {
42-
// if t.task.ProjectID != t.template.ProjectID ||
43-
// t.task.ProjectID != t.inventory.ProjectID ||
44-
// t.task.ProjectID != t.repository.ProjectID ||
45-
// t.task.ProjectID != t.environment.ProjectID {
46-
// return fmt.Errorf("invalid project id")
47-
// }
48-
// return nil
49-
//}
50-
5141
func getMD5Hash(filepath string) (string, error) {
5242
file, err := os.Open(filepath)
5343
if err != nil {
@@ -124,12 +114,7 @@ func (t *TaskRunner) fail() {
124114
}
125115

126116
func (t *TaskRunner) destroyKeys() {
127-
err := t.repository.SSHKey.Destroy()
128-
if err != nil {
129-
t.Log("Can't destroy repository key, error: " + err.Error())
130-
}
131-
132-
err = t.inventory.SSHKey.Destroy()
117+
err := t.inventory.SSHKey.Destroy()
133118
if err != nil {
134119
t.Log("Can't destroy inventory user key, error: " + err.Error())
135120
}
@@ -208,12 +193,6 @@ func (t *TaskRunner) prepareRun() {
208193

209194
t.updateStatus()
210195

211-
if err := t.repository.SSHKey.Install(db.AccessKeyRoleGit); err != nil {
212-
t.Log("Failed installing ssh key for repository access: " + err.Error())
213-
t.fail()
214-
return
215-
}
216-
217196
if strings.HasPrefix(t.repository.GitURL, gitURLFilePrefix) {
218197
repositoryPath := strings.TrimPrefix(t.repository.GitURL, gitURLFilePrefix)
219198
if _, err := os.Stat(repositoryPath); err != nil {
@@ -579,22 +558,14 @@ func (t *TaskRunner) runPlaybook() (err error) {
579558
return
580559
}
581560

582-
cmd, err := lib.AnsiblePlaybook{
561+
return lib.AnsiblePlaybook{
583562
Logger: t,
584563
TemplateID: t.template.ID,
585564
Repository: t.repository,
586-
}.MakeRunCmd(args)
587-
588-
if err != nil {
589-
return
590-
}
591-
592-
t.process = cmd.Process
593-
594-
return cmd.Wait()
565+
}.RunPlaybook(args, func(p *os.Process) { t.process = p })
595566
}
596567

597-
func (t *TaskRunner) getExtraVars() (str string, err error) {
568+
func (t *TaskRunner) getEnvironmentExtraVars() (str string, err error) {
598569
extraVars := make(map[string]interface{})
599570

600571
if t.environment.JSON != "" {
@@ -604,8 +575,6 @@ func (t *TaskRunner) getExtraVars() (str string, err error) {
604575
}
605576
}
606577

607-
delete(extraVars, "ENV")
608-
609578
taskDetails := make(map[string]interface{})
610579

611580
if t.task.Message != "" {
@@ -707,7 +676,7 @@ func (t *TaskRunner) getPlaybookArgs() (args []string, err error) {
707676
args = append(args, "--vault-password-file", t.template.VaultKey.GetPath())
708677
}
709678

710-
extraVars, err := t.getExtraVars()
679+
extraVars, err := t.getEnvironmentExtraVars()
711680
if err != nil {
712681
t.Log(err.Error())
713682
t.Log("Could not remove command environment, if existant it will be passed to --extra-vars. This is not fatal but be aware of side effects")
@@ -725,7 +694,6 @@ func (t *TaskRunner) getPlaybookArgs() (args []string, err error) {
725694
}
726695

727696
var taskExtraArgs []string
728-
729697
if t.template.AllowOverrideArgsInTask && t.task.Arguments != nil {
730698
err = json.Unmarshal([]byte(*t.task.Arguments), &taskExtraArgs)
731699
if err != nil {

web2/src/components/EnvironmentForm.vue

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,11 @@
3333
type="info"
3434
class="mt-4"
3535
>
36-
Environment must be valid JSON. You may use the key <code>ENV</code> to pass
37-
environment variables to ansible-playbook.
36+
Environment must be valid JSON.
3837
Example:
3938
<pre style="font-size: 14px;">{
4039
"var_available_in_playbook_1": 1245,
4140
"var_available_in_playbook_2": "test",
42-
"ENV": {
43-
"VAR1": "Read by lookup('env', 'VAR1')"
44-
}
4541
}</pre>
4642
</v-alert>
4743
</v-form>

0 commit comments

Comments
 (0)