git-repo-synced
Example:
# Clone the 'freckles' git repo into $HOME. - git-repo-synced: repo: https://gitlab.com/freckles-io/freckles.git dest: ~/freckles
Description
Clones or pulls a git repository.
Create the group/owner if not available on the system. This does not put the owner into the group if both are specified, so do that before-hand if you need that much control.
This does not install 'git' if it isn't already available and will fail if that's the case.
Variables
Name | Type | Default | Description |
---|---|---|---|
|
string | -- | The destination path. Required |
|
string | -- | The source repository. Required |
|
boolean | False | Ensure git is installed. |
|
string | -- | The group of the target folder. |
|
string | -- | The owner of the target folder. |
|
string | master | The version (tag, branch, hash, ..) to use. |
Examples
Example 1
Clone the 'freckles' git repo into $HOME.
Code
- git-repo-synced: repo: https://gitlab.com/freckles-io/freckles.git dest: ~/freckles
Example 2
Clone the 'freckles' git repo, create users if not exist already.
Code
- git-repo-synced: repo: https://gitlab.com/freckles-io/freckles.git dest: /var/lib/parent/freckles owner: freckles group: freckles
Description
This creates the group/user 'freckles' as well as the parent directory /var/lib/parent
(if necessary),
then checks out the 'freckles' git repo into it, and changes the owner and group to be 'freckles'.
Code
doc: short_help: Check out or pulls a git repo. help: | Clones or pulls a git repository. Create the group/owner if not available on the system. This does not put the owner into the group if both are specified, so do that before-hand if you need that much control. This does not install 'git' if it isn't already available and will fail if that's the case. examples: - title: Clone the 'freckles' git repo into $HOME. vars: repo: https://gitlab.com/freckles-io/freckles.git dest: ~/freckles - title: Clone the 'freckles' git repo, create users if not exist already. desc: | This creates the group/user 'freckles' as well as the parent directory ``/var/lib/parent`` (if necessary), then checks out the 'freckles' git repo into it, and changes the owner and group to be 'freckles'. vars: repo: https://gitlab.com/freckles-io/freckles.git dest: /var/lib/parent/freckles owner: freckles group: freckles args: repo: doc: short_help: The source repository. type: string required: true cli: metavar: URL dest: doc: short_help: The destination path. type: string required: true cli: metavar: PATH version: doc: short_help: The version (tag, branch, hash, ..) to use. type: string required: true default: master # become: # doc: # short_help: "Whether to use elevated privileges." # type: boolean # required: false # default: false owner: doc: short_help: The owner of the target folder. type: string required: false group: doc: short_help: The group of the target folder. type: string required: false ensure_git: doc: short_help: Ensure git is installed. type: boolean default: false required: false cli: param_decls: - --ensure-git meta: tags: - git - version control frecklets: - git-installed: frecklet::skip: '{{:: ensure_git | negate ::}}' - group-exists: frecklet::skip: '{{:: group | true_if_empty ::}}' group: '{{:: group ::}}' - user-exists: frecklet::skip: '{{:: owner | true_if_empty ::}}' name: '{{:: owner ::}}' - parent-folder-exists: frecklet::skip: '{{:: owner | true_if_all_empty(group) ::}}' path: '{{:: dest ::}}' owner: '{{:: owner ::}}' group: '{{:: group ::}}' - task: become: '{{:: owner | true_if_not_empty ::}}' frecklet: name: git type: ansible-module properties: idempotent: false internet: true elevated: '{{:: owner | true_if_not_empty ::}}' desc: references: "'git' Ansible module": https://docs.ansible.com/ansible/latest/modules/git_module.html short: "check out git repo '{{:: repo ::}}'" long: | Clone (if destination is empty) or pull the git repo '{{:: repo ::}}' to '{{:: dest ::}}'{%:: if version ::%}, using branch/tag/version '{{:: version ::}}'{%:: endif ::%}. vars: dest: '{{:: dest ::}}' repo: '{{:: repo ::}}' version: '{{:: version ::}}' - path-is-owned-by: frecklet::skip: '{{:: owner | true_if_all_empty(group) ::}}' path: '{{:: dest ::}}' owner: '{{:: owner ::}}' group: '{{:: group ::}}' recursive: true
frecklecute git-repo-synced --help Usage: frecklecute git-repo-synced [OPTIONS] Clones or pulls a git repository. Create the group/owner if not available on the system. This does not put the owner into the group if both are specified, so do that before-hand if you need that much control. This does not install 'git' if it isn't already available and will fail if that's the case. Options: --dest PATH The destination path. [required] --repo URL The source repository. [required] --ensure-git Ensure git is installed. --group GROUP The group of the target folder. --owner OWNER The owner of the target folder. --version VERSION The version (tag, branch, hash, ..) to use. --help Show this message and exit.
# -*- coding: utf-8 -*- # # module path: pycklets.git_repo_synced.GitRepoSynced # from dataclasses import dataclass from pyckles import AutoPycklet from typing import * # noqa @dataclass class GitRepoSynced(AutoPycklet): """Clones or pulls a git repository. Create the group/owner if not available on the system. This does not put the owner into the group if both are specified, so do that before-hand if you need that much control. This does not install 'git' if it isn't already available and will fail if that's the case. Args: dest: The destination path. ensure_git: Ensure git is installed. group: The group of the target folder. owner: The owner of the target folder. repo: The source repository. version: The version (tag, branch, hash, ..) to use. """ FRECKLET_ID = "git-repo-synced" dest: str = None ensure_git: bool = None group: str = None owner: str = None repo: str = None version: str = None def __post_init__(self): super(GitRepoSynced, self).__init__(var_names=["dest", "ensure_git", "group", "owner", "repo", "version"]) frecklet_class = GitRepoSynced
# -*- coding: utf-8 -*- # # module path: pycklets.git_repo_synced.GitRepoSynced # from pyckles import AutoPycklet class GitRepoSynced(AutoPycklet): """Clones or pulls a git repository. Create the group/owner if not available on the system. This does not put the owner into the group if both are specified, so do that before-hand if you need that much control. This does not install 'git' if it isn't already available and will fail if that's the case. Args: dest: The destination path. ensure_git: Ensure git is installed. group: The group of the target folder. owner: The owner of the target folder. repo: The source repository. version: The version (tag, branch, hash, ..) to use. """ FRECKLET_ID = "git-repo-synced" def __init__(self, dest=None, ensure_git=None, group=None, owner=None, repo=None, version="master"): super(GitRepoSynced, self).__init__(var_names=["dest", "ensure_git", "group", "owner", "repo", "version"]) self._dest = dest self._ensure_git = ensure_git self._group = group self._owner = owner self._repo = repo self._version = version @property def dest(self): return self._dest @dest.setter def dest(self, dest): self._dest = dest @property def ensure_git(self): return self._ensure_git @ensure_git.setter def ensure_git(self, ensure_git): self._ensure_git = ensure_git @property def group(self): return self._group @group.setter def group(self, group): self._group = group @property def owner(self): return self._owner @owner.setter def owner(self, owner): self._owner = owner @property def repo(self): return self._repo @repo.setter def repo(self, repo): self._repo = repo @property def version(self): return self._version @version.setter def version(self, version): self._version = version frecklet_class = GitRepoSynced