Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
dmapi / usr / lib / python2.7 / dist-packages / dmapi / cmd / manage.pyc
Size: Mime:
ó
À_c@sdZddlmZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlm
ZddlmZddlZddlmZddlmZdd	lmZddlZddlZddljjjZdd
lm Z!ddl"m#Z#ddl$m%Z&ddl'Z(dd
l(m)Z)ddl(m*Z*ddl(m+Z+ddl,m-Z-ddl.m/Z0ddl(m
Z
ddl1m2Z2ddl(m3Z3ddl4m5Z6ddl4m7Z8ddl4m9Z:ddl4m;Z<ddl4m=Z>ddl4m?Z@ddl4mAZBddl4mCZDddl4mEZEddl(mFZFddl(mGZGddl(mHZHdd l(mIZIdd!lJmKZKe(jLjMZMeFjNZNd"d#d$gZOe&jPZPe&jQZQd%„ZRd&„ZSd'„ZTd(eUfd)„ƒYZVejd*„ƒZWd+eUfd,„ƒYZXd-eUfd.„ƒYZYd/eUfd0„ƒYZZd1eUfd2„ƒYZ[d3eUfd4„ƒYZ\ieZd56e[d66e\d76eYd86eVd96eXd:6Z]ej^e&j_d;e]ƒZ_ej`d<d=d>d?d@dAe_ƒZaejbdBdCecd?dDƒZddE„ZedS(Fs&
  CLI interface for nova management.
iÿÿÿÿ(tprint_functionN(tcfg(t	exception(tlog(tencodeutils(timportutils(t	uuidutils(turl(tec2utils(tcommon(tconfig(tcontext(tdb(t	migration(tapi(t_(tobjects(t	aggregate(tblock_device(t
build_request(thost_mapping(tinstance(tinstance_group(tkeypair(tquotas(trequest_spec(tquota(trpc(tutils(tversion(tironicsoslo_concurrency=INFOsoslo_db=INFOsoslo_policy=INFOcCs!d|krtj|ƒS|SdS(sHelper function to convert various volume id types to internal id.
    args: [object_id], e.g. 'vol-0000000a' or 'volume-0000000a' or '10'
    t-N(Rtec2_vol_id_to_uuid(t	object_id((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytparam2idHs
cCsatj|ƒ}tjdd|jƒ}tj|j||j|j|j|j	ƒ}tj
|ƒS(Ns:.*@s:****@(turlparsetretsubtnetloctParseResulttschemetpathtparamstquerytfragmentt
urlunparse(Rtparsedtsafe_netloct
new_parsed((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytmask_passwd_in_urlRs	cCs+t|ƒttdƒƒtjdƒdS(Ns’The above error may show that the database has not been created.
Please create a database using 'nova-manage db sync' before running this command.i(tprintRtsystexit(tcaught_exception((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt	_db_error\s
tFloatingIpCommandscBs¿eZdZdZed„ƒZedddddƒeddd	dd
ƒeddddd
ƒddd„ƒƒƒZedddddƒd„ƒZ	edddddƒdd„ƒZ
RS(sClass for managing floating IP.s¦DEPRECATED: Floating IP commands are deprecated since nova-network is deprecated in favor of Neutron. The floating IP commands will be removed in an upcoming release.cCs³ytj|ƒgSWn˜tk
r®tj|ƒ}|jdkrjtdƒ|j}tjd|ƒ‚q¯|jdkr¡tdƒ|j}tjd|ƒ‚q¯|j	ƒSnXdS(s¯Iterate over hosts within an address range.

        If an explicit range specifier is missing, the parameter is
        interpreted as a specific individual address.
        is@/%s should be specified as single address(es) not in cidr formattreasoni@Bs]Too many IP addresses will be generated.  Please increase /%s to reduce the number generated.N(
tnetaddrt	IPAddresst
ValueErrort	IPNetworktsizeRt	prefixlenRtInvalidInputt
iter_hosts(t	addressestnetR8((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytaddress_to_hostsms
	
	
s
--ip_rangetmetavars<range>thelpsIP ranges--pools<pool>s
Optional pools--interfaces<interface>sOptional interfacecCs³tjƒ}|stj}n|s0tj}ng|j|ƒD]'}it|ƒd6|d6|d6^q@}ytj||dt	ƒWn%t
jk
r®}td|ƒdSXdS(s'Creates floating IPs for zone by range.taddresstpoolt	interfacetwant_results	error: %siN(
Rtget_admin_contexttCONFtdefault_floating_pooltpublic_interfaceRCtstrRtfloating_ip_bulk_createtFalseRtFloatingIpExistsR2(tselftip_rangeRGRHt
admin_contextRFtipstexc((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytcreate‡s:cCs9tjƒ}d„|j|ƒDƒ}tj||ƒdS(sDeletes floating IPs by range.css"|]}it|ƒd6VqdS(RFN(RN(t.0RF((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pys	<genexpr>¢sN(RRJRCRtfloating_ip_bulk_destroy(RRRSRTRU((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytdeletess--hosts<host>tHostc	CsÝtjƒ}y4|dkr-tj|ƒ}ntj||ƒ}Wn%tjk
rgtt	dƒƒdSXxn|D]f}d}|dr¨tj
||dƒ}|d}ntd|d|d||d|d	fƒqoWdS(
s|Lists all floating IPs (optionally by host).

        Note: if host is given, only active floating IPs are returned
        s+No floating IP addresses have been defined.Ntfixed_ip_idt
instance_uuids%s	%s	%s	%s	%st
project_idRFRGRH(RRJtNoneRtfloating_ip_get_alltfloating_ip_get_all_by_hostRtNoFloatingIpsDefinedR2Rtfixed_ip_get(RRthosttctxttfloating_ipstfloating_ipR]tfixed_ip((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytlist¦s$



N(t__name__t
__module__t__doc__tdescriptiontstaticmethodRCtargsR_RWRZRi(((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyR7ds!	cOs-tjƒr ttdƒƒdS|||ŽS(s)Decorator to validate the network plugin.shERROR: Network commands are not supported when using the Neutron API.  Use python-neutronclient instead.i(Rt
is_neutronR2R(tfRotkwargs((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytvalidate_network_pluginÂstNetworkCommandsc(Bs#eZdZdZeedddddƒeddd	dd
ddƒeddd
ddƒeddd
ddƒedddddƒedddddddƒedddddƒedddddƒedddƒed dd!ƒed"dd#dd$ƒed%dd&dd'ƒed(dd)dd*ƒed+dd,dd-ƒed.dd,dd/ƒed0dd1dd2ƒed3dd
dd4ƒed5dd6dd7ƒed8dd
dd9ƒdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRd:„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒZed;„ƒZeed<dd
dd=ƒed0dd>dd?ƒdRdRd@„ƒƒƒZ	eed<dd
ddAƒedBddCddDƒedEddFddGƒedHdIdJddKdLe
ddMƒedNdIdJddOdLe
ddPƒdRdRdRdRdQ„ƒƒƒƒƒƒZRS(SsClass for managing networks.sžDEPRECATED: Network commands are deprecated since nova-network is deprecated in favor of Neutron. The network commands will be removed in an upcoming release.s--labelRDs<label>REsLabel for network (ex: public)s--fixed_range_v4tdesttcidrs<x.x.x.x/yy>sIPv4 subnet (ex: 10.0.0.0/8)s--num_networkss<number>sNumber of networks to creates--network_sizesNumber of IPs per networks--vlans	<vlan id>svlan ids--vlan_startt
vlan_starts<vlan start id>s
vlan start ids--vpnt	vpn_starts	vpn starts--fixed_range_v6tcidr_v6sIPv6 subnet (ex: fe80::/64s	--gatewaytgateways--gateway_v6sipv6 gateways--bridges<bridge>s1VIFs on this network are connected to this bridges--bridge_interfaces<bridge interface>s)the bridge is connected to this interfaces--multi_hosts	<'T'|'F'>s
Multi hosts--dns1s
<DNS Address>s	First DNSs--dns2s
Second DNSs--uuids<network uuid>sNetwork UUIDs--fixed_cidrs,IPv4 subnet for fixed IPs (ex: 10.20.0.0/16)s--project_ids<project id>s
Project ids
--prioritysNetwork interface prioritycCsÇ|stjddƒ‚nt|ƒdkr<tjƒ‚n|pE|	s]tjddƒ‚nd„ttƒjƒƒDƒ}|dk	r›|dk|d<ntj	t
jƒ}|jt
jƒ|dS(	s$Creates fixed IPs for host by range.treqtlabeliÿscidr or cidr_v6cSs1i|]'\}}|r|dkr||“qS(RR((RXtktv((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pys
<dictcomp>s		tTt
multi_hostN(RtNetworkNotCreatedtlentLabelTooLongRitlocalstitemsR_Rt
import_objectRKtnetwork_managertcreate_networksRRJ(RRR|Rvtnum_networkstnetwork_sizeR€tvlanRwRxRyRzt
gateway_v6tbridgetbridge_interfacetdns1tdns2R^tprioritytuuidt
fixed_cidrRrtnet_manager((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRWÔs(cCsþd}t|tdƒtdƒtdƒtdƒtdƒtdƒtdƒtd	ƒtd
ƒf	ƒytjtjƒƒ}Wn$tjk
r¤ttdƒƒnVXxR|D]J}t||j|j	|j
|j|j|j
|j|j|jf	ƒq¬WdS(
sList all created networks.s4%-5s	%-18s	%-15s	%-15s	%-15s	%-15s	%-15s	%-15s	%-15stidtIPv4tIPv6s
start addresstDNS1tDNS2tVlanIDtprojectR’sNo networks foundN(R2RRtnetwork_get_allRRJRtNoNetworksFoundR•RvRyt
dhcp_startRRR‹R^R’(RRt_fmttnetworkstnetwork((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRi
s0							
s
--fixed_rangesNetwork to deletes<uuid>sUUID of network to deletecCsª|dkr-|dkr-ttdƒƒ‚ntjtjƒ}dtjkr|dkrottdƒƒ‚n|rttdƒƒ‚qn|jtj	ƒ||ƒdS(sDeletes a network.s)Please specify either fixed_range or uuidtNeutronManagers+UUID is required to delete Neutron Networkss@Deleting by fixed_range is not supported with the NeutronManagerN(
R_t	ExceptionRRR†RKR‡tdelete_networkRRJ(RRtfixed_rangeR’R”((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRZ*ssNetwork to modifys	--projects<project name>sProject name to associates--hosts<host>sHost to associates--disassociate-projecttactiont
store_truetdis_projecttdefaults!Disassociate Network from Projects--disassociate-hosttdis_hostsDisassociate Host from Projectc
CsÒtjƒ}tj||ƒ}i}|r7d|d<n|rJd|d<n|sV|r‘|sb|rvd}	t|	ƒdStj||d|ƒdS|r¤||d<n|r·||d<ntj||d|ƒdS(s“Associate/Disassociate Network with Project and/or Host
        arguments: network project host
        leave any field blank to ignore it
        R^RdsCERROR: Unexpected arguments provided. Please use separate commands.iR•N(RRJRtnetwork_get_by_cidrR_R2tnetwork_update(
RRR¥R›RdR¨RªRTR¡RBt	error_msg((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytmodify>s&




N(RjRkRlRmRsRoR_RWRiRZRPR®(((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRtÌsl			K t
DbCommandsc
BsueZdZejejejej	e
jej
ejejejejejjejfZd„Zeddd„ƒZeddddej ƒed	d
dddƒed
ddddddƒd;e"d;d„ƒƒƒZ#d„Z$edde%ddddddƒedd
dddde"ddƒedd
dddde"dd ƒd!e"e"d"„ƒƒƒZ&ed#d
ddd$dd%ƒe"d&„ƒZ'd'„Z(ed(dddd)dd*ƒd;d+„ƒZ)ed,dd-d.e*dd/ƒed0dd1d.e"dd2ƒed3dd4d.e"dd5ƒed6d
dde"dd7dd8ƒedd
dde"dd9ƒd;d;e"e"d:„ƒƒƒƒƒZ+RS(<s%Class for managing the main database.cCsdS(N((RR((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt__init__“stPropertytValuec	Cs)tj||gƒ}d|_xÀt|jƒƒD]¬\}}t|tƒr^tj|ƒ}n|rÊt|tj	ƒrÊd|krÊ|j
ƒjdƒ}|}x=|D]}|j||gƒd}q¤Wq1|j||gƒq1Wtj
rttj|jƒƒƒnttj|jƒƒjƒƒdS(sPrint a `dict` as a table of two columns.

        :param dct: `dict` to print
        :param dict_property: name of the first column
        :param wrap: wrapping for the second column
        :param dict_value: header label for the value (second) column
        tls\ntN(tprettytabletPrettyTabletaligntsortedR…t
isinstancetdicttsixt	text_typetstring_typeststriptsplittadd_rowtPY2R2Rtsafe_encodet
get_stringtdecode(	tdctt
dict_propertyt
dict_valuetptR}R~tlinestcol1tline((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt_print_dict–s		$

	s	--versionRDs	<version>REs--local_cellR¦R§sEOnly sync db in the local cell: do not attempt to fan-outto all cellstversion2tVERSIONtnargst?sDatabase versioncCsë|r&|r&ttdƒƒ|}n|sÞtjƒ}yMtjj|tjjƒ}tj||ƒ}t	j
|d|ƒWdQXWqÞtjk
r«ttdƒƒqÞt
k
rÚ}ttdƒtj|ƒƒqÞXnt	j
|ƒS(s0Sync the database up to the most recent version.sªDEPRECATED: The '--version' parameter was deprecated in the Pike cycle and will not be supported in future versions of nova. Use the 'VERSION' positional argument insteadRNs5WARNING: cell0 mapping not found - not syncing cell0.s-ERROR: Could not access cell0.
Has the nova_api database been created?
Has the nova_cell0 database been created?
Has "nova-manage api_db sync" been run?
Has "nova-manage cell_v2 map_cell0" been run?
Is [api_database]/connection set in nova.conf?
Is the cell0 database connection URL correct?
Error: %s(R2RRtRequestContextRtCellMappingtget_by_uuidt
CELL0_UUIDttarget_cellR
tdb_syncRtCellMappingNotFoundR£R»R¼(RRRt
local_cellRÍRetcell_mappingtcctxtte((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytsyncµs 
	cCsttjƒƒdS(s#Print the current database version.N(R2R
t
db_version(RR((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRÚss
--max_rowsttypes<number>Rutmax_rowss<Maximum number of deleted rows to archive. Defaults to 1000.s	--verbosetverboseR©s,Print how many rows were archived per table.s--until-completetuntil_completesfRun continuously until all deleted rows are archived. Use max_rows as a batch size for each iteration.iècCs’t|ƒ}|dkr,ttdƒƒdS|tjkr]ttdƒitjd6ƒdStjƒ}ytjj	|ƒWn%t
jk
r¤ttdƒƒdSXi}g}|rÚ|rÚtj
jtdƒd	ƒnxatr=ytj|ƒ\}}Wn;tk
r9i}|r:|r:td
tdƒƒPq:nXx@t|jƒƒD],\}}	|j|dƒ||c|	7<qMW|rð|jddƒ|jd
dƒtjj||ƒ}
|dc|
7<tjj||ƒ}|d
c|7<n|súPn'|s!|rtd
tdƒƒnPn|rÝtj
jd
ƒqÝqÝW|r‚|ro|j|tdƒdtdƒƒq‚ttdƒƒntt|ƒƒS(sUMove deleted rows from production tables to shadow tables.

        Returns 0 if nothing was archived, 1 if some number of rows were
        archived, 2 if max_rows is invalid, 3 if no connection could be
        established to the API DB. If automating, this should be
        run continuously while the result is 1, stopping at 0.
        is)Must supply a positive value for max_rowsis!max rows must be <= %(max_value)dt	max_values®Failed to connect to API DB so aborting this archival attempt. Please check your config file to make sure that CONF.api_database.connection is set and run this command again.it	Archivings..t.tstoppedtinstance_mappingst
request_specstcompletetTableRÇsNumber of Rows ArchivedsNothing was archived.(tintR2RRtMAX_INTRRJRtCellMappingListtget_alltdb_exctCantStartEngineErrorR3tstdouttwritetTruetarchive_deleted_rowstKeyboardInterruptRiR…t
setdefaulttInstanceMappingListtdestroy_bulktRequestSpecRÌtbool(RRRßRàRáRettable_to_rows_archivedtdeleted_instance_uuidstrunR}R~tdeleted_mappingst
deleted_specs((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRóÞsh	
		s--deleteRZsQIf specified, automatically delete any records found where instance_uuid is NULL.cCs±tj|ƒ}t}x|t|jƒƒD]h\}}|r(t}|rkttdƒi|d6|d6ƒqttdƒi|d6|d6ƒq(q(W|s­ttdƒƒndS(s[Lists and optionally deletes database records where
        instance_uuid is NULL.
        s8Deleted %(records)d records from table '%(table_name)s'.trecordst
table_namesÈThere are %(records)d records in the '%(table_name)s' table where the uuid or instance_uuid column is NULL. Run this command again with the --delete option after you have backed up any necessary data.s9There were no records found where instance_uuid was NULL.N(R
tdb_null_instance_uuid_scanRPRiR…RòR2R(RRRZthitst
records_foundRRÿ((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytnull_instance_uuid_scan.sc
Csd}i}x|jD]}||}y|||ƒ\}}Wn8tk
ryttdƒtd|ƒƒd}}nX|j}	|rµttdƒi|d6|	d6|d6ƒn|j|	d	ƒ||	d|||	d|f||	<|dk	r||7}||krPqqqW|S(
Nis"Error attempting to run %(method)stmethods8%(total)i rows matched query %(meth)s, %(done)i migratedttotaltmethtdonei(ii(tonline_migrationsR£R2RRºRjRõR_(
RRRet	max_counttrant
migrationstmigration_methtcounttfoundRtname((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt_run_migrationKs0

	

s--max-countR
s%Maximum number of objects to considercCs™tjƒ}|dk	rkyt|ƒ}Wntk
rAd}nXt}|dkr‹ttdƒƒdSn t}d}ttdƒ|ƒd}i}xv|dks²|dkr|j	||ƒ}|j
|ƒtgt|j
ƒƒD]\}}|^qçƒ}|sšPqšqšWtjtdƒtd	ƒtd
ƒgƒ}	xBt|jƒƒD].}
||
}|	j|
|d|dgƒqMWt|	ƒ|r•dp˜dS(Niÿÿÿÿis+Must supply a positive value for max_numberii2s$Running batches of %i until completeit	MigrationsTotal Neededt	Completed(RRJR_RêR;RPR2RRòRtupdatetsumRitvaluesRµR¶R¸tkeysRÀ(RRR
Ret	unlimitedRtmigration_infoRRRttRtinfo((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytonline_data_migrationsfs:


1	
"
s--resource_classs<class>trequireds%Ironic node class to set on instancess--hosts<host>s(Compute service name to migrate nodes ons--nodes<node>s8Ironic node UUID to migrate (all on the host if omitted)s--allt	all_hostss-Run migrations for all ironic hosts and nodess2Print information about migrations being performedcCs,|sttdƒƒdStjƒ}|rd|s8|rLttdƒƒdStjj|dƒ}n¤|rµ|rµy%tjj|||ƒ}|g}Wqt	j
k
r±g}qXnS|rôytjj||ƒ}Wqt	j
k
rðg}qXnttdƒƒdSt|ƒdkr.ttdƒƒdS|dj
dkrUttd	ƒƒdSxÐ|D]È}tjj|i|jd
6td6ƒ}	t|	ƒdkrµttdƒ|jƒd
St|	ƒdkr\tjj|||	djƒ}
|
r$|r$ttdƒi|	djd6|jd
6ƒq$q\q\WdS(sÔMigrate flavor information for ironic instances.

        This will manually push the instance flavor migration required
        for ironic-hosted instances in Pike. The best way to accomplish
        this migration is to run your ironic computes normally in Pike.
        However, if you need to push the migration manually, then use
        this.

        This is idempotent, but not trivial to start/stop/resume. It is
        recommended that you do this with care and not from a script
        assuming it is trivial.

        Running with --all may generate a large amount of DB traffic
        all at once. Running at least one host at a time is recommended
        for batching.

        Return values:

        0: All work is completed (or none is needed)
        1: Specified host and/or node is not found, or no ironic nodes present
        2: Internal accounting error shows more than one instance per node
        3: Invalid combination of required arguments
        s7A resource_class is required for all modes of operationis3--all with --host and/or --node does not make senseRs7Either --all, --host, or --host and --node are requiredis1No ironic compute nodes found that match criteriais/Compute node(s) specified is not of type ironictnodetdeleteds:Ironic node %s has multiple instances? Something is wrong.is+Migrated instance %(uuid)s on node %(node)sR’(R2RRRJRtComputeNodeListtget_by_hypervisor_typetComputeNodetget_by_host_and_nodenameRtComputeHostNotFoundtget_all_by_hostR‚thypervisor_typetInstanceListtget_by_filtersthypervisor_hostnameRPRtIronicDrivert_pike_flavor_migration_for_nodeR’(RRtresource_classRdRRRàtctxtcnstcntinsttresult((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytironic_flavor_migration‹sZ#	



	
	N(,RjRkRlRt"migrate_instances_add_request_spectkeypair_objtmigrate_keypairs_to_api_dbt
aggregate_objtmigrate_aggregatest%migrate_aggregate_reset_autoincrementtinstance_group_objt!migrate_instance_groups_to_api_dbtbuild_request_objt+delete_build_requests_with_no_instance_uuidRt#service_uuids_online_data_migrationt
quotas_objtmigrate_quota_limits_to_api_dbtmigrate_quota_classes_to_api_dbtsa_dbtmigration_migrate_to_uuidtblock_device_objtBlockDeviceMappingtpopulate_uuidstinstance_objt#populate_missing_availability_zonesR	R°RnRÌRotargparsetSUPPRESSR_RPRÜRRêRóRRRRòR3(((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyR¯psd		 	G	#t
ApiDbCommandsc	BsheZdZd„Zeddddejƒeddddd	dd
ƒd
d
d„ƒƒZd„Z	RS(s$Class for managing the api database.cCsdS(N((RR((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyR°ïss	--versionRDs	<version>RERÍRÎRÏRÐsDatabase versioncCs9|r&|r&ttdƒƒ|}ntj|ddƒS(s0Sync the database up to the most recent version.sªDEPRECATED: The '--version' parameter was deprecated in the Pike cycle and will not be supported in future versions of nova. Use the 'VERSION' positional argument insteadtdatabaseR(R2RR
RÖ(RRRRÍ((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRÜòs
	cCsttjddƒƒdS(s#Print the current database version.RLRN(R2R
RÝ(RR((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRÿsN(
RjRkRlR°RoRIRJR_RÜR(((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRKìs	tCellCommandscBsgeZdZdZed„ƒZd(d(d(d„Zedddddƒed	dd
ddƒeddd
ddƒedddddƒedddddƒedddddƒedddddƒedddddƒedddƒed ddƒd!d(d(d(d(d(d(d(d(d"„	ƒƒƒƒƒƒƒƒƒƒZ	ed#dd$dd%ƒd&„ƒZ
d'„ZRS()s-Commands for managing cells v1 functionality.sªDEPRECATED: The cell commands, which configure cells v1 functionality, are deprecated as Cells v1 itself has been deprecated. They will be removed in an upcoming release.cCsÎyžtj|ƒr|dfS|jdƒdkr_|jdddƒjdƒ\}}||fS|jdƒdkr~|dfS|jdƒ\}}||fSWn)ttjfk
rÉtd|ƒd	SXdS(
sParses the given server_string and returns a tuple of host and port.
        If it's not a combination of host part and port, the port element is an
        empty string. If the input is invalid expression, return a tuple of two
        empty strings.
        R´s]:iÿÿÿÿt[it:sInvalid server_string: %sN(R´R´(R9t
valid_ipv6tfindtreplaceR¿R;tAddrFormatErrorR2(t
server_strRFtport((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt_parse_server_string
s
$

cCsOg}|rà|jdƒ}x-|D]·}|jƒ}|j|ƒ\}	}
|
sntdƒ|}t|ƒ‚nyt|
ƒ}
Wn-tk
r­tdƒ|
}t|ƒ‚nX|jtjd|	d|
d|d|ƒƒq"Wnkyt|ƒ}Wn-tk
rtdƒ|}t|ƒ‚nX|jtjd|d|d|d|ƒƒ|S(	s7Returns a list of oslo.messaging.TransportHost objects.t,sDInvalid broker_hosts value: %s. It should be in hostname:port formats/Invalid port value: %s. It should be an integerthostnameRUtusernametpasswords,Invalid port value: %s. Should be an integer(	R¿R¾RVRR;Rêtappendt	messagingt
TransportHost(RRRYRZtbroker_hostsRXRUttransport_hoststhostsRdtbroker_hostnametbroker_porttmsg((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt_create_transport_hosts+sD
	
		
	
s--nameRDs<name>REsName for the new cells--cell_types<parent|api|child|compute>s/Whether the cell is parent/api or child/computes
--usernames
<username>s,Username for the message broker in this cells
--passwords
<password>s,Password for the message broker in this cells--broker_hostss<broker_hosts>s¼Comma separated list of message brokers in this cell. Each Broker is specified as hostname:port with both mandatory. This option overrides the --hostname and --port options (if provided). s
--hostnames
<hostname>s*Address of the message broker in this cells--ports<number>s.Port number of the message broker in this cells--virtual_hosts<virtual_host>s3The virtual host of the message broker in this cells	--woffsets<float>s--wscaletchildcCsÙ|dkrtdƒdS|j|||||ƒ}tjƒ}|jj|ƒ||_t}
|d
krut}
ni|d6|
d6t	j
t|ƒƒd	6t|	ƒd
6t|
ƒd6}t
jƒ}tj||ƒdS(NtparentReRtcomputes<Error: cell type must be 'parent'/'api' or 'child'/'compute'iRt	is_parentt
transport_urlt
weight_offsettweight_scale(sparentschildsapiRg(sapisparent(R2RdRtget_transport_urlR`textendtvirtual_hostRPRòR#tunquoteRNtfloatRRJRtcell_create(RRRt	cell_typeRYR^RZRXRURntwoffsettwscaleR_RiRhRRe((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRWSs(
			

s--cell_names<cell_name>sName of the cell to deletecCs tjƒ}tj||ƒdS(N(RRJRtcell_delete(RRt	cell_nameRe((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRZ„sc
Cstjƒ}tj|ƒ}d}t|dƒt|dddddddfƒx†|D]~}tj|jƒ}|jr‡|jdn	t	j
ƒ}t||j|j|j
r´dnd|j|j|j|jfƒqYWt|ddddddd fƒdS(!Ns+%3s  %-10s  %-6s  %-10s  %-15s  %-5s  %-10stIdtNametTypetUsernametHostnametPorttVHostRii
iiiiRfRe(RwsNameRyRzR{R|R}s---s
----------s------s
----------s---------------s-----s
----------s---s
----------s------s
----------s---------------s-----s
----------(RRJRtcell_get_allR2RRlRiR`R\R]R•RRhRYRXRURn(RRRetcellstfmttcellRRd((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRiŠs 
"N(RjRkRlRmRnRVR_RdRoRWRZRi(((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRMs6'	-tCellV2CommandscBs—eZdZd„Zd„Zeddddddd	ƒdNd
„ƒZeddddd
ƒdNd„ƒZdNd„Z	d„Z
eddddddeddƒedddddddƒdNd„ƒƒZdNe
d„Zeddddddd	ƒedddddƒedd d!dd"ƒdNdNe
d#„ƒƒƒZed$dd%dd&deded'ƒƒed(d d!dd)ded*ƒƒe
d+„ƒƒZeddddddd,ƒedd d!ded-ƒƒed.d d!ded/ƒƒed0d d!d1e
dd2ded3ƒƒdNe
e
e
d4„ƒƒƒƒZeed5ƒƒeddddedƒƒeddddd6ded7ƒƒedddddded	ƒƒedd d!ded8ƒƒdNdNdNe
d9„ƒƒƒƒƒZedd d!ded:ƒƒe
d;„ƒZed<d d!d1e
ded=ƒƒeddddddeded>ƒƒe
d?„ƒƒZeddddddeded@ƒƒedddddAdedBƒƒeddddddedCƒƒedddddDdedEƒƒdNdNdNdF„ƒƒƒƒZeddddddedGƒƒdNdH„ƒZeddddddededGƒƒedIddJddKdededLƒƒdM„ƒƒZRS(OsCommands for managing cells v2.cCs&|ptj}|s"tdƒn|S(Ns]Must specify --transport-url if [DEFAULT]/transport_url is not set in the configuration file.(RKRiR2(RRRi((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt_validate_transport_url s
cCsxxqtjj|ƒD]]}|r7|j|jkr7qn|j|ksU|j|krttdƒ|jƒtSqWt	S(NspThe specified transport_url and/or database_connection combination already exists for another cell with uuid %s.(
RRìRíR’tdatabase_connectionRiR2RRòRP(RRReRÙRiR„R((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt5_non_unique_transport_url_database_connection_checker§ss--transport-urlRDs<transport_url>RuRiREs,The transport url for the cell message queuec	Cs tjjrtdƒdS|j|ƒ}|s3dStjƒ}y|jƒ}Wn?tj	k
rtt
dƒƒtjj
|tjjƒ}nXtj||ƒK}ytjdd|ƒWn*tjk
ré}tt
dƒ|ƒnXWdQX|j|ƒ}|dkrdS|j|ƒdS(	s}Simple cellsv2 setup.

        This simplified command is for use by existing non-cells users to
        configure the default environment. If you are using CellsV1, this
        will not work for you. Returns 0 if setup is completed (or has
        already been done), 1 if no hosts are reporting (and this cannot
        be mapped) and 2 if run in a CellsV1 environment.
        s6CellsV1 users cannot use this simplified setup commandiisCell0 is already setupRsUnable to sync cell0 schema: %sNi(RKRtenableR2RƒRRÑt
_map_cell0RîtDBDuplicateEntryRRRÒRÓRÔRÕR
RÖR_tDBErrort_map_cell_and_hostst
map_instances(RRRiRet
cell0_mappingRÚtext	cell_uuid((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytsimple_cell_setup¶s.
	
s--database_connections<database_connection>s¸The database connection url for cell0. This is optional. If not provided, a standard database connection will be used based on the main database connection from the Nova configuration.cCs?y|jd|ƒWn$tjk
r:ttdƒƒnXdS(s°Create a cell mapping for cell0.

        cell0 is used for instances that have not been scheduled to any cell.
        This generally applies to instances that have encountered an error
        before they have been scheduled.

        This command creates a cell mapping for this special cell which
        requires a database to store the instance data.

        Returns 0 if cell0 created successfully or already setup.
        R„sCell0 is already setupi(R‡RîRˆR2R(RRR„((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt	map_cell0Þs
c
Cs_d„}|p|ƒ}tjƒ}tj|dtjjddddd|ƒ}|jƒ|S(sXFaciliate creation of a cell mapping for cell0.
        See map_cell0 for more.
        cSs>tjj}tj|ƒ}|jd|_tjt|ƒƒS(Nt_cell0(RKRLt
connectiontsqla_urltmake_urlR#RoRN(R’R((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytcell0_default_connectionûsR’Rtcell0Risnone:///R„(RRÑRRÒRÔRW(RRR„R•tdbcReRÙ((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyR‡÷s		
c
Csi}tj||ƒ@}tjj|jddƒ|ddddd|d|ƒ}WdQXxf|D]^}y>tj|ƒ}	|j|	_||	_	|j
|	_
|	jƒWqatj
k
r¾qaqaXqaWt|ƒd	ksçt|ƒ|krðd}n
|d
j}|S(Ntread_deletedtyestsort_keyt
created_attsort_dirtasctlimittmarkeriiÿÿÿÿ(RRÕRR(R)televatedtInstanceMappingR’R]RÙR^RWRîRˆR‚R_(
RRReRÙRžRŸtfiltersRÚt	instancesRtmapping((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt_get_and_map_instancess&	
	$	
s--cell_uuids<cell_uuid>RŽRsGUnmigrated instances will be mapped to the cell with the uuid provided.s--max-counts<max_count>R
sáMaximum number of instances to map. If not set, all instances in the cell will be mapped in batches of 50. If you have a large number of instances, consider specifying a custom value and run the command until it exits with 0.c
Csi|dk	r_yt|ƒ}Wntk
r5d}nXt}|dkrkttdƒƒdSnt}d}tjƒ}d}t	j
j||ƒ}t	jj
||ƒ}t|ƒdkrÂd}n'|djjdd	ƒ}|djƒt}	x8|	dk	r)|j||||ƒ}	|	}|sòPqòqòW|	re|	jd	dƒ}	t	j|d
|	d|ƒjƒdSdS(
s>Map instances into the provided cell.

        Instances in the nova database of the provided cell (nova database
        info is obtained from the nova-api database) will be queried from
        oldest to newest and if unmapped, will be mapped to the provided cell.
        A max-count can be set on the number of instance to map in a single
        run. Repeated runs of the command will start from where the last run
        finished so it is not necessary to increase max-count to finish. An
        exit code of 0 indicates that all instances have been mapped.
        iÿÿÿÿis*Must supply a positive value for max-countii2tINSTANCE_MIGRATION_MARKERit RR]R^N(R_RêR;RPR2RRòRRÑRRÒRÓRötget_by_project_idR‚R]RRtdestroyR¥R¡RW(
RRRŽR
tmap_allRetmarker_project_idRÙtmarker_mappingRŸtnext_marker((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyR‹0sB

		
c
Cs¼tjƒ}d}}tjj|ƒ}|sBttdƒƒdStƒ}x‘|D]‰}	ytj	j
||	jƒ}
Wn$tj
k
rš|j|	jƒqRX|rÏttdƒi|
jd6|
jjd6ƒn|
jj}qRW|sùttdƒƒ|S|dk	rtjj||ƒ}n|dkrotjƒ}tj|d|d|d|dtjjƒ}|jƒnx3|D]+}tj	|d|d	|ƒ}
|
jƒqvW|r¸t|ƒn|S(
Ns'No hosts found to map to cell, exiting.s0Host %(host)s is already mapped to cell %(uuid)sRdR’s1All hosts are already mapped to cell(s), exiting.RRiR„RÙ(RRÑR_RR!RíR2RtsettHostMappingtget_by_hostRdRtHostMappingNotFoundtaddRÙR’RÒRÓRt
generate_uuidRKRLR’RW(RRRiRRàRetcell_mapping_uuidRÙt
compute_nodest
missing_nodestcompute_nodeRtcompute_host((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRŠssN
	
	
	


s--names<cell_name>sThe name of the cells	--verboseR¦R§s8Output the cell mapping uuid for any newly mapped hosts.cCs0|j|ƒ}|sdS|j|||ƒdS(sªEXPERIMENTAL. Create a cell mapping and host mappings for a cell.

        Users not dividing their cloud into multiple cells will be a single
        cell v2 deployment and should specify:

          nova-manage cell_v2 map_cell_and_hosts --config-file <nova.conf>

        Users running multiple cells can add a cell v2 by specifying:

          nova-manage cell_v2 map_cell_and_hosts --config-file <cell nova.conf>
        ii(RƒRŠ(RRRiRRà((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytmap_cell_and_hosts¥s
s--uuids<instance_uuid>R’sThe instance UUID to verifys--quiettquietsDo not print anythingc		sq‡fd†}tjƒ}ytjj||ƒ}Wn#tjk
rY|d|ƒdSX|jdkr{|d|ƒdStj	||jƒ´}ytj
j||ƒ}Wn‘tjk
r?yM|j
ddƒ}tj
j||ƒ}|r|d|ƒ|d	ƒd
SWq@tjk
r;|d|ƒ|dƒd
SXnXWdQX|d||jj|jjfƒdSdS(sjVerify instance mapping to a cell.

        This command is useful to determine if the cellsv2 environment is
        properly setup, specifically in terms of the cell, host, and instance
        mapping records required.

        This prints one of three strings (and exits with a code) indicating
        whether the instance is successfully mapped to a cell (0), is unmapped
        due to an incomplete upgrade (1), unmapped due to normally transient
        state (2), it is a deleted instance which has instance mapping (3),
        or it is an archived instance which still has an instance mapping (4).
        csˆst|ƒndS(N(R2(tstring(Rº(s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytsayÐssVInstance %s is not mapped to a cell (upgrade is incomplete) or instance does not existis#Instance %s is not mapped to a celliR˜R™s+The instance with uuid %s has been deleted.suExecute `nova-manage db archive_deleted_rows`command to archive this deleted instance andremove its instance_mapping.is,The instance with uuid %s has been archived.s%However its instance_mapping remains.iNsInstance %s is in cell: %s (%s)i(RRJRR¡tget_by_instance_uuidRtInstanceMappingNotFoundRÙR_RÕtInstanceRÓtInstanceNotFoundR RR’(	RRR’RºR¼ReR¤RÚRtel_ctx((Rºs4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytverify_instance¿sD	

	sAIf provided only this cell will be searched for new hosts to map.s/Provide detailed output when discovering hosts.s--stricts‹Considered successful (exit code 0) only when an unmapped host is discovered. Any other outcome will be considered a failure (exit code 1).s--by-serviceR©t
by_services1Discover hosts by service instead of compute nodecsH‡fd†}tjƒ}tj||||ƒ}|rDt|ƒSdS(sxSearches cells, or a single cell, and maps found hosts.

        When a new host is added to a deployment it will add a service entry
        to the db it's configured to use. This command will check the db for
        each cell, or a single one if passed in, and map any hosts which are
        not currently mapped. If a host is already mapped nothing will be done.
        csˆrt|ƒndS(N(R2(Rc(Rà(s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt	status_fnsN(RRÑthost_mapping_objtdiscover_hostsRê(RRRŽRàtstrictRÃRÄReR`((Ràs4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRÆýs	s‚Add a new cell to nova API database. DB and MQ urls can be provided directly or can be taken from config. The result is cell uuid.R„s&The database url for the cell databases#Output the uuid of the created cellc
CsÑtjƒ}|ptj}|s5ttdƒƒdS|pDtjj}|sattdƒƒdS|j|d||ƒr}dSt
jƒ}tj
|d|d|d|d|ƒ}|jƒ|rÍt|ƒnd	S(
Ns]Must specify --transport-url if [DEFAULT]/transport_url is not set in the configuration file.isaMust specify --database_connection if [database]/connection is not set in the configuration file.iR’RRiR„i(Rtget_contextRKRiR2RRLR’R…R_RR³RRÒRW(RRRR„RiRàReR´RÙ((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytcreate_cells,		

s)Show sensitive details, such as passwordscCsåtjjtjƒƒ}tdƒtdƒtdƒtdƒg}tj|ƒ}xƒt|dd„ƒD]l}|j	|j
g}|r¡|j|j|j
gƒn%|jt|jƒt|j
ƒgƒ|j|ƒqgWt|ƒdS(sÀLists the v2 cells in the deployment.

        By default only the cell name and uuid are shown. Use the --verbose
        option to see transport URL and database connection details.
        RxtUUIDs
Transport URLsDatabase ConnectiontkeycSs|jS(N(R(t_cell((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt<lambda>Tsi(RRìRíRRJRRµR¶R¸RR’RmRiR„R1RÀR2(RRRàt
cell_mappingstfield_namesRRtfields((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt
list_cellsEs	
s--forces-Delete hosts that belong to the cell as well.sThe uuid of the cell to delete.cCs¡tjƒ}ytjj||ƒ}Wn)tjk
rPttdƒ|ƒdSXtj	j
||jƒ}g}|rÃ|s“ttdƒ|ƒdStj||ƒ}tj
j|ƒ}WdQXntjj
||jƒ}|rTtj||ƒ}tjj|ƒ}	WdQX|	r,ttdƒ|ƒdSttdƒ|ƒttd	ƒƒd
Sx!|D]}
d|
_|
jƒq[Wx|D]}|jƒqW|jƒdS(sDelete an empty cell by the given uuid.

        This command will return a non-zero exit code in the following cases.

        * The cell is not found by uuid.
        * It has hosts and force is False.
        * It has instance mappings.

        If force is True and the cell has host, hosts are deleted as well.

        Returns 0 in the following cases.

        * The empty cell is found and deleted successfully.
        * The cell has hosts and force is True and the cell and the hosts are
          deleted successfully.
        s Cell with uuid %s was not found.is5There are existing hosts mapped to cell with uuid %s.iNs9There are existing instances mapped to cell with uuid %s.isbThere are instance mappings to cell with uuid %s, but all instances have been deleted in the cell.sQSo execute 'nova-manage db archive_deleted_rows' to delete the instance mappings.ii(RRJRRÒRÓRR×R2RtHostMappingListtget_by_cell_idR•RÕR!RíRöR(tmappedtsaveR©(RRRŽtforceReRÙt
host_mappingstnodesRÚRæR£RR((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytdelete_cell`sH		
	

sThe uuid of the cell to update.RsSet the cell name.sZSet the cell transport_url. NOTE that running nodes will not see the change until restart!t
db_connections`Set the cell database_connection. NOTE that running nodes will not see the change until restart!cCstjƒ}ytjj||ƒ}Wn)tjk
rPttdƒ|ƒdSX|rc||_	n|pot
j}|pt
jj
}|j||||ƒr dS|r²||_n|rÄ||_ny|jƒWn(tk
rü}ttdƒ|ƒdSXdS(saUpdates the properties of a cell by the given uuid.

        If the cell is not found by uuid, this command will return an exit
        code of 1. If the provided transport_url or/and database_connection
        is/are same as another cell, this command will return an exit code
        of 3. If the properties cannot be set, this will return 2.
        Otherwise, the exit code will be 0.

        NOTE: Updating the transport_url or database_connection fields on
        a running system will NOT result in all nodes immediately using the
        new values. Use caution when changing these values.
        s Cell with uuid %s was not found.iis Unable to update CellMapping: %sii(RRJRRÒRÓRR×R2RRRKRiRLR’R…R„RÕR£(RRRŽRRiRÚReRÙRÛ((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytupdate_cell­s.	sThe uuid of the cell.c	Cs
tjƒ}|rrytjj||ƒ}Wn)tjk
rVttdƒ|ƒdSXtj	j
||jƒ}ntj	j|ƒ}tdƒtdƒtdƒg}t
j|ƒ}xHt|dd„ƒD]1}|jj|jj|jg}|j|ƒqÊWt|ƒdS(	s'Lists the hosts in one or all v2 cells.s Cell with uuid %s was not found.is	Cell Names	Cell UUIDR{RËcSs|jS(N(Rd(t_host((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyRÍüsi(RRJRRÒRÓRR×R2RRÒRÓR•RíRµR¶R¸RÙRR’RdRÀ(	RRRŽReRÙR×RÏRRdRÐ((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt
list_hostsçs$	!
s--hosts<host>RdsThe host to delete.c
Csftjƒ}ytjj||ƒ}Wn)tjk
rPttdƒ|ƒdSXytj	j
||ƒ}Wn)tjk
r•ttdƒ|ƒdSX|jj
|j
krÑttdƒi|d6|d6ƒdStj||ƒ1}tjj
||ƒ}tjj||ƒ}Wd	QX|r4ttd
ƒ|ƒdSx!|D]}	d|	_|	jƒq;W|jƒdS(
soDelete a host in a cell (host mappings) by the given host name

        This command will return a non-zero exit code in the following cases.

        * The cell is not found by uuid.
        * The host is not found by host name.
        * The host is not in the cell.
        * The host has instances.

        Returns 0 if the host is deleted successfully.
        s Cell with uuid %s was not found.isThe host %s was not found.is:The host %(host)s was not found in the cell %(cell_uuid)s.RdRŽiNs#There are instances on the host %s.ii(RRJRRÒRÓRR×R2RR¯R°R±RÙR’RÕR(R!R&RÔRÕR©(
RRRŽRdReRÙRRÚR£RØR((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytdelete_hosts6

	
N(RjRkRlRƒR…RoR_RRR‡R¥RòR‹RPRŠR¹RRÂRÆtaction_descriptionRÉRÑRÙRÛRÝRÞ(((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyR‚sž		&	 	:2:	I.tapi_dbRtcell_v2RtfloatingR¡t
categoriestcategoryttitlesCommand categoriesREsAvailable categoriesthandlerspost-mortemR©sAllow post-mortem debuggingcCs+tjttgƒtjtjƒtj	dtj
ƒtƒtjtdƒt
jƒtjjdkr}ttjƒƒdStjjdkr tjtƒdSy6tjƒ\}}}|||Ž}tjƒ|SWnNtk
r&tjrddl}|jƒnttdƒtjƒƒd	SXdS(
s4Parse options and call the appropriate class/method.tdefault_log_levelstnovaRisbash-completioniÿÿÿÿNsAn error has occurred:
%si( RKtregister_cli_optstcategory_opttpost_mortem_optR
t
parse_argsR3targvtloggingtset_defaultstget_default_log_levelst_EXTRA_DEFAULT_LOG_LEVELStsetupRtregister_allRäRR2Rtversion_string_with_packaget
cmd_commontprint_bash_completiont
CATEGORIESt
get_action_fnRtcleanupR£tpost_mortemtpdbRt	tracebackt
format_exc(tfntfn_argst	fn_kwargstretRû((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pytmainOs0		



	
(fRlt
__future__RRIt	functoolsR$R3Rüt	decoratorR9toslo_configRtoslo_dbRRîtoslo_logRRîtoslo_messagingR\t
oslo_utilsRRRRµR»tsix.moves.urllib.parsetmovesturllibtparseR#tsqlalchemy.engineRR“tnova.api.ec2Rtnova.cmdR	Rõt	nova.confRèR
RRtnova.dbR
tnova.db.sqlalchemyRRBt	nova.i18nRRtnova.objectsRR7RRDRR<RRÅRRGRR:RR5RR?RRRRRt	nova.virtRtconfRKtQUOTASRñRoRßR"R1R6tobjectR7RsRtR¯RKRMR‚R÷tpartialtadd_command_parserst
SubCommandOptRêtBoolOptRPRëR(((s4/usr/lib/python2.7/dist-packages/dmapi/cmd/manage.pyt<module>s¢					
	
	^
¤ÿ}™ÿÿœ