Interaction with Git repositories
Important: Before using git over ssh, make sure your remote host fingerprint
exists in "~/.ssh/known_hosts" file. To avoid requiring password
authentication, it is also possible to pass private keys to use explicitly.
https://github.com/saltstack/salt.git:
git.latest:
- rev: develop
- target: /tmp/salt
-
salt.states.git.config(name, value, repo=None, user=None, is_global=False)
New in version 2014.7.0.
Manage a git config setting for a user or repository
- name
- Name of the git config value to set
- value
- Value to set
- repo : None
- An optional location of a git repository for local operations
- user : None
- Optional name of a user as whom git config will be run
- is_global : False
- Whether or not to pass the --global option to git config
Local config example:
mylocalrepo:
git.config:
- name: user.email
- value: fester@bestertester.net
- repo: file://my/path/to/repo
Global config example:
mylocalrepo:
git.config:
- name: user.name
- value: Esther Bestertester
- user: ebestertester
- is_global: True
-
salt.states.git.latest(name, rev=None, target=None, user=None, force=None, force_checkout=False, force_reset=False, submodules=False, mirror=False, bare=False, remote_name='origin', always_fetch=False, depth=None, identity=None, https_user=None, https_pass=None, onlyif=False, unless=False)
Make sure the repository is cloned to the given directory and is up to date
- name
- Address of the remote repository as passed to "git clone"
- rev
- The remote branch, tag, or revision ID to checkout after
clone / before update
- target
- Name of the target directory where repository is about to be cloned
- user
Name of the user performing repository management operations
New in version 0.17.0.
- force
- Force git to clone into pre-existing directories (deletes contents)
- force_checkout
- Force a checkout even if there might be overwritten changes
(Default: False)
- force_reset
- Force the checkout to --reset hard to the remote ref
(Default: False)
- submodules
- Update submodules on clone or branch change (Default: False)
- mirror
- True if the repository is to be a mirror of the remote repository.
This implies bare, and thus is incompatible with rev.
- bare
- True if the repository is to be a bare clone of the remote repository.
This is incompatible with rev, as nothing will be checked out.
- remote_name
- defines a different remote name.
For the first clone the given name is set to the default remote,
else it is just a additional remote. (Default: 'origin')
- always_fetch
- If a tag or branch name is used as the rev a fetch will not occur
until the tag or branch name changes. Setting this to true will force
a fetch to occur. Only applies when rev is set. (Default: False)
- depth
- Defines depth in history when git a clone is needed in order to ensure
latest. E.g. depth: 1 is usefull when deploying from a repository
with a long history. Use rev to specify branch. This is not compatible with tags or revision IDs.(Default: None)
- identity
- A path on the minion server to a private key to use over SSH
- https_user
HTTP Basic Auth username for HTTPS (only) clones
New in version 2015.5.0.
- https_pass
HTTP Basic Auth password for HTTPS (only) clones
New in version 2015.5.0.
- onlyif
- A command to run as a check, run the named command only if the command
passed to the onlyif option returns true
- unless
- A command to run as a check, only run the named command if the command
passed to the unless option returns false
Note
Clashing ID declarations can be avoided when including different
branches from the same git repository in the same sls file by using the
name declaration. The example below checks out the gh-pages
and gh-pages-prod branches from the same repository into separate
directories. The example also sets up the ssh_known_hosts ssh key
required to perform the git checkout.
gitlab.example.com:
ssh_known_hosts:
- present
- user: root
- enc: ecdsa
- fingerprint: 4e:94:b0:54:c1:5b:29:a2:70:0e:e1:a3:51:ee:ee:e3
git-website-staging:
git.latest:
- name: git@gitlab.example.com:user/website.git
- rev: gh-pages
- target: /usr/share/nginx/staging
- identity: /root/.ssh/website_id_rsa
- require:
- pkg: git
- ssh_known_hosts: gitlab.example.com
git-website-prod:
git.latest:
- name: git@gitlab.example.com:user/website.git
- rev: gh-pages-prod
- target: /usr/share/nginx/prod
- identity: /root/.ssh/website_id_rsa
- require:
- pkg: git
- ssh_known_hosts: gitlab.example.com
-
salt.states.git.mod_run_check(cmd_kwargs, onlyif, unless)
Execute the onlyif and unless logic.
Return a result dict if:
* onlyif failed (onlyif != 0)
* unless succeeded (unless == 0)
else return True
-
salt.states.git.present(name, bare=True, user=None, force=False, shared=None)
Make sure the repository is present in the given directory
- name
- Name of the directory where the repository is about to be created
- bare
- Create a bare repository (Default: True)
- user
Name of the user performing repository management operations
New in version 0.17.0.
- force
- Force-create a new repository into an pre-existing non-git directory
(deletes contents)
- shared
Specify the permission for sharing, see git-init for details (Default: None)
New in version XXXX.