Saltstack module file 详解

file.apply_template_on_contents

Return the contents after applying the templating engine

contents
template string

template
template format

context
Overrides default context variables passed to the template.

defaults
Default context passed to the template.

CLI Example:

salt '*' file.apply_template_on_contents
contents='This is a {{ template }} string.'
template=jinja
"context={}" "defaults={'template': 'cool'}"
saltenv=base

file.get_mode

Return the mode of a file

path
file or directory of which to get the mode

follow_symlinks
indicated if symlinks should be followed

CLI Example:

salt '*' file.get_mode /etc/passwd

Changed in version 2014.1.0
follow_symlinks option added

file.restorecon

Reset the SELinux context on a given path

CLI Example:

salt '*' file.restorecon /home/user/.ssh/authorized_keys

file.normpath

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/..'

file.readlink

New in version 2014.1.0

Return the path that a symlink points to
If canonicalize is set to True, then it return the final target

CLI Example:

salt '*' file.readlink /path/to/link

file.uncomment

.. deprecated:: 0.17.0
Use :py:func:~salt.modules.file.replace instead.

Uncomment specified commented lines in a file

path
The full path to the file to be edited
regex
A regular expression used to find the lines that are to be uncommented.
This regex should not include the comment character. A leading ^
character will be stripped for convenience (for easily switching
between comment() and uncomment()).
char: #
The character to remove in order to uncomment a line
backup: .bak
The file will be backed up before edit with this file extension;
WARNING: each time sed/comment/uncomment is called will
overwrite this backup

CLI Example:

salt '*' file.uncomment /etc/hosts.deny 'ALL: PARANOID'

file.delete_backup

New in version 0.17.0

Delete a previous version of a file that was backed up using Salt's
:ref:file state backup <file-state-backups> system.

path
The path on the minion to check for backups
backup_id
The numeric id for the backup you wish to delete, as found using
:mod:file.list_backups <salt.modules.file.list_backups>

CLI Example:

salt '*' file.delete_backup /var/cache/salt/minion/file_backup/home/foo/bar/baz.txt 0

file.file_exists

Tests to see if path is a valid file. Returns True/False.

CLI Example:

salt '*' file.file_exists /etc/passwd

file.lsattr

New in version 2018.3.0
Changed in version 2018.3.1
If lsattr is not installed on the system, None is returned.
Changed in version 2018.3.4
If on AIX, None is returned even if in filesystem as lsattr on AIX
is not the same thing as the linux version.

Obtain the modifiable attributes of the given file. If path
is to a directory, an empty list is returned.

path
path to file to obtain attributes of. File/directory must exist.

CLI Example:

salt '*' file.lsattr foo1.txt

file.check_managed

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': }' root, root, '755' jinja True None None base

file.replace

New in version 0.17.0

Replace occurrences of a pattern in a file. If show_changes is
True, then a diff of what changed will be returned, otherwise a
True will be returned when changes are made, and False when
no changes are made.

This is a pure Python implementation that wraps Python's :py:func:~re.sub.

path
Filesystem path to the file to be edited. If a symlink is specified, it
will be resolved to its target.

pattern
A regular expression, to be matched using Python's
:py:func:~re.search.

repl
The replacement text

count: 0
Maximum number of pattern occurrences to be replaced. If count is a
positive integer n, only n occurrences will be replaced,
otherwise all occurrences will be replaced.

flags (list or int)
A list of flags defined in the re module documentation from the
Python standard library. Each list item should be a string that will
correlate to the human-friendly flag name. E.g., ['IGNORECASE', 'MULTILINE']. Optionally, flags may be an int, with a value
corresponding to the XOR (|) of all the desired flags. Defaults to
8 (which supports 'MULTILINE').

bufsize (int or str)
How much of the file to buffer into memory at once. The
default value 1 processes one line at a time. The special value
file may be specified which will read the entire file into memory
before processing.

append_if_not_found: False
New in version 2014.7.0

If set to True, and pattern is not found, then the content will be
appended to the file.

prepend_if_not_found: False
New in version 2014.7.0

If set to True and pattern is not found, then the content will be
prepended to the file.

not_found_content
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.

backup: .bak
The file extension to use for a backup of the file before editing. Set
to False to skip making a backup.

dry_run: False
If set to True, no changes will be made to the file, the function
will just return the changes that would have been made (or a
True/False value if show_changes is set to False).

search_only: False
If set to true, this no changes will be performed on the file, and this
function will simply return True if the pattern was matched, and
False if not.

show_changes: True
If True, return a diff of changes made. Otherwise, return True
if changes were made, and False if not.

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. This may not normally be a concern, but could impact
performance if used with large files.

ignore_if_missing: False
New in version 2015.8.0

If set to True, this function will simply return False
if the file doesn't exist. Otherwise, an error will be thrown.

preserve_inode: True
New in version 2015.8.0

Preserve the inode of the file, so that any hard links continue to
share the inode with the original filename. This works by copying the
file, reading from the copy, and writing to the file at the original
inode. If False, the file will be moved rather than copied, and a
new file will be written to a new inode, but using the original
filename. Hard links will then share an inode with the backup, instead
(if using backup to create a backup copy).

backslash_literal: False
New in version 2016.11.7

Interpret backslashes as literal backslashes for the repl and not
escape characters. This will help when using append/prepend so that
the backslashes are not interpreted for the repl on the second run of
the state.

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]'

file.manage_file

Checks the destination against what was retrieved with get_managed and
makes the appropriate modifications (if necessary).

name
location to place the file

sfn
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()

ret
The initial state return data structure. Pass in None to use the
default structure.

source
file reference on the master

source_sum
sum hash for source

user
user owner

group
group owner

backup
backup_mode

attrs
attributes to be set on file: '' means remove all of them

New in version 2018.3.0

makedirs
make directories if they do not exist

template
format of templating

show_changes
Include diff in state return

contents:
contents to be placed in the file

dir_mode
mode for directories created with makedirs

skip_verify: False
If True, hash verification of remote file sources (http://,
https://, ftp://) will be skipped, and the source_hash
argument will be ignored.

New in version 2016.3.0

keep_mode: False
If True, and the source is a file from the Salt fileserver (or
a local file on the minion), the mode of the destination file will be
set to the mode of the source file.

Note: keep_mode does not work with salt-ssh.

As a consequence of how the files are transferred to the minion, and
the inability to connect back to the master with salt-ssh, salt is
unable to stat the file as it exists on the fileserver and thus
cannot mirror the mode on the salt-ssh minion

encoding
If specified, then the specified encoding will be used. Otherwise, the
file will be encoded using the system locale (usually UTF-8). See
https://docs.python.org/3/library/codecs.html#standard-encodings for
the list of available encodings.

New in version 2017.7.0

encoding_errors: 'strict'
Default is 'strict'.
See https://docs.python.org/2/library/codecs.html#codec-base-classes
for the error handling schemes.

New in version 2017.7.0

CLI Example:

salt '*' file.manage_file /etc/httpd/conf.d/httpd.conf '' '{}' salt://http/httpd.conf '{hash_type: 'md5', 'hsum': }' root root '755' '' base ''

Changed in version 2014.7.0
follow_symlinks option added

file.chattr

New in version 2018.3.0

Change the attributes of files. This function accepts one or more files and
the following options:

operator
Can be wither add or remove. Determines whether attributes
should be added or removed from files

attributes
One or more of the following characters: aAcCdDeijPsStTu,
representing attributes to add to/remove from files

version
a version number to assign to the file(s)

flags
One or more of the following characters: RVf, representing
flags to assign to chattr (recurse, verbose, suppress most errors)

CLI Example:

salt '' file.chattr foo1.txt foo2.txt operator=add attributes=ai
salt '
' file.chattr foo3.txt operator=remove attributes=i version=2

file.get_sum

Return the checksum for the given file. The following checksum algorithms
are supported:

* md5
* sha1
* sha224
* sha256 (default)
* sha384
* sha512

path
path to the file or directory

form
desired sum format

CLI Example:

salt '*' file.get_sum /etc/passwd sha512

file.get_uid

Return the id of the user that owns a given file

path
file or directory of which to get the uid

follow_symlinks
indicated if symlinks should be followed

CLI Example:

salt '*' file.get_uid /etc/passwd

Changed in version 0.16.4
follow_symlinks option added

file.prepend

New in version 2014.7.0

Prepend text to the beginning of a file

path
path to file

*args
strings to prepend to the 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."

.. admonition:: 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']"

file.move

Move a file or directory

CLI Example:

salt '*' file.move /path/to/src /path/to/dst

file.set_selinux_context

Set a specific SELinux label on a given path

CLI Example:

salt '' file.set_selinux_context path
salt '
' file.set_selinux_context /etc/yum.repos.d/epel.repo system_u object_r system_conf_t s0

file.get_managed

Return the managed file data for file.managed

name
location where the file lives on the server

template
template format

source
managed source file

source_hash
hash of the source file

source_hash_name
When source_hash refers to a remote file, this specifies the
filename to look for in that file.

New in version 2016.3.5

user
Owner of file

group
Group owner of file

mode
Permissions of file

attrs
Attributes of file

New in version 2018.3.0

context
Variables to add to the template context

defaults
Default values of for context_dict

skip_verify
If True, hash verification of remote file sources (http://,
https://, ftp://) will be skipped, and the source_hash
argument will be ignored.

New in version 2016.3.0

CLI Example:

salt '*' file.get_managed /etc/httpd/conf.d/httpd.conf jinja salt://http/httpd.conf '{hash_type: 'md5', 'hsum': }' None root root '755' base None None

file.statvfs

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

file.mknod_blkdev

New in version 0.17.0

Create a block device.

CLI Example:

salt '*' file.mknod_blkdev /dev/blk 8 999

file.truncate

New in version 2014.1.0

Seek to a position on a file and delete everything after that point

path
path to file

length
offset into file to truncate

CLI Example:

salt '*' file.truncate /path/to/file 512

file.extract_hash

Changed in version 2016.3.5
Prior to this version, only the file_name argument was considered
for filename matches in the hash file. This would be problematic for
cases in which the user was relying on a remote checksum file that they
do not control, and they wished to use a different name for that file
on the minion from the filename on the remote server (and in the
checksum file). For example, managing /tmp/myfile.tar.gz when the
remote file was at https://mydomain.tld/different_name.tar.gz. The
:py:func:file.managed <salt.states.file.managed> state now also
passes this function the source URI as well as the source_hash_name
(if specified). In cases where source_hash_name is specified, it
takes precedence over both the file_name and source. When it is
not specified, file_name takes precedence over source. This
allows for better capability for matching hashes.
Changed in version 2016.11.0
File name and source URI matches are no longer disregarded when
source_hash_name is specified. They will be used as fallback
matches if there is no match to the source_hash_name value.

This routine is called from the :mod:file.managed <salt.states.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 layout rules. It specifically permits pulling
hash codes from debian *.dsc files.

If no exact match of a hash and filename are found, then the first hash
found (if any) will be returned. If no hashes at all are found, then
None will be returned.

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 /path/to/hash/file sha512 /etc/foo

file.gid_to_group

Convert the group id to the group name on this system

gid
gid to convert to a group name

CLI Example:

salt '*' file.gid_to_group 0

file.list_backup

This function is an alias of list_backups.

New in version 0.17.0

Lists the previous versions of a file backed up using Salt's :ref:file state backup <file-state-backups> system.

path
The path on the minion to check for backups
limit
Limit the number of results to the most recent N backups

CLI Example:

salt '*' file.list_backups /foo/bar/baz.txt

file.write

New in version 2014.7.0

Write text to a file, overwriting any existing contents.

path
path to file

*args
strings to write to the file

CLI Example:

salt '*' file.write /etc/motd
"With all thine offerings thou shalt offer salt."

.. admonition:: 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']"

file.sed_contains

.. deprecated:: 0.17.0
Use :func: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'

file.check_perms

Check the permissions on files, modify attributes and chown if needed. File
attributes are only verified if lsattr(1) is installed.

CLI Example:

salt '*' file.check_perms /etc/sudoers '{}' root root 400 ai

Changed in version 2014.1.3
follow_symlinks option added

file.comment

.. deprecated:: 0.17.0
Use :py:func:~salt.modules.file.replace instead.

Comment out specified lines in a file

path
The full path to the file to be edited
regex
A regular expression used to find the lines that are to be commented;
this pattern will be wrapped in parenthesis and will move any
preceding/trailing ^ or $ characters outside the parenthesis
(e.g., the pattern ^foo$ will be rewritten as ^(foo)$)
char: #
The character to be inserted at the beginning of a line in order to
comment it out
backup: .bak
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

file.dirname

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' + '/vars.jinja' import parent_vars %}

CLI Example:

salt '*' file.dirname 'test/path/filename.config'

file.directory_exists

Tests to see if path is a valid directory. Returns True/False.

CLI Example:

salt '*' file.directory_exists /etc

file.makedirs

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/

file.append

New in version 0.9.5

Append text to the end of a file

path
path to file

*args
strings to append to 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."

.. admonition:: 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']"

file.mknod

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

file.is_chrdev

Check if a file exists and is a character device.

CLI Example:

salt '*' file.is_chrdev /dev/chr

file.group_to_gid

Convert the group to the gid on this system

group
group to convert to its gid

CLI Example:

salt '*' file.group_to_gid root

file.is_blkdev

Check if a file exists and is a block device.

CLI Example:

salt '*' file.is_blkdev /dev/blk

file.symlink

Create a symbolic link (symlink, soft link) to a file

CLI Example:

salt '*' file.symlink /path/to/file /path/to/link

file.list_backups

New in version 0.17.0

Lists the previous versions of a file backed up using Salt's :ref:file state backup <file-state-backups> system.

path
The path on the minion to check for backups
limit
Limit the number of results to the most recent N backups

CLI Example:

salt '*' file.list_backups /foo/bar/baz.txt

file.get_group

Return the group that owns a given file

path
file or directory of which to get the group

follow_symlinks
indicated if symlinks should be followed

CLI Example:

salt '*' file.get_group /etc/passwd

Changed in version 0.16.4
follow_symlinks option added

file.join

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' %}

myapp_config:
file:
- managed
- name: {{ salt['file.join'](www_root, app_dir, 'config.yaml') }}

CLI Example:

salt '*' file.join '/' 'usr' 'local' 'bin'

file.contains

.. deprecated:: 0.17.0
Use :func:search instead.

Return True if the file at path contains text

CLI Example:

salt '*' file.contains /etc/crontab 'mymaintenance.sh'

file.search

New in version 0.17.0

Search for occurrences of a pattern in a file

Except for multiline, params are identical to
:py:func:~salt.modules.file.replace.

multiline
If true, inserts 'MULTILINE' into flags and sets bufsize to
'file'.

New in version 2015.8.0

CLI Example:

salt '*' file.search /etc/crontab 'mymaintenance.sh'

file.mkdir

Ensure that a directory is available.

CLI Example:

salt '*' file.mkdir /opt/jetty/context

file.uid_to_user

Convert a uid to a user name

uid
uid to convert to a username

CLI Example:

salt '*' file.uid_to_user 0

file.path_exists_glob

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 2014.7.0

CLI Example:

salt '' file.path_exists_glob /etc/pam/pass*

file.mknod_chrdev

New in version 0.17.0

Create a character device.

CLI Example:

salt '*' file.mknod_chrdev /dev/chr 180 31

file.access

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:

.. code-block::text

f: Test the existence of the path
r: Test the readability of the path
w: Test the writability of the path
x: Test whether the path can be executed

CLI Example:

salt '' file.access /path/to/file f
salt '
' file.access /path/to/file x

file.patch

New in version 0.10.4

Apply a patch to a file or directory.

Equivalent to:

patch -i

Or, when a directory is patched:

patch -i -d -p0

originalfile
The full path to the file or directory to be patched
patchfile
A patch file to apply to originalfile
options
Options to pass to patch.

CLI Example:

salt '*' file.patch /opt/file.txt /tmp/file.txt.patch

file.is_hardlink

Check if the path is a hard link by verifying that the number of links
is larger than 1

CLI Example:

salt '*' file.is_hardlink /path/to/link

file.read

New in version 2017.7.0

Return the content of the file.

CLI Example:

salt '*' file.read /path/to/file

file.grep

Grep for a string in the specified file

Note:
This function's return value is slated for refinement in future
versions of Salt

path
Path to the file to be searched

Note:
Globbing is supported (i.e. /var/log/foo/*.log, but if globbing
is being used then the path should be quoted to keep the shell from
attempting to expand the glob expression.

pattern
Pattern to match. For example: test, or a[0-5]

opts
Additional command-line flags to pass to the grep command. For example:
-v, or -i -B2

Note:
The options should come after a double-dash (as shown in the
examples below) to keep Salt's own argument parser from
interpreting them.

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

file.seek_write

New in version 2014.1.0

Seek to a position on a file and write to it

path
path to file

data
data to write to file

offset
position in file to start writing

CLI Example:

salt '*' file.seek_write /path/to/file 'some data' 4096

file.diskusage

Recursively calculate disk usage of path and return it
in bytes

CLI Example:

salt '*' file.diskusage /path/to/check

file.open_files

Return a list of all physical open files on the system.

CLI Examples:

salt '' file.open_files
salt '
' file.open_files by_pid=True

file.find

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:

[w] [d] [h] [m] [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

file.check_hash

Check if a file matches the given hash string

Returns True if the hash matches, otherwise False.

path
Path to a file local to the minion.

hash
The hash to check against the file specified in the path argument.

Changed in version 2016.11.4

For this and newer versions the hash can be specified without an
accompanying hash type (e.g. e138491e9d5b97023cea823fe17bac22),
but for earlier releases it is necessary to also specify the hash type
in the format <hash_type>=<hash_value> (e.g.
md5=e138491e9d5b97023cea823fe17bac22).

CLI Example:

salt '' file.check_hash /etc/fstab e138491e9d5b97023cea823fe17bac22
salt '
' file.check_hash /etc/fstab md5=e138491e9d5b97023cea823fe17bac22

file.makedirs_perms

Taken and modified from os.makedirs to set user, group and mode for each
directory created.

CLI Example:

salt '*' file.makedirs_perms /opt/code

file.get_selinux_context

Get an SELinux context from a given path

CLI Example:

salt '*' file.get_selinux_context /etc/hosts

file.seek_read

New in version 2014.1.0

Seek to a position on a file and read it

path
path to file

seek
amount to read at once

offset
offset to start into the file

CLI Example:

salt '*' file.seek_read /path/to/file 4096 0

file.comment_line

Comment or Uncomment a line in a text file.

:param path: string
The full path to the text file.

:param regex: string
A regex expression that begins with ^ that will find the line you wish
to comment. Can be as simple as ^color =

:param char: string
The character used to comment a line in the type of file you're referencing.
Default is #

:param cmnt: boolean
True to comment the line. False to uncomment the line. Default is True.

:param backup: string
The file extension to give the backup file. Default is .bak
Set to False/None to not keep a backup.

:return: boolean
Returns True if successful, False if not

CLI Example:

The following example will comment out the pcspkr line in the
/etc/modules file using the default # character and create a backup
file named modules.bak

salt '*' file.comment_line '/etc/modules' '^pcspkr'

CLI Example:

The following example will uncomment the log_level setting in minion
config file if it is set to either warning, info, or debug using
the # character and create a backup file named minion.bk

salt '*' file.comment_line 'C:\salt\conf\minion' '^log_level: (warning|info|debug)' '#' False '.bk'

file.chgrp

Change the group of a file

path
path to the file or directory

group
group owner

CLI Example:

salt '*' file.chgrp /etc/passwd root

file.basename

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' %}

CLI Example:

salt '*' file.basename 'test/test.config'

file.sed

.. deprecated:: 0.17.0
Use :py:func:~salt.modules.file.replace instead.

Make a simple edit to a file

Equivalent to:

sed "// s/// "

path
The full path to the file to be edited
before
A pattern to find in order to replace with after
after
Text that will replace before
limit: ''
An initial pattern to search for before searching for before
backup: .bak
The file will be backed up before edit with this file extension;
WARNING: each time sed/comment/uncomment is called will
overwrite this backup
options: -r -e
Options to pass to sed
flags: g
Flags to modify the sed search; e.g., i for case-insensitive pattern
matching
negate_match: False
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'

file.namedtuple

Returns a new subclass of tuple with named fields.

>>> Point = namedtuple('Point', ['x', 'y'])
>>> Point.doc # docstring for the new class
'Point(x, y)'
>>> p = Point(11, y=22) # instantiate with positional args or keywords
>>> p[0] + p[1] # indexable like a plain tuple
33
>>> x, y = p # unpack like a regular tuple
>>> x, y
(11, 22)
>>> p.x + p.y # fields also accessable by name
33
>>> d = p._asdict() # convert to a dictionary
>>> d['x']
11
>>> Point(**d) # convert from a dictionary
Point(x=11, y=22)
>>> p._replace(x=100) # _replace() is like str.replace() but targets named fields
Point(x=100, y=22)

file.remove_backup

This function is an alias of delete_backup.

New in version 0.17.0

Delete a previous version of a file that was backed up using Salt's
:ref:file state backup <file-state-backups> system.

path
The path on the minion to check for backups
backup_id
The numeric id for the backup you wish to delete, as found using
:mod:file.list_backups <salt.modules.file.list_backups>

CLI Example:

salt '*' file.delete_backup /var/cache/salt/minion/file_backup/home/foo/bar/baz.txt 0

file.list_backups_dir

Lists the previous versions of a directory backed up using Salt's :ref:file state backup <file-state-backups> system.

path
The directory on the minion to check for backups
limit
Limit the number of results to the most recent N backups

CLI Example:

salt '*' file.list_backups_dir /foo/bar/baz/

file.is_link

Check if the path is a symbolic link

CLI Example:

salt '*' file.is_link /path/to/link

file.get_hash

Get the hash sum of a file

This is better than get_sum for the following reasons:
- It does not read the entire file into memory.
- It does not return a string on error. The returned value of
get_sum cannot really be trusted since it is vulnerable to
collisions: get_sum(..., 'xyz') == 'Hash xyz not supported'

path
path to the file or directory

form
desired sum format

chunk_size
amount to sum at once

CLI Example:

salt '*' file.get_hash /etc/shadow

file.stats

Return a dict containing the stats for a given file

CLI Example:

salt '*' file.stats /etc/passwd

file.chown

Chown a file, pass the file the desired user and group

path
path to the file or directory

user
user owner

group
group owner

CLI Example:

salt '*' file.chown /etc/passwd root root

file.check_file_meta

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': }' root, root, '755' base

Note:

Supported hash types include sha512, sha384, sha256, sha224, sha1, and
md5.

name
Path to file destination

sfn
Template-processed source file contents

source
URL to file source

source_sum
File checksum information as a dictionary

{hash_type: md5, hsum: }

user
Destination file user owner

group
Destination file group owner

mode
Destination file permissions mode

attrs
Destination file attributes

New in version 2018.3.0

saltenv
Salt environment used to resolve source files

contents
File contents

file.check_managed_changes

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': }' root, root, '755' jinja True None None base

file.touch

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.

atime:
Access time in Unix epoch time
mtime:
Last modification in Unix epoch time

CLI Example:

salt '*' file.touch /var/log/emptyfile

file.copy

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.

Note:
The copy function accepts paths that are local to the Salt minion.
This function does not support salt://, http://, or the other
additional file paths that are supported by :mod:states.file.managed <salt.states.file.managed> and :mod:states.file.recurse <salt.states.file.recurse>.

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

file.get_source_sum

New in version 2016.11.0

Used by :py:func:file.get_managed <salt.modules.file.get_managed> to
obtain the hash and hash type from the parameters specified below.

file_name
Optional file name being managed, for matching with
:py:func:file.extract_hash <salt.modules.file.extract_hash>.

source
Source file, as used in :py:mod:file <salt.states.file> and other
states. If source_hash refers to a file containing hashes, then
this filename will be used to match a filename in that file. If the
source_hash is a hash expression, then this argument will be
ignored.

source_hash
Hash file/expression, as used in :py:mod:file <salt.states.file> and
other states. If this value refers to a remote URL or absolute path to
a local file, it will be cached and :py:func:file.extract_hash <salt.modules.file.extract_hash> will be used to obtain a hash from
it.

source_hash_name
Specific file name to look for when source_hash refers to a remote
file, used to disambiguate ambiguous matches.

saltenv: base
Salt fileserver environment from which to retrieve the source_hash. This
value will only be used when source_hash refers to a file on the
Salt fileserver (i.e. one beginning with salt://).

CLI Example:

salt '' file.get_source_sum /tmp/foo.tar.gz source=http://mydomain.tld/foo.tar.gz source_hash=499ae16dcae71eeb7c3a30c75ea7a1a6
salt '
' file.get_source_sum /tmp/foo.tar.gz source=http://mydomain.tld/foo.tar.gz source_hash=https://mydomain.tld/hashes.md5
salt '*' file.get_source_sum /tmp/foo.tar.gz source=http://mydomain.tld/foo.tar.gz source_hash=https://mydomain.tld/hashes.md5 source_hash_name=./dir2/foo.tar.gz

file.pardir

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' %}

CLI Example:

salt '*' file.pardir

file.get_devmm

Get major/minor info from a device

CLI Example:

salt '*' file.get_devmm /dev/chr

file.lstat

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

file.rmdir

New in version 2014.1.0

Remove the specified directory. Fails if a directory is not empty.

CLI Example:

salt '*' file.rmdir /tmp/foo/

file.rename

Rename a file or directory

CLI Example:

salt '*' file.rename /path/to/src /path/to/dst

file.get_user

Return the user that owns a given file

path
file or directory of which to get the user

follow_symlinks
indicated if symlinks should be followed

CLI Example:

salt '*' file.get_user /etc/passwd

Changed in version 0.16.4
follow_symlinks option added

file.is_fifo

Check if a file exists and is a FIFO.

CLI Example:

salt '*' file.is_fifo /dev/fifo

file.link

New in version 2014.1.0

Create a hard link to a file

CLI Example:

salt '*' file.link /path/to/file /path/to/link

file.contains_regex

.. deprecated:: 0.17.0
Use :func: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

file.get_diff

Return unified diff of two files

file1
The first file to feed into the diff utility

Changed in version 2018.3.0
Can now be either a local or remote file. In earlier releases,
thuis had to be a file local to the minion.

file2
The second file to feed into the diff utility

Changed in version 2018.3.0
Can now be either a local or remote file. In earlier releases, this
had to be a file on the salt fileserver (i.e.
salt://somefile.txt)

show_filenames: True
Set to False to hide the filenames in the top two lines of the
diff.

show_changes: True
If set to False, and there are differences, then instead of a diff
a simple message stating that show_changes is set to False will be
returned.

template: False
Set to True if two templates are being compared. This is not useful
except for within states, with the obfuscate_templates option set
to True.

New in version 2018.3.0

source_hash_file1
If file1 is an http(s)/ftp URL and the file exists in the minion's
file cache, this option can be passed to keep the minion from
re-downloading the archive if the cached copy matches the specified
hash.

New in version 2018.3.0

source_hash_file2
If file2 is an http(s)/ftp URL and the file exists in the minion's
file cache, this option can be passed to keep the minion from
re-downloading the archive if the cached copy matches the specified
hash.

New in version 2018.3.0

CLI Examples:

salt '' file.get_diff /home/fred/.vimrc salt://users/fred/.vimrc
salt '
' file.get_diff /tmp/foo.txt /tmp/bar.txt

file.user_to_uid

Convert user name to a uid

user
user name to convert to its uid

CLI Example:

salt '*' file.user_to_uid root

file.line

New in version 2015.8.0

Edit a line in the configuration file. The path and content
arguments are required, as well as passing in one of the mode
options.

path
Filesystem path to the file to be edited.

content
Content of the line. Allowed to be empty if mode=delete.

match
Match the target line for an action by
a fragment of a string or regular expression.

If neither before nor after are provided, and match
is also None, match becomes the content value.

mode
Defines how to edit a line. One of the following options is
required:

- ensure
If line does not exist, it will be added. This is based on the
content argument.
- replace
If line already exists, it will be replaced.
- delete
Delete the line, once found.
- insert
Insert a line.

Note:

If mode=insert is used, at least one of the following
options must also be defined: location, before, or
after. If location is used, it takes precedence
over the other two options.

location
Defines where to place content in the line. Note this option is only
used when mode=insert is specified. If a location is passed in, it
takes precedence over both the before and after kwargs. Valid
locations are:

- start
Place the content at the beginning of the file.
- end
Place the content at the end of the file.

before
Regular expression or an exact case-sensitive fragment of the string.
This option is only used when either the ensure or insert mode
is defined.

after
Regular expression or an exact case-sensitive fragment of the string.
This option is only used when either the ensure or insert mode
is defined.

show_changes
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.

backup
Create a backup of the original file with the extension:
"Year-Month-Day-Hour-Minutes-Seconds".

quiet
Do not raise any exceptions. E.g. ignore the fact that the file that is
tried to be edited does not exist and nothing really happened.

indent
Keep indentation with the previous line. This option is not considered when
the delete mode is specified.

CLI Example:

salt '' file.line /etc/nsswitch.conf "networks: files dns" after="hosts:.?" mode='ensure'

Note:

If an equal sign (=) appears in an argument to a Salt command, it is
interpreted as a keyword argument in the format of 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.line /path/to/file content="CREATEMAIL_SPOOL=no" match="CREATE_MAIL_SPOOL=yes" mode="replace"

file.lchown

Chown a file, pass the file the desired user and group without following
symlinks.

path
path to the file or directory

user
user owner

group
group owner

CLI Example:

salt '*' file.chown /etc/passwd root root

file.source_list

Check the source list and return the source to use

CLI Example:

salt '*' file.source_list salt://http/httpd.conf '{hash_type: 'md5', 'hsum': }' base

file.get_gid

Return the id of the group that owns a given file

path
file or directory of which to get the gid

follow_symlinks
indicated if symlinks should be followed

CLI Example:

salt '*' file.get_gid /etc/passwd

Changed in version 0.16.4
follow_symlinks option added

file.remove

Remove the named file. If a directory is supplied, it will be recursively
deleted.

CLI Example:

salt '*' file.remove /tmp/foo

Changed in version 3000
The method now works on all types of file system entries, not just
files, directories and symlinks.

file.readdir

New in version 2014.1.0

Return a list containing the contents of a directory

CLI Example:

salt '*' file.readdir /path/to/dir/

file.psed

.. deprecated:: 0.17.0
Use :py:func:~salt.modules.file.replace instead.

Make a simple edit to a file (pure Python version)

Equivalent to:

sed "// s/// "

path
The full path to the file to be edited
before
A pattern to find in order to replace with after
after
Text that will replace before
limit: ''
An initial pattern to search for before searching for before
backup: .bak
The file will be backed up before edit with this file extension;
WARNING: each time sed/comment/uncomment is called will
overwrite this backup
flags: gMS
Flags to modify the search. Valid values are:
- g: Replace all occurrences of the pattern, not just the first.
- I: Ignore case.
- L: Make \w, \W, \b, \B, \s and \S
dependent on the locale.
- M: Treat multiple lines as a single line.
- S: Make . match all characters, including newlines.
- U: Make \w, \W, \b, \B, \d, \D,
\s and \S dependent on Unicode.
- X: Verbose (whitespace is ignored).
multi: False
If True, treat the entire file as a single line

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'

file.restore_backup

New in version 0.17.0

Restore a previous version of a file that was backed up using Salt's
:ref:file state backup <file-state-backups> system.

path
The path on the minion to check for backups
backup_id
The numeric id for the backup you wish to restore, as found using
:mod:file.list_backups <salt.modules.file.list_backups>

CLI Example:

salt '*' file.restore_backup /foo/bar/baz.txt 0

file.mknod_fifo

New in version 0.17.0

Create a FIFO pipe.

CLI Example:

salt '*' file.mknod_fifo /dev/fifo

file.contains_glob

.. deprecated:: 0.17.0
Use :func:search instead.

Return True if the given glob matches a string in the named file

CLI Example:

salt '' file.contains_glob /etc/foobar 'cheese*'

file.set_mode

Set the mode of a file

path
file or directory of which to set the mode

mode
mode to set the path to

CLI Example:

salt '*' file.set_mode /etc/passwd 0644

file.blockreplace

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.

path
Filesystem path to the file to be edited

marker_start
The line content identifying a line as the start of the content block.
Note that the whole line containing this marker will be considered, so
whitespace or extra content before or after the marker is included in
final output

marker_end
The line content identifying the end of the content block. As of
versions 2017.7.5 and 2018.3.1, everything up to the text matching the
marker will be replaced, so it's important to ensure that your marker
includes the beginning of the text you wish to replace.

content
The content to be used between the two lines identified by marker_start
and marker_stop.

append_if_not_found: False
If markers are not found and set to True then, the markers and
content will be appended to the file.

prepend_if_not_found: False
If markers are not found and set to True then, the markers and
content will be prepended to the file.

backup
The file extension to use for a backup of the file if any edit is made.
Set to False to skip making a backup.

dry_run: False
If True, do not make any edits to the file and simply return the
changes that would be made.

show_changes: True
Controls how changes are presented. If True, this function will
return a unified diff of the changes made. If False, then it will
return a boolean (True if any changes were made, otherwise
False).

append_newline: False
Controls whether or not a newline is appended to the content block. If
the value of this argument is True then a newline will be added to
the content block. If it is False, then a newline will not be
added to the content block. If it is None then a newline will only
be added to the content block if it does not already end in a newline.

New in version 2016.3.4
Changed in version 2017.7.5,2018.3.1
New behavior added when value is None.
Changed in version 2019.2.0
The default value of this argument will change to None to match
the behavior of the :py:func:file.blockreplace state <salt.states.file.blockreplace>

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

posted @ 2020-03-28 20:56  random_lee  阅读(347)  评论(0)    收藏  举报