Пример #1
0
func (d *driverTriton) CreateMachine(config Config) (string, error) {
	opts := cloudapi.CreateMachineOpts{
		Package:         config.MachinePackage,
		Image:           config.MachineImage,
		Networks:        config.MachineNetworks,
		Metadata:        config.MachineMetadata,
		Tags:            config.MachineTags,
		FirewallEnabled: config.MachineFirewallEnabled,
	}

	if config.MachineName != "" {
		opts.Name = config.MachineName
	}

	machine, err := d.client.CreateMachine(opts)
	if err != nil {
		return "", err
	}

	return machine.Id, nil
}
func (s *StepCreateSourceMachine) Run(state multistep.StateBag) multistep.StepAction {
	sdcClient := state.Get("client").(*cloudapi.Client)
	ui := state.Get("ui").(packer.Ui)

	ui.Say("Creating source machine...")
	opts := cloudapi.CreateMachineOpts{
		Package:         s.MachinePackage,
		Image:           s.MachineImage,
		Networks:        s.MachineNetworks,
		Metadata:        s.MachineMetadata,
		Tags:            s.MachineTags,
		FirewallEnabled: s.MachineFirewallEnabled,
	}

	// Only supply a name if it was supplied in the template; the SDC API will
	// assign a default random name otherwise.
	if s.MachineName != "" {
		opts.Name = s.MachineName
	}

	machine, err := sdcClient.CreateMachine(opts)
	if err != nil {
		state.Put("error", fmt.Errorf("Problem creating source machine: %s", err))
		return multistep.ActionHalt
	}

	s.machineId = machine.Id

	ui.Say("Waiting for source machine to become available...")
	err = waitForMachineState(sdcClient, machine.Id, "running", 10*time.Minute)
	if err != nil {
		state.Put("error", fmt.Errorf("Problem waiting for source machine to become available: %s", err))
		return multistep.ActionHalt
	}

	state.Put("machine", machine.Id)

	return multistep.ActionContinue
}