Skip to content

Commit 3223927

Browse files
committed
feat: Add support of include_plays_before & include_plays_after in Gobblefile
1 parent 581416d commit 3223927

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

pkg/config/config.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,18 @@ type GlobalConfig struct {
1616
Vars map[string]interface{} `yaml:"vars"`
1717
}
1818

19+
type InludePlays struct {
20+
Source string `yaml:"source"`
21+
}
22+
1923
type Config struct {
2024
Meta ConfigMeta `yaml:"meta"`
2125
Global GlobalConfig `yaml:"global"`
2226
Hosts map[string][]ConfigHost `yaml:"hosts"`
2327
Plays []play.Play `yaml:"plays"`
2428

29+
IncludePlaysBefore []InludePlays `yaml:"include_plays_before"`
30+
IncludePlaysAfter []InludePlays `yaml:"include_plays_after"`
31+
2532
AllPlays []play.Play
2633
}

pkg/run/run.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import (
44
"bufio"
55
"fmt"
66
"io/ioutil"
7+
"log"
8+
"net/http"
79
"os"
10+
"strings"
811

912
"github.com/mohae/deepcopy"
1013
"github.com/sikalabs/gobble/pkg/config"
@@ -31,8 +34,28 @@ func Run(
3134
}
3235

3336
c.AllPlays = []play.Play{}
37+
38+
// Add Includes Before
39+
for _, includePlays := range c.IncludePlaysBefore {
40+
plays, err := getPlaysFromIncludePlays(includePlays)
41+
if err != nil {
42+
log.Fatalln(err)
43+
}
44+
c.AllPlays = append(c.AllPlays, plays...)
45+
}
46+
47+
// Add Plays from Gobblefile
3448
c.AllPlays = append(c.AllPlays, c.Plays...)
3549

50+
// Add Includes After
51+
for _, includePlays := range c.IncludePlaysAfter {
52+
plays, err := getPlaysFromIncludePlays(includePlays)
53+
if err != nil {
54+
log.Fatalln(err)
55+
}
56+
c.AllPlays = append(c.AllPlays, plays...)
57+
}
58+
3659
lenPlays := lenPlays(c, onlyTags)
3760
playI := 0
3861
for _, play := range c.AllPlays {
@@ -160,3 +183,69 @@ func lenHosts(c config.Config, play play.Play) int {
160183
}
161184
return length
162185
}
186+
187+
func getPlaysFromIncludePlays(includePlays config.InludePlays) ([]play.Play, error) {
188+
plays := []play.Play{}
189+
if strings.HasPrefix(includePlays.Source, "http://") ||
190+
strings.HasPrefix(includePlays.Source, "https://") {
191+
// Get from URL
192+
playsFromOneURL, err := getPlaysFromURL(includePlays.Source)
193+
if err != nil {
194+
return nil, err
195+
}
196+
plays = append(plays, playsFromOneURL...)
197+
} else {
198+
// Get from file
199+
playsFromOneFile, err := getPlaysFromFile(includePlays.Source)
200+
if err != nil {
201+
return nil, err
202+
}
203+
plays = append(plays, playsFromOneFile...)
204+
}
205+
return plays, nil
206+
}
207+
208+
func getPlaysFromFile(filePath string) ([]play.Play, error) {
209+
var err error
210+
var buf []byte
211+
plays := []play.Play{}
212+
213+
// Read from file
214+
buf, err = ioutil.ReadFile(filePath)
215+
if err != nil {
216+
return plays, err
217+
}
218+
219+
_ = yaml.Unmarshal(buf, &plays)
220+
if err != nil {
221+
return plays, err
222+
}
223+
224+
return plays, nil
225+
}
226+
227+
func getPlaysFromURL(url string) ([]play.Play, error) {
228+
var err error
229+
var buf []byte
230+
plays := []play.Play{}
231+
232+
res, err := http.Get(url)
233+
if err != nil {
234+
fmt.Println("Error while sending request:", err)
235+
return nil, err
236+
}
237+
defer res.Body.Close()
238+
239+
// Read from HTTP response
240+
buf, err = ioutil.ReadAll(res.Body)
241+
if err != nil {
242+
return plays, err
243+
}
244+
245+
_ = yaml.Unmarshal(buf, &plays)
246+
if err != nil {
247+
return plays, err
248+
}
249+
250+
return plays, nil
251+
}

0 commit comments

Comments
 (0)