
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\me              	   @   s   U d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZ dd	lmZ d
ZdddeegeedgdgdZeeeZ ejeZee
eeddddZdS )zERuncmd: run arbitrary commands at rc.local with output to the console    N)dedent)util)Cloud)Config)
MetaSchemaget_meta_doc)ALL_DISTROS)PER_INSTANCEa  Run arbitrary commands at a rc.local like time-frame with output to the
console. Each item can be either a list or a string. The item type affects
how it is executed:


* If the item is a string, it will be interpreted by ``sh``.
* If the item is a list, the items will be executed as if passed to execve(3)
  (with the first arg as the command).

Note that the ``runcmd`` module only writes the script to be run
later. The module that actually runs the script is ``scripts_user``
in the :ref:`Final<boot-Final>` boot stage.

.. note::

    all commands must be proper yaml, so you have to quote any characters
    yaml would eat (':' can be problematic)

.. note::

    when writing files, do not use /tmp dir as it races with
    systemd-tmpfiles-clean LP: #1707222. Use /run/somedir instead.
Z	cc_runcmdZRuncmdzRun arbitrary commandsa          runcmd:
            - [ ls, -l, / ]
            - [ sh, -xc, "echo $(date) ': hello world!'" ]
            - [ sh, -c, echo "=========hello world'=========" ]
            - ls -l /root
            - [ wget, "http://example.org", -O, /tmp/index.html ]
    runcmd)idnametitledescriptionZdistrosZ	frequencyZexamplesZactivate_by_schema_keys)r   cfgcloudargsreturnc             C   s   d|krt jd|  d S tjj|jdd}|d }ytj|}tj||d W n6 t	k
r } zt
|dj||W Y d d }~X nX d S )Nr
   z:Skipping module named %s, no 'runcmd' key in configurationscriptsi  z"Failed to shellify {} into file {})LOGdebugospathjoinZ	get_ipathr   ZshellifyZ
write_file	Exceptiontypeformat)r   r   r   r   Zout_fncmdZcontente r   /usr/lib/python3.6/cc_runcmd.pyhandleQ   s    
r    )__doc__Zloggingr   textwrapr   Z	cloudinitr   Zcloudinit.cloudr   Zcloudinit.configr   Zcloudinit.config.schemar   r   Zcloudinit.distrosr   Zcloudinit.settingsr	   ZMODULE_DESCRIPTIONmetaZ	getLogger__name__r   strlistr    r   r   r   r   <module>	   s,    
