@@ -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