3 cj@sUdZddlZddlmZddlmZmZddlmZddl m Z ddl m Z m Z ddlmZejeZd d d Zd Zd ddedddddddddddddddgeedgd gd!Ze e eZd"d#Zee eedd$d%d&ZdS)'z"Resolv Conf: configure resolv.confN)dedent) templaterutil)Cloud)Config) MetaSchema get_meta_doc) PER_INSTANCEz resolv.confzsystemd.resolved.conf)z/etc/resolv.confz/etc/systemd/resolved.confaUnless manually editing :file:`/etc/resolv.conf` is the correct way to manage nameserver information on your operating system, you do not want to use this module. Many distros have moved away from manually editing ``resolv.conf`` so please verify that this is the preferred nameserver management method for your distro before using this module. Note that using :ref:`network_config` is preferred, rather than using this module, when possible. This module is intended to manage resolv.conf in environments where early configuration of resolv.conf is necessary for further bootstrapping and/or where configuration management such as puppet or chef own DNS configuration. When using a :ref:`datasource_config_drive` and a RHEL-like system, resolv.conf will also be managed automatically due to the available information provided for DNS servers in the :ref:`network_config_v2` format. For those that wish to have different settings, use this module. In order for the ``resolv_conf`` section to be applied, ``manage_resolv_conf`` must be set ``true``. .. note:: For Red Hat with sysconfig, be sure to set PEERDNS=no for all DHCP enabled NICs. Zcc_resolv_confz Resolv ConfzConfigure resolv.confZ almalinuxZalpineZ cloudlinuxZfedoraZmarinerZopensusez opensuse-leapzopensuse-microoszopensuse-tumbleweedZphotonZrhelZsle_hpcz sle-microZslesZ openeulera manage_resolv_conf: true resolv_conf: nameservers: - 8.8.8.8 - 8.8.4.4 searchdomains: - foo.example.com - bar.example.com domain: example.com sortlist: - 10.0.0.1/255 - 10.0.0.2 options: rotate: true timeout: 1 manage_resolv_conf)idnametitle descriptionZdistrosZ frequencyZexamplesZactivate_by_schema_keyscCsg}g}d|krNx<|djD],\}}t|tr|r@|j|q|j|qWx||D]}|d|=qXW|jds|i|d<||d<tjd|tj|||dS)NZoptionsflagsz$Writing resolv.conf from template %s) items isinstanceboolappendgetLOGdebugrZrender_to_file) template_fnparams target_fnamerZ false_flagskeyvalflagr$/usr/lib/python3.6/cc_resolv_conf.pygenerate_resolv_confhs    r)r cfgcloudargsreturnc Csd|krtjd|dStj|dds6tjd|dSd|krLtjddSy|jt|jj}Wnt k rtjddSXt ||d|jjd dS) a[ Handler for resolv.conf @param name: The module name "resolv_conf" from cloud.cfg @param cfg: A nested dict containing the entire cloud config contents. @param cloud: The L{CloudInit} object in use. @param log: Pre-initialized Python logger object to use for logging. @param args: Any module arguments from cloud.cfg r zFSkipping module named %s, no 'manage_resolv_conf' key in configurationNFzGSkipping module named %s, 'manage_resolv_conf' present but set to FalseZ resolv_confz3manage_resolv_conf True but no parameters provided!z0No template found, not rendering resolve configs)rrr) rrrZget_cfg_option_boolZwarningZget_template_filenameRESOLVE_CONFIG_TEMPLATE_MAPZdistroZresolve_conf_fnKeyErrorr)r r r!r"rrrrhandles0    r&)__doc__ZloggingtextwraprZ cloudinitrrZcloudinit.cloudrZcloudinit.configrZcloudinit.config.schemarrZcloudinit.settingsr Z getLogger__name__rr$ZMODULE_DESCRIPTIONmetarstrlistr&rrrr sJ