// Discover discovers plugins. // // Search the directory of the executable, then the plugins directory, and // finally the CWD, in that order. Any conflicts will overwrite previously // found plugins, in that order. // Hence, the priority order is the reverse of the search order - i.e., the // CWD has the highest priority. func (c *config) Discover() error { // First, look in the same directory as the executable. exePath, err := osext.Executable() if err != nil { log.Printf("[ERR] Error loading exe directory: %s", err) } else { if err := c.discover(filepath.Dir(exePath)); err != nil { return err } } // Next, look in the plugins directory. dir, err := packer.ConfigDir() if err != nil { log.Printf("[ERR] Error loading config directory: %s", err) } else { if err := c.discover(filepath.Join(dir, "plugins")); err != nil { return err } } // Next, look in the CWD. if err := c.discover("."); err != nil { return err } // Finally, try to use an internal plugin. Note that this will not override // any previously-loaded plugins. if err := c.discoverInternal(); err != nil { return err } return nil }
// Discover discovers plugins. // // Search the directory of the executable, then the plugins directory, and // finally the CWD, in that order. Any conflicts will overwrite previously // found plugins, in that order. // Hence, the priority order is the reverse of the search order - i.e., the // CWD has the highest priority. func (c *config) Discover() error { // If we are already inside a plugin process we should not need to // discover anything. if os.Getenv(plugin.MagicCookieKey) == plugin.MagicCookieValue { return nil } // First, look in the same directory as the executable. exePath, err := osext.Executable() if err != nil { log.Printf("[ERR] Error loading exe directory: %s", err) } else { if err := c.discover(filepath.Dir(exePath)); err != nil { return err } } // Next, look in the plugins directory. dir, err := packer.ConfigDir() if err != nil { log.Printf("[ERR] Error loading config directory: %s", err) } else { if err := c.discover(filepath.Join(dir, "plugins")); err != nil { return err } } // Next, look in the CWD. if err := c.discover("."); err != nil { return err } // Finally, try to use an internal plugin. Note that this will not override // any previously-loaded plugins. if err := c.discoverInternal(); err != nil { return err } return nil }
// runCheckpoint runs a HashiCorp Checkpoint request. You can read about // Checkpoint here: https://github.com/hashicorp/go-checkpoint. func runCheckpoint(c *config) { // If the user doesn't want checkpoint at all, then return. if c.DisableCheckpoint { log.Printf("[INFO] Checkpoint disabled. Not running.") checkpointResult <- nil return } configDir, err := packer.ConfigDir() if err != nil { log.Printf("[ERR] Checkpoint setup error: %s", err) checkpointResult <- nil return } version := Version if VersionPrerelease != "" { version += fmt.Sprintf("-%s", VersionPrerelease) } signaturePath := filepath.Join(configDir, "checkpoint_signature") if c.DisableCheckpointSignature { log.Printf("[INFO] Checkpoint signature disabled") signaturePath = "" } resp, err := checkpoint.Check(&checkpoint.CheckParams{ Product: "packer", Version: version, SignatureFile: signaturePath, CacheFile: filepath.Join(configDir, "checkpoint_cache"), }) if err != nil { log.Printf("[ERR] Checkpoint error: %s", err) resp = nil } checkpointResult <- resp }
func TestStepTempDir_notmpdir(t *testing.T) { tempenv := "PACKER_TMP_DIR" oldenv := os.Getenv(tempenv) defer os.Setenv(tempenv, oldenv) os.Setenv(tempenv, "") dir1 := testStepTempDir_impl(t) cd, err := packer.ConfigDir() if err != nil { t.Fatalf("bad ConfigDir") } td := filepath.Join(cd, "tmp") os.Setenv(tempenv, td) dir2 := testStepTempDir_impl(t) if filepath.Dir(dir1) != filepath.Dir(dir2) { t.Fatalf("temp base directories do not match: %s %s", filepath.Dir(dir1), filepath.Dir(dir2)) } }