lxd/cluster/membership.go
func membershipCheckClusterStateForAccept(tx *db.ClusterTx, name string, address string, schema int, api int) error {
	nodes, err := tx.Nodes()
	if err != nil {
		return errors.Wrap(err, "failed to fetch current cluster nodes")
	}
	if len(nodes) == 1 && nodes[0].Address == "0.0.0.0" {
		return fmt.Errorf("clustering not enabled")
	}

	for _, node := range nodes {
		if node.Name == name {
			return fmt.Errorf("cluster already has node with name %s", name)
		}
		if node.Address == address {
			return fmt.Errorf("cluster already has node with address %s", address)
		}
		if node.Schema != schema {
			return fmt.Errorf("schema version mismatch: cluster has %d", node.Schema)
		}
		if node.APIExtensions != api {
			return fmt.Errorf("API version mismatch: cluster has %d", node.APIExtensions)
		}
	}

	return nil
}
func membershipCheckClusterStateForAccept(tx *db.ClusterTx, name string, address string, schema int, api int) error {
	nodes, err := tx.Nodes()
	if err != nil {
		return errors.Wrap(err, "failed to fetch current cluster nodes")
	}
	if len(nodes) == 1 && nodes[0].Address == "0.0.0.0" {
		return fmt.Errorf("clustering not enabled")
	}

	for _, node := range nodes {
		if node.Name == name {
			return fmt.Errorf("cluster already has node with name %s", name)
		}
		if node.Address == address {
			return fmt.Errorf("cluster already has node with address %s", address)
		}
		if node.Schema != schema {
			return fmt.Errorf("schema version mismatch: cluster has %d", node.Schema)
		}
		if node.APIExtensions != api {
			return fmt.Errorf("API version mismatch: cluster has %d", node.APIExtensions)
		}
	}

	return nil
}
func membershipCheckClusterStateForAccept ( tx * db . ClusterTx , name string , address string , schema int , api int ) error { nodes , err := tx . Nodes ( ) if err != nil { return errors . Wrap ( err , " " ) } if len ( nodes ) == 1 && nodes [ 0 ] . Address == " " { return fmt . Errorf ( " " ) } for _ , node := range nodes { if node . Name == name { return fmt . Errorf ( " " , name ) } if node . Address == address { return fmt . Errorf ( " " , address ) } if node . Schema != schema { return fmt . Errorf ( " " , node . Schema ) } if node . APIExtensions != api { return fmt . Errorf ( " " , node . APIExtensions ) } } return nil }
// Check that cluster-related preconditions are met for accepting a new node.
Check that cluster - related preconditions are met for accepting a new node .