func()

in kinder/pkg/cluster/manager/manage.go [117:167]


func (c *ClusterManager) CopyFile(source, target string) error {
	sourceNodes, sourcePath, err := c.ResolveNodesPath(source)
	if err != nil {
		return err
	}

	targetNodes, targetPath, err := c.ResolveNodesPath(target)
	if err != nil {
		return err
	}

	if sourceNodes == nil && targetNodes == nil {
		return errors.Errorf("at least one between source and target must be a node/nodes in the cluster")
	}

	if sourceNodes != nil {
		switch len(sourceNodes) {
		case 1:
			break // one source node selected: continue
		case 0:
			return errors.Errorf("no source node matches given criteria")
		default:
			return errors.Errorf("source can't be more than one node")
		}
	}

	if targetNodes != nil && len(targetNodes) == 0 {
		return errors.Errorf("no target node matches given criteria")
	}

	if sourceNodes != nil && targetNodes != nil {
		// create tmp folder
		// cp locally
		return errors.Errorf("copy between nodes not implemented yet!")
	}

	if targetNodes == nil {
		fmt.Printf("Copying from %s ...\n", sourceNodes[0].Name())
		if err := sourceNodes[0].CopyFrom(sourcePath, targetPath); err != nil {
			return err
		}
	}

	for _, n := range targetNodes {
		fmt.Printf("Copying to %s ...\n", n.Name())
		if err := n.CopyTo(sourcePath, targetPath); err != nil {
			return err
		}
	}
	return nil
}