func getScripts(dirPath string) (scripts []Script, err error) { files, err := ioutil.ReadDir(dirPath) if err != nil { blog.Warn(err, ": Error in reading contents of ", dirPath) return } for _, file := range files { file.Name() //figure out type of script var script Script switch { case strings.HasSuffix(file.Name(), ".sh"): blog.Debug("dirpath: " + dirPath + " after removing prefix: " + config.BANYANDIR() + " looks like: " + strings.TrimPrefix(dirPath, config.BANYANDIR()+"/hosttarget")) script = newBashScript(file.Name(), TARGETCONTAINERDIR+strings.TrimPrefix(dirPath, config.BANYANDIR()+"/hosttarget"), []string{""}) case strings.HasSuffix(file.Name(), ".py"): script = newPythonScript(file.Name(), TARGETCONTAINERDIR+strings.TrimPrefix(dirPath, config.BANYANDIR()+"/hosttarget"), []string{""}) default: blog.Warn("Unknown script file type for: " + file.Name()) //Ignore this file... continue } scripts = append(scripts, script) } return }
// doFlags defines the cmdline Usage string and parses flag options. func doFlags() { flag.Usage = func() { fmt.Fprintf(os.Stderr, " Usage: %s [OPTIONS] REGISTRY REPO [REPO...]\n", os.Args[0]) fmt.Fprintf(os.Stderr, "\n REGISTRY:\n") fmt.Fprintf(os.Stderr, "\tURL of your Docker registry; use index.docker.io for Docker Hub, use local.host to collect images from local Docker host\n") fmt.Fprintf(os.Stderr, "\n REPO:\n") fmt.Fprintf(os.Stderr, "\tOne or more repos to gather info about; if no repo is specified Collector will gather info on *all* repos in the Registry\n") fmt.Fprintf(os.Stderr, "\n Environment variables:\n") fmt.Fprintf(os.Stderr, "\tCOLLECTOR_DIR: (Required) Directory that contains the \"data\" folder with Collector default scripts, e.g., $GOPATH/src/github.com/banyanops/collector\n") fmt.Fprintf(os.Stderr, "\tCOLLECTOR_ID: ID provided by Banyan web interface to register Collector with the Banyan service\n") fmt.Fprintf(os.Stderr, "\tBANYAN_HOST_DIR: Host directory mounted into Collector/Target containers where results are stored (default: $HOME/.banyan)\n") fmt.Fprintf(os.Stderr, "\tBANYAN_DIR: (Specify only in Dockerfile) Directory in the Collector container where host directory BANYAN_HOST_DIR is mounted\n") fmt.Fprintf(os.Stderr, "\tDOCKER_{HOST,CERT_PATH,TLS_VERIFY}: If set, e.g., by docker-machine, then they take precedence over --dockerProto and --dockerAddr\n") printExampleUsage() fmt.Fprintf(os.Stderr, " Options:\n") flag.PrintDefaults() } flag.Parse() if config.COLLECTORDIR() == "" { flag.Usage() os.Exit(except.ErrorExitStatus) } if len(flag.Args()) < 1 { flag.Usage() os.Exit(except.ErrorExitStatus) } if *dockerProto != "unix" && *dockerProto != "tcp" { flag.Usage() os.Exit(except.ErrorExitStatus) } requiredDirs := []string{config.BANYANDIR(), filepath.Dir(*imageList), filepath.Dir(*repoList), *config.BanyanOutDir, collector.DefaultScriptsDir, collector.UserScriptsDir, collector.BinDir} for _, dir := range requiredDirs { blog.Debug("Creating directory: " + dir) err := fsutil.CreateDirIfNotExist(dir) if err != nil { except.Fail(err, ": Error in creating a required directory: ", dir) } } collector.RegistrySpec = flag.Arg(0) // EqualFold: case insensitive comparison if strings.EqualFold(flag.Arg(0), "local.host") { collector.LocalHost = true } //nextMaxImages = *maxImages }
package collector import ( "gopkg.in/yaml.v2" "io/ioutil" "strings" config "github.com/banyanops/collector/config" blog "github.com/ccpaging/log4go" flag "github.com/docker/docker/pkg/mflag" ) var ( //userScriptsDir = flag.String([]string{"userscriptsdir"}, config.BANYANDIR()+"/hosttarget/userscripts", "Directory with all user-specified scripts") UserScriptStore = flag.String([]string{"u", "-userscriptstore"}, config.COLLECTORDIR()+"/data/userscripts", "Directory with all user-specified scripts") UserScriptsDir = config.BANYANDIR() + "/hosttarget/userscripts" DefaultScriptsDir = config.BANYANDIR() + "/hosttarget/defaultscripts" BinDir = config.BANYANDIR() + "/hosttarget/bin" ) const ( PKGEXTRACTSCRIPT = "pkgextractscript.sh" ) func parsePkgExtractOutput(output []byte, imageID ImageIDType) (imageDataInfo []ImageDataInfo, err error) { type PkgInfo struct { Pkg, Version, Architecture string } var outInfo struct { DistroName string
fsutil "github.com/banyanops/collector/fsutil" blog "github.com/ccpaging/log4go" flag "github.com/docker/docker/pkg/mflag" ) const ( // Console logging level CONSOLELOGLEVEL = blog.INFO // File logging level FILELOGLEVEL = blog.FINEST // Number of docker images to process in a single batch. IMAGEBATCH = 5 ) var ( LOGFILENAME = config.BANYANDIR() + "/hostcollector/collector.log" fileLog = flag.Bool([]string{"-filelog"}, false, "Log output to "+LOGFILENAME) imageList = flag.String([]string{"#-imagelist"}, config.BANYANDIR()+"/hostcollector/imagelist", "List of previously collected images (file)") repoList = flag.String([]string{"r", "-repolist"}, config.BANYANDIR()+"/hostcollector/repolist", "File containing list of repos to process") // Configuration parameters for speed/efficiency removeThresh = flag.Int([]string{"-removethresh"}, 5, "Number of images that get pulled before removal") maxImages = flag.Int([]string{"-maximages"}, 0, "Maximum number of new images to process per repository (0=unlimited)") //nextMaxImages int poll = flag.Int64([]string{"p", "-poll"}, 60, "Polling interval in seconds") // Docker remote API related parameters dockerProto = flag.String([]string{"-dockerproto"}, "unix",