%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python2.7/site-packages/salt/queues/
Upload File :
Create Path :
Current File : //usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pyo

�
���^c@@sIdZddlmZmZmZddlmZddlZddlZ	ddl
mZddlm
Z
mZyddlZeZWnek
r�eZnXddlZeje�ZdZd�Zeed	��Zd
�Zd�Zd�Zd
�Zd�Zd�Z d�Z!d�Z"d�Z#d�Z$ded�Z%dS(u�
.. versionadded:: 2016.3.0

This is a queue with postgres as the backend.  It uses the jsonb store to
store information for queues.

:depends:       python-psycopg2

To enable this queue, the following needs to be configured in your master
config. These are the defaults:

.. code-block:: yaml

    queue.pgjsonb.host: 'salt'
    queue.pgjsonb.user: 'salt'
    queue.pgjsonb.pass: 'salt'
    queue.pgjsonb.db: 'salt'
    queue.pgjsonb.port: 5432

Use the following Pg database schema:

.. code-block:: sql

    CREATE DATABASE  salt WITH ENCODING 'utf-8';

    --
    -- Table structure for table `salt`
    --
    DROP TABLE IF EXISTS salt;
    CREATE OR REPLACE TABLE salt(
       id SERIAL PRIMARY KEY,
       data jsonb NOT NULL
    );

.. code-block:: bash

    salt-run queue.insert test '{"name": "redis", "host": "172.16.0.8", "port": 6379}' backend=pgjsonb
    salt-run queue.process_queue test all backend=pgjsonb
i(tabsolute_importtprint_functiontunicode_literals(tcontextmanagerN(tsix(tSaltInvocationErrortSaltMasterErrorupgjsonbcC@sttkrtStS(N(tHAS_PGtFalset__virtualname__(((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pyt__virtual__Asc
c@sNidd6dd6dd6dd6dd6}i}x<|j�D].\}}tjd	jt|�|�||<q<Wytj|�}Wn.tjk
r�}td
jd|���nX|j	�}z~y	|VWnKtj
k
r}|j}	tj
jtj|	��|jd�|�n$X|r.|jd
�n
|jd�Wd|j�XdS(u#
    Return an postgres cursor
    u	localhostuhostusaltuuserupasswordudbnamei8uportu
queue.{0}.{1}u5pgjsonb returner could not connect to database: {exc}texcuROLLBACKuCOMMITN(titemst__opts__tgettformatR	tpsycopg2tconnecttOperationalErrorRtcursort
DatabaseErrortargstsyststderrtwriteRt	text_typetexecutetclose(
tcommittdefaultstconn_kwargstkeytvaluetconnRRterrterror((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pyt_connGs2

&		

cC@sJd}tjd|�|j|�|j�}g|D]}|d^q6S(NuLselect relname from pg_class where relkind='r' and relname !~ '^(pg_|sql_)';u
SQL Query: %si(tlogtdebugRtfetchall(tcurtcmdtresulttx((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pyt_list_tablesls

cC@s0dj|�}tjd|�|j|�tS(Nu<CREATE TABLE {0}(id SERIAL PRIMARY KEY, data jsonb NOT NULL)u
SQL Query: %s(RR%R&RtTrue(R(tqueueR)((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pyt
_create_tablets
	
cC@sRt��C}dj|�}tjd|�|j|�|j�}|SWdQXdS(u6
    Private function to list contents of a queue
    uSELECT data FROM {0}u
SQL Query: %sN(R$RR%R&RR'(R.R(R)tcontents((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pyt_list_items|s
cC@s"t��}t|�}WdQX|S(u9
    Return a list of Salt Queues on the Salt Master
    N(R$R,(R(tqueues((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pytlist_queues�scC@s-t|�}g|D]}|d^q}|S(u"
    List contents of a queue
    i(R1(R.t
itemstupletitemR((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pyt
list_items�scC@st|�}t|�S(u0
    Provide the number of items in a queue
    (R1tlen(R.R((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pytlist_length�scC@s
|t�kS(u�
    Does this queue exist
    :param queue: Name of the queue
    :type str
    :return: True if this queue exists and
    False otherwise
    :rtype bool
    (R3(R.((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pyt
_queue_exists�s	cC@sXt|�sDtdt��$}tjd|�t||�WdQXntjd|�dS(NRu!Queue %s does not exist. CreatinguQueue %s already exists.(R9R$R-R%R&R/(R.R(((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pythandle_queue_creation�s
c	C@sBt|�tdt��#}t|t�r�tjjj|�}t	d�j
||�}tjd|�y|j
|�Wq�tjk
r�}dj
|�SXnt|t�r8g|D]}tjjj|�f^q�}t	d�j
|�}tjd|�y|j||�Wq8tjk
r4}dj
|�SXnWdQXtS(u)
    Add an item or items to a queue
    Ru#INSERT INTO {0}(data) VALUES('{1}')u
SQL Query: %su6Item already exists in this queue. postgres error: {0}u!INSERT INTO {0}(data) VALUES (%s)uCOne or more items already exists in this queue. postgres error: {0}N(R:R$R-t
isinstancetdicttsalttutilstjsontdumpststrRR%R&RRtIntegrityErrortlisttexecutemany(R.RR(R)tesctel((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pytinsert�s*
+cC@s�tdt���}t|t�ritd�j|tjjj	|��}t
jd|�|j|�tSt|t
�r�g|D]}tjjj	|�f^q}dj|�}t
jd|�|j||�nWdQXtS(u.
    Delete an item or items from a queue
    Ru"DELETE FROM {0} WHERE data = '{1}'u
SQL Query: %suDELETE FROM {0} WHERE data = %sN(R$R-R;R<RARR=R>R?R@R%R&RRCRD(R.RR(R)RF((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pytdelete�s
+ic
	C@s^dj|�}|dkr}yt|�}Wn.tk
r[}dj|�}t|��nXdj|dj|�g�}ntjd|�g}tdt���}|j	|�|j
�}t|�dkrTg|D]}	tj
|	d�^q�}
g|D]}	|	d	^q�}d
j|
�}dj||�}tjd|�|j	|�nWdQX|S(
uB
    Pop one or more or all items from the queue return them.
    uSELECT id, data FROM {0}uallu3Quantity must be an integer or "all".
Error: "{0}".uu LIMIT {0};u
SQL Query: %sRiiu','u$DELETE FROM {0} WHERE id IN ('{1}');N(Rtintt
ValueErrorRtjoinR%R&R$R-RR'R7RR(
R.tquantityt	is_runnerR)Rt	error_txtRR(R*R5tidstidlisttdel_cmd((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pytpop�s.	!
&(&t__doc__t
__future__RRRt
contextlibRRtsalt.utils.jsonR=tsalt.extRtsalt.exceptionsRRRR-RtImportErrorRtloggingt	getLoggert__name__R%R	R
R$R,R/R1R3R6R8R9R:RGRHRR(((s=/usr/lib/python2.7/site-packages/salt/queues/pgjsonb_queue.pyt<module>(s8


	$													

Zerion Mini Shell 1.0