%PDF- %PDF-
| Direktori : /proc/self/root/proc/thread-self/root/usr/lib/python2.7/site-packages/salt/roster/ |
| Current File : //proc/self/root/proc/thread-self/root/usr/lib/python2.7/site-packages/salt/roster/terraform.pyo |
�
���^c @@ s� d Z d d l m Z m Z d d l Z d d l Z d d l Z d d l Z e j
e � Z d Z
i d d 6d d 6d d 6d d
6d d 6d d
6d d 6d d 6d d 6d d 6d d 6d d 6Z d Z d � Z d � Z d � Z d d � Z d d � Z d S( u�
Dynamic roster from terraform current state
===========================================
This roster module allows you dynamically generate the roster from the terraform
resources defined with the `Terraform Salt`_ provider.
It exposes all salt_host resources with the same attributes to the salt-ssh
roster, making it completely independent of the type of terraform resource, and
providing the integration using terraform constructs with interpolation.
Basic Example
-------------
Given a simple salt-ssh tree with a Saltfile:
.. code-block:: yaml
salt-ssh:
config_dir: etc/salt
max_procs: 30
wipe_ssh: True
and ``etc/salt/master``:
.. code-block:: yaml
root_dir: .
file_roots:
base:
- srv/salt
pillar_roots:
base:
- srv/pillar
roster: terraform
In the same folder as your ``Saltfile``, create terraform file with resources
like cloud instances, virtual machines, etc. For every single one of those that
you want to manage with Salt, create a ``salt_host`` resource:
.. code-block:: text
resource "salt_host" "dbminion" {
salt_id = "dbserver"
host = "${libvirt_domain.vm-db.network_interface.0.addresses.0}"
user = "root"
passwd = "linux"
}
You can use the count attribute to create multiple roster entries with a single
definition. Please refer to the `Terraform Salt`_ provider for more detailed
examples.
.. _Terraform Salt: https://github.com/dmacvicar/terraform-provider-salt
i ( t absolute_importt unicode_literalsNu salt.roster.u su hostu useru passwdu iu portu bu sudou sudo_useru ttyu privu timeoutu mu minion_optsu thin_diru cmd_umasku salt_idc C@ s� i } | j d i � j d i � } | j t � | t <t | j � � j t j � � } x3 | D]+ } t | j | � t j | � � | | <q_ W| S( u�
Handles salt_host resources.
See https://github.com/dmacvicar/terraform-provider-salt
Returns roster attributes for the resource or None
u primaryu
attributes( t gett MINION_IDt sett keyst intersectiont TF_ROSTER_ATTRSt _cast_output_to_type( t resourcet rett attrst valid_attrst attr( ( s9 /usr/lib/python2.7/site-packages/salt/roster/terraform.pyt _handle_salt_host_resourceS s !
)c C@ s� d } t j d � rH t j j t j j d � � rH t j j d � } n4 t j d t j j t j j t d d d � � � } | r� t j j | � r� | | d <n d S( uM
Setups the salt-ssh minion to be accessed with salt-ssh default key
u ssh_use_home_keyu
~/.ssh/id_rsau ssh_privu pki_diru sshu salt-ssh.rsau privN( t Nonet __opts__R t ost patht isfilet
expandusert abspatht join( R
t priv( ( s9 /usr/lib/python2.7/site-packages/salt/roster/terraform.pyt _add_ssh_keyc s -c C@ s0 | d k r t | � S| d k r, t | � S| S( u. cast the value depending on the terraform typeu bu i( t boolt int( t valuet typ( ( s9 /usr/lib/python2.7/site-packages/salt/roster/terraform.pyR w s
u terraform.tfstatec C@ s1 i } t j j j | d � � } t j j j | � } Wd QX| j d � } | sb t j d � | Sx� | D]� } | j d g � } x� t j j
j | � D]� \ } } d } | d d k r� t
| � } n | s� q� n | j t | j d � � }
|
s� q� n t | k r| t =n t | � | | |
<q� Wqi W| S( u_
Parses the terraform state file passing different resource types to the right handler
u rNu modulesu( Malformed tfstate file. No modules foundu resourcesu typeu salt_hostu id( t saltt utilst filest fopent jsont loadR t logt errort extt sixt iteritemsR R R R ( t state_file_pathR
t fh_t tfstatet modulest modulet resourcest
resource_nameR t roster_entryt minion_id( ( s9 /usr/lib/python2.7/site-packages/salt/roster/terraform.pyt _parse_state_file� s.
"
u globc K@ s� t j j d � } t j d � r: t j j t d � } n t j j | � s` t j d | � i St j d | � | j d � s� t j d � i St
| � } t j d t | � � t d | | | d � S(
uw
Returns the roster from the terraform state file, checks opts for location, but defaults to terraform.tfstate
u terraform.tfstateu roster_fileu$ Can't find terraform state file '%s'u% terraform roster: using %s state fileu .tfstateu<