// loadJob loads the a job from the given flags. func loadJob(f *fg.Flags, cluster cluster.Cluster) (*jobs.Job, error) { if f.JobPath == "" { return nil, maskAny(errgo.New("--job missing")) } path, err := resolvePath(f.JobPath, "config", ".hcl") if err != nil { return nil, maskAny(err) } job, err := jobs.ParseJobFromFile(path, cluster, f.Options, log, f.VaultConfig, f.GithubLoginData) if err != nil { return nil, maskAny(err) } return job, nil }
func TestParse(t *testing.T) { cases := []struct { Name string ErrorExpected bool ExpectedUnitNamesCount1 []string ExpectedUnitNamesCount3 []string }{ { "simple.hcl", false, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "test-global-global-mn.service", "*****@*****.**", "*****@*****.**", "test-registrator-registrator-mn.service", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", }, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "test-global-global-mn.service", "*****@*****.**", "*****@*****.**", "test-registrator-registrator-mn.service", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", }, }, { "restart-all.hcl", false, []string{ "restartall-lb1-ta-mn.service", "restartall-lb1-tb-mn.service", "restartall-lb2-ta-mn.service", "restartall-lb2-tb-mn.service", }, []string{ "restartall-lb1-ta-mn.service", "restartall-lb1-tb-mn.service", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", }, }, { "secret.hcl", false, []string{ "*****@*****.**", }, []string{ "*****@*****.**", }, }, { "proxy.hcl", false, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", }, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", }, }, { "extra-fields.hcl", true, []string{}, []string{}, }, { "variables.hcl", false, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "test-global-global-mn.service", "test-registrator-registrator-mn.service", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", }, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "test-global-global-mn.service", "test-registrator-registrator-mn.service", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", }, }, { "volumes.hcl", false, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "volumes-v4global-v4global-mn.service", "volumes-v4global-v4global-vl0.service", }, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "volumes-v4global-v4global-mn.service", "volumes-v4global-v4global-vl0.service", }, }, { "metrics.hcl", false, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", }, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", }, }, { "constraints.hcl", false, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "constraints-group2global-taskgrobalb-mn.service", }, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "constraints-group2global-taskgrobalb-mn.service", }, }, { "include.hcl", false, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", }, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", }, }, { "type-proxy.hcl", false, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", }, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", }, }, { "type-proxy-weave.hcl", false, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", }, []string{ "*****@*****.**", "*****@*****.**", "*****@*****.**", "*****@*****.**", }, }, } for _, tc := range cases { t.Logf("testing %s", tc.Name) options := fg.Options{} options.Set("option1=value1") options.Set("option2=value2") cluster3 := cluster.New("test.com", "stack", 3) log := logging.MustGetLogger("test") vaultConfig := vault.VaultConfig{} ghLoginData := vault.GithubLoginData{} job, err := jobs.ParseJobFromFile(filepath.Join(fixtureDir, tc.Name), cluster3, options, log, vaultConfig, ghLoginData) if tc.ErrorExpected { if err == nil { t.Fatalf("Expected error in %s", tc.Name) } } else { if err != nil { t.Fatalf("Got error in %s: %#v", tc.Name, maskAny(err)) } json, err := job.Json() if err != nil { t.Fatalf("Cannot convert %s to json: %#v", tc.Name, maskAny(err)) } expectedJson, err := ioutil.ReadFile(filepath.Join(fixtureDir, tc.Name+".json")) if err != nil { t.Fatalf("Cannot read expected json for %s: %#v", tc.Name, maskAny(err)) } if diffs, err := compareJson(json, expectedJson); err != nil { t.Fatalf("Cannot comparse json: %#v", maskAny(err)) } else if len(diffs) > 0 { t.Fatalf("JSON diffs in %s\n%s\nGot: %s", tc.Name, strings.Join(diffs, "\n"), json) } // Now generate units testUnits(t, *job, cluster3, tc.ExpectedUnitNamesCount3, tc.Name) } cluster1 := cluster.New("test.com", "stack", 1) job1, err := jobs.ParseJobFromFile(filepath.Join(fixtureDir, tc.Name), cluster1, options, log, vaultConfig, ghLoginData) if tc.ErrorExpected { if err == nil { t.Fatalf("Expected error in %s", tc.Name) } } else { if err != nil { t.Fatalf("Got error in %s: %#v", tc.Name, maskAny(err)) } // Now generate units testUnits(t, *job1, cluster1, tc.ExpectedUnitNamesCount1, tc.Name) } } }