%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python2.7/site-packages/salt/returners/
Upload File :
Create Path :
Current File : //lib/python2.7/site-packages/salt/returners/postgres.pyo

�
���^c@@scdZddlmZmZmZddlZddlZddlmZddl	Z
ddlZ
ddlZ
ddl
Z
ddlmZyddlZeZWnek
r�eZnXdZeje�Zd�Zdd�Zeded	��Zd
�Zd�Zdd�Zdd
�Z d�Z!d�Z"d�Z#d�Z$d�Z%edd�Z&dS(u�
Return data to a postgresql server

.. note::
    There are three PostgreSQL returners.  Any can function as an external
    :ref:`master job cache <external-job-cache>`. but each has different
    features.  SaltStack recommends
    :mod:`returners.pgjsonb <salt.returners.pgjsonb>` if you are working with
    a version of PostgreSQL that has the appropriate native binary JSON types.
    Otherwise, review
    :mod:`returners.postgres <salt.returners.postgres>` and
    :mod:`returners.postgres_local_cache <salt.returners.postgres_local_cache>`
    to see which module best suits your particular needs.

:maintainer:    None
:maturity:      New
:depends:       psycopg2
:platform:      all

To enable this returner the minion will need the psycopg2 installed and
the following values configured in the minion or master config:

.. code-block:: yaml

    returner.postgres.host: 'salt'
    returner.postgres.user: 'salt'
    returner.postgres.passwd: 'salt'
    returner.postgres.db: 'salt'
    returner.postgres.port: 5432

Alternative configuration values can be used by prefacing the configuration.
Any values not found in the alternative configuration will be pulled from
the default location:

.. code-block:: yaml

    alternative.returner.postgres.host: 'salt'
    alternative.returner.postgres.user: 'salt'
    alternative.returner.postgres.passwd: 'salt'
    alternative.returner.postgres.db: 'salt'
    alternative.returner.postgres.port: 5432

Running the following commands as the postgres user should create the database
correctly:

.. code-block:: sql

    psql << EOF
    CREATE ROLE salt WITH PASSWORD 'salt';
    CREATE DATABASE salt WITH OWNER salt;
    EOF

    psql -h localhost -U salt << EOF
    --
    -- Table structure for table 'jids'
    --

    DROP TABLE IF EXISTS jids;
    CREATE TABLE jids (
      jid   varchar(20) PRIMARY KEY,
      load  text NOT NULL
    );

    --
    -- Table structure for table 'salt_returns'
    --

    DROP TABLE IF EXISTS salt_returns;
    CREATE TABLE salt_returns (
      fun       varchar(50) NOT NULL,
      jid       varchar(255) NOT NULL,
      return    text NOT NULL,
      full_ret  text,
      id        varchar(255) NOT NULL,
      success   varchar(10) NOT NULL,
      alter_time   TIMESTAMP WITH TIME ZONE DEFAULT now()
    );

    CREATE INDEX idx_salt_returns_id ON salt_returns (id);
    CREATE INDEX idx_salt_returns_jid ON salt_returns (jid);
    CREATE INDEX idx_salt_returns_fun ON salt_returns (fun);
    CREATE INDEX idx_salt_returns_updated ON salt_returns (alter_time);

    --
    -- Table structure for table `salt_events`
    --

    DROP TABLE IF EXISTS salt_events;
    DROP SEQUENCE IF EXISTS seq_salt_events_id;
    CREATE SEQUENCE seq_salt_events_id;
    CREATE TABLE salt_events (
        id BIGINT NOT NULL UNIQUE DEFAULT nextval('seq_salt_events_id'),
        tag varchar(255) NOT NULL,
        data text NOT NULL,
        alter_time TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
        master_id varchar(255) NOT NULL
    );

    CREATE INDEX idx_salt_events_tag on salt_events (tag);

    EOF

Required python modules: psycopg2

To use the postgres returner, append '--return postgres' to the salt command.

.. code-block:: bash

    salt '*' test.ping --return postgres

To use the alternative configuration, append '--return_config alternative' to the salt command.

.. versionadded:: 2015.5.0

.. code-block:: bash

    salt '*' test.ping --return postgres --return_config alternative

To override individual configuration items, append --return_kwargs '{"key:": "value"}' to the salt command.

.. versionadded:: 2016.3.0

.. code-block:: bash

    salt '*' test.ping --return postgres --return_kwargs '{"db": "another-salt"}'

i(tabsolute_importtprint_functiontunicode_literalsN(tcontextmanager(tsixupostgrescC@ststdfStS(Nu>Could not import postgres returner; psycopg2 is not installed.(tHAS_POSTGREStFalset__virtualname__(((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pyt__virtual__�s
c
C@s�idd6dd6dd6dd6dd6}idd6dd6dd6dd6dd6}tjjd	jt�||d
tdtd|�}d|kr�t|d�|d<n|S(
u-
    Get the postgres options from salt.
    u	localhostuhostusaltuuserupasswdudbi8uportureturner.{0}t__salt__t__opts__tdefaults(tsaltt	returnerstget_returner_optionstformatRR	R
tint(tretRtattrst_options((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pyt_get_options�s&



	cc@s:t|�}y[tjd|jd�d|jd�d|jd�d|jd�d	|jd
��}Wn4tjk
r�}tjjdjd|���nX|j	�}z~y	|VWnKtj
k
r}|j}tj
jtj|��|jd
�|�n$X|r|jd�n
|jd
�Wd|j�XdS(u
    Return a Pg cursor
    thostuhosttuseruusertpasswordupasswdtdatabaseudbtportuportu6postgres returner could not connect to database: {exc}texcuROLLBACKuCOMMITN(Rtpsycopg2tconnecttgettOperationalErrorRt
exceptionstSaltMasterErrorRtcursort
DatabaseErrortargstsyststderrtwriteRt	text_typetexecutetclose(RtcommitRtconnRR!terrterror((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pyt	_get_serv�s,"		

c
C@s�y�t|dt��i}d}|j||d|dtjjj|d�|d|jdt�tjjj|�f�WdQXWn$tj	j
k
r�tjd	�nXdS(
u*
    Return data to a postgres server
    R*u�INSERT INTO salt_returns
                    (fun, jid, return, id, success, full_ret)
                    VALUES (%s, %s, %s, %s, %s, %s)ufunujidureturnuidusuccessNuMCould not store return with postgres returner. PostgreSQL server unavailable.(
R.tTrueR(RtutilstjsontdumpsRRRR tlogtcritical(Rtcurtsql((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pytreturner�s#cC@s�t|dt��n}xd|D]\}|jdd�}|jdd�}d}|j||tjjj|�tdf�qWWdQXdS(u
    Return event to Pg server

    Requires that configuration be enabled via 'event_return'
    option in master config.
    R*utaguudatauWINSERT INTO salt_events (tag, data, master_id)
                     VALUES (%s, %s, %s)uidN(	R.R/RR(RR0R1R2R
(teventsR5teventttagtdataR6((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pytevent_return�s
c	C@sbtdt��M}d}y)|j||tjjj|�f�Wntjk
rWnXWdQXdS(u/
    Save the load to the specified jid id
    R*uKINSERT INTO jids
               (jid, load)
                VALUES (%s, %s)N(	R.R/R(RR0R1R2RtIntegrityError(tjidtloadtminionsR5R6((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pyt	save_loadscC@sdS(u&
    Included for API consistency
    N((R>R@t	syndic_id((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pytsave_minionsscC@shtdddt��M}d}|j||f�|j�}|rZtjjj|d�SiSWdQXdS(u9
    Return the load data that marks a specified jid
    RR*u%SELECT load FROM jids WHERE jid = %s;iN(	R.tNoneR/R(tfetchoneRR0R1tloads(R>R5R6R;((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pytget_load!scC@s�tdddt��o}d}|j||f�|j�}i}|r|x0|D]%\}}tjjj|�||<qPWn|SWdQXdS(uP
    Return the information returned when the specified job id was executed
    RR*uDSELECT id, full_ret FROM salt_returns
                WHERE jid = %sN(	R.RDR/R(tfetchallRR0R1RF(R>R5R6R;Rtminiontfull_ret((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pytget_jid.s cC@s�tdddt��r}d}|j||f�|j�}i}|rx3|D](\}}}tjjj|�||<qPWn|SWdQXdS(uC
    Return a dict of the last function called for all minions
    RR*uSELECT s.id,s.jid, s.full_ret
                FROM salt_returns s
                JOIN ( SELECT MAX(`jid`) as jid
                    from salt_returns GROUP BY fun, id) max
                ON s.jid = max.jid
                WHERE s.fun = %s
                N(	R.RDR/R(RHRR0R1RF(tfunR5R6R;RRIt_RJ((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pytget_fun@s c	C@s�tdddt��r}d}|j|�|j�}i}x?|D]7\}}tjjj|tjj	j
|��||<qDW|SWdQXdS(u&
    Return a list of all job ids
    RR*u*SELECT jid, load
                FROM jidsN(R.RDR/R(RHRR0R>tformat_jid_instanceR1RF(R5R6R;RR>R?((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pytget_jidsXs
 cC@smtdddt��R}d}|j|�|j�}g}x|D]}|j|d�qDW|SWdQXdS(u"
    Return a list of minions
    RR*u4SELECT DISTINCT id
                FROM salt_returnsiN(R.RDR/R(RHtappend(R5R6R;RRI((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pytget_minionsjs

cC@s#|dk	r|Stjjjt�S(uO
    Do any work necessary to prepare a JID, including sending a custom id
    N(RDRR0R>tgen_jidR
(tnocachet
passed_jid((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pytprep_jid{s('t__doc__t
__future__RRRR$tloggingt
contextlibRtsalt.utils.jidRtsalt.utils.jsontsalt.returnerstsalt.exceptionstsalt.extRRR/RtImportErrorRRt	getLoggert__name__R3RRDRR.R7R<RARCRGRKRNRPRRRV(((s;/usr/lib/python2.7/site-packages/salt/returners/postgres.pyt<module>�s<


	!			
				

Zerion Mini Shell 1.0