Skip to content

Commit 95fec5c

Browse files
Zverev Sergei EvgenevichZverev Sergei Evgenevich
Zverev Sergei Evgenevich
authored and
Zverev Sergei Evgenevich
committed
PAASCOMMON-39: Исправить ошибку с импортом ролей в семафоре
1 parent e96d705 commit 95fec5c

File tree

5 files changed

+98
-55
lines changed

5 files changed

+98
-55
lines changed

db/Task.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ import (
1212
"github.com/semaphoreui/semaphore/util"
1313
)
1414

15-
type DefaultTaskParams struct {
16-
}
15+
type DefaultTaskParams struct{}
1716

1817
type TerraformTaskParams struct {
1918
Plan bool `json:"plan"`
@@ -27,6 +26,7 @@ type AnsibleTaskParams struct {
2726
Debug bool `json:"debug"`
2827
DryRun bool `json:"dry_run"`
2928
Diff bool `json:"diff"`
29+
TaskID int
3030
}
3131

3232
// Task is a model of a task which will be executed by the runner
@@ -123,7 +123,6 @@ func (task *Task) GetIncomingVersion(d Store) *string {
123123
}
124124

125125
buildTask, err := d.GetTask(task.ProjectID, *task.BuildTaskID)
126-
127126
if err != nil {
128127
return nil
129128
}
@@ -150,7 +149,6 @@ func (task *Task) GetUrl() *string {
150149
}
151150

152151
func (task *Task) ValidateNewTask(template Template) error {
153-
154152
var params interface{}
155153
switch template.App {
156154
case AppAnsible:

db_lib/AnsibleApp.go

Lines changed: 59 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ package db_lib
22

33
import (
44
"crypto/md5"
5+
"errors"
56
"fmt"
67
"io"
78
"os"
89
"path"
910

1011
"github.com/semaphoreui/semaphore/db"
1112
"github.com/semaphoreui/semaphore/pkg/task_logger"
13+
"github.com/semaphoreui/semaphore/util"
1214
)
1315

1416
func getMD5Hash(filepath string) (string, error) {
@@ -45,7 +47,7 @@ func writeMD5Hash(requirementsFile string, requirementsHashFile string) error {
4547
return err
4648
}
4749

48-
return os.WriteFile(requirementsHashFile, []byte(newFileMD5Hash), 0644)
50+
return os.WriteFile(requirementsHashFile, []byte(newFileMD5Hash), 0o644)
4951
}
5052

5153
type AnsibleApp struct {
@@ -69,29 +71,76 @@ func (t *AnsibleApp) Log(msg string) {
6971
t.Logger.Log(msg)
7072
}
7173

72-
func (t *AnsibleApp) InstallRequirements(environmentVars []string, params interface{}) error {
74+
func (t *AnsibleApp) getRepoPath() string {
75+
repo := GitRepository{
76+
Logger: t.Logger,
77+
TemplateID: t.Template.ID,
78+
Repository: t.Repository,
79+
Client: CreateDefaultGitClient(),
80+
}
81+
82+
return repo.GetFullPath()
83+
}
84+
85+
func (t *AnsibleApp) installRequirementsForPersonalTask(taskID int) error {
86+
if err := t.installGalaxyRequirementsFileForPersonalTask(GalaxyRole, taskID); err != nil {
87+
return err
88+
}
89+
if err := t.installGalaxyRequirementsFileForPersonalTask(GalaxyCollection, taskID); err != nil {
90+
return err
91+
}
92+
93+
return nil
94+
}
95+
96+
func (t *AnsibleApp) installRequirements() error {
7397
if err := t.installCollectionsRequirements(); err != nil {
7498
return err
7599
}
76100
if err := t.installRolesRequirements(); err != nil {
77101
return err
78102
}
103+
79104
return nil
80105
}
81106

82-
func (t *AnsibleApp) getRepoPath() string {
83-
repo := GitRepository{
84-
Logger: t.Logger,
85-
TemplateID: t.Template.ID,
86-
Repository: t.Repository,
87-
Client: CreateDefaultGitClient(),
107+
func (t *AnsibleApp) InstallRequirements(environmentVars []string, params interface{}) error {
108+
if !util.Config.UsePersonalTaskRoles {
109+
return t.installRequirements()
88110
}
89111

90-
return repo.GetFullPath()
112+
ansibleParams, ok := params.(*db.AnsibleTaskParams)
113+
if !ok {
114+
return errors.New("undefined type task parameters")
115+
}
116+
117+
return t.installRequirementsForPersonalTask(ansibleParams.TaskID)
91118
}
92119

93-
func (t *AnsibleApp) installGalaxyRequirementsFile(requirementsType GalaxyRequirementsType, requirementsFilePath string) error {
120+
func (t *AnsibleApp) installGalaxyRequirementsFileForPersonalTask(requirementsType GalaxyRequirementsType, taskID int) error {
121+
requirementsFilePath := path.Join(t.GetPlaybookDir(), string(requirementsType)+"s", "requirements.yml")
122+
123+
if _, err := os.Stat(requirementsFilePath); err != nil {
124+
t.Log("No " + requirementsFilePath + " file found. Skip galaxy install process.\n")
125+
return nil
126+
}
94127

128+
if err := t.runGalaxy([]string{
129+
string(requirementsType),
130+
"install",
131+
"-r",
132+
requirementsFilePath,
133+
"--force",
134+
"-p",
135+
util.Config.FullPathToPersonalTaskRoles(taskID),
136+
}); err != nil {
137+
return err
138+
}
139+
140+
return nil
141+
}
142+
143+
func (t *AnsibleApp) installGalaxyRequirementsFile(requirementsType GalaxyRequirementsType, requirementsFilePath string) error {
95144
requirementsHashFilePath := fmt.Sprintf("%s.md5", requirementsFilePath)
96145

97146
if _, err := os.Stat(requirementsFilePath); err != nil {

services/tasks/LocalJob.go

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"fmt"
66
"maps"
77
"os"
8-
98
"path"
109
"strconv"
1110

@@ -58,7 +57,6 @@ func (t *LocalJob) SetCommit(hash, message string) {
5857
}
5958

6059
func (t *LocalJob) getEnvironmentExtraVars(username string, incomingVersion *string) (extraVars map[string]interface{}, err error) {
61-
6260
extraVars = make(map[string]interface{})
6361

6462
if t.Environment.JSON != "" {
@@ -178,7 +176,6 @@ func (t *LocalJob) getEnvironmentENV() (res []string, err error) {
178176
// nolint: gocyclo
179177
func (t *LocalJob) getShellArgs(username string, incomingVersion *string) (args []string, err error) {
180178
extraVars, err := t.getEnvironmentExtraVars(username, incomingVersion)
181-
182179
if err != nil {
183180
t.Log(err.Error())
184181
t.Log("Error getting environment extra vars")
@@ -219,11 +216,9 @@ func (t *LocalJob) getShellArgs(username string, incomingVersion *string) (args
219216

220217
// nolint: gocyclo
221218
func (t *LocalJob) getTerraformArgs(username string, incomingVersion *string) (args []string, err error) {
222-
223219
args = []string{}
224220

225221
extraVars, err := t.getEnvironmentExtraVars(username, incomingVersion)
226-
227222
if err != nil {
228223
t.Log(err.Error())
229224
t.Log("Could not remove command environment, if existent it will be passed to --extra-vars. This is not fatal but be aware of side effects")
@@ -268,7 +263,6 @@ func (t *LocalJob) getTerraformArgs(username string, incomingVersion *string) (a
268263

269264
// nolint: gocyclo
270265
func (t *LocalJob) getPlaybookArgs(username string, incomingVersion *string) (args []string, inputs map[string]string, err error) {
271-
272266
inputMap := make(map[db.AccessKeyRole]string)
273267
inputs = make(map[string]string)
274268

@@ -405,7 +399,6 @@ func (t *LocalJob) getPlaybookArgs(username string, incomingVersion *string) (ar
405399
}
406400

407401
func (t *LocalJob) getCLIArgs() (templateArgs []string, taskArgs []string, err error) {
408-
409402
if t.Template.Arguments != nil {
410403
err = json.Unmarshal([]byte(*t.Template.Arguments), &templateArgs)
411404
if err != nil {
@@ -428,15 +421,16 @@ func (t *LocalJob) getCLIArgs() (templateArgs []string, taskArgs []string, err e
428421
func (t *LocalJob) getParams() (params interface{}, err error) {
429422
switch t.Template.App {
430423
case db.AppAnsible:
431-
params = &db.AnsibleTaskParams{}
424+
params = &db.AnsibleTaskParams{
425+
TaskID: t.Task.ID,
426+
}
432427
case db.AppTerraform, db.AppTofu:
433428
params = &db.TerraformTaskParams{}
434429
default:
435430
params = &db.DefaultTaskParams{}
436431
}
437432

438433
err = t.Task.FillParams(params)
439-
440434
if err != nil {
441435
return
442436
}
@@ -445,10 +439,13 @@ func (t *LocalJob) getParams() (params interface{}, err error) {
445439
}
446440

447441
func (t *LocalJob) Run(username string, incomingVersion *string, alias string) (err error) {
448-
449442
defer func() {
450443
t.destroyKeys()
451444
t.destroyInventoryFile()
445+
446+
if util.Config.UsePersonalTaskRoles {
447+
t.destroyTaskRoles()
448+
}
452449
}()
453450

454451
t.SetStatus(task_logger.TaskRunningStatus) // It is required for local mode. Don't delete
@@ -458,6 +455,11 @@ func (t *LocalJob) Run(username string, incomingVersion *string, alias string) (
458455
return
459456
}
460457

458+
if util.Config.UsePersonalTaskRoles {
459+
environmentVariables = append(environmentVariables,
460+
fmt.Sprintf("ANSIBLE_ROLES_PATH=%s", util.Config.FullPathToPersonalTaskRoles(t.Task.ID)))
461+
}
462+
461463
params, err := t.getParams()
462464
if err != nil {
463465
return
@@ -518,11 +520,9 @@ func (t *LocalJob) Run(username string, incomingVersion *string, alias string) (
518520
t.Process = p
519521
},
520522
})
521-
522523
}
523524

524525
func (t *LocalJob) prepareRun(environmentVars []string, params interface{}) error {
525-
526526
t.Log("Preparing: " + strconv.Itoa(t.Task.ID))
527527

528528
if err := checkTmpDir(util.Config.TmpPath); err != nil {
@@ -583,7 +583,6 @@ func (t *LocalJob) updateRepository() error {
583583
}
584584

585585
err := repo.ValidateRepo()
586-
587586
if err != nil {
588587
if !os.IsNotExist(err) {
589588
err = os.RemoveAll(repo.GetFullPath())
@@ -610,7 +609,6 @@ func (t *LocalJob) updateRepository() error {
610609
}
611610

612611
func (t *LocalJob) checkoutRepository() error {
613-
614612
repo := db_lib.GitRepository{
615613
Logger: t.Logger,
616614
TemplateID: t.Template.ID,
@@ -619,7 +617,6 @@ func (t *LocalJob) checkoutRepository() error {
619617
}
620618

621619
err := repo.ValidateRepo()
622-
623620
if err != nil {
624621
return err
625622
}
@@ -632,7 +629,6 @@ func (t *LocalJob) checkoutRepository() error {
632629
// store commit to TaskRunner table
633630

634631
commitHash, err := repo.GetLastCommitHash()
635-
636632
if err != nil {
637633
return err
638634
}

services/tasks/LocalJob_inventory.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (t *LocalJob) installStaticInventory() error {
8484
fullPath := t.tmpInventoryFullPath()
8585

8686
// create inventory file
87-
return os.WriteFile(fullPath, []byte(t.Inventory.Inventory), 0664)
87+
return os.WriteFile(fullPath, []byte(t.Inventory.Inventory), 0o664)
8888
}
8989

9090
func (t *LocalJob) destroyInventoryFile() {
@@ -94,6 +94,13 @@ func (t *LocalJob) destroyInventoryFile() {
9494
}
9595
}
9696

97+
func (t *LocalJob) destroyTaskRoles() {
98+
fullPath := util.Config.FullPathToPersonalTaskRoles(t.Task.ID)
99+
if err := os.RemoveAll(fullPath); err != nil {
100+
log.Error(err)
101+
}
102+
}
103+
97104
func (t *LocalJob) destroyKeys() {
98105
err := t.sshKeyInstallation.Destroy()
99106
if err != nil {

0 commit comments

Comments
 (0)