Skip to content

Commit

Permalink
rebase main to current branch
Browse files Browse the repository at this point in the history
  • Loading branch information
efortin committed Jan 21, 2021
1 parent f859860 commit 8f1cc0b
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 90 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ require (
github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351
github.com/mitchellh/go-homedir v1.1.0
github.com/relex/aini v1.2.1
github.com/sirupsen/logrus v1.2.0
github.com/spf13/cobra v1.1.1
github.com/spf13/viper v1.7.1
github.com/stretchr/testify v1.3.0
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5
k8s.io/klog/v2 v2.4.0
)
6 changes: 2 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,6 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-test/deep v1.0.7 h1:/VSMRlnY/JSyqxQUzQLKVMAskpY/NZKFA5j2P+0pP2M=
github.com/go-test/deep v1.0.7/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8=
Expand Down Expand Up @@ -116,6 +114,7 @@ github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgy
github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
Expand Down Expand Up @@ -170,6 +169,7 @@ github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQD
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
Expand Down Expand Up @@ -331,6 +331,4 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ=
k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
97 changes: 41 additions & 56 deletions internal/ansible/playbook.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,59 +3,27 @@ package ansible
import (
"fmt"
"github.com/ca-gip/dploy/internal/utils"
"github.com/ghodss/yaml"
"github.com/karrick/godirwalk"
"gopkg.in/yaml.v2"
log "github.com/sirupsen/logrus"
"io/ioutil"
"path/filepath"
"strings"
)

type Playbook struct {
absolutePath string
rootPath *string
Plays []Play
type Tasks struct {
Tags []string `yaml:"tags,omitempty" yaml:"tags,omitempty"`
}

const decoderTagName = "tags"

func (playbook *Playbook) AllTags() (tags *utils.Set) {
tags = utils.NewSet()
for _, play := range playbook.Plays {
tags.Concat(play.AllTags().List())
}
return
type Playbook struct {
AbsolutePath string
RootPath *string
Plays []Play
AllTags utils.Set
}

func (playbook *Playbook) RelativePath() string {
return strings.TrimPrefix(playbook.absolutePath, *playbook.rootPath+"/")
}

func ReadFromFile(osPathname string) (playbook Playbook) {
// Try to check playbook content
binData, err := ioutil.ReadFile(osPathname)

// IMPORTANT: Yaml and Json parser need a root element,
// They can't read a raw list.
content := fmt.Sprintf("plays:\n%s", string(binData))

if err != nil {
fmt.Println("Cannot read playbook", osPathname, ". Error: ", err.Error())
return
}
err = yaml.Unmarshal([]byte(content), &playbook)
if err != nil {
fmt.Println("Skip", osPathname, " not a playbook ", err.Error())
return
}
if len(playbook.Plays) == 0 {
fmt.Println("No play found inside the playbook: ", osPathname)
return
}
if playbook.Plays[0].Hosts == utils.EmptyString {
fmt.Println("No play found inside the playbook: ", osPathname)
return
}
return
return strings.TrimPrefix(playbook.AbsolutePath, *playbook.RootPath+"/")
}

// Gather playbook files from a Parent directory
Expand All @@ -68,13 +36,12 @@ func readPlaybook(rootPath string) (result []*Playbook, err error) {
return
}

fmt.Println("reading playbook")
// Merge Play, Role and Task Tags for a playbook
allTags := utils.NewSet()

err = godirwalk.Walk(absRoot, &godirwalk.Options{
Callback: func(osPathname string, de *godirwalk.Dirent) error {
if strings.Contains(de.Name(), "vars") || de.Name() == "template" || de.Name() == "roles" {
if strings.Contains(osPathname, "vars") || strings.Contains(osPathname, "template") {
return godirwalk.SkipThis
}

Expand All @@ -83,25 +50,43 @@ func readPlaybook(rootPath string) (result []*Playbook, err error) {
}

// Try to check playbook content
playbook := ReadFromFile(osPathname)
var plays []Play
binData, err := ioutil.ReadFile(osPathname)
if err != nil {
log.Error("Cannot read playbook", osPathname, ". Error: ", err.Error())
return nil
}
err = yaml.Unmarshal([]byte(binData), &plays)
if err != nil {
log.Error("Cannot unmashal playbook data", osPathname, ". Error: ", err.Error())
return nil
}
if plays == nil || len(plays) == 0 {
log.Debug("No play found inside the playbook: ", osPathname)
return nil
}
if plays[0].Hosts == utils.EmptyString {
log.Debug("No play found inside the playbook: ", osPathname)
return nil
}

// Browse Role Tags
for _, play := range playbook.Plays {

allTags.Concat(play.AllTags().List())
fmt.Println("Play tags are: ", play.Tags)
for _, play := range plays {
allTags.Concat(play.Tags)
for _, role := range play.Roles {
role.ReadRoleTasks(rootPath)
fmt.Println(" Role info", role.AllTags())
allTags.Concat(role.AllTags().List())
role.ReadRole(rootPath)
allTags.Concat(role.Tags)
}
}

playbook.absolutePath = osPathname
playbook.rootPath = &rootPath

playbook := Playbook{
RootPath: &rootPath,
AbsolutePath: osPathname,
Plays: plays,
AllTags: *allTags,
}
result = append(result, &playbook)
fmt.Println("Available tags are :", playbook.AllTags())
log.Debug("Available tags are :", playbook.AllTags)
return nil
},
ErrorCallback: func(osPathname string, err error) godirwalk.ErrorAction {
Expand Down
44 changes: 15 additions & 29 deletions internal/ansible/role.go
Original file line number Diff line number Diff line change
@@ -1,74 +1,60 @@
package ansible

import (
"fmt"
"github.com/ca-gip/dploy/internal/utils"
"github.com/ghodss/yaml"
"github.com/karrick/godirwalk"
"gopkg.in/yaml.v2"
log "github.com/sirupsen/logrus"
"io/ioutil"
"path/filepath"
"strings"
)

type Role struct {
AbsolutePath string
Name string `yaml:"role"`
Tasks []Task `yaml:"tasks"`
Tags utils.Set `yaml:"tags"`
}

func (role *Role) AllTags() (tags *utils.Set) {
tags = utils.NewSet()
for _, task := range role.Tasks {
tags.Concat(task.Tags.List())
}
tags.Concat(role.Tags.List())
return
Name string `yaml:"role"`
Tasks []Tasks
Tags []string `yaml:"tags,omitempty" yaml:"tags,omitempty"`
}

// Gather inventory files from a Parent directory
// Using a recursive scan. All non inventory files are ignored ( not .ini file )
// All sub parent directory added like label in the inventory
func (role *Role) ReadRoleTasks(rootPath string, pathTags ...string) (err error) {
func (role *Role) ReadRole(rootPath string, pathTags ...string) (err error) {
absRoot, err := filepath.Abs(rootPath + "/roles/" + role.Name)
fmt.Println("reading ", role.Name, "at: ", absRoot)

if err != nil {
fmt.Println("The role ", role.Name, "can't be read. Error:", err.Error())
log.Error("The role ", role.Name, "can't be read. Error:", err.Error())
return
}

fmt.Println(role.Name)
err = godirwalk.Walk(absRoot, &godirwalk.Options{
Callback: func(osPathname string, de *godirwalk.Dirent) error {

tags := utils.NewSet()

if !strings.Contains(filepath.Base(osPathname), ".yml") {
return nil
}

binData, err := ioutil.ReadFile(osPathname)
if err != nil {
fmt.Println("Cannot read file: ", osPathname, ". Error:", err.Error())
log.Error("Cannot read file: ", osPathname, ". Error:", err.Error())
}

var tasks []Task
err = yaml.Unmarshal([]byte(binData), &tasks)

if err != nil {
fmt.Println("Error reading role", osPathname, "err:", err.Error())
} else {
fmt.Println("Task is", tasks)
}

for _, task := range tasks {
role.Tasks = append(role.Tasks, task)
tags.Concat(task.Tags)
}
fmt.Println(osPathname, "tags in role tags:", role.AllTags())

tasks = append(tasks, Task{Tags: tags.List()})
if len(tags.List()) > 0 {
log.Info("Task tags:", tags.List())
}
return nil
},
ErrorCallback: func(osPathname string, err error) godirwalk.ErrorAction {
fmt.Println(err.Error())
return godirwalk.SkipNode
},
Unsorted: true,
Expand Down

0 comments on commit 8f1cc0b

Please sign in to comment.