diff --git a/cf_remote/main.py b/cf_remote/main.py index 2ff1026..d97f016 100644 --- a/cf_remote/main.py +++ b/cf_remote/main.py @@ -12,6 +12,7 @@ exit_success, expand_list_from_file, is_file_string, + migrate_config_paths, ) from cf_remote.utils import strip_user, read_json, is_package_url, cache from cf_remote.packages import Releases @@ -685,6 +686,8 @@ def main() -> int: The only thing we want to do here is call _main() and handle exceptions (errors). """ + migrate_config_paths() + if os.getenv("CFBACKTRACE") == "1": r = _main() assert type(r) is int diff --git a/cf_remote/paths.py b/cf_remote/paths.py index 39f96cb..f9ff6b9 100644 --- a/cf_remote/paths.py +++ b/cf_remote/paths.py @@ -7,7 +7,7 @@ def path_append(dir, subdir): return dir if not subdir else os.path.join(dir, subdir) -def cfengine_dir(subdir=None): +def cfengine_dir(subdir=None, in_cache=False): override_dir = os.getenv("CF_REMOTE_DIR") if override_dir: @@ -23,11 +23,11 @@ def cfengine_dir(subdir=None): return path_append(override_dir, subdir) - return path_append("~/.cfengine/", subdir) + return path_append("~/.%s/cfengine/" % ("cache" if in_cache else "config"), subdir) -def cf_remote_dir(subdir=None): - return path_append(cfengine_dir("cf-remote"), subdir) +def cf_remote_dir(subdir=None, in_cache=False): + return path_append(cfengine_dir("cf-remote", in_cache=in_cache), subdir) def cf_remote_file(fname=None): @@ -35,7 +35,7 @@ def cf_remote_file(fname=None): def cf_remote_packages_dir(subdir=None): - return path_append(cf_remote_dir("packages"), subdir) + return path_append(cf_remote_dir("packages", in_cache=True), subdir) CLOUD_CONFIG_FNAME = "cloud_config.json" diff --git a/cf_remote/remote.py b/cf_remote/remote.py index 1ca89bd..66b7a6e 100644 --- a/cf_remote/remote.py +++ b/cf_remote/remote.py @@ -663,7 +663,7 @@ def install_host( trust_keys=None, insecure=False, demo_salt=None, - demo_sha=None, + demo_sha=None ): data = get_info(host, connection=connection) if show_info: diff --git a/cf_remote/spawn.py b/cf_remote/spawn.py index a7e3b25..4c6d9a5 100644 --- a/cf_remote/spawn.py +++ b/cf_remote/spawn.py @@ -778,7 +778,7 @@ def spawn_vm_in_vagrant( vagrantdir = cf_remote_dir(os.path.join("vagrant", name)) os.makedirs(vagrantdir, exist_ok=True) - # Copy Vagrantfile to .cfengine/cf-remote/vagrant + # Copy Vagrantfile to ~/.config/cfengine/cf-remote/vagrant vagrantfile = join(dirname(__file__), "Vagrantfile") copy_file(vagrantfile, os.path.join(vagrantdir, "Vagrantfile")) diff --git a/cf_remote/utils.py b/cf_remote/utils.py index eeeecdb..41e235e 100644 --- a/cf_remote/utils.py +++ b/cf_remote/utils.py @@ -339,3 +339,46 @@ def has_unescaped_character(string, char): return True previous = current return False + + +def migrate_config_paths(): + override_dir = os.getenv("CF_REMOTE_DIR") + # Set manually by user, assume they want to keep it like that + if override_dir: + return + + old_dir = os.path.expanduser("~/.cfengine/cf-remote/") + conf_dir = os.path.expanduser("~/.config/cfengine/cf-remote/") + cache_dir = os.path.expanduser("~/.cache/cfengine/cf-remote/") + if os.path.exists(conf_dir) and os.path.exists(cache_dir): + return # Migration has already occured + if not os.path.exists(os.path.dirname(old_dir)): + return # nothing to migrate + shutil.copytree( + old_dir, + conf_dir, + dirs_exist_ok=True, + ignore=shutil.ignore_patterns("json", "packages"), + ) + print("config-files has been moved to '%s'" % conf_dir) + + shutil.copytree( + os.path.join(old_dir, "json"), + os.path.join(cache_dir, "json"), + dirs_exist_ok=True, + ) + shutil.copytree( + os.path.join(old_dir, "packages"), + os.path.join(cache_dir, "packages"), + dirs_exist_ok=True, + ) + print("cache-files has been moved to '%s'" % cache_dir) + + choice = input("Remove directory %s ? [y/N]" % old_dir).strip().lower() or "n" + if choice in "yes": + shutil.rmtree(old_dir) + print("%s has been removed" % old_dir) + return + if choice in "no": + return + print("Unknown input.") diff --git a/cf_remote/web.py b/cf_remote/web.py index ffa4648..c591ab4 100644 --- a/cf_remote/web.py +++ b/cf_remote/web.py @@ -23,7 +23,7 @@ def get_json(url): data = json.loads(r.read().decode(), object_pairs_hook=OrderedDict) filename = os.path.basename(url) - dir = cf_remote_dir("json") + dir = cf_remote_dir("json", in_cache=True) path = os.path.join(dir, filename) log.debug("Saving '{}' to '{}'".format(url, path)) write_json(path, data)