lxd/db/profiles.mapper.go
func (c *ClusterTx) ProfileCreate(object Profile) (int64, error) {
	// Check if a profile with the same key exists.
	exists, err := c.ProfileExists(object.Project, object.Name)
	if err != nil {
		return -1, errors.Wrap(err, "Failed to check for duplicates")
	}
	if exists {
		return -1, fmt.Errorf("This profile already exists")
	}

	args := make([]interface{}, 3)

	// Populate the statement arguments.
	args[0] = object.Project
	args[1] = object.Name
	args[2] = object.Description

	// Prepared statement to use.
	stmt := c.stmt(profileCreate)

	// Execute the statement.
	result, err := stmt.Exec(args...)
	if err != nil {
		return -1, errors.Wrap(err, "Failed to create profile")
	}

	id, err := result.LastInsertId()
	if err != nil {
		return -1, errors.Wrap(err, "Failed to fetch profile ID")
	}

	// Insert config reference.
	stmt = c.stmt(profileCreateConfigRef)
	for key, value := range object.Config {
		_, err := stmt.Exec(id, key, value)
		if err != nil {
			return -1, errors.Wrap(err, "Insert config for profile")
		}
	}

	// Insert devices reference.
	for name, config := range object.Devices {
		typ, ok := config["type"]
		if !ok {
			return -1, fmt.Errorf("No type for device %s", name)
		}
		typCode, err := dbDeviceTypeToInt(typ)
		if err != nil {
			return -1, errors.Wrapf(err, "Device type code for %s", typ)
		}
		stmt = c.stmt(profileCreateDevicesRef)
		result, err := stmt.Exec(id, name, typCode)
		if err != nil {
			return -1, errors.Wrapf(err, "Insert device %s", name)
		}
		deviceID, err := result.LastInsertId()
		if err != nil {
			return -1, errors.Wrap(err, "Failed to fetch device ID")
		}
		stmt = c.stmt(profileCreateDevicesConfigRef)
		for key, value := range config {
			_, err := stmt.Exec(deviceID, key, value)
			if err != nil {
				return -1, errors.Wrap(err, "Insert config for profile")
			}
		}
	}

	return id, nil
}
func (c *ClusterTx) ProfileCreate(object Profile) (int64, error) {
	// Check if a profile with the same key exists.
	exists, err := c.ProfileExists(object.Project, object.Name)
	if err != nil {
		return -1, errors.Wrap(err, "Failed to check for duplicates")
	}
	if exists {
		return -1, fmt.Errorf("This profile already exists")
	}

	args := make([]interface{}, 3)

	// Populate the statement arguments.
	args[0] = object.Project
	args[1] = object.Name
	args[2] = object.Description

	// Prepared statement to use.
	stmt := c.stmt(profileCreate)

	// Execute the statement.
	result, err := stmt.Exec(args...)
	if err != nil {
		return -1, errors.Wrap(err, "Failed to create profile")
	}

	id, err := result.LastInsertId()
	if err != nil {
		return -1, errors.Wrap(err, "Failed to fetch profile ID")
	}

	// Insert config reference.
	stmt = c.stmt(profileCreateConfigRef)
	for key, value := range object.Config {
		_, err := stmt.Exec(id, key, value)
		if err != nil {
			return -1, errors.Wrap(err, "Insert config for profile")
		}
	}

	// Insert devices reference.
	for name, config := range object.Devices {
		typ, ok := config["type"]
		if !ok {
			return -1, fmt.Errorf("No type for device %s", name)
		}
		typCode, err := dbDeviceTypeToInt(typ)
		if err != nil {
			return -1, errors.Wrapf(err, "Device type code for %s", typ)
		}
		stmt = c.stmt(profileCreateDevicesRef)
		result, err := stmt.Exec(id, name, typCode)
		if err != nil {
			return -1, errors.Wrapf(err, "Insert device %s", name)
		}
		deviceID, err := result.LastInsertId()
		if err != nil {
			return -1, errors.Wrap(err, "Failed to fetch device ID")
		}
		stmt = c.stmt(profileCreateDevicesConfigRef)
		for key, value := range config {
			_, err := stmt.Exec(deviceID, key, value)
			if err != nil {
				return -1, errors.Wrap(err, "Insert config for profile")
			}
		}
	}

	return id, nil
}
func ( c * ClusterTx ) ProfileCreate ( object Profile ) ( int64 , error ) { // Check if a profile with the same key exists. exists , err := c . ProfileExists ( object . Project , object . Name ) if err != nil { return - 1 , errors . Wrap ( err , " " ) } if exists { return - 1 , fmt . Errorf ( " " ) } args := make ( [ ] interface { } , 3 ) // Populate the statement arguments. args [ 0 ] = object . Project args [ 1 ] = object . Name args [ 2 ] = object . Description // Prepared statement to use. stmt := c . stmt ( profileCreate ) // Execute the statement. result , err := stmt . Exec ( args ... ) if err != nil { return - 1 , errors . Wrap ( err , " " ) } id , err := result . LastInsertId ( ) if err != nil { return - 1 , errors . Wrap ( err , " " ) } // Insert config reference. stmt = c . stmt ( profileCreateConfigRef ) for key , value := range object . Config { _ , err := stmt . Exec ( id , key , value ) if err != nil { return - 1 , errors . Wrap ( err , " " ) } } // Insert devices reference. for name , config := range object . Devices { typ , ok := config [ " " ] if ! ok { return - 1 , fmt . Errorf ( " " , name ) } typCode , err := dbDeviceTypeToInt ( typ ) if err != nil { return - 1 , errors . Wrapf ( err , " " , typ ) } stmt = c . stmt ( profileCreateDevicesRef ) result , err := stmt . Exec ( id , name , typCode ) if err != nil { return - 1 , errors . Wrapf ( err , " " , name ) } deviceID , err := result . LastInsertId ( ) if err != nil { return - 1 , errors . Wrap ( err , " " ) } stmt = c . stmt ( profileCreateDevicesConfigRef ) for key , value := range config { _ , err := stmt . Exec ( deviceID , key , value ) if err != nil { return - 1 , errors . Wrap ( err , " " ) } } } return id , nil }
// ProfileCreate adds a new profile to the database.
ProfileCreate adds a new profile to the database .