3 \mec8 @sdUdZddlZddlZddlZddlmZddlmZddlm Z ddl m Z m Z ddl Z ddlmZmZmZmZmZddlmZdd lmZdd lmZmZdd lmZmZmZdd lm Z d Z!dgZ"d&Z#dZ$ddde$ege e de dgdgdZ%e%ee%Zej&e'Z(GdddZ)ee*dddZ+ddZ,e!dddfed d!d"Z-e*eee.dd#d$d%Z/dS)'z+Puppet: Install, configure and start puppetN)suppress)StringIO)dedent)ListUnion)helperssubp temp_utils url_helperutil)Cloud)Config) MetaSchema get_meta_doc) ALL_DISTROSDistroPackageInstallerError) PER_INSTANCEzKhttps://raw.githubusercontent.com/puppetlabs/install-puppet/main/install.shz--test puppet-agentpuppeta>This module handles puppet installation and configuration. If the ``puppet`` key does not exist in global configuration, no action will be taken. If a config entry for ``puppet`` is present, then by default the latest version of puppet will be installed. If the ``puppet`` config key exists in the config archive, this module will attempt to start puppet even if no installation was performed. The module also provides keys for configuring the new puppet 4 paths and installing the puppet package from the puppetlabs repositories: https://docs.puppet.com/puppet/4.2/reference/whered_it_go.html The keys are ``package_name``, ``conf_file``, ``ssl_dir`` and ``csr_attributes_path``. If unset, their values will default to ones that work with puppet 3.x and with distributions that ship modified puppet 4.x that uses the old paths. Z cc_puppetZPuppetz#Install, configure and start puppeta` puppet: install: true version: "7.7.0" install_type: "aio" collection: "puppet7" aio_install_url: 'https://git.io/JBhoQ' cleanup: true conf_file: "/etc/puppet/puppet.conf" ssl_dir: "/var/lib/puppet/ssl" csr_attributes_path: "/etc/puppet/csr_attributes.yaml" exec: true exec_args: ['--test'] conf: agent: server: "puppetserver.example.org" certname: "%i.%f" ca_cert: | -----BEGIN CERTIFICATE----- MIICCTCCAXKgAwIBAgIBATANBgkqhkiG9w0BAQUFADANMQswCQYDVQQDDAJjYTAe Fw0xMDAyMTUxNzI5MjFaFw0xNTAyMTQxNzI5MjFaMA0xCzAJBgNVBAMMAmNhMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu7Q40sm47/E1Pf+r8AYb/V/FWGPgc b014OmNoX7dgCxTDvps/h8Vw555PdAFsW5+QhsGr31IJNI3kSYprFQcYf7A8tNWu 1MASW2CfaEiOEi9F1R3R4Qlz4ix+iNoHiUDTjazw/tZwEdxaQXQVLwgTGRwVa+aA qbutJKi93MILLwIDAQABo3kwdzA4BglghkgBhvhCAQ0EKxYpUHVwcGV0IFJ1Ynkv T3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUwDwYDVR0TAQH/BAUwAwEB/zAd BgNVHQ4EFgQUu4+jHB+GYE5Vxo+ol1OAhevspjAwCwYDVR0PBAQDAgEGMA0GCSqG SIb3DQEBBQUAA4GBAH/rxlUIjwNb3n7TXJcDJ6MMHUlwjr03BDJXKb34Ulndkpaf +GAlzPXWa7bO908M9I8RnPfvtKnteLbvgTK+h+zX1XCty+S2EQWk29i2AdoqOTxb hppiGMp0tT5Havu4aceCXiy2crVcudj3NFciy8X66SoECemW9UYDCb9T5D0d -----END CERTIFICATE----- csr_attributes: custom_attributes: 1.2.840.113549.1.9.7: 342thbjkt82094y0uthhor289jnqthpc2290 extension_requests: pp_uuid: ED803750-E3C7-44F5-BB08-41A04433FE2E pp_image_name: my_ami_image pp_preshared_key: 342thbjkt82094y0uthhor289jnqthpc2290 z puppet: install_type: "packages" package_name: "puppet" exec: false )idnametitle descriptionZdistrosZ frequencyZexamplesZactivate_by_schema_keysc@seZdZddZdS)PuppetConstantscCs8||_||_tjj|d|_tjj|jd|_||_dS)NZcertszca.pem) conf_pathssl_dirospathjoin ssl_cert_dir ssl_cert_pathcsr_attributes_path)selfZpuppet_conf_fileZpuppet_ssl_dirr"r$/usr/lib/python3.6/cc_puppet.py__init__ts zPuppetConstants.__init__N)__name__ __module__ __qualname__r&r$r$r$r%rssr)cloudactionc Csdd}xBtD]:}y|jj||d|}PWq tjk rBYq Xq W|s`tjd|djtdS)z8Attempts to perform action on one of the puppet servicesz.servicez0Could not '%s' any of the following services: %sz, N)PUPPET_PACKAGE_NAMESdistroZmanage_servicerZProcessExecutionErrorLOGwarningr)r*r+Zservice_managed puppet_namer$r$r%_manage_puppet_servicess  r2cCstj|dd|g\}}|jS)zGet the config value for a given setting using `puppet config print` :param puppet_bin: path to puppet binary :param setting: setting to query configprint)rrstrip) puppet_binZsettingout_r$r$r%get_config_valuesr9T)r.c Csg}|dk rd|g}|dk r(|d|g7}|r6|dg7}tj|ddj}tj|jdd4}tjj|d }t j ||d d t j |g|d d SQRXdS)aInstall puppet-agent from the puppetlabs repositories using the one-shot shell script :param distro: Instance of Distro :param url: URL from where to download the install script :param version: version to install, blank defaults to latest :param collection: collection to install, blank defaults to latest :param cleanup: whether to purge the puppetlabs repo after installation Nz-vz-cz --cleanup)urlZretriesT)dirZ needs_exezpuppet-installi)modeF)capture) r Zreadurlcontentsr ZtempdirZget_tmp_exec_pathrrrr write_filer) r.r;version collectioncleanupargsZcontentZtmpdZtmpfr$r$r%install_puppet_aios  rE)rcfgr*rDreturnc Cs8d|krtjd|dS|d}tj|dd}tj|dd}tj|dd}tj|dd}tj|d d} tj|d d d } tj|d dd } tj|dtd } |dkrd} d}d}n d} d}d}tj|d|}| r|rtjdn|rtjd|r|nd||dkr|dkrrxJtD]B}tt .|r0||ggn|g}|j j ||}PWdQRXqW|stjddj tn"|r||ggn|g}|j j |n.|dkrt |j | ||| ntjd|d } tj|dt|d}tj|dt|d}tj|dt|d}t|||}d |krXtj|j}tj}d!d"|jD}d#j |}|jt||jd$x|d jD]\}}|d%krtj|jd&tj|j| dtj|jtj|j| dtj|j|tj|j| dnXxV|jD]J\}}|d'kr|jd(tj }|jd)|j!}|j"}|j#|||qWtj$|jd*|jtj|j|j%qhWd|kr~tj|j&t'j(|dd d+| rt)|d,| r$tjd-|d.g}d/|kr |d/}t*|t+t,fr|j-|n6t*|t.r|j-|j/ntjd0t0||j-t1n |j-t1t2j2|d d1| r4t)|d2dS)3Nrz9Skipping module named %s, no 'puppet' configuration foundinstallTrArB install_typeZpackagesrCexecF)defaultZ start_serviceaio_install_urlZaiorootz/opt/puppetlabs/bin/puppetz puppet-agent package_namez@Puppet install set to false but version supplied, doing nothing.z'Attempting to install puppet %s from %sZlatestz+No installable puppet package in any of: %sz, z Unknown puppet install type '%s' conf_filer3rZssldirr"Zcsr_attributesZconfcSsg|] }|jqSr$)lstrip).0ir$r$r% (szhandle.. )sourceZca_certiZcertnamez%fz%iz%s.old)Zdefault_flow_styleenablezRunning puppet-agentZagentZ exec_argszOUnknown type %s provided for puppet 'exec_args' expected list, tuple, or string)r>start)3r/debugr Zget_cfg_option_boolZget_cfg_option_strAIO_INSTALL_URLr0r-rrr.Zinstall_packagesrrEr9rZ load_filerrZDefaultingConfigParser splitlinesZ read_fileritemsZ ensure_dirrZ chownbynamer r@r!replacesocketZgetfqdnZget_instance_idlowersetrenameZ stringifyr"yamldumpr2 isinstancelisttupleextendstrsplittypePUPPET_AGENT_DEFAULT_ARGSr) rrFr*rDZ puppet_cfgrHrArBrIrCZrunZ start_puppetdrLZ puppet_userr6Zpuppet_packagerNr1Z to_installrOrr"Z p_constantsr?Z puppet_configZ cleaned_linesZcleaned_contentsZcfg_nameovcmdZcmd_argsr$r$r%handles                              rn)rr)0__doc__Zloggingrr] contextlibriortextwraprZtypingrrraZ cloudinitrrr r r Zcloudinit.cloudr Zcloudinit.configr Zcloudinit.config.schemarrZcloudinit.distrosrrrZcloudinit.settingsrrYrjr-ZMODULE_DESCRIPTIONmetaZ getLoggerr'r/rrgr2r9rErdrnr$r$r$r% sN      '