3 =\x<@sTddlZddlZddlZddlZddlmZddlmZejdZ GdddZ dS)N)PrintMsg)TaskCatExceptionZtaskcatc@seZdZejdejZejdejZejdejZejdejZ ejdejZ ejdejZ ejdejZ ejdejZ ejd ejZejd ejZejd ejZejd ejZejd ejZejdejZejdejZejdejZd9ddZddZeddZddZddZddZd:dd Zd!d"Zed#d$Zed%d&Z d'd(Z!d)d*Z"d+d,Z#d-d.Z$d/d0Z%d1d2Z&d3d4Z'd5d6Z(d7d8Z)dS);ParamGenz(?<=._url_)(.+)(?=]$)z(?!\w+_)\d{1,2}z(?<=_genpass_)((\d+)(\w)(\]))z!\$\[\w+_genpass?(\w)_\d{1,2}\w?]$z\$\[taskcat_random-string]z\$\[taskcat_random-numbers]z\$\[taskcat_autobucket]z\$\[\w+_ge[nt]az_\d]z&\$\[\w+_ge[nt]singleaz_(?P\d+)]z\$\[\w+_gen[gu]uid]z\$\[\w+_getkeypair]z\$\[\w+_getlicensebucket]z\$\[\w+_getmediabucket]z\$\[\w+_getlicensecontent].*$z%\$\[\w+_presignedurl],(.*?,){1,2}.*?$z(?<=._getval_)(\w+)(?=]$)FcCsB||_g|_i|_d|_d|_||_||_||_||_|j dS)N) _param_listresultsmutated_params param_name param_valueverbose bucket_name _boto_clientregiontransform_parameter)selfZ param_listr r Z boto_clientr rp/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-install-emcbgzcf/taskcat/taskcat/template_params.py__init__#szParamGen.__init__cCsx |jD]}|d|_|d|_|j|j|j|jd|j|j|jd|j|j |j |j |j |j |j|j|j|j|j|j|j|jd|j|jd|j|jd|j|j|j|j|j|j|j|j|j|jj|j|jdq WdS)N ParameterKeyParameterValueZcikeyZ override_this)rr)rrr convert_to_str_regex_replace_param_value RE_GENNUMB _gen_rand_num RE_GENRANDSTR _gen_rand_strRE_GENAUTOBUCKET_gen_autobucket_gen_password_wrapperRE_GENPW RE_PWTYPERE_COUNT_gen_az_wrapperRE_GENAZ_gen_single_az_wrapperRE_GENAZ_SINGLE RE_QSKEYPAIRRE_QSLICBUCKETRE_QSMEDIABUCKET_get_license_content_wrapperRE_GETLICCONTENTRE_GETPRESIGNEDURL_getval_wrapper RE_GETVAL RE_GENUUID _gen_uuidrappend)rprrrr/s$      zParamGen.transform_parametercCs&|j|}|rt|jStdSdS)z Returns the matching string. :param re_object: Regex object :param data_line: String to be searched :return: Matching String if found, otherwise return 'Not-found' z Not-foundN)searchstrgroup)Z re_objectZ data_lineZsgrrrregxfindes  zParamGen.regxfindcCs|jjd|jd}g}|jddgdgd}x|dD]}|j|dq6Wt||krxtd jtj t||jt nd j |d |}|Sd S) a Returns a list of availability zones in a given region. :param region: Region for the availability zones :param count: Minimum number of availability zones needed :return: List of availability zones in a given region Zec2)r state available)NameValues)ZFiltersZAvailabilityZonesZZoneNamez&{0}!Only {1} az's are available in {2},N) r getr Zdescribe_availability_zonesr0lenprintformatrERRORrjoin)rcountZ ec2_clientZ available_azsZavailability_zonesazZazsrrrget_available_azsus  zParamGen.get_available_azscCs|j|}|jddS)a\ Get a single valid AZ for the region. The number passed indicates the ordinal representing the AZ returned. For instance, in the 'us-east-1' region, providing '1' as the ID would return 'us-east-1a', providing '2' would return 'us-east-1b', etc. In this way it's possible to get availability zones that are guaranteed to be different without knowing their names. :param region: Region of the availability zone :param az_id: 0-based ordinal of the AZ to get :return: The requested availability zone of the specified region. r:)rCsplit)raz_idZ regional_azsrrr get_single_azs zParamGen.get_single_azc Cs|jjd|jdd}y|j||d}Wn>tk r<Yn*tk rdtdjtj ||YnX|dj j dj }|S)a  Returns the content of an object, given the bucket name and the key of the object :param bucket: Bucket name :param object_key: Key of the object :param object_key: Key of the object :return: Content of the object s3T)r s3v4)BucketKeyz){} Attempted to fetch Bucket: {}, Key: {}ZBodyzutf-8) r r;r get_objectr Exceptionr=r>rr?readdecodestrip)rZbucketZ object_key s3_clientZ dict_objectcontentrrr get_contents zParamGen.get_contentNcCs|jr(ttjdttjdj|g}d}d}d}d}|dkrttjdjd x@t||kr|jtj||jtj||jtj|qZWn|d krttjdjd xt||kr |jtj||jtj||jtj||jtj|qWnZttjd jd xDt||krh|jtj||jtj||jtj|q&Wt||kr|d |}dj |S)a7 Returns a password of given length and type. :param pass_length: Length of the desired password :param pass_type: Type of the desired password - String only OR Alphanumeric * A = AlphaNumeric, Example 'vGceIP8EHC' :return: Password of given length and type zAuto generating passwordzPass size => {0} 1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZz!#$&{*:[=,]-_%@+AzPass type => {0}z alpha-numericS specialcharszPass type => default {0}N) r r=rDEBUGr>r<r0randomchoicer@)rZ pass_lengthZ pass_typepasswordnumbers lowercaseZ uppercaserZrrr genpasswords:   zParamGen.genpasswordcCsHt|jtkst|jtkrD|jr8ttjdj|j t |j|_dS)zu Converts a parameter value to string No parameters. Operates on (ClassInstance).param_value z4Converting Parameter {} from integer/bytes to stringN) typer intbytesr r=rINFOr>rr3)rrrrrszParamGen.convert_to_strcCsHg}d}ttjdj|x t||kr<|jtj|qWdj|S)NrVz'Generating a {}-character random stringr[) r=rr\r>r<r0r]r^r@)lengthZrandom_string_listrarrrrs zParamGen._gen_rand_strcCsHg}d}ttjdj|x t||kr<|jtj|qWdj|S)NrUz2Generating a {}-character random string of numbersr[) r=rr\r>r<r0r]r^r@)rgZrandom_number_listr`rrrrs zParamGen._gen_rand_numcCs ttjS)N)r3uuidZuuid1)rrrrr/szParamGen._gen_uuidcCs|jS)N)r )rrrrrszParamGen._gen_autobucketcCs|j|jrt|j||j}|j||j}|d}|d krF|j}nd}|sRd}|r|jrptdjtj |j|j ||}|j ||dS) NarXsrYDz{}AutoGen values for {})rjrXrkrY) r2r rdr5upperr r=r>rr\rbr)rZ gen_regexZ type_regex count_regexZpasslenZgentyper rrrr s"   zParamGen._gen_password_wrappercCs|j|jrt|j||j}|r\|jrHttjdttjd||j||j |nrr\rrecompile)rZlicense_content_regexZ license_strZlicense_bucketZ licensekeyr rrrr)?s  z%ParamGen._get_license_content_wrappercCs|j|jrt|jdkr:ttjdttjdt|j||jjddd}|dd\}}t|dkr||d}nd}|j rtdj tj ||||j j d |jd d }|jd ||d t|d}|jtjd||jtjd|dS)NrizJSyntax error when using $[taskcat_getpresignedurl]; Not enough parameters.z;Syntax: $[taskcat_presignedurl],bucket,key,OPTIONAL_TIMEOUTr:rDiz?{}Generating a presigned URL for {}/{} with a {} second timeoutrIT)r rJrM)rKrL)ZParamsZ ExpiresInz^.*$)r2r r<r=rr?rr5rFr r>r\r r;Zget_default_regionZgenerate_presigned_urlrdrrrrs)rZpresigned_url_regexZ paramsplitZ url_bucketZurl_keyZurl_expire_secondsrRr rrr_get_presigned_url_wrapperIs(      z#ParamGen._get_presigned_url_wrappercCsH|j|jrD|j||j}ttjd||jtjd|j |dS)Nz&Getting previously assigned value for z^.*$) r2r r5r=rr\rrrrsr)rZ getval_regexZ requested_keyrrrr,`s zParamGen._getval_wrappercCs6|j||jr2tj|t||j|_|j|j|j<dS)N)r5r rrsubr3rr)rZ regex_patternZ func_outputrrrrfsz#ParamGen._regex_replace_param_value)F)N)*__name__ __module__ __qualname__rrrs IGNORECASEZ RE_GETURLr!r rrrrr#r%r.r&r'r(r*r+r-rr staticmethodr5rCrHrTrbrrrr/rrr"r$r)rur,rrrrrr sT        6  6  r) rrr]rhloggingZtaskcat.colored_consolerZtaskcat.exceptionsr getLoggerloggerrrrrrs