Manage information about files on the minion, set/read user, group, and mode data
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."
New in version 0.9.5.
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
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
Check the permissions on files and chown if needed
in which case it will be converted into a base-10 string.
What this means is that in your YAML salt file, you can specify mode as an integer(eg, 644) or as a string(eg, '644'). But, to specify mode 0777, for example, it must be specified as the string, '0777' otherwise, 0777 will be parsed as an octal and you'd get 511 instead.
CLI Example:
salt '*' file.check_perms /etc/sudoers '{}' root root 400
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
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
New in version 0.9.5.
Return True if the file at path contains text
CLI Example:
salt '*' file.contains /etc/crontab 'mymaintenance.sh'
New in version 0.9.5.
Return True if the given glob matches a string in the named file
CLI Example:
salt '*' file.contains_glob /etc/foobar '*cheese*'
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 Examples:
salt '*' file.contains_regex /etc/crontab
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'
Tests to see if path is a valid directory. Returns True/False.
CLI Example:
salt '*' file.directory_exists /etc
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]
The default action is 'print=path'.
file-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 re (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
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
Return the group that owns a given file
CLI Example:
salt '*' file.get_group /etc/passwd
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
Get an SELinux context from a given path
CLI Example:
salt '*' file.get_selinux_context /etc/hosts
Return the sum for the given file, default is md5, sha1, sha224, sha256, sha384, sha512 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
Return the user that owns a given file
CLI Example:
salt '*' file.get_user /etc/passwd
Convert the group id to the group name on this system
CLI Example:
salt '*' file.gid_to_group 0
Convert the group to the gid on this system
CLI Example:
salt '*' file.group_to_gid root
Ensure that the directory containing this path is available.
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).
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 ''
Ensure that a directory is available.
CLI Example:
salt '*' file.mkdir /opt/jetty/context
Apply a patch to a file
Equivalent to:
patch <options> <originalfile> <patchfile>
CLI Example:
salt '*' file.patch /opt/file.txt /tmp/file.txt.patch
New in version 0.10.4.
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 0.9.5.
Remove the named file
CLI Example:
salt '*' file.remove /tmp/foo
Reset the SELinux context on a given path
CLI Example:
salt '*' file.restorecon /home/user/.ssh/authorized_keys
Make a simple edit to a file
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 0.9.5.
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'
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
Return a dict containing the stats for a given file
CLI Example:
salt '*' file.stats /etc/passwd
Just like 'nix's "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 0.9.5.
Convert a uid to a user name
CLI Example:
salt '*' file.uid_to_user 0
Uncomment specified commented lines in a file
CLI Example:
salt '*' file.uncomment /etc/hosts.deny 'ALL: PARANOID'
New in version 0.9.5.
Convert user name to a uid
CLI Example:
salt '*' file.user_to_uid root