This repository was archived by the owner on Oct 12, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
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).
https://docs.saltstack.com/en/latest/ref/states/all/salt.states.junos.html
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
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>
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;
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;