Manage information about regular files, directories, and special files on the minion, set/read user, group, mode, and data
New in version 2014.1.0.
Test whether the Salt process has the specified access to the file. One of the following modes must be specified:
CLI Example:
salt '*' file.access /path/to/file f
salt '*' file.access /path/to/file x
New in version 0.9.5.
Append text to the end of a file
CLI Example:
salt '*' file.append /etc/motd \
"With all thine offerings thou shalt offer salt." \
"Salt is what makes things taste bad when it isn't in them."
Attention
If you need to pass a string to append and that string contains an equal sign, you must include the argument name, args. For example:
salt '*' file.append /etc/motd args='cheese=spam'
salt '*' file.append /etc/motd args="['cheese=spam','spam=cheese']"
Returns the final component of a pathname
New in version 2015.5.0.
This can be useful at the CLI but is frequently useful when scripting.
{%- set filename = salt['file.basename'](source_file) %}
CLI Example:
salt '*' file.basename 'test/test.config'
New in version 2014.1.0.
Replace content of a text block in a file, delimited by line markers
A block of content delimited by comments can help you manage several lines entries without worrying about old entries removal.
Note
This function will store two copies of the file in-memory (the original version and the edited version) in order to detect changes and only edit the targeted file if necessary.
CLI Example:
salt '*' file.blockreplace /etc/hosts '#-- start managed zone foobar : DO NOT EDIT --' \
'#-- end managed zone foobar --' $'10.0.1.1 foo.foobar\n10.0.1.2 bar.foobar' True
Check for the changes in the file metadata.
CLI Example:
salt '*' file.check_file_meta /etc/httpd/conf.d/httpd.conf salt://http/httpd.conf '{hash_type: 'md5', 'hsum': <md5sum>}' root, root, '755' base
Note
Supported hash types include sha512, sha384, sha256, sha224, sha1, and md5.
Check if a file matches the given hash string
Returns true if the hash matched, otherwise false. Raises ValueError if the hash was not formatted correctly.
CLI Example:
salt '*' file.check_hash /etc/fstab md5:<md5sum>
Check to see what changes need to be made for a file
CLI Example:
salt '*' file.check_managed /etc/httpd/conf.d/httpd.conf salt://http/httpd.conf '{hash_type: 'md5', 'hsum': <md5sum>}' root, root, '755' jinja True None None base
Return a dictionary of what changes need to be made for a file
CLI Example:
salt '*' file.check_managed_changes /etc/httpd/conf.d/httpd.conf salt://http/httpd.conf '{hash_type: 'md5', 'hsum': <md5sum>}' root, root, '755' jinja True None None base
Check the permissions on files and chown if needed
CLI Example:
salt '*' file.check_perms /etc/sudoers '{}' root root 400
Changed in version 2014.1.3: follow_symlinks option added
Change the group of a file
CLI Example:
salt '*' file.chgrp /etc/passwd root
Chown a file, pass the file the desired user and group
CLI Example:
salt '*' file.chown /etc/passwd root root
Deprecated since version 0.17.0: Use replace() instead.
Comment out specified lines in a file
The file will be backed up before edit with this file extension
Warning
This backup will be overwritten each time sed / comment / uncomment is called. Meaning the backup will only be useful after the first invocation.
CLI Example:
salt '*' file.comment /etc/modules pcspkr
Deprecated since version 0.17.0: Use search() instead.
Return True if the file at path contains text
CLI Example:
salt '*' file.contains /etc/crontab 'mymaintenance.sh'
Deprecated since version 0.17.0: Use search() instead.
Return True if the given glob matches a string in the named file
CLI Example:
salt '*' file.contains_glob /etc/foobar '*cheese*'
Deprecated since version 0.17.0: Use search() instead.
Return True if the given regular expression matches on any line in the text of a given file.
If the lchar argument (leading char) is specified, it will strip lchar from the left side of each line before trying to match
CLI Example:
salt '*' file.contains_regex /etc/crontab
Deprecated since version 0.17.0: Use search() instead.
Return True if the given regular expression matches anything in the text of a given file
Traverses multiple lines at a time, via the salt BufferedReader (reads in chunks)
CLI Example:
salt '*' file.contains_regex_multiline /etc/crontab '^maint'
Copy a file or directory from source to dst
In order to copy a directory, the recurse flag is required, and will by default overwrite files in the destination with the same path, and retain all other existing files. (similar to cp -r on unix)
remove_existing will remove all files in the target directory, and then copy files from the source.
CLI Example:
salt '*' file.copy /path/to/src /path/to/dst
salt '*' file.copy /path/to/src_dir /path/to/dst_dir recurse=True
salt '*' file.copy /path/to/src_dir /path/to/dst_dir recurse=True remove_existing=True
New in version 0.17.0.
Delete a previous version of a file that was backed up using Salt's file state backup system.
CLI Example:
salt '*' file.restore_backup /foo/bar/baz.txt 0
Tests to see if path is a valid directory. Returns True/False.
CLI Example:
salt '*' file.directory_exists /etc
Returns the directory component of a pathname
New in version 2015.5.0.
This can be useful at the CLI but is frequently useful when scripting.
{%- from salt['file.dirname'](tpldir) + '/vars.jinja' import parent_vars %}
CLI Example:
salt '*' file.dirname 'test/path/filename.config'
Recursively calculate disk usage of path and return it in bytes
CLI Example:
salt '*' file.diskusage /path/to/check
This routine is called from the file.managed state to pull a hash from a remote file. Regular expressions are used line by line on the source_hash file, to find a potential candidate of the indicated hash type. This avoids many problems of arbitrary file lay out rules. It specifically permits pulling hash codes from debian *.dsc files.
For example:
openerp_7.0-latest-1.tar.gz:
file.managed:
- name: /tmp/openerp_7.0-20121227-075624-1_all.deb
- source: http://nightly.openerp.com/7.0/nightly/deb/openerp_7.0-20121227-075624-1.tar.gz
- source_hash: http://nightly.openerp.com/7.0/nightly/deb/openerp_7.0-20121227-075624-1.dsc
CLI Example:
salt '*' file.extract_hash /etc/foo sha512 /path/to/hash/file
Tests to see if path is a valid file. Returns True/False.
CLI Example:
salt '*' file.file_exists /etc/passwd
Approximate the Unix find(1) command and return a list of paths that meet the specified criteria.
The options include match criteria:
name = path-glob # case sensitive
iname = path-glob # case insensitive
regex = path-regex # case sensitive
iregex = path-regex # case insensitive
type = file-types # match any listed type
user = users # match any listed user
group = groups # match any listed group
size = [+-]number[size-unit] # default unit = byte
mtime = interval # modified since date
grep = regex # search file contents
and/or actions:
delete [= file-types] # default type = 'f'
exec = command [arg ...] # where {} is replaced by pathname
print [= print-opts]
and/or depth criteria:
maxdepth = maximum depth to transverse in path
mindepth = minimum depth to transverse before checking files or directories
The default action is print=path
path-glob:
* = match zero or more chars
? = match any char
[abc] = match a, b, or c
[!abc] or [^abc] = match anything except a, b, and c
[x-y] = match chars x through y
[!x-y] or [^x-y] = match anything except chars x through y
{a,b,c} = match a or b or c
path-regex: a Python Regex (regular expression) pattern to match pathnames
file-types: a string of one or more of the following:
a: all file types
b: block device
c: character device
d: directory
p: FIFO (named pipe)
f: plain file
l: symlink
s: socket
users: a space and/or comma separated list of user names and/or uids
groups: a space and/or comma separated list of group names and/or gids
size-unit:
b: bytes
k: kilobytes
m: megabytes
g: gigabytes
t: terabytes
interval:
[<num>w] [<num>d] [<num>h] [<num>m] [<num>s]
where:
w: week
d: day
h: hour
m: minute
s: second
print-opts: a comma and/or space separated list of one or more of the following:
group: group name
md5: MD5 digest of file contents
mode: file permissions (as integer)
mtime: last modification time (as time_t)
name: file basename
path: file absolute path
size: file size in bytes
type: file type
user: user name
CLI Examples:
salt '*' file.find / type=f name=\*.bak size=+10m
salt '*' file.find /var mtime=+30d size=+10m print=path,size,mtime
salt '*' file.find /var/log name=\*.[0-9] mtime=+30d size=+10m delete
Get major/minor info from a device
CLI Example:
salt '*' file.get_devmm /dev/chr
Return unified diff of file compared to file on master
CLI Example:
salt '*' file.get_diff /home/fred/.vimrc salt://users/fred/.vimrc
Return the id of the group that owns a given file
CLI Example:
salt '*' file.get_gid /etc/passwd
Changed in version 0.16.4: follow_symlinks option added
Return the group that owns a given file
CLI Example:
salt '*' file.get_group /etc/passwd
Changed in version 0.16.4: follow_symlinks option added
Get the hash sum of a file
It does not read the entire file into memory.
get_sum cannot really be trusted since it is vulnerable to collisions: get_sum(..., 'xyz') == 'Hash xyz not supported'
CLI Example:
salt '*' file.get_hash /etc/shadow
Return the managed file data for file.managed
CLI Example:
salt '*' file.get_managed /etc/httpd/conf.d/httpd.conf jinja salt://http/httpd.conf '{hash_type: 'md5', 'hsum': <md5sum>}' root root '755' base None None
Return the mode of a file
CLI Example:
salt '*' file.get_mode /etc/passwd
Changed in version 2014.1.0: follow_symlinks option added
Get an SELinux context from a given path
CLI Example:
salt '*' file.get_selinux_context /etc/hosts
Return the checksum for the given file. The following checksum algorithms are supported:
CLI Example:
salt '*' file.get_sum /etc/passwd sha512
Return the id of the user that owns a given file
CLI Example:
salt '*' file.get_uid /etc/passwd
Changed in version 0.16.4: follow_symlinks option added
Return the user that owns a given file
CLI Example:
salt '*' file.get_user /etc/passwd
Changed in version 0.16.4: follow_symlinks option added
Convert the group id to the group name on this system
CLI Example:
salt '*' file.gid_to_group 0
Grep for a string in the specified file
Note
This function's return value is slated for refinement in future versions of Salt
CLI Example:
salt '*' file.grep /etc/passwd nobody
salt '*' file.grep /etc/sysconfig/network-scripts/ifcfg-eth0 ipaddr " -i"
salt '*' file.grep /etc/sysconfig/network-scripts/ifcfg-eth0 ipaddr " -i -B2"
salt '*' file.grep "/etc/sysconfig/network-scripts/*" ipaddr " -i -l"
Convert the group to the gid on this system
CLI Example:
salt '*' file.group_to_gid root
Check if a file exists and is a block device.
CLI Example:
salt '*' file.is_blkdev /dev/blk
Check if a file exists and is a character device.
CLI Example:
salt '*' file.is_chrdev /dev/chr
Check if a file exists and is a FIFO.
CLI Example:
salt '*' file.is_fifo /dev/fifo
Check if the path is a symlink
CLI Example:
salt '*' file.is_link /path/to/link
Return a normalized file system path for the underlying OS
New in version 2014.7.0.
This can be useful at the CLI but is frequently useful when scripting combining path variables:
{% set www_root = '/var' %}
{% set app_dir = 'myapp' %}
myapp_config:
file:
- managed
- name: {{ salt['file.join'](www_root, app_dir, 'config.yaml') }}
CLI Example:
salt '*' file.join '/' 'usr' 'local' 'bin'
Chown a file, pass the file the desired user and group without following symlinks.
CLI Example:
salt '*' file.chown /etc/passwd root root
New in version 2014.1.0.
Create a hard link to a file
CLI Example:
salt '*' file.link /path/to/file /path/to/link
New in version 0.17.0.
Lists the previous versions of a file backed up using Salt's file state backup system.
CLI Example:
salt '*' file.list_backups /foo/bar/baz.txt
Lists the previous versions of a directory backed up using Salt's file state backup system.
CLI Example:
salt '*' file.list_backups_dir /foo/bar/baz/
New in version 2014.1.0.
Returns the lstat attributes for the given file or dir. Does not support symbolic links.
CLI Example:
salt '*' file.lstat /path/to/file
Ensure that the directory containing this path is available.
Note
The path must end with a trailing slash otherwise the directory/directories will be created up to the parent directory. For example if path is /opt/code, then it would be treated as /opt/ but if the path ends with a trailing slash like /opt/code/, then it would be treated as /opt/code/.
CLI Example:
salt '*' file.makedirs /opt/code/
Taken and modified from os.makedirs to set user, group and mode for each directory created.
CLI Example:
salt '*' file.makedirs_perms /opt/code
Checks the destination against what was retrieved with get_managed and makes the appropriate modifications (if necessary).
location of cached file on the minion
This is the path to the file stored on the minion. This file is placed on the minion using cp.cache_file. If the hash sum of that file matches the source_sum, we do not transfer the file to the minion again.
This file is then grabbed and if it has template set, it renders the file to be placed into the correct place on the system using salt.files.utils.copyfile()
CLI Example:
salt '*' file.manage_file /etc/httpd/conf.d/httpd.conf '' '{}' salt://http/httpd.conf '{hash_type: 'md5', 'hsum': <md5sum>}' root root '755' base ''
Changed in version 2014.7.0: follow_symlinks option added
Ensure that a directory is available.
CLI Example:
salt '*' file.mkdir /opt/jetty/context
New in version 0.17.0.
Create a block device, character device, or fifo pipe. Identical to the gnu mknod.
CLI Examples:
salt '*' file.mknod /dev/chr c 180 31
salt '*' file.mknod /dev/blk b 8 999
salt '*' file.nknod /dev/fifo p
New in version 0.17.0.
Create a block device.
CLI Example:
salt '*' file.mknod_blkdev /dev/blk 8 999
New in version 0.17.0.
Create a character device.
CLI Example:
salt '*' file.mknod_chrdev /dev/chr 180 31
New in version 0.17.0.
Create a FIFO pipe.
CLI Example:
salt '*' file.mknod_fifo /dev/fifo
Move a file or directory
CLI Example:
salt '*' file.move /path/to/src /path/to/dst
Returns Normalize path, eliminating double slashes, etc.
New in version 2015.5.0.
This can be useful at the CLI but is frequently useful when scripting.
{%- from salt['file.normpath'](tpldir + '/../vars.jinja') import parent_vars %}
CLI Example:
salt '*' file.normpath 'a/b/c/..'
Return a list of all physical open files on the system.
CLI Examples:
salt '*' file.open_files
salt '*' file.open_files by_pid=True
Return the relative parent directory path symbol for underlying OS
New in version 2014.7.0.
This can be useful when constructing Salt Formulas.
{% set pardir = salt['file.pardir']() %}
{% set final_path = salt['file.join']('subdir', pardir, 'confdir') %}
CLI Example:
salt '*' file.pardir
New in version 0.10.4.
Apply a patch to a file
Equivalent to:
patch <options> <originalfile> <patchfile>
CLI Example:
salt '*' file.patch /opt/file.txt /tmp/file.txt.patch
Tests to see if path after expansion is a valid path (file or directory). Expansion allows usage of ? * and character ranges []. Tilde expansion is not supported. Returns True/False.
New in version Hellium.
CLI Example:
salt '*' file.path_exists_glob /etc/pam*/pass*
New in version 2014.7.0.
Prepend text to the beginning of a file
CLI Example:
salt '*' file.prepend /etc/motd \
"With all thine offerings thou shalt offer salt." \
"Salt is what makes things taste bad when it isn't in them."
Attention
If you need to pass a string to append and that string contains an equal sign, you must include the argument name, args. For example:
salt '*' file.prepend /etc/motd args='cheese=spam'
salt '*' file.prepend /etc/motd args="['cheese=spam','spam=cheese']"
Deprecated since version 0.17.0: Use replace() instead.
Make a simple edit to a file (pure Python version)
Equivalent to:
sed <backup> <options> "/<limit>/ s/<before>/<after>/<flags> <file>"
Forward slashes and single quotes will be escaped automatically in the before and after patterns.
CLI Example:
salt '*' file.sed /etc/httpd/httpd.conf 'LogLevel warn' 'LogLevel info'
New in version 2014.1.0.
Return a list containing the contents of a directory
CLI Example:
salt '*' file.readdir /path/to/dir/
New in version 2014.1.0.
Return the path that a symlink points to
CLI Example:
salt '*' file.readlink /path/to/link
Remove the named file
CLI Example:
salt '*' file.remove /tmp/foo
Rename a file or directory
CLI Example:
salt '*' file.rename /path/to/src /path/to/dst
New in version 0.17.0.
Replace occurrences of a pattern in a file
This is a pure Python implementation that wraps Python's sub().
New in version 2014.7.0.
If pattern is not found and set to True then, the content will be appended to the file. Default is False
New in version 2014.7.0.
If pattern is not found and set to True then, the content will be appended to the file. Default is False
New in version 2014.7.0.
Content to use for append/prepend if not found. If None (default), uses repl. Useful when repl uses references to group in pattern.
Output a unified diff of the old file and the new file. If False return a boolean if any changes were made. Default is True
Note
Using this option will store two copies of the file in-memory (the original version and the edited version) in order to generate the diff.
If an equal sign (=) appears in an argument to a Salt command it is interpreted as a keyword argument in the format key=val. That processing can be bypassed in order to pass an equal sign through to the remote shell command by manually specifying the kwarg:
salt '*' file.replace /path/to/file pattern='=' repl=':'
salt '*' file.replace /path/to/file pattern="bind-address\s*=" repl='bind-address:'
CLI Examples:
salt '*' file.replace /etc/httpd/httpd.conf pattern='LogLevel warn' repl='LogLevel info'
salt '*' file.replace /some/file pattern='before' repl='after' flags='[MULTILINE, IGNORECASE]'
New in version 0.17.0.
Restore a previous version of a file that was backed up using Salt's file state backup system.
CLI Example:
salt '*' file.restore_backup /foo/bar/baz.txt 0
Reset the SELinux context on a given path
CLI Example:
salt '*' file.restorecon /home/user/.ssh/authorized_keys
New in version 2014.1.0.
Remove the specified directory. Fails if a directory is not empty.
CLI Example:
salt '*' file.rmdir /tmp/foo/
New in version 0.17.0.
Search for occurrences of a pattern in a file
Params are identical to replace().
CLI Example:
salt '*' file.search /etc/crontab 'mymaintenance.sh'
Deprecated since version 0.17.0: Use replace() instead.
Make a simple edit to a file
Equivalent to:
sed <backup> <options> "/<limit>/ s/<before>/<after>/<flags> <file>"
Negate the search command (!)
New in version 0.17.0.
Forward slashes and single quotes will be escaped automatically in the before and after patterns.
CLI Example:
salt '*' file.sed /etc/httpd/httpd.conf 'LogLevel warn' 'LogLevel info'
Deprecated since version 0.17.0: Use search() instead.
Return True if the file at path contains text. Utilizes sed to perform the search (line-wise search).
Note: the p flag will be added to any flags you pass in.
CLI Example:
salt '*' file.contains /etc/crontab 'mymaintenance.sh'
New in version 2014.1.0.
Seek to a position on a file and read it
CLI Example:
salt '*' file.seek_read /path/to/file 4096 0
New in version 2014.1.0.
Seek to a position on a file and write to it
CLI Example:
salt '*' file.seek_write /path/to/file 'some data' 4096
Set the mode of a file
CLI Example:
salt '*' file.set_mode /etc/passwd 0644
Set a specific SELinux label on a given path
CLI Example:
salt '*' file.set_selinux_context path <role> <type> <range>
Check the source list and return the source to use
CLI Example:
salt '*' file.source_list salt://http/httpd.conf '{hash_type: 'md5', 'hsum': <md5sum>}' base
Return a dict containing the stats for a given file
CLI Example:
salt '*' file.stats /etc/passwd
New in version 2014.1.0.
Perform a statvfs call against the filesystem that the file resides on
CLI Example:
salt '*' file.statvfs /path/to/file
Create a symbolic link to a file
CLI Example:
salt '*' file.symlink /path/to/file /path/to/link
New in version 0.9.5.
Just like the touch command, create a file if it doesn't exist or simply update the atime and mtime if it already does.
CLI Example:
salt '*' file.touch /var/log/emptyfile
New in version 2014.1.0.
Seek to a position on a file and delete everything after that point
CLI Example:
salt '*' file.truncate /path/to/file 512
Convert a uid to a user name
CLI Example:
salt '*' file.uid_to_user 0
Deprecated since version 0.17.0: Use replace() instead.
Uncomment specified commented lines in a file
CLI Example:
salt '*' file.uncomment /etc/hosts.deny 'ALL: PARANOID'
Convert user name to a uid
CLI Example:
salt '*' file.user_to_uid root
New in version 2014.7.0.
Write text to a file, overwriting any existing contents.
CLI Example:
salt '*' file.write /etc/motd \
"With all thine offerings thou shalt offer salt."
Attention
If you need to pass a string to append and that string contains an equal sign, you must include the argument name, args. For example:
salt '*' file.write /etc/motd args='cheese=spam'
salt '*' file.write /etc/motd args="['cheese=spam','spam=cheese']"
Docs for previous releases are available on readthedocs.org.
Latest Salt release: 2014.7.2