func createEnvISO(env *cpi.AgentEnv, runner cmd.Runner) (path string, err error) { json, err := json.Marshal(env) if err != nil { return } envDir, err := ioutil.TempDir("", "agent-iso-dir") if err != nil { return } // Name of the environment JSON file should be "env" to fit ISO 9660 8.3 filename scheme envFile, err := os.Create(p.Join(envDir, "env")) if err != nil { return } _, err = envFile.Write(json) if err != nil { return } err = envFile.Close() if err != nil { return } envISO, err := ioutil.TempFile("", "agent-env-iso") if err != nil { return } envISO.Close() output, err := runner.Run("mkisofs", "-o", envISO.Name(), envFile.Name()) if err != nil { out := string(output[:]) return "", errors.New(fmt.Sprintf("Failed to generate ISO for agent settings: %v\n%s", err, out)) } // Cleanup temp dir but ignore the error. Failure to delete a temp file is not // worth worrying about. _ = os.RemoveAll(envDir) return envISO.Name(), nil }
Agent: &cpi.AgentConfig{Mbus: "fake-mbus", NTP: []string{"fake-ntp"}}, }, Runner: runner, Logger: logger.New(), } env = &cpi.AgentEnv{AgentID: "agent-id", VM: cpi.VMSpec{Name: "vm-name", ID: "vm-id"}} }) It("Successfully creates an ISO", func() { iso, err := createEnvISO(env, runner) defer os.Remove(iso) Expect(err).Should(BeNil(), "Test requires mkisofs, install with 'brew install cdrtools' on Mac") // Verify we have produced a valid ISO by checking the output of "file <iso>" out, err := runner.Run("file", iso) outStr := string(out[:]) Expect(err).Should(BeNil()) Expect(outStr).Should(ContainSubstring("ISO 9660 CD-ROM")) }) Describe("Metadata", func() { It("successfully puts and gets agent env data", func() { vmID := "fake-vm-id" metadataTask := &ec.Task{State: "COMPLETED"} vm := &ec.VM{ ID: vmID, Metadata: map[string]string{"bosh-cpi": GetEnvMetadata(env)}, }