Skip to content
This repository was archived by the owner on Oct 12, 2020. It is now read-only.

14. State modules for Junos and SLS files

Khelil Sator edited this page Jul 17, 2017 · 3 revisions

SLS stands for SaLt State
Salt represents the SLS data in YAML format.
The SLS is a representation of the state in which a system should be in (kind of Ansible playbook).

Documentation

https://docs.saltstack.com/en/latest/ref/states/all/salt.states.junos.html

Examples

master configuration file:

# more /etc/salt/master 
file_roots:
 base:
  - /srv/salt

pillar_roots:
 base:
  - /srv/pillar

engines_dirs: 
  - /srv/engines

engines: 
  - junos_syslog: 
      port: 516

reactor:
  - 'jnpr/syslog/*/UI_COMMIT_COMPLETED':
        - /srv/reactor/on_commit.sls

file_roots:

# ls /srv/salt/
ansible.sls  config2.set  config.set  install_config.sls  junos.sls  salt.txt

example 1

junos.sls file:

# more /srv/salt/junos.sls 
get-interface-information:
  junos:
    - rpc
    - dest: /tmp/rpc.log
    - interface_name: lo0

apply a state file:

# salt "vqf*" state.apply junos
vqfx01:
----------
          ID: get-interface-information
    Function: junos.rpc
      Result: True
     Comment: 
     Started: 13:28:29.967125
    Duration: 186.43 ms
     Changes:   
              ----------
              out:
                  True
              rpc_reply:
                  ----------
                  interface-information:
                      ----------
                      physical-interface:
                          ----------
                          admin-status:
                              up
                          if-config-flags:
                              ----------
                              iff-snmp-traps:
                          if-device-flags:
                              ----------
                              ifdf-loopback:
                              ifdf-present:
                              ifdf-running:
                          if-media-flags:
                              ----------
                              ifmf-none:
                          if-type:
                              Loopback
                          ifd-specific-config-flags:
                          interface-flapped:
                              Never
                          local-index:
                              6
                          logical-interface:
                              |_
                                ----------
                                address-family:
                                    |_
                                      ----------
                                      address-family-flags:
                                          ----------
                                          ifff-sendbcast-pkt-to-re:
                                      address-family-name:
                                          inet
                                      mtu:
                                          Unlimited
                                    |_
                                      ----------
                                      address-family-flags:
                                          ----------
                                          ifff-none:
                                      address-family-name:
                                          inet6
                                      interface-address:
                                          ----------
                                          ifa-flags:
                                              ----------
                                              internal-flags:
                                                  0x800
                                          ifa-local:
                                              fe80::200:f:fc00:0
                                          interface-address:
                                              ----------
                                              in6-addr-flags:
                                                  ----------
                                                  ifaf-none:
                                      intf-curr-cnt:
                                          0
                                      intf-dropcnt:
                                          0
                                      intf-unresolved-cnt:
                                          0
                                      max-local-cache:
                                          0
                                      mtu:
                                          Unlimited
                                      new-hold-limit:
                                          0
                                encapsulation:
                                    Unspecified
                                filter-information:
                                if-config-flags:
                                    ----------
                                    iff-down:
                                    iff-snmp-traps:
                                local-index:
                                    547
                                name:
                                    lo0.0
                                policer-overhead:
                                snmp-index:
                                    16
                                traffic-statistics:
                                    ----------
                                    input-packets:
                                        0
                                    output-packets:
                                        0
                              |_
                                ----------
                                address-family:
                                    ----------
                                    address-family-flags:
                                        ----------
                                        ifff-none:
                                    address-family-name:
                                        inet
                                    mtu:
                                        Unlimited
                                encapsulation:
                                    Unspecified
                                filter-information:
                                if-config-flags:
                                    ----------
                                    iff-down:
                                    iff-snmp-traps:
                                local-index:
                                    548
                                name:
                                    lo0.16385
                                policer-overhead:
                                snmp-index:
                                    22
                                traffic-statistics:
                                    ----------
                                    input-packets:
                                        52230
                                    output-packets:
                                        52230
                          mtu:
                              Unlimited
                          name:
                              lo0
                          oper-status:
                              up
                          snmp-index:
                              6
                          traffic-statistics:
                              ----------
                              input-packets:
                                  52322
                              output-packets:
                                  52322

Summary for vqfx01
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 186.430 ms

On the proxy:

# more /tmp/rpc.log 
<interface-information style="normal">
<physical-interface>
<name>
lo0
</name>
<admin-status format="Enabled">
up
</admin-status>
<oper-status>
up
</oper-status>
<local-index>
6
</local-index>
<snmp-index>
6
</snmp-index>
<if-type>
Loopback
</if-type>
<mtu>
Unlimited
</mtu>
<if-device-flags>
<ifdf-present/>
<ifdf-running/>
<ifdf-loopback/>
</if-device-flags>
<ifd-specific-config-flags>
</ifd-specific-config-flags>
<if-config-flags>
<iff-snmp-traps/>
</if-config-flags>
<if-media-flags>
<ifmf-none/>
</if-media-flags>
<interface-flapped seconds="0">
Never
</interface-flapped>
<traffic-statistics style="brief">
<input-packets>
52322
</input-packets>
<output-packets>
52322
</output-packets>
</traffic-statistics>
<logical-interface>
<name>
lo0.0
</name>
<local-index>
547
</local-index>
<snmp-index>
16
</snmp-index>
<if-config-flags>
<iff-down/>
<iff-snmp-traps/>
</if-config-flags>
<encapsulation>
Unspecified
</encapsulation>
<policer-overhead>
</policer-overhead>
<traffic-statistics style="brief">
<input-packets>
0
</input-packets>
<output-packets>
0
</output-packets>
</traffic-statistics>
<filter-information>
</filter-information>
<address-family>
<address-family-name>
inet
</address-family-name>
<mtu>
Unlimited
</mtu>
<address-family-flags>
<ifff-sendbcast-pkt-to-re/>
</address-family-flags>
</address-family>
<address-family>
<address-family-name>
inet6
</address-family-name>
<mtu>
Unlimited
</mtu>
<max-local-cache>
0
</max-local-cache>
<new-hold-limit>
0
</new-hold-limit>
<intf-curr-cnt>
0
</intf-curr-cnt>
<intf-unresolved-cnt>
0
</intf-unresolved-cnt>
<intf-dropcnt>
0
</intf-dropcnt>
<address-family-flags>
<ifff-none/>
</address-family-flags>
<interface-address>
<ifa-flags>
<internal-flags>
0x800
</internal-flags>
</ifa-flags>
<ifa-local>
fe80::200:f:fc00:0
</ifa-local>
<interface-address>
<in6-addr-flags>
<ifaf-none/>
</in6-addr-flags>
</interface-address>
</interface-address>
</address-family>
</logical-interface>
<logical-interface>
<name>
lo0.16385
</name>
<local-index>
548
</local-index>
<snmp-index>
22
</snmp-index>
<if-config-flags>
<iff-down/>
<iff-snmp-traps/>
</if-config-flags>
<encapsulation>
Unspecified
</encapsulation>
<policer-overhead>
</policer-overhead>
<traffic-statistics style="brief">
<input-packets>
52230
</input-packets>
<output-packets>
52230
</output-packets>
</traffic-statistics>
<filter-information>
</filter-information>
<address-family>
<address-family-name>
inet
</address-family-name>
<mtu>
Unlimited
</mtu>
<address-family-flags>
<ifff-none/>
</address-family-flags>
</address-family>
</logical-interface>
</physical-interface>
</interface-information>

example 2

install_config2 state file:

# more /srv/salt/install_config2.sls 
salt://config2.set:
  junos: 
    - install_config
    - comment: commit from Salt
    - template_vars: 
        dev_name: qefdwfcxwc
# more /srv/salt/config2.set 
set system host-name {{ template_vars['dev_name'] }}

apply the state file:

# salt "vq*" state.apply install_config2 
vqfx01:
----------
          ID: salt://config2.set
    Function: junos.install_config
      Result: True
     Comment: 
     Started: 13:48:35.874331
    Duration: 2234.312 ms
     Changes:   
              ----------
              message:
                  Successfully loaded and committed!
              out:
                  True

Summary for vqfx01
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:   2.234 s

Verify on the junos device:

vagrant@vqfx01#    
vagrant@qefdwfcxwc#                       
vagrant@qefdwfcxwc# run show system commit 
0   2017-06-24 00:54:05 UTC by root via netconf
    commit from Salt
1   2017-06-24 00:50:41 UTC by vagrant via cli
...
vagrant@qefdwfcxwc# show | compare rollback 1         
[edit system]
-  host-name vqfx01;
+  host-name qefdwfcxwc;
vagrant@qefdwfcxwc# show system host-name 
host-name qefdwfcxwc;

example 3

state file:

# more /srv/salt/install_config.sls 
salt://config.set:
  junos: 
    - install_config
    - comment: commit from Salt
    - template_vars: 
        dev_name: qefdwfcxwc

so value of template_vars['dev_name'] is qefdwfcxwc

# more /srv/salt/config.set 
{% if grains['junos_facts']['personality'] != "SWITCH" %}
set system host-name {{ template_vars['dev_name'] }}
{% else %}
set system host-name {{ pillar["name"] }} 
{% endif %}

pillars:

# more /srv/pillar/top.sls 
base:
  'ex4200-7':
     - ex4200-7-details
  'vsrx01':
     - vsrx01-details
  'vqfx01': 
     - vqfx01-details

# more /srv/pillar/ex4200-7-details.sls 
proxy:
      proxytype: junos
      host: 172.30.179.107
      username: pytraining
#      port: 830
      passwd: Poclab123

name: testdevicename

include: 
  - common_settings

value of {{ pillar["name"] }} is testdevicename

# salt ex4200-7 pillar.items name
ex4200-7:
    ----------
    name:
        testdevicename

value of grains['junos_facts']['personality'] is SWITCH

# salt ex4200-7 grains.item junos_facts
ex4200-7:
    ----------
    junos_facts:
        ----------
        2RE:
            False
        HOME:
            /var/home/remote
        RE0:
            ----------
            last_reboot_reason:
                0x2:watchdog
            mastership_state:
                master
            model:
                EX4200-48T, 8 POE
            status:
                OK
            up_time:
                284 days, 23 hours, 30 minutes, 51 seconds
        RE1:
            None
        RE_hw_mi:
            False
        current_re:
            - master
            - node
            - fwdd
            - member
            - pfem
            - fpc0
            - feb0
            - fpc16
        domain:
            poc-nl.jnpr.net
        fqdn:
            sac.poc-nl.jnpr.net
        hostname:
            sac
        hostname_info:
            ----------
            fpc0:
                sac
        ifd_style:
            SWITCH
        junos_info:
            ----------
            fpc0:
                ----------
                object:
                    ----------
                    build:
                        2
                    major:
                        - 12
                        - 3
                    minor:
                        11
                    type:
                        R
                text:
                    12.3R11.2
        master:
            RE0
        model:
            EX4200-48T
        model_info:
            ----------
            fpc0:
                EX4200-48T
        personality:
            SWITCH
        re_info:
            ----------
            default:
                ----------
                0:
                    ----------
                    last_reboot_reason:
                        0x2:watchdog
                    mastership_state:
                        master
                    model:
                        EX4200-48T, 8 POE
                    status:
                        OK
                default:
                    ----------
                    last_reboot_reason:
                        0x2:watchdog
                    mastership_state:
                        master
                    model:
                        EX4200-48T, 8 POE
                    status:
                        OK
        re_master:
            ----------
            default:
                0
        serialnumber:
            BP0208111225
        srx_cluster:
            None
        srx_cluster_id:
            None
        srx_cluster_redundancy_group:
            None
        switch_style:
            VLAN
        vc_capable:
            True
        vc_fabric:
            False
        vc_master:
            0
        vc_mode:
            Mixed
        version:
            12.3R11.2
        version_RE0:
            None
        version_RE1:
            None
        version_info:
            ----------
            build:
                2
            major:
                - 12
                - 3
            minor:
                11
            type:
                R
        virtual:
            False

apply state file:

# salt "ex*" state.apply install_config 
ex4200-7:
----------
          ID: salt://config.set
    Function: junos.install_config
      Result: True
     Comment: 
     Started: 14:11:19.123108
    Duration: 11010.182 ms
     Changes:   
              ----------
              message:
                  Successfully loaded and committed!
              out:
                  True

Summary for ex4200-7
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:  11.010 s

Verify on Junos device:

pytraining@testdevice>
pytraining@testdevicename>
pytraining@testdevicename> show system commit
0   2017-06-27 14:11:26 CEST by pytraining via netconf
    commit from Salt
1   2017-06-27 14:08:03 CEST by pytraining via cli
...
pytraining@testdevicename> show configuration | compare rollback 1
[edit system]
-  host-name testdevice;
+  host-name testdevicename;
pytraining@testdevicename> show configuration system host-name
host-name testdevicename;
Clone this wiki locally