Example #1
0
func (c ProjectCompiler) Compile(projectPath *string, dataFile *string, baseDir *string, workDir *string) {
	log.Notice("▶ Loading environment data from file:\n  %s", *projectPath)

	environment, source, err := loadEnvironment(*projectPath)
	if err != nil {
		util.HandleFatalError(err)
	}

	for _, provider := range environment.Providers {
		log.Notice("▶ Switching provider to: %s", provider.Name)
		log.Debug("  Creating template context")
		if context, err := createContext(&environment.Data, &provider, dataFile); err == nil {

			log.Notice("▶ Context data:")
			printContextData(context, false)

			log.Notice("▶ Compiling artifacts")

			if compiled, err := compileTemplateFromString(context, source); err == nil {
				var project data.Project
				if err := util.LoadYAMLFromString(*compiled, &project); err == nil {
					// Compile each artifact
					for _, artifact := range project.Artifacts {
						//log.Info("  Compiling:\n  artifact: %s\n  provider: %s", artifact.Name, provider.Name)
						if err := compileArtifact(context, &artifact, provider.Name, baseDir, workDir); err != nil {
							util.HandleFatalError(err)
						}
					}
				} else {
					err := errors.New(fmt.Sprintf("Error parsing project artifacts\nerror:\n  %s", err.Error()))
					util.HandleFatalError(err)
				}
			} else {
				util.HandleFatalError(err)
			}
		} else {
			util.HandleFatalError(err)
		}
	}
	log.Notice("▶ Completed successfully")
}
Example #2
0
func main() {
	var flagDebug bool
	var flagVerbose bool
	var flagQuiet bool
	var flagProjectFile string
	var flagDataFile string

	// Root
	var RootCommand = &cobra.Command{
		Use:   "magutt",
		Short: "Magutt is a simple tool to assemble cloud-config files for CoreOS",
		PersistentPreRun: func(cmd *cobra.Command, args []string) {
			logLevel := log.LevelInfo

			if flagQuiet && (flagDebug || flagVerbose) {
				log.Warn("I'm confused... How can I be verbose and quiet at the same time?!?!?!?")
				os.Exit(1)
			} else {
				if flagQuiet {
					logLevel = log.LevelOff
				} else {
					if flagDebug {
						logLevel = log.LevelDebug
					}

					// Verbose flag overrides debug level
					if flagVerbose {
						logLevel = log.LevelTrace
					}
				}
			}
			log.SetLogLevel(logLevel)
		},
	}
	RootCommand.PersistentFlags().BoolVarP(&flagQuiet, "quiet", "q", false, "disable logging")
	RootCommand.PersistentFlags().BoolVarP(&flagDebug, "debug", "d", false, "enable debug logging")
	RootCommand.PersistentFlags().BoolVarP(&flagVerbose, "verbose", "v", false, "enable verbose logging")

	// Build
	var CmdBuild = &cobra.Command{
		Use:   "build",
		Short: "Build a config file",
		Run: func(cmd *cobra.Command, args []string) {
			if err := validateAndRunBuildCommand(flagProjectFile, flagDataFile); err != nil {
				cmd.Usage()
				util.HandleFatalError(err)
			}
		},
	}
	CmdBuild.Flags().StringVarP(&flagProjectFile, "input", "i", "", "input project file")
	CmdBuild.Flags().StringVarP(&flagDataFile, "extra", "e", "", "extra data file")

	// Version
	var CmdVersion = &cobra.Command{
		Use:   "version",
		Short: "Print version number",
		Run: func(cmd *cobra.Command, args []string) {
			log.Notice("Magutt v%s\n", version)
		},
	}

	// Common flags
	RootCommand.AddCommand(CmdBuild)
	RootCommand.AddCommand(CmdVersion)

	// Process command line
	RootCommand.Execute()
}