Example #1
0
// 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
}
Example #2
0
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)
		}
	}
}