f UdZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z m Z ddlmZdd lmZd Zd d d eegeedgdgdZe ed<e eZej*eZdede dededdf dZy)zERuncmd: run arbitrary commands at rc.local with output to the consoleN)dedent)util)Cloud)Config) MetaSchema get_meta_doc) ALL_DISTROS) PER_INSTANCEaRun 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 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. cc_runcmdRuncmdzRun 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)idnametitle descriptiondistros frequencyexamplesactivate_by_schema_keysmetarcfgcloudargsreturnc`d|vrtjd|ytjj |j dd}|d} t j|}t j||dy#t$r&}t|dj||d}~wwxYw)Nr z:Skipping module named %s, no 'runcmd' key in configurationscriptsiz"Failed to shellify {} into file {}) LOGdebugospathjoin get_ipathrshellify write_file Exceptiontypeformat)rrrrout_fncmdcontentes > B-!B((B-)__doc__loggingrtextwrapr cloudinitrcloudinit.cloudrcloudinit.configrcloudinit.config.schemarrcloudinit.distrosr cloudinit.settingsr MODULE_DESCRIPTIONr__annotations__ getLogger__name__rstrlistr-r,r?sL !#<)+4   %%}   !)z'j, t g! P P6 P% Pt P Pr>