rtprov 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a398e411bb4dad6a5a9d9729fc8c9c7c6c88620836d08eb4edfef767943eea82
4
- data.tar.gz: 6e475a17877c5bab3b6dff77a347582e0ac5d727684584ace3d9b0ad25e5e517
3
+ metadata.gz: b91fc8dc026c4cb7ce9b65a0fcfb0b547c5b793551e7a2e3bfbbbccfcbcbc31a
4
+ data.tar.gz: 0c92a75b0a93666eaf9a7efc8b05df13aee7a8e546fd210e27165c71cf1024a2
5
5
  SHA512:
6
- metadata.gz: 45e51ed23305e428916884a2c8dd0512332f1deed16edb25de19ba06e50e62e4be8c25e8e1a21929b84049df6ff6e43e41c221607d5cedc6f7046bef412024bc
7
- data.tar.gz: b1580e8ea6d1580a544c405bbac4f150813492bade5f2f84ca7763a5ec86e1aec0a115651c5346889b78930010ddfdb0883e6fd3f154cd7042205b1abf28dfcd
6
+ metadata.gz: f955b8416a6e65a23065de9f6dc051aa730ddd930faa920781ca55c940bb197953b747604a25b0156f6fb1c94c9b4683bce43588fd39e73878fca9a50eed9856
7
+ data.tar.gz: 9c4c2d9d73891671de07795d40ab3ae61b17785111a0242fef153fb347e9944bf61190b28412590a6921040b22bc2702042ea0c09f9d66aa3e6c00c1f2751e66
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ # v0.1.2
2
+
3
+ * add subcommands `print`, `diff`
4
+
5
+ # v0.1.1
6
+
7
+ * support prompt change like 'pp1>' by 'pp select 1'
8
+
1
9
  # v0.1.0
2
10
 
3
11
  * initial release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rtprov (0.1.0)
4
+ rtprov (0.1.2)
5
5
  reversible_cryptography
6
6
  thor
7
7
 
@@ -14,7 +14,7 @@ GEM
14
14
  parser (2.6.3.0)
15
15
  ast (~> 2.4.0)
16
16
  rainbow (3.0.0)
17
- rake (10.5.0)
17
+ rake (13.0.1)
18
18
  reversible_cryptography (0.5.0)
19
19
  thor
20
20
  rubocop (0.74.0)
@@ -25,7 +25,7 @@ GEM
25
25
  ruby-progressbar (~> 1.7)
26
26
  unicode-display_width (>= 1.4.0, < 1.7)
27
27
  ruby-progressbar (1.10.1)
28
- thor (0.20.3)
28
+ thor (1.2.1)
29
29
  unicode-display_width (1.6.0)
30
30
 
31
31
  PLATFORMS
@@ -33,9 +33,9 @@ PLATFORMS
33
33
 
34
34
  DEPENDENCIES
35
35
  bundler (~> 2.0)
36
- rake (~> 10.0)
36
+ rake (~> 13.0)
37
37
  rtprov!
38
38
  rubocop (~> 0.74.0)
39
39
 
40
40
  BUNDLED WITH
41
- 2.0.1
41
+ 2.3.25
data/README.md CHANGED
@@ -80,6 +80,20 @@ rtprov uses `ENV["RTPROV_DIFF"]` or `colordiff` or `diff` to print diff.
80
80
  # Rendering templates/my_config.erb and put to my_route as config1 and load it.
81
81
  $ rtprov put my_router --number 1 my_config
82
82
 
83
+ Templates are ERB file. In template, define variables described in router file.
84
+ For example, in router file,
85
+
86
+ variables:
87
+ foo:
88
+ bar:
89
+ - baz: foobar
90
+
91
+ in template,
92
+
93
+ <%= foo.bar[0].baz >
94
+
95
+ you can get "foobar".
96
+
83
97
 
84
98
  ## Development
85
99
 
data/lib/rtprov/cli.rb CHANGED
@@ -26,6 +26,28 @@ module Rtprov
26
26
  puts sftp.get("/system/config#{options[:number]}")
27
27
  end
28
28
 
29
+ desc "diff ROUTER TEMPLATE", "Show config diff of current and new config"
30
+ option :number, type: :numeric, default: 0, aliases: :n, desc: "Configuration number"
31
+ def diff(router_name, template_name)
32
+ current_file = "/system/config#{options[:number]}"
33
+ router = Router.load(router_name)
34
+
35
+ template = Template.find(router_name, template_name)
36
+ new_config = template.render(router.variables)
37
+
38
+ sftp = Sftp.new(router.host, router.user, router.administrator_password)
39
+ current_config = sftp.get(current_file)
40
+ diff = ENV["RTPROV_DIFF"] || %w(colordiff diff).find {|cmd| system("which", cmd, out: "/dev/null", err: "/dev/null") }
41
+
42
+ Dir.mktmpdir do |dir|
43
+ Dir.chdir(dir) do
44
+ File.write("new.conf", new_config.gsub(/^#.*$/, "").gsub(/(\r\n|\r|\n)+/, "\r\n"))
45
+ File.write("current.conf", current_config.gsub(/^#.*$/, "").gsub(/(\r\n|\r|\n)+/, "\r\n"))
46
+ system("#{diff} -u current.conf new.conf", out: $stdout, err: $stderr)
47
+ end
48
+ end
49
+ end
50
+
29
51
  desc "put ROUTER TEMPLATE", "Put config from router"
30
52
  option :number, type: :numeric, default: 0, aliases: :n, desc: "Configuration number"
31
53
  option :force, type: :boolean, default: false, aliases: :f, desc: "Don't ask to trasfer and load config"
@@ -66,6 +88,16 @@ module Rtprov
66
88
  end
67
89
  end
68
90
 
91
+ desc "print ROUTER TEMPLATE", "Print config"
92
+ option :number, type: :numeric, default: 0, aliases: :n, desc: "Configuration number"
93
+ def print(router_name, template_name)
94
+ router = Router.load(router_name)
95
+
96
+ template = Template.find(router_name, template_name)
97
+ new_config = template.render(router.variables)
98
+ puts new_config
99
+ end
100
+
69
101
  desc "ls", "List routers"
70
102
  def ls
71
103
  Router.names.each do |name|
@@ -4,7 +4,7 @@ require "shellwords"
4
4
 
5
5
  module Rtprov
6
6
  class Session
7
- attr_reader :router, :reader, :writer, :prompt, :prompt_pattern
7
+ attr_reader :router, :reader, :writer, :prompt_prefix, :prompt_pattern
8
8
 
9
9
  def self.start(router, &block)
10
10
  cmd = [
@@ -17,9 +17,9 @@ module Rtprov
17
17
 
18
18
  r.expect(/password/)
19
19
  w.puts router.password
20
- prompt = r.expect(/^(.*>) /)[1]
20
+ prompt_prefix = r.expect(/^(.*)> /)[1]
21
21
 
22
- session = new(router, r, w, prompt)
22
+ session = new(router, r, w, prompt_prefix, ">")
23
23
  session.exec("console character en.ascii")
24
24
  session.exec("console lines infinity") # disable pager
25
25
  session.exec("console columns 200")
@@ -30,12 +30,12 @@ module Rtprov
30
30
  end
31
31
  end
32
32
 
33
- def initialize(router, reader, writer, prompt = ">")
33
+ def initialize(router, reader, writer, prompt_prefix, prompt_suffix)
34
34
  @router = router
35
35
  @reader = reader
36
36
  @writer = writer
37
- @prompt = prompt.dup.freeze
38
- @prompt_pattern = Regexp.compile("^" + Regexp.escape(prompt) + " ").freeze
37
+ @prompt_prefix = prompt_prefix.dup.freeze
38
+ @prompt_pattern = Regexp.compile("^" + Regexp.escape(prompt_prefix) + "[a-z1-9]*" + prompt_suffix + " ").freeze
39
39
  end
40
40
 
41
41
  def exec(cmd)
@@ -58,7 +58,7 @@ module Rtprov
58
58
  reader.expect(/^Administrator Password: /)
59
59
  writer.puts router.administrator_password
60
60
 
61
- writer.puts "console prompt '#{prompt.gsub(/\#$/, "")}'" # load config may change prompt
61
+ writer.puts "console prompt '#{prompt_prefix}'" # load config may change prompt prefix
62
62
  out, * = reader.expect(prompt_pattern)
63
63
 
64
64
  unless out
@@ -76,11 +76,11 @@ module Rtprov
76
76
 
77
77
  begin
78
78
  # set new prompt because default administrator prompt "# " matches config file comment etc.
79
- session = self.class.new(router, reader, writer, "RTPROV#")
79
+ session = self.class.new(router, reader, writer, "RTPROV", "#")
80
80
  session.exec "console prompt RTPROV"
81
81
  block.call(session)
82
82
  ensure
83
- writer.puts "console prompt '#{prompt.gsub(/>$/, "")}'"
83
+ writer.puts "console prompt '#{prompt_prefix}'"
84
84
  reader.expect(/^.*# /)
85
85
  end
86
86
 
@@ -1,3 +1,3 @@
1
1
  module Rtprov
2
- VERSION = "0.1.0".freeze
2
+ VERSION = "0.1.2".freeze
3
3
  end
data/rtprov.gemspec CHANGED
@@ -41,6 +41,6 @@ Gem::Specification.new do |spec|
41
41
  spec.add_dependency "thor"
42
42
 
43
43
  spec.add_development_dependency "bundler", "~> 2.0"
44
- spec.add_development_dependency "rake", "~> 10.0"
44
+ spec.add_development_dependency "rake", "~> 13.0"
45
45
  spec.add_development_dependency "rubocop", "~> 0.74.0"
46
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rtprov
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - labocho
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-09-05 00:00:00.000000000 Z
11
+ date: 2022-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: reversible_cryptography
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '10.0'
61
+ version: '13.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '10.0'
68
+ version: '13.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rubocop
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -117,7 +117,7 @@ metadata:
117
117
  homepage_uri: https://github.com/labocho/rtprov
118
118
  source_code_uri: https://github.com/labocho/rtprov
119
119
  changelog_uri: https://github.com/labocho/rtprov/master/CHANGELOG.md
120
- post_install_message:
120
+ post_install_message:
121
121
  rdoc_options: []
122
122
  require_paths:
123
123
  - lib
@@ -132,8 +132,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  - !ruby/object:Gem::Version
133
133
  version: '0'
134
134
  requirements: []
135
- rubygems_version: 3.0.3
136
- signing_key:
135
+ rubygems_version: 3.3.3
136
+ signing_key:
137
137
  specification_version: 4
138
138
  summary: Yamaha router (RTX or NVR series) provisioning tool
139
139
  test_files: []