HEX
Server: LiteSpeed
System: Linux kapuas.iixcp.rumahweb.net 5.14.0-427.42.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Nov 1 14:58:02 EDT 2024 x86_64
User: mirz4654 (1666)
PHP: 8.1.33
Disabled: system,exec,escapeshellarg,escapeshellcmd,passthru,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,popen,pclose,dl,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setsid,posix_setuid,posix_setpgid,ini_alter,show_source,define_syslog_variables,symlink,syslog,openlog,openlog,closelog,ocinumcols,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dll,ftp,myshellexec,socket_bind,mail,posix_getwpuid
Upload Files
File: //usr/lib/python3.9/site-packages/ansible/modules/__pycache__/replace.cpython-39.pyc
a

�)g�,�@s�ddlmZmZmZeZdZdZdZddl	Z	ddl
Z
ddlZddlm
Z
ddlmZmZddlmZd	d
�Zdd�Zd
d�Zedkr�e�dS)�)�absolute_import�division�print_functiona�
---
module: replace
author: Evan Kaufman (@EvanK)
extends_documentation_fragment:
    - action_common_attributes
    - action_common_attributes.files
    - files
    - validate
attributes:
    check_mode:
        support: full
    diff_mode:
        support: full
    platform:
        platforms: posix
    safe_file_operations:
        support: full
    vault:
        support: none
short_description: Replace all instances of a particular string in a
                   file using a back-referenced regular expression
description:
  - This module will replace all instances of a pattern within a file.
  - It is up to the user to maintain idempotence by ensuring that the
    same pattern would never match any replacements made.
version_added: "1.6"
options:
  path:
    description:
      - The file to modify.
      - Before Ansible 2.3 this option was only usable as I(dest), I(destfile) and I(name).
    type: path
    required: true
    aliases: [ dest, destfile, name ]
  regexp:
    description:
      - The regular expression to look for in the contents of the file.
      - Uses Python regular expressions; see
        U(https://docs.python.org/3/library/re.html).
      - Uses MULTILINE mode, which means C(^) and C($) match the beginning
        and end of the file, as well as the beginning and end respectively
        of I(each line) of the file.
      - Does not use DOTALL, which means the C(.) special character matches
        any character I(except newlines). A common mistake is to assume that
        a negated character set like C([^#]) will also not match newlines.
      - In order to exclude newlines, they must be added to the set like C([^#\n]).
      - Note that, as of Ansible 2.0, short form tasks should have any escape
        sequences backslash-escaped in order to prevent them being parsed
        as string literal escapes. See the examples.
    type: str
    required: true
  replace:
    description:
      - The string to replace regexp matches.
      - May contain backreferences that will get expanded with the regexp capture groups if the regexp matches.
      - If not set, matches are removed entirely.
      - Backreferences can be used ambiguously like C(\1), or explicitly like C(\g<1>).
    type: str
  after:
    description:
      - If specified, only content after this match will be replaced/removed.
      - Can be used in combination with C(before).
      - Uses Python regular expressions; see
        U(https://docs.python.org/3/library/re.html).
      - Uses DOTALL, which means the C(.) special character I(can match newlines).
    type: str
    version_added: "2.4"
  before:
    description:
      - If specified, only content before this match will be replaced/removed.
      - Can be used in combination with C(after).
      - Uses Python regular expressions; see
        U(https://docs.python.org/3/library/re.html).
      - Uses DOTALL, which means the C(.) special character I(can match newlines).
    type: str
    version_added: "2.4"
  backup:
    description:
      - Create a backup file including the timestamp information so you can
        get the original file back if you somehow clobbered it incorrectly.
    type: bool
    default: no
  others:
    description:
      - All arguments accepted by the M(ansible.builtin.file) module also work here.
    type: str
  encoding:
    description:
      - The character encoding for reading and writing the file.
    type: str
    default: utf-8
    version_added: "2.4"
notes:
  - As of Ansible 2.3, the I(dest) option has been changed to I(path) as default, but I(dest) still works as well.
  - As of Ansible 2.7.10, the combined use of I(before) and I(after) works properly. If you were relying on the
    previous incorrect behavior, you may be need to adjust your tasks.
    See U(https://github.com/ansible/ansible/issues/31354) for details.
  - Option I(follow) has been removed in Ansible 2.5, because this module modifies the contents of the file so I(follow=no) doesn't make sense.
a�
- name: Replace old hostname with new hostname (requires Ansible >= 2.4)
  ansible.builtin.replace:
    path: /etc/hosts
    regexp: '(\s+)old\.host\.name(\s+.*)?$'
    replace: '\1new.host.name\2'

- name: Replace after the expression till the end of the file (requires Ansible >= 2.4)
  ansible.builtin.replace:
    path: /etc/apache2/sites-available/default.conf
    after: 'NameVirtualHost [*]'
    regexp: '^(.+)$'
    replace: '# \1'

- name: Replace before the expression till the begin of the file (requires Ansible >= 2.4)
  ansible.builtin.replace:
    path: /etc/apache2/sites-available/default.conf
    before: '# live site config'
    regexp: '^(.+)$'
    replace: '# \1'

# Prior to Ansible 2.7.10, using before and after in combination did the opposite of what was intended.
# see https://github.com/ansible/ansible/issues/31354 for details.
- name: Replace between the expressions (requires Ansible >= 2.4)
  ansible.builtin.replace:
    path: /etc/hosts
    after: '<VirtualHost [*]>'
    before: '</VirtualHost>'
    regexp: '^(.+)$'
    replace: '# \1'

- name: Supports common file attributes
  ansible.builtin.replace:
    path: /home/jdoe/.ssh/known_hosts
    regexp: '^old\.host\.name[^\n]*\n'
    owner: jdoe
    group: jdoe
    mode: '0644'

- name: Supports a validate command
  ansible.builtin.replace:
    path: /etc/apache/ports
    regexp: '^(NameVirtualHost|Listen)\s+80\s*$'
    replace: '\1 127.0.0.1:8080'
    validate: '/usr/sbin/apache2ctl -f %s -t'

- name: Short form task (in ansible 2+) necessitates backslash-escaped sequences
  ansible.builtin.replace: path=/etc/hosts regexp='\\b(localhost)(\\d*)\\b' replace='\\1\\2.localdomain\\2 \\1\\2'

- name: Long form task does not
  ansible.builtin.replace:
    path: /etc/hosts
    regexp: '\b(localhost)(\d*)\b'
    replace: '\1\2.localdomain\2 \1\2'

- name: Explicitly specifying positional matched groups in replacement
  ansible.builtin.replace:
    path: /etc/ssh/sshd_config
    regexp: '^(ListenAddress[ ]+)[^\n]+$'
    replace: '\g<1>0.0.0.0'

- name: Explicitly specifying named matched groups
  ansible.builtin.replace:
    path: /etc/ssh/sshd_config
    regexp: '^(?P<dctv>ListenAddress[ ]+)(?P<host>[^\n]+)$'
    replace: '#\g<dctv>\g<host>\n\g<dctv>0.0.0.0'
�#N)�
format_exc)�to_text�to_bytes)�
AnsibleModulecCs�tj|jd�\}}t�|d�}|�|�|��|j�dd�}|}|r�d|vr`|j	d|d�|�
||�\}}	}
|dk}|dkr�|j	d||
fd�|r�|j|||jd	d
�dS)N)�dir�wb�validatez%szvalidate must contain %%s: %s)�msgrz"failed to validate: rc:%s error:%s�
unsafe_writes)r)�tempfileZmkstempZtmpdir�os�fdopen�write�close�params�get�	fail_jsonZrun_commandZatomic_move)�module�contents�pathZtmpfdZtmpfile�frZvalid�rc�out�err�r�;/usr/lib/python3.9/site-packages/ansible/modules/replace.py�
write_changes�s"
�r cCs8|�|j�}|�|d�r0|r$|d7}d}|d7}||fS)NFz and Tz,ownership, perms or SE linux context changed)Zload_file_common_argumentsrZ set_file_attributes_if_different)r�changed�messageZ	file_argsrrr�check_file_attrs�sr#c
Cs�tttddgd�d�tddd�tddd�tdd	�tdd	�td
dd�tdd	�tddd�d
�ddd�}|j}|d}|d}tdd�}t|dddd�|d<t|dddd�|d<t|dddd�|d<t|dddd�|d<tj�|�r�|jdd|d�tj�|��s|jdd|d�n�zBt	|d��"}t|�
�d|d�}Wd�n1�sP0YWnFttf�y�}z(|jd |t|�ft
�d!�WYd}~n
d}~00d}|d�r�|d�r�d"|d|df}n.|d�r�d#|d}n|d�rd$|d}|�rlt�|tj�}	t�|	|�}
|
�rF|
�d%�}|
�d%�|
�d%�g}n$d&||d'<d|d(<|jfi|��n|}t�|dtj�}
t�|
|d|d�}|d)dk�r||dk�r|�r�|d|d�|d||d)d�|d)f}d*|d)}d}|j�r ||||dd+�|d,<nd}d}|�rx|j�sx|d-�rTtj�|��rT|�|�|d.<tj�|�}t|t|d|d/�|�t|||�\|d'<|d(<|jfi|��dS)0NrT)�destZdestfile�name)�type�required�aliases�str)r&r'�)r&�default)r&�boolFzutf-8)r�regexp�replace�after�before�backupr�encoding)Z
argument_specZadd_file_common_argsZsupports_check_moder2r)rr/Zsurrogate_or_strictZpassthru)�errorsZ	nonstringr0r-r.�zPath %s is a directory !)rr
izPath %s does not exist !�rb)r3r2z%Unable to read the contents of %s: %s)r
�	exceptionz%s(?P<subsection>.*?)%sz%s(?P<subsection>.*)z(?P<subsection>.*)%sZ
subsectionz@Pattern for before/after params did not match the given file: %sr
r!�z%s replacements made)Z
before_headerr0Zafter_headerr/�diffr1Zbackup_file)r2)r	�dictrrrr�isdirr�exists�open�read�OSError�IOErrorr�re�compile�DOTALL�search�group�start�endZ	exit_json�	MULTILINE�subnZ_diffZ
check_modeZbackup_local�realpathr rr#)rrrr2Zres_argsrr�e�patternZ
section_re�match�section�indicesZmre�resultr
r!rrr�main�s�



�
�
6�


0�rP�__main__)Z
__future__rrrr&Z
__metaclass__Z
DOCUMENTATIONZEXAMPLESZRETURNrr@r�	tracebackrZansible.module_utils._textrrZansible.module_utils.basicr	r r#rP�__name__rrrr�<module>seD
Z