
เจนเฉ เจนเจฌเจฐ!
เจนเจพเจฒ เจนเฉ เจตเจฟเฉฑเจ เจเฉฑเจฅเฉ เจเฉฑเจ เจฒเฉเจ เจธเจพเจนเจฎเจฃเฉ เจเจเจ เจนเฉเฅค เจเจฟเฉฑเจฅเฉ เจเฉเจตเจฟเจ เจเฉฐเจงเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเฉฑเจ เจธเจฎเจพเจจ เจธเจฎเฉฑเจธเจฟเจ เจฆเจพ เจนเฉฑเจฒ เจเฉเจคเจพ เจเจฟเจ เจธเฉเฅค เจ เจคเฉ เจนเจพเจฒเจพเจเจเจฟ เจเจน เจธเจฎเฉฑเจธเจฟเจ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจเจฎ เจนเฉ, Habr 'เจคเฉ เจเจธ เจตเจฐเจเจพ เจเฉเจ เจตเฉ เจจเจนเฉเจ เจนเฉเฅค เจฎเฉเจ เจธเจคเจฟเจเจพเจฐเจฏเฉเจ IT เจญเจพเจเจเจพเจฐเฉ เจจเฉเฉฐ เจเจชเจฃเจพ เจนเฉฑเจฒ เจชเฉเจธเจผ เจเจฐเจจ เจฆเจพ เจเฉฑเจฆเจฎ เจเจฐเจพเจเจเจพเฅค
เจเจน เจเจธ เจฎเจเจธเจฆ เจฒเจ เจคเจฟเจเจฐ เจเฉเจคเฉ เจเจ เจชเจนเจฟเจฒเฉ เจฌเจพเจเจ เจจเจนเฉเจ เจนเฉเฅค เจชเจนเจฟเจฒเจพ เจตเจฐเจเจจ เจเจ เจธเจพเจฒ เจชเจนเจฟเจฒเจพเจ เจฌเจฃเจพเจเจ เจเจฟเจ เจธเฉเฅค เจเจตเจพเจฌเจฆเฉเจน เจตเจฐเจเจจ 1.x.x. เจธเจพเจเจเจฒ เจฌเจนเฉเจค เจเฉฑเจ เจตเจฐเจคเจฟเจ เจเจพเจเจฆเจพ เจธเฉ เจ เจคเฉ เจเจธ เจฒเจ เจเจธเจจเฉเฉฐ เจฒเจเจพเจคเจพเจฐ เจเฉฐเจเจพเจฒ เจฒเฉฑเจ เจเจพเจเจฆเจพ เจธเฉเฅค เจเจธ เจ เจฐเจฅ เจตเจฟเฉฑเจ เจเจฟ เจธเจฎเฉฑเจธเจฟเจ เจเจชเจฃเฉ เจเจช เจตเจฟเฉฑเจ เจตเจฐเจเจจ เจ เฉฑเจชเจกเฉเจ เจเจฟเฉฐเจจเฉ เจตเจพเจฐ เจจเจนเฉเจ เจเจเจเจฆเฉเฅค เจเจตเจพเจฌเจฆเฉเจนเจ เจคเฉ เจนเจฐ เจตเจพเจฐ เจเจฆเฉเจ เจฎเฉเจจเฉเฉฐ เจธเจตเจพเจฐเฉ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ, เจคเจพเจ เจเฉเจจ เจกเจฟเฉฑเจ เจเจพเจเจฆเฉ เจนเฉ, เจเจพเจ เจชเจนเฉเจ เจกเจฟเฉฑเจ เจเจพเจเจฆเจพ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจชเจนเจฟเจฒเจพ เจนเจฟเฉฑเจธเจพ, เจธเฉฐเจฐเจเจจเจพเจตเจพเจ เจคเจฟเจเจฐ เจเจฐเจฆเจพ เจนเฉ, เจนเจฎเฉเจธเจผเจพ เจฌเจนเฉเจค เจตเจงเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ, เจธเจผเฉเจเจฐ เจนเฉเฅค jinja2 เจเฉฐเจเจฃ เจเฉฐเจเฉ เจคเจฐเฉเจนเจพเจ เจธเจฅเจพเจชเจฟเจค เจนเฉเฅค เจชเจฐ เจฆเฉเจเจพ เจนเจฟเฉฑเจธเจพโเจธเฉฐเจฐเจเจจเจพเจตเจพเจ เจจเฉเฉฐ เจคเฉเจจเจพเจค เจเจฐเจจเจพโเจเจฎ เจคเฉเจฐ 'เจคเฉ เจนเฉเจฐเจพเจจเฉเจเจ เจฒเจฟเจเจเจเจฆเจพ เจนเฉเฅค เจ เจคเฉ เจเจฟเจเจเจเจฟ เจฎเฉเจจเฉเฉฐ เจธเฉฐเจฐเจเจจเจพ เจจเฉเฉฐ เจฐเจฟเจฎเฉเจเจฒเฉ เจชเฉฐเจเจพเจน เจกเจฟเจตเจพเจเจธเจพเจ 'เจคเฉ เจคเฉเจจเจพเจค เจเจฐเจจเจพ เจชเฉเจเจฆเจพ เจนเฉ, เจเจฟเจจเฉเจนเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉเจ เจนเจเจผเจพเจฐเจพเจ เจเจฟเจฒเฉเจฎเฉเจเจฐ เจฆเฉเจฐ เจนเจจ, เจเจธ เจเฉเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ เจฅเฉเฉเฉเจนเจพ เจฎเฉเจธเจผเจเจฒ เจธเฉเฅค
เจเฉฑเจฅเฉ เจฎเฉเจจเฉเฉฐ เจเจน เจธเจตเฉเจเจพเจฐ เจเจฐเจจเจพ เจชเจตเฉเจเจพ เจเจฟ เจฎเฉเจฐเฉ เจ เจจเจฟเจธเจผเจเจฟเจคเจคเจพ เจธเฉฐเจญเจพเจตเจค เจคเฉเจฐ 'เจคเฉ เจฎเฉเจฐเฉ เจเจพเจฃ-เจชเจเจพเจฃ เจฆเฉ เจเจพเจ เจตเจฟเฉฑเจ เจเฉเฉเจน เจนเฉ เจเจตเจพเจฌเจฆเฉเจน, เจเจธเจฆเฉเจเจ เจเจฎเฉเจเจ เจฆเฉ เจฌเจเจพเจเฅค เจ เจคเฉ เจเจน, เจตเฉเจธเฉ, เจเฉฑเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจจเฉเจเจคเจพ เจนเฉเฅค เจเจตเจพเจฌเจฆเฉเจน โ เจเฉฑเจ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจตเฉฑเจเจฐเจพ เจนเฉ, เจเจธเจฆเจพ เจเจชเจฃเจพ เจเจฟเจเจจ เจเฉเจคเจฐ เจนเฉ เจเจฟเจธเจฆเฉ เจเจชเจฃเฉ DSL (เจกเฉเจฎเฉเจจ เจธเจชเฉเจธเฉเจซเจฟเจ เจฒเฉเจเจเจตเฉเจ) เจนเฉ, เจเจฟเจธเจฆเจพ เจธเจฎเจฐเจฅเจจ เจเฉฑเจ เจญเจฐเฉเจธเฉเจฎเฉฐเจฆ เจชเฉฑเจงเจฐ 'เจคเฉ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค เจเฉเจฐ, เจ เจคเฉ เจเจน เจจเฉเจเจคเจพ เจเจฟ เจเจตเจพเจฌเจฆเฉเจน เจเจน เจเจพเจซเจผเฉ เจคเฉเจเจผเฉ เจจเจพเจฒ เจตเจฟเจเจธเจค เจนเฉเฉฐเจฆเจพ เจนเฉ, เจ เจคเฉ เจชเจฟเจเฉเฉ เจ เจจเฉเจเฉเจฒเจคเจพ เจฆเฉ เจฌเจนเฉเจคเฉ เจชเจฐเจตเจพเจน เจเฉเจคเฉ เจฌเจฟเจจเจพเจ, เจเฉ เจตเจฟเจธเจผเจตเจพเจธ เจจเฉเฉฐ เจชเฉเจฐเฉเจฐเจฟเจค เจจเจนเฉเจ เจเจฐเจฆเจพเฅค
เจเจธเฉ เจฒเจ เจธเจพเจเจเจฒ เจฆเจพ เจฆเฉเจเจพ เจธเฉฐเจธเจเจฐเจฃ เจนเจพเจฒ เจนเฉ เจตเจฟเฉฑเจ เจเจพเจฐเฉ เจเฉเจคเจพ เจเจฟเจ เจธเฉเฅค เจเจธ เจตเจพเจฐ, เจชเจพเจเจฅเจจ, เจเจพเจ เจนเฉเจฐ เจธเจชเจธเจผเจ เจคเฉเจฐ 'เจคเฉ, เจเฉฑเจ เจขเจพเจเจเฉ 'เจคเฉ เจเฉ เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจฟเจ เจนเฉ เจชเจพเจเจฅเจจ เจ เจคเฉ เจฒเจ เจชเจพเจเจฅเจจ เจจเจพเจฎ เจนเฉเจ
เจคเจพเจ - เจจเฉเจฐเจจเฉเจฐ เจเจน เจเฉฑเจ เจฎเจพเจเจเฉเจฐเฉเจซเฉเจฐเฉเจฎเจตเจฐเจ เจนเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจฟเจ เจนเฉ เจชเจพเจเจฅเจจ เจ เจคเฉ เจฒเจ เจชเจพเจเจฅเจจ เจ เจคเฉ เจเจเฉเจฎเฉเจธเจผเจจ เจฒเจ เจคเจฟเจเจฐ เจเฉเจคเจพ เจเจฟเจ เจนเฉเฅค เจฌเจฟเจฒเจเฉเจฒ เจเจฟเจตเฉเจ เจเจฟ เจฆเฉ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ เจเจตเจพเจฌเจฆเฉเจนเจเฉฑเจฅเฉ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฒเจ, เจธเจนเฉ เจกเฉเจเจพ เจคเจฟเจเจฐเฉ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจญเจพเจต, เจนเฉเจธเจเจพเจ เจ เจคเฉ เจเจนเจจเจพเจ เจฆเฉ เจชเฉเจฐเจพเจฎเฉเจเจฐเจพเจ เจฆเฉ เจเฉฑเจ เจธเฉเจเฉ, เจชเจฐ เจธเจเฉเจฐเจฟเจชเจเจพเจ เจเฉฑเจ เจตเฉฑเจเจฐเฉ DSL เจตเจฟเฉฑเจ เจจเจนเฉเจ, เจธเจเฉเจ เจฌเจนเฉเจค เจชเฉเจฐเจพเจฃเฉ เจจเจนเฉเจ, เจชเจฐ เจฌเจนเฉเจค เจตเจงเฉเจ Python เจตเจฟเฉฑเจ เจฒเจฟเจเฉเจเจ เจเจเจเจ เจนเจจเฅค
เจเจ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจ เจธเจฒ-เจเฉเจตเจจ เจเจฆเจพเจนเจฐเจฃ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจตเฉเจเฉเจ เจเจฟ เจเจน เจเฉ เจนเฉเฅค
เจฎเฉเจฐเจพ เจฆเฉเจธเจผ เจญเจฐ เจตเจฟเฉฑเจ เจเจ เจฆเจฐเจเจจ เจฆเจซเจผเจคเจฐเจพเจ เจตเจพเจฒเจพ เจเฉฑเจ เจฌเฉเจฐเจพเจเจ เจจเฉเฉฑเจเจตเจฐเจ เจนเฉเฅค เจนเจฐเฉเจ เจฆเจซเจผเจคเจฐ เจตเจฟเฉฑเจ เจเฉฑเจ WAN เจฐเจพเจเจเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉ เจเฉ เจตเฉฑเจ-เจตเฉฑเจ เจเจชเจฐเฉเจเจฐเจพเจ เจคเฉเจ เจเจ เจธเฉฐเจเจพเจฐ เจเฉเจจเจฒเจพเจ เจจเฉเฉฐ เจเจคเจฎ เจเจฐเจฆเจพ เจนเฉเฅค เจฐเฉเจเจฟเฉฐเจ เจชเฉเจฐเฉเจเฉเจเฉเจฒ BGP เจนเฉเฅค WAN เจฐเจพเจเจเจฐ เจฆเฉ เจเจฟเจธเจฎเจพเจ เจตเจฟเฉฑเจ เจเจเจเจฆเฉ เจนเจจ: Cisco ISG เจเจพเจ Juniper SRXเฅค
เจนเฉเจฃ เจเฉฐเจฎ: เจฌเฉเจฐเจพเจเจ เจจเฉเฉฑเจเจตเจฐเจ เจฆเฉ เจธเจพเจฐเฉ WAN เจฐเจพเจเจเจฐเจพเจ 'เจคเฉ เจเฉฑเจ เจตเฉฑเจเจฐเฉ เจชเฉเจฐเจ 'เจคเฉ เจตเฉเจกเฉเจ เจจเจฟเจเจฐเจพเจจเฉ เจฒเจ เจเฉฑเจ เจธเจฎเจฐเจชเจฟเจค เจธเจฌเจจเฉเฉฑเจ เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจเจพ เจเจผเจฐเฉเจฐเฉ เจนเฉ - เจเจธ เจธเจฌเจจเฉเฉฑเจ เจฆเจพ เจเจฒเจพเจจ BGP เจตเจฟเฉฑเจ เจเจฐเฉ - เจธเจฎเจฐเจชเจฟเจค เจชเฉเจฐเจ เจฆเฉ เจเจคเฉ เจธเฉเจฎเจพ เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเฉเฅค
เจชเจนเจฟเจฒเจพเจ, เจธเจพเจจเฉเฉฐ เจเฉเจ เจเฉเจเจชเจฒเฉเจ เจคเจฟเจเจฐ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเฉ เจธเจฟเจธเจเฉ เจ เจคเฉ เจเฉเจจเฉเจชเจฐ เจฒเจ เจตเฉฑเจเจฐเฉ เจคเฉเจฐ 'เจคเฉ เจธเฉฐเจฐเจเจจเจพ เจคเจฟเจเจฐ เจเจฐเจจ เจฒเจ เจตเจฐเจคเฉ เจเจพเจฃเจเฉเฅค เจธเจพเจจเฉเฉฐ เจนเจฐเฉเจ เจฌเจฟเฉฐเจฆเฉ เจ เจคเฉ เจเจจเฉเจเจธเจผเจจ เจชเฉเจฐเจพเจฎเฉเจเจฐเจพเจ เจฒเจ เจกเฉเจเจพ เจคเจฟเจเจฐ เจเจฐเจจ เจฆเฉ เจตเฉ เจฒเฉเฉ เจนเฉ, เจฏเจพเจจเฉ เจเจฟ เจตเจธเจคเฉ เจธเฉเจเฉ เจเจเฉฑเจ เฉ เจเจฐเจจเฉเฅค
เจธเจฟเจธเจเฉ เจฒเจ เจคเจฟเจเจฐ เจเฉเจเจชเจฒเฉเจ:
$ cat templates/ios/base.j2
class-map match-all VIDEO_SURV
match access-group 111
policy-map VIDEO_SURV
class VIDEO_SURV
police 1500000 conform-action transmit exceed-action drop
interface {{ host.task_data.ifname }}
description VIDEOSURV
ip address 10.10.{{ host.task_data.ipsuffix }}.254 255.255.255.0
service-policy input VIDEO_SURV
router bgp {{ host.task_data.asn }}
network 10.40.{{ host.task_data.ipsuffix }}.0 mask 255.255.255.0
access-list 11 permit 10.10.{{ host.task_data.ipsuffix }}.0 0.0.0.255
access-list 111 permit ip 10.10.{{ host.task_data.ipsuffix }}.0 0.0.0.255 anyเจเฉเจจเฉเจชเจฐ เจฒเจ เจเฉเจเจชเจฒเฉเจ:
$ cat templates/junos/base.j2
set interfaces {{ host.task_data.ifname }} unit 0 description "Video surveillance"
set interfaces {{ host.task_data.ifname }} unit 0 family inet filter input limit-in
set interfaces {{ host.task_data.ifname }} unit 0 family inet address 10.10.{{ host.task_data.ipsuffix }}.254/24
set policy-options policy-statement export2bgp term 1 from route-filter 10.10.{{ host.task_data.ipsuffix }}.0/24 exact
set security zones security-zone WAN interfaces {{ host.task_data.ifname }}
set firewall policer policer-1m if-exceeding bandwidth-limit 1m
set firewall policer policer-1m if-exceeding burst-size-limit 187k
set firewall policer policer-1m then discard
set firewall policer policer-1.5m if-exceeding bandwidth-limit 1500000
set firewall policer policer-1.5m if-exceeding burst-size-limit 280k
set firewall policer policer-1.5m then discard
set firewall filter limit-in term 1 then policer policer-1.5m
set firewall filter limit-in term 1 then count limiterเจเฉเจเจชเจฒเฉเจ, เจฌเฉเจธเจผเฉฑเจ, เจธเจฟเจฐเจซเจผ เจนเจตเจพ เจตเจฟเฉฑเจเฉเจ เจจเจนเฉเจ เจเฉฑเจขเฉ เจเจพเจเจฆเฉเฅค เจเจน เจตเฉฑเจ-เจตเฉฑเจ เจฎเจพเจกเจฒเจพเจ เจฆเฉ เจฆเฉ เจเจพเจธ เจฐเจพเจเจเจฐเจพเจ 'เจคเฉ เจฆเจฟเฉฑเจคเฉ เจเจ เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจคเฉเจ เจฌเจพเจ เจฆ เจเฉฐเจฎ เจเจฐเจจ เจตเจพเจฒเฉเจเจ เจธเฉฐเจฐเจเจจเจพเจตเจพเจ เจฆเฉ เจฎเฉเจฒ เจฐเฉเจช เจตเจฟเฉฑเจ เจญเจฟเฉฐเจจ เจนเฉเฉฐเจฆเฉ เจนเจจเฅค
เจธเจพเจกเฉ เจเฉเจเจชเจฒเฉเจเจพเจ เจคเฉเจ, เจ เจธเฉเจ เจฆเฉเจเจฆเฉ เจนเจพเจ เจเจฟ เจเฉเจจเฉเจชเจฐ เจฒเจ เจฆเฉ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจ เจคเฉ เจธเจฟเจธเจเฉ เจฒเจ เจคเจฟเฉฐเจจ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฒเจ เจเจพเจซเจผเฉ เจนเจจเฅค เจเจน เจเฉฑเจฅเฉ เจนเจจ:
- ifname
- ip เจชเจฟเจเฉเจคเจฐ
- asn
เจนเฉเจฃ เจธเจพเจจเฉเฉฐ เจนเจฐเฉเจ เจกเจฟเจตเจพเจเจธ เจฒเจ เจเจน เจชเฉเจฐเจพเจฎเฉเจเจฐ เจธเฉเฉฑเจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจฏเจพเจจเฉ เจเจฟ เจเจนเฉ เจเฉฐเจฎ เจเจฐเฉเฅค เจตเจธเจคเฉ.
เจเจฐเจจ เจฒเจ เจตเจธเจคเฉ เจ เจธเฉเจ เจฆเจธเจคเจพเจตเฉเจเจผเจพเจ เจฆเฉ เจธเจเจผเจคเฉ เจจเจพเจฒ เจชเจพเจฒเจฃเจพ เจเจฐเจพเจเจเฉเฅค
เจฏเจพเจจเฉ เจเจฟ เจเจ เจเจนเฉ เจซเจพเจเจฒ เจธเจเฉเจฒเจเจจ เจฌเจฃเจพเจเจ:
.
โโโ config.yaml
โโโ inventory
โ โโโ defaults.yaml
โ โโโ groups.yaml
โ โโโ hosts.yamlconfig.yaml เจซเจพเจเจฒ เจกเจฟเจซเจพเจฒเจ nornir เจเฉเจเจซเจฟเจเจฐเฉเจธเจผเจจ เจซเจพเจเจฒ เจนเฉเฅค
$ cat config.yaml
---
core:
num_workers: 10
inventory:
plugin: nornir.plugins.inventory.simple.SimpleInventory
options:
host_file: "inventory/hosts.yaml"
group_file: "inventory/groups.yaml"
defaults_file: "inventory/defaults.yaml"เจ เจธเฉเจ เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจฎเฉเฉฑเจ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจฆเฉฑเจธเจพเจเจเฉเฅค เจนเฉเจธเจเจธ.เจฏเจพเจฎเจฒ, เจธเจฎเฉเจน (เจฎเฉเจฐเฉ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ เจเจน เจฒเจพเจเจเจจ/เจชเจพเจธเจตเจฐเจก เจนเจจ) เจตเจฟเฉฑเจ เจเจฐเฉเฉฑเจชเจธ.เจฏเฉเจฎเจฒเจ เจคเฉ เจ เฉฐเจฆเจฐ เจกเจฟเจซเจพเจฒเจ.เจฏเฉเจฎเจฒ เจ เจธเฉเจ เจเฉเจ เจตเฉ เจจเจนเฉเจ เจฆเฉฑเจธเจพเจเจเฉ, เจชเจฐ เจเฉฑเจฅเฉ เจคเจฟเฉฐเจจ เจเจเจพเจ เจฒเจฟเจเจฃเฉ เจเจผเจฐเฉเจฐเฉ เจนเจจ - เจเจน เจฆเจฐเจธเจพเจเจเจฆเฉ เจนเฉเจ เจเจฟ เจเจน เจนเฉ yaml เจนเจพเจฒเจพเจเจเจฟ เจซเจพเจเจฒ เจเจพเจฒเฉ เจนเฉเฅค
hosts.yaml เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเจฟเจเจฆเจพ เจนเฉ:
---
srx-test:
hostname: srx-test
groups:
- juniper
data:
task_data:
ifname: fe-0/0/2
ipsuffix: 111
cisco-test:
hostname: cisco-test
groups:
- cisco
data:
task_data:
ifname: GigabitEthernet0/1/1
ipsuffix: 222
asn: 65111เจ เจคเฉ เจเจน groups.yaml เจนเฉ:
---
cisco:
platform: ios
username: admin1
password: cisco1
juniper:
platform: junos
username: admin2
password: juniper2เจเจนเฉ เจนเฉเจเจเฅค เจตเจธเจคเฉ เจธเจพเจกเฉ เจเฉฐเจฎ เจฒเจเฅค เจธเจผเฉเจฐเฉเจเจค เจฆเฉเจฐเจพเจจ, เจตเจธเจคเฉ เจธเฉเจเฉ เจซเจพเจเจฒเจพเจ เจฆเฉ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจเจฌเจเฉเจเจ เจฎเจพเจกเจฒ เจจเจพเจฒ เจฎเฉเจช เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจเฅค เจเจจเจตเฉเจเจเจฐเฉ เจเจฒเฉเจฎเฉเจเจ.
เจธเจชเฉเจเจฒเจฐ เจฆเฉ เจนเฉเจ เจพเจ เจเจจเจตเฉเจเจเจฐเฉ เจเจฒเฉเจฎเฉเจเจ เจฎเจพเจกเจฒ เจฆเจพ เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจนเฉเฅค
print(json.dumps(InventoryElement.schema(), indent=4))
{
"title": "InventoryElement",
"type": "object",
"properties": {
"hostname": {
"title": "Hostname",
"type": "string"
},
"port": {
"title": "Port",
"type": "integer"
},
"username": {
"title": "Username",
"type": "string"
},
"password": {
"title": "Password",
"type": "string"
},
"platform": {
"title": "Platform",
"type": "string"
},
"groups": {
"title": "Groups",
"default": [],
"type": "array",
"items": {
"type": "string"
}
},
"data": {
"title": "Data",
"default": {},
"type": "object"
},
"connection_options": {
"title": "Connection_Options",
"default": {},
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/ConnectionOptions"
}
}
},
"definitions": {
"ConnectionOptions": {
"title": "ConnectionOptions",
"type": "object",
"properties": {
"hostname": {
"title": "Hostname",
"type": "string"
},
"port": {
"title": "Port",
"type": "integer"
},
"username": {
"title": "Username",
"type": "string"
},
"password": {
"title": "Password",
"type": "string"
},
"platform": {
"title": "Platform",
"type": "string"
},
"extras": {
"title": "Extras",
"type": "object"
}
}
}
}
}เจเจน เจฎเจพเจกเจฒ เจฅเฉเฉเฉเจนเจพ เจเจฒเจเจฃ เจตเจพเจฒเจพ เจนเฉ เจธเจเจฆเจพ เจนเฉ, เจเจพเจธ เจเจฐเจเฉ เจชเจนเจฟเจฒเจพเจ เจคเจพเจเฅค เจเฉฐเจเจฐเจเจเจเจฟเจต เจฎเฉเจก เจเจธเจจเฉเฉฐ เจธเจฎเจเจฃ เจตเจฟเฉฑเจ เจฌเจนเฉเจค เจฎเจฆเจฆเจเจพเจฐ เจนเฉเฅค เจเจเจชเจพเจเจฅเจจ.
$ ipython3
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.1.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]: from nornir import InitNornir
In [2]: nr = InitNornir(config_file="config.yaml", dry_run=True)
In [3]: nr.inventory.hosts
Out[3]:
{'srx-test': Host: srx-test, 'cisco-test': Host: cisco-test}
In [4]: nr.inventory.hosts['srx-test'].data
Out[4]: {'task_data': {'ifname': 'fe-0/0/2', 'ipsuffix': 111}}
In [5]: nr.inventory.hosts['srx-test']['task_data']
Out[5]: {'ifname': 'fe-0/0/2', 'ipsuffix': 111}
In [6]: nr.inventory.hosts['srx-test'].platform
Out[6]: 'junos'
เจ เจคเฉ เจ เฉฐเจค เจตเจฟเฉฑเจ, เจเจ เจธเจเฉเจฐเจฟเจชเจ เจตเฉฑเจฒ เจตเจงเฉเจเฅค เจฎเฉเจจเฉเฉฐ เจเจธ 'เจคเฉ เจเจพเจธ เจฎเจพเจฃ เจจเจนเฉเจ เจนเฉเฅค เจฎเฉเจ เจฌเจธ เจเฉฑเจ เจคเจฟเจเจฐ เจเจฆเจพเจนเจฐเจฃ เจฒเจ เจนเฉ เจ เจคเฉ เจเจธเจจเฉเฉฐ เจฒเจเจญเจ เจฌเจฟเจจเจพเจ เจเจฟเจธเฉ เจฌเจฆเจฒเจพเจ เจฆเฉ เจตเจฐเจคเจฟเจเฅค เจฎเฉเจเฉฐเจฎเจฒ เจนเฉเจ เจเฉฐเจฎ เจเจฐเจจ เจตเจพเจฒเฉ เจธเจเฉเจฐเจฟเจชเจ เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเจฟเจเจพเจ เจฆเจฟเฉฐเจฆเฉ เจนเฉ:
from nornir import InitNornir
from nornir.plugins.tasks import networking, text
from nornir.plugins.functions.text import print_title, print_result
def config_and_deploy(task):
# Transform inventory data to configuration via a template file
r = task.run(task=text.template_file,
name="Base Configuration",
template="base.j2",
path=f"templates/{task.host.platform}")
# Save the compiled configuration into a host variable
task.host["config"] = r.result
# Save the compiled configuration into a file
with open(f"configs/{task.host.hostname}", "w") as f:
f.write(r.result)
# Deploy that configuration to the device using NAPALM
task.run(task=networking.napalm_configure,
name="Loading Configuration on the device",
replace=False,
configuration=task.host["config"])
nr = InitNornir(config_file="config.yaml", dry_run=True) # set dry_run=False, cross your fingers and run again
# run tasks
result = nr.run(task=config_and_deploy)
print_result(result)เจชเฉเจฐเจพเจฎเฉเจเจฐ เจตเฉฑเจฒ เจงเจฟเจเจจ เจฆเจฟเจ dry_run=เจธเฉฑเจ เจเจฌเจเฉเจเจ เจธเจผเฉเจฐเฉเจเจคเฉ เจฒเจพเจเจจ เจตเจฟเฉฑเจ nr.
เจเจน เจเฉฑเจฅเฉ เจตเฉ เจเจนเฉ เจนเฉ เจเฉ เจตเจฟเฉฑเจ เจนเฉเฅค เจเจตเจพเจฌเจฆเฉเจน เจเฉฑเจ เจเฉเจธเจ เจฐเจจ เจฒเจพเจเฉ เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจเจฟเจธ เจฆเฉเจฐเจพเจจ เจฐเจพเจเจเจฐ เจจเจพเจฒ เจเฉฑเจ เจเจจเฉเจเจธเจผเจจ เจธเจฅเจพเจชเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจเฉฑเจ เจจเจตเฉเจ เจธเฉเจงเฉ เจนเฉเจ เจธเฉฐเจฐเจเจจเจพ เจคเจฟเจเจฐ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจเจฟเจธเจจเฉเฉฐ เจซเจฟเจฐ เจกเจฟเจตเจพเจเจธ เจฆเฉเจเจฐเจพ เจชเฉเจฐเจฎเจพเจฃเจฟเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ (เจชเจฐ เจเจน เจจเจฟเจธเจผเจเจฟเจค เจจเจนเฉเจ เจนเฉ; เจเจน เจกเจฟเจตเจพเจเจธ เจธเจนเจพเจเจคเจพ เจ
เจคเฉ NAPALM เจตเจฟเฉฑเจ เจกเจฐเจพเจเจตเจฐ เจฒเจพเจเฉเจเจฐเจจ 'เจคเฉ เจจเจฟเจฐเจญเจฐ เจเจฐเจฆเจพ เจนเฉ), เจชเจฐ เจจเจตเฉเจ เจธเฉฐเจฐเจเจจเจพ เจธเจฟเฉฑเจงเฉ เจคเฉเจฐ 'เจคเฉ เจฒเจพเจเฉ เจจเจนเฉเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉเฅค เจเจคเจชเจพเจฆเจจ เจตเจฐเจคเฉเจ เจฒเจ, เจชเฉเจฐเจพเจฎเฉเจเจฐ เจจเฉเฉฐ เจนเจเจพเจเจ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค เจกเจฐเจพเจ_เจฐเจจ เจเจพเจ เจเจธเจฆเจพ เจฎเฉเฉฑเจฒ เจเจธ เจตเจฟเฉฑเจ เจฌเจฆเจฒเฉ เจเฉเจ เฉ.
เจธเจเฉเจฐเจฟเจชเจ เจเจฒเจพเจเจฃ เจตเฉเจฒเฉ, เจจเฉเจฐเจจเจฟเจฐ เจเฉฐเจธเฉเจฒ เจจเฉเฉฐ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจฒเฉเจ เจเจเจเจชเฉเฉฑเจ เจเจฐเจฆเจพ เจนเฉเฅค
เจธเจชเฉเจเจฒเจฐ เจฆเฉ เจนเฉเจ เจพเจ เจฆเฉ เจเฉเจธเจ เจฐเจพเจเจเจฐเจพเจ 'เจคเฉ เจฒเจพเจเจต เจฐเจจ เจฆเจพ เจเจเจเจชเฉเฉฑเจ เจนเฉ:
config_and_deploy***************************************************************
* cisco-test ** changed : True *******************************************
vvvv config_and_deploy ** changed : True vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO
---- Base Configuration ** changed : True ------------------------------------- INFO
class-map match-all VIDEO_SURV
match access-group 111
policy-map VIDEO_SURV
class VIDEO_SURV
police 1500000 conform-action transmit exceed-action drop
interface GigabitEthernet0/1/1
description VIDEOSURV
ip address 10.10.222.254 255.255.255.0
service-policy input VIDEO_SURV
router bgp 65001
network 10.10.222.0 mask 255.255.255.0
access-list 11 permit 10.10.222.0 0.0.0.255
access-list 111 permit ip 10.10.222.0 0.0.0.255 any
---- Loading Configuration on the device ** changed : True --------------------- INFO
+class-map match-all VIDEO_SURV
+ match access-group 111
+policy-map VIDEO_SURV
+ class VIDEO_SURV
+interface GigabitEthernet0/1/1
+ description VIDEOSURV
+ ip address 10.10.222.254 255.255.255.0
+ service-policy input VIDEO_SURV
+router bgp 65001
+ network 10.10.222.0 mask 255.255.255.0
+access-list 11 permit 10.10.222.0 0.0.0.255
+access-list 111 permit ip 10.10.222.0 0.0.0.255 any
^^^^ END config_and_deploy ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* srx-test ** changed : True *******************************************
vvvv config_and_deploy ** changed : True vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv INFO
---- Base Configuration ** changed : True ------------------------------------- INFO
set interfaces fe-0/0/2 unit 0 description "Video surveillance"
set interfaces fe-0/0/2 unit 0 family inet filter input limit-in
set interfaces fe-0/0/2 unit 0 family inet address 10.10.111.254/24
set policy-options policy-statement export2bgp term 1 from route-filter 10.10.111.0/24 exact
set security zones security-zone WAN interfaces fe-0/0/2
set firewall policer policer-1m if-exceeding bandwidth-limit 1m
set firewall policer policer-1m if-exceeding burst-size-limit 187k
set firewall policer policer-1m then discard
set firewall policer policer-1.5m if-exceeding bandwidth-limit 1500000
set firewall policer policer-1.5m if-exceeding burst-size-limit 280k
set firewall policer policer-1.5m then discard
set firewall filter limit-in term 1 then policer policer-1.5m
set firewall filter limit-in term 1 then count limiter
---- Loading Configuration on the device ** changed : True --------------------- INFO
[edit interfaces]
+ fe-0/0/2 {
+ unit 0 {
+ description "Video surveillance";
+ family inet {
+ filter {
+ input limit-in;
+ }
+ address 10.10.111.254/24;
+ }
+ }
+ }
[edit]
+ policy-options {
+ policy-statement export2bgp {
+ term 1 {
+ from {
+ route-filter 10.10.111.0/24 exact;
+ }
+ }
+ }
+ }
[edit security zones]
security-zone test-vpn { ... }
+ security-zone WAN {
+ interfaces {
+ fe-0/0/2.0;
+ }
+ }
[edit]
+ firewall {
+ policer policer-1m {
+ if-exceeding {
+ bandwidth-limit 1m;
+ burst-size-limit 187k;
+ }
+ then discard;
+ }
+ policer policer-1.5m {
+ if-exceeding {
+ bandwidth-limit 1500000;
+ burst-size-limit 280k;
+ }
+ then discard;
+ }
+ filter limit-in {
+ term 1 {
+ then {
+ policer policer-1.5m;
+ count limiter;
+ }
+ }
+ }
+ }
^^^^ END config_and_deploy ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ansible_vault เจตเจฟเฉฑเจ เจชเจพเจธเจตเจฐเจก เจฒเฉเจเจพเจเจฃเจพ
เจฒเฉเจ เจฆเฉ เจธเจผเฉเจฐเฉเจเจค เจตเจฟเฉฑเจ เจฎเฉเจ เจฅเฉเฉเฉเจนเจพ เจเจผเจฟเจเจฆเจพ เจเจฐ เจฆเจฟเฉฑเจคเจพ เจธเฉเฅค เจเจตเจพเจฌเจฆเฉเจน, เจชเจฐ เจเฉฑเจฅเฉ เจธเจญ เจเฉเจ เจเฉฐเจจเจพ เจฎเจพเฉเจพ เจจเจนเฉเจ เจนเฉเฅค เจฎเฉเจจเฉเฉฐ เจเจน เจธเฉฑเจเจฎเฉเฉฑเจ เจชเจธเฉฐเจฆ เจนเจจเฅค เจตเจพเจฒเจ เจฎเฉเจจเฉเฉฐ เจเจน เจชเจธเฉฐเจฆ เจนเฉ, เจเฉ เจเจฟ เจธเฉฐเจตเฉเจฆเจจเจธเจผเฉเจฒ เจเจพเจฃเจเจพเจฐเฉ เจจเฉเฉฐ เจจเจเจผเจฐ เจคเฉเจ เจฒเฉเจเจพเจเจฃ เจฒเจ เจคเจฟเจเจฐ เจเฉเจคเจพ เจเจฟเจ เจนเฉเฅค เจ เจคเฉ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจฒเฉเจเจพเจ เจจเฉ เจธเจผเจพเจเจฆ เจฆเฉเจเจฟเจ เจนเฉเจตเฉเจเจพ เจเจฟ เจธเจพเจกเฉ เจธเจพเจฐเฉ เจฒเฉเจพเจเฉ เจฐเจพเจเจเจฐเจพเจ เจฒเจ เจธเจพเจกเฉ เจธเจพเจฐเฉ เจฒเฉเจเจเจจ เจ เจคเฉ เจชเจพเจธเจตเจฐเจก เจเฉฑเจ เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจธเจชเจธเจผเจ เจคเฉเจฐ 'เจคเฉ เจฆเจฟเจเจพเจ เจฆเจฟเฉฐเจฆเฉ เจนเจจเฅค เจตเฉฑเจฒเฉเจ gorups.yamlเจเจน เจฏเจเฉเจจเจจ เจตเจงเฉเจ เจจเจนเฉเจ เจนเฉเฅค เจเจ เจเจธ เจกเฉเจเจพ เจจเฉเฉฐ เจเจธ เจจเจพเจฒ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจเจฐเฉเจ เจตเจพเจฒเจ.
เจเจ เจชเฉเจฐเจพเจฎเฉเจเจฐเจพเจ เจจเฉเฉฐ groups.yaml เจคเฉเจ creds.yaml เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒ เจเจฐเฉเจ เจ เจคเฉ เจเจธเจจเฉเฉฐ AES256 เจ เจคเฉ 20-เจ เฉฐเจเจพเจ เจตเจพเจฒเฉ เจชเจพเจธเจตเจฐเจก เจจเจพเจฒ เจเจจเจเฉเจฐเจฟเจชเจ เจเจฐเฉเจ:
$ cd inventory
$ cat creds.yaml
---
cisco:
username: admin1
password: cisco1
juniper:
username: admin2
password: juniper2
$ pwgen 20 -N 1 > vault.passwd
ansible-vault encrypt creds.yaml --vault-password-file vault.passwd
Encryption successful
$ cat creds.yaml
$ANSIBLE_VAULT;1.1;AES256
39656463353437333337356361633737383464383231366233386636333965306662323534626131
3964396534396333363939373539393662623164373539620a346565373439646436356438653965
39643266333639356564663961303535353364383163633232366138643132313530346661316533
6236306435613132610a656163653065633866626639613537326233653765353661613337393839
62376662303061353963383330323164633162386336643832376263343634356230613562643533
30363436343465306638653932366166306562393061323636636163373164613630643965636361
34343936323066393763323633336366366566393236613737326530346234393735306261363239
35663430623934323632616161636330353134393435396632663530373932383532316161353963
31393434653165613432326636616636383665316465623036376631313162646435เจเจน เจฌเจนเฉเจค เจธเฉเจเจพ เจนเฉเฅค เจฌเจธ เจธเจพเจจเฉเฉฐ เจธเจฟเจเจพเจเจฃเจพ เจนเฉ เจฌเจพเจเฉ เจนเฉเฅค เจจเฉเจฐเจจเฉเจฐ- เจเจธ เจกเฉเจเจพ เจจเฉเฉฐ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจ
เจคเฉ เจฒเจพเจเฉ เจเจฐเจจ เจฒเจ เจธเจเฉเจฐเจฟเจชเจเฅค
เจเจน เจเจฐเจจ เจฒเจ, เจธเจพเจกเฉ เจธเจเฉเจฐเจฟเจชเจ เจตเจฟเฉฑเจ เจธเจผเฉเจฐเฉเจเจคเฉ เจฒเจพเจเจจ เจคเฉเจ เจฌเจพเจ
เจฆ nr = InitNornir(config_file=โฆ เจนเฉเจ เจฆเจฟเฉฑเจคเจพ เจเฉเจก เจธเจผเจพเจฎเจฒ เจเจฐเฉ:
...
nr = InitNornir(config_file="config.yaml", dry_run=True) # set dry_run=False, cross your fingers and run again
# enrich Inventory with the encrypted vault data
from ansible_vault import Vault
vault_password_file="inventory/vault.passwd"
vault_file="inventory/creds.yaml"
with open(vault_password_file, "r") as fp:
password = fp.readline().strip()
vault = Vault(password)
vaultdata = vault.load(open(vault_file).read())
for a in nr.inventory.hosts.keys():
item = nr.inventory.hosts[a]
item.username = vaultdata[item.groups[0]]['username']
item.password = vaultdata[item.groups[0]]['password']
#print("hostname={}, username={}, password={}n".format(item.hostname, item.username, item.password))
# run tasks
...เจฌเฉเจถเฉฑเจ, vault.passwd เจจเฉเฉฐ เจฎเฉเจฐเฉ เจเจฆเจพเจนเจฐเจฃ เจตเจพเจเจ creds.yaml เจฆเฉ เจจเจพเจฒ เจจเจนเฉเจ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพเฅค เจชเจฐ เจเจน เจเฉเจกเจฃ เจฒเจ เจ เฉเจ เจนเฉเฅค
เจนเฉเจฃ เจฒเจ เจฌเฉฑเจธ เจเฉฐเจจเจพ เจนเฉเฅค เจฎเฉเจฐเฉ เจเฉเจฒ เจธเจฟเจธเจเฉ เจ เจคเฉ เจเจผเฉเจฌเจฟเจเจธ เจฌเจพเจฐเฉ เจเฉเจ เจนเฉเจฐ เจฒเฉเจ เจเจฒเจฆเฉ เจนเฉ เจเจเจฃ เจตเจพเจฒเฉ เจนเจจ, เจชเจฐ เจเจน เจเจเฉเจฎเฉเจธเจผเจจ เจฌเจพเจฐเฉ เจจเจนเฉเจ เจนเจจเฅค เจ เจคเฉ เจจเฉเฉเจฒเฉ เจญเจตเจฟเฉฑเจ เจตเจฟเฉฑเจ, เจฎเฉเจ เจธเจฟเจธเจเฉ เจตเจฟเฉฑเจ RESTCONF เจฌเจพเจฐเฉ เจฒเจฟเจเจฃ เจฆเฉ เจฏเฉเจเจจเจพ เจฌเจฃเจพ เจฐเจฟเจนเจพ เจนเจพเจเฅค
เจธเจฐเฉเจค: www.habr.com
