rtprov 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []