func (s *FakeStemcell) Apply(input bftinput.Input, previousInput bftinput.Input) bftinput.Input {
	input.Stemcells = []bftinput.StemcellConfig{
		{Name: "fake-stemcell"},
	}

	return input
}
func (s *stemcell) Apply(input bftinput.Input, previousInput bftinput.Input) bftinput.Input {
	input.Stemcells = nil

	var stemcellConfig bftinput.StemcellConfig

	if s.definition == "os" {
		stemcellConfig = bftinput.StemcellConfig{
			OS: "toronto-os",
		}
	} else {
		stemcellConfig = bftinput.StemcellConfig{
			Name: "ubuntu-stemcell",
		}
	}

	usedStemcells := map[string]bool{}

	if len(input.CloudConfig.VmTypes) > 0 {
		for _, vmType := range input.CloudConfig.VmTypes {
			stemcellConfig.Version = s.stemcellVersions[rand.Intn(len(s.stemcellVersions))]
			stemcellConfig.Alias = fmt.Sprintf("stemcell-%s", stemcellConfig.Version)

			if usedStemcells[stemcellConfig.Alias] != true {
				input.Stemcells = append(input.Stemcells, stemcellConfig)
			}
			usedStemcells[stemcellConfig.Alias] = true

			for j := range input.Jobs {
				if input.Jobs[j].VmType == vmType.Name {
					input.Jobs[j].Stemcell = stemcellConfig.Alias
				}
			}
		}
	} else {
		for r, _ := range input.CloudConfig.ResourcePools {
			stemcellConfig.Version = s.stemcellVersions[rand.Intn(len(s.stemcellVersions))]
			input.CloudConfig.ResourcePools[r].Stemcell = stemcellConfig
		}

		for j := range input.Jobs {
			input.Jobs[j].Stemcell = ""
		}
	}

	return input
}
func (g *inputGenerator) fuzzInput(input bftinput.Input, previousInput bftinput.Input) bftinput.Input {
	input.CloudConfig = previousInput.CloudConfig
	input.Stemcells = previousInput.Stemcells

	input = g.parameterProvider.Get("availability_zone").Apply(input, previousInput)
	input = g.parameterProvider.Get("vm_type").Apply(input, previousInput)
	input = g.parameterProvider.Get("stemcell").Apply(input, previousInput)
	input = g.parameterProvider.Get("persistent_disk").Apply(input, previousInput)
	input = g.parameterProvider.Get("network").Apply(input, previousInput)
	input = g.parameterProvider.Get("template").Apply(input, previousInput)
	input = g.parameterProvider.Get("compilation").Apply(input, previousInput)
	input = g.parameterProvider.Get("update").Apply(input, previousInput)
	input = g.parameterProvider.Get("cloud_properties").Apply(input, previousInput)
	input = g.parameterProvider.Get("fixed_migrated_from").Apply(input, previousInput)

	return input
}