puppet-repl 0.0.2 → 0.0.3

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
  SHA1:
3
- metadata.gz: 264126ccdd7fafe72a52274c967c28ef18d53679
4
- data.tar.gz: 31d01dd0eaa97e130ec51d9679424839d48cb73d
3
+ metadata.gz: 5d5637d4132c4a51886e9ed737581c7a8f99b261
4
+ data.tar.gz: 00af9d2c0e0ad195268e6d35545ad8ab67627d1d
5
5
  SHA512:
6
- metadata.gz: c12edea95534472ad07ba667ecdebd21a6d5f61eeccf01950b587e9e43eb6ea23563ccd5743731f91aba7f0245bb0898fdbe1580e9cf8b5839518cfe438f5910
7
- data.tar.gz: 023f8e084288ca93a16366d8d8dfb473adadb0baa53c83f87951d2e99f14ecc3e55f9bd140622cb0b5fd4f531b9dee76482be9830c46745f63a26a0689c53957
6
+ metadata.gz: 46953cae49824a46ef5d0b86c5766790f8e5395bfda8805f4467146599d8e7750a275c97bd2edfca23972302a59ef46a2d00d5ea273559c7890c8cac1117d737
7
+ data.tar.gz: fceeea3fff2318bce930f6d722313a293c558c6b8f4cc2ac72410f0cb2f315fa670db5573be592a14d737dc832a00a806f5c993425e3ee842381facf8971a164
data/.travis.yml ADDED
@@ -0,0 +1,16 @@
1
+ language: ruby
2
+ cache: bundler
3
+ install: "bundle install --without development"
4
+ before_script: "bundle exec puppet module install puppetlabs-stdlib"
5
+ script: "bundle exec rake spec SPEC_OPTS='--format documentation'"
6
+ rvm:
7
+ - 1.9.3
8
+ - 2.0.0
9
+ - 2.2.1
10
+ env:
11
+ matrix:
12
+ - PUPPET_GEM_VERSION="~> 3.8"
13
+ - PUPPET_GEM_VERSION="~> 4.2"
14
+ - PUPPET_GEM_VERSION="~> 4.3"
15
+ notifications:
16
+ email: corey@logicminds.biz
data/Gemfile CHANGED
@@ -3,14 +3,19 @@ source "http://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
  gem 'puppet', ">= 3.8"
6
+ gem 'facterdb'
6
7
  # Add dependencies to develop your gem here.
7
8
  # Include everything needed to run rake, tests, features, etc.
8
- group :development do
9
+
10
+ group :test do
9
11
  gem "rspec"
10
- gem 'pry'
11
- gem "rdoc", "~> 3.12"
12
12
  gem "bundler"
13
13
  gem "jeweler", "~> 2.0.1"
14
14
  gem "simplecov", ">= 0"
15
15
  gem 'rake'
16
16
  end
17
+
18
+ group :development do
19
+ gem 'pry'
20
+ gem "rdoc", "~> 3.12"
21
+ end
data/Gemfile.lock CHANGED
@@ -11,6 +11,10 @@ GEM
11
11
  docile (1.1.5)
12
12
  facter (2.4.6)
13
13
  CFPropertyList (~> 2.2.6)
14
+ facterdb (0.3.1)
15
+ facter
16
+ jgrep
17
+ json
14
18
  faraday (0.9.2)
15
19
  multipart-post (>= 1.2, < 3)
16
20
  git (1.2.9.1)
@@ -34,6 +38,8 @@ GEM
34
38
  nokogiri (>= 1.5.10)
35
39
  rake
36
40
  rdoc
41
+ jgrep (1.4.0)
42
+ json
37
43
  json (1.8.3)
38
44
  json_pure (1.8.3)
39
45
  jwt (1.5.1)
@@ -88,6 +94,7 @@ PLATFORMS
88
94
 
89
95
  DEPENDENCIES
90
96
  bundler
97
+ facterdb
91
98
  jeweler (~> 2.0.1)
92
99
  pry
93
100
  puppet (>= 3.8)
data/README.md CHANGED
@@ -1,3 +1,4 @@
1
+ [![Build Status](https://travis-ci.org/nwops/puppet-repl.png)](https://travis-ci.org/nwops/puppet-repl)
1
2
  # puppet-repl
2
3
 
3
4
  A interactive command line tool for evaluating the puppet language.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.3
@@ -1,19 +1,11 @@
1
1
  require 'puppet'
2
- require 'puppet/pops'
3
2
  require 'readline'
3
+ require 'json'
4
4
  require_relative 'support'
5
5
  module PuppetRepl
6
6
  class Cli
7
7
  include PuppetRepl::Support
8
8
 
9
- def initialize
10
- begin
11
- Puppet.initialize_settings
12
- rescue
13
- # do nothing otherwise calling init twice raises an error
14
- end
15
- end
16
-
17
9
  def puppet_eval(input)
18
10
  begin
19
11
  parser.evaluate_string(scope, input)
@@ -41,8 +33,8 @@ module PuppetRepl
41
33
  PuppetRepl::Cli.print_repl_desc
42
34
  when 'functions'
43
35
  puts function_map.keys.sort
44
- when 'types'
45
- puts "list of types coming soon"
36
+ when 'facts'
37
+ puts JSON.pretty_generate(node.facts)
46
38
  when '_'
47
39
  puts(" => #{@last_item}")
48
40
  when 'environment'
@@ -60,10 +52,6 @@ module PuppetRepl
60
52
  end
61
53
  end
62
54
 
63
- def self.ripl_start
64
- Ripl.start
65
- end
66
-
67
55
  def self.print_repl_desc
68
56
  puts(<<-EOT)
69
57
  Ruby Version: #{RUBY_VERSION}
@@ -1,3 +1,6 @@
1
+ require 'puppet/pops'
2
+ require 'facterdb'
3
+
1
4
  module PuppetRepl
2
5
  module Support
3
6
 
@@ -9,11 +12,38 @@ module PuppetRepl
9
12
  dirs.flatten
10
13
  end
11
14
 
15
+ # this is required in order to load things only when we need them
16
+ def do_initialize
17
+ begin
18
+ Puppet.initialize_settings
19
+ rescue
20
+ # do nothing otherwise calling init twice raises an error
21
+ end
22
+ end
23
+
12
24
  def puppet_lib_dir
13
25
  # returns something like "/Library/Ruby/Gems/2.0.0/gems/puppet-4.2.2/lib/puppet.rb"
14
26
  @puppet_lib_dir ||= File.dirname(Puppet.method(:[]).source_location.first)
15
27
  end
16
28
 
29
+ def new_parser
30
+ @new_parser ||= Puppet::Parser::ParserFactory.parser
31
+ # setting the file and string results in evaulting the string
32
+ # setting the file and not the string results in evaulting the file
33
+ @new_parser.file = 'repl'
34
+ #this defines what to parse, and where it came from (can use ‘repl’ as the filename)
35
+ @new_parser
36
+ end
37
+
38
+ def puppet_evaluate(input)
39
+ new_parser.string = input
40
+ result = new_parser.parse
41
+ #- this creates the top level definitions
42
+ # repl is just a fake name for the module
43
+ #result = result.instantiate('repl')
44
+ result.safeevaluate(scope) #- this evaluates and returns the result
45
+ end
46
+
17
47
  # returns a array of function files
18
48
  def function_files
19
49
  search_dirs = lib_dirs.map do |lib_dir|
@@ -37,6 +67,7 @@ module PuppetRepl
37
67
  # returns a map of functions
38
68
  def function_map
39
69
  unless @functions
70
+ do_initialize
40
71
  @functions = {}
41
72
  function_files.each do |file|
42
73
  obj = {}
@@ -63,6 +94,7 @@ module PuppetRepl
63
94
 
64
95
  # returns a future parser for evaluating code
65
96
  def parser
97
+ Puppet::Parser::ParserFactory.evaluating_parser
66
98
  @parser || ::Puppet::Pops::Parser::EvaluatingParser.new
67
99
  end
68
100
 
@@ -74,11 +106,15 @@ module PuppetRepl
74
106
  # creates a puppet environment given a module path and environment name
75
107
  # this is cached
76
108
  def puppet_environment
77
- @puppet_environment ||= Puppet::Node::Environment.create(
78
- puppet_env_name,
79
- module_dirs,
80
- manifests_dir
81
- )
109
+ unless @puppet_environment
110
+ do_initialize
111
+ @puppet_environment = Puppet::Node::Environment.create(
112
+ puppet_env_name,
113
+ module_dirs,
114
+ manifests_dir
115
+ )
116
+ end
117
+ @puppet_environment
82
118
  end
83
119
 
84
120
  # def functions
@@ -94,16 +130,16 @@ module PuppetRepl
94
130
  @compiler
95
131
  end
96
132
 
97
- def create_scope(node_name)
98
- #options['parameters']
99
- #options['facts']
100
- #options[:classes]
101
- node = create_node(node_name)
133
+ def node
134
+ @node ||= create_node
135
+ end
136
+
137
+ def create_scope
102
138
  @compiler = create_compiler(node)
103
139
  scope = Puppet::Parser::Scope.new(compiler)
104
- scope.source = Puppet::Resource::Type.new(:node, node_name)
140
+ scope.source = Puppet::Resource::Type.new(:node, node.name)
105
141
  scope.parent = @compiler.topscope
106
- load_lib_dirs
142
+ compiler.compile # this will load everything into the scope
107
143
  scope
108
144
  end
109
145
 
@@ -111,28 +147,40 @@ module PuppetRepl
111
147
  Puppet::Parser::Compiler.new(node)
112
148
  end
113
149
 
114
- def create_node(node_name)
115
- Puppet::Node.new(node_name, :environment => puppet_environment)
150
+ def facterdb_filter
151
+ 'operatingsystem=RedHat and operatingsystemrelease=/^7/ and architecture=x86_64 and facterversion=/^2.4\./'
152
+ end
153
+
154
+ # uses facterdb (cached facts) and retrives the facts given a filter
155
+ def facts
156
+ unless @facts
157
+ @facts ||= FacterDB.get_facts(facterdb_filter).first
158
+ end
159
+ @facts
160
+ end
161
+
162
+ # creates a node object
163
+ def create_node
164
+ options = {}
165
+ options[:parameters] = facts
166
+ options[:facts] = facts
167
+ options[:classes] = []
168
+ options[:environment] = puppet_environment
169
+ Puppet::Node.new(facts[:fqdn], options)
116
170
  end
117
171
 
118
172
  def scope
119
- begin
120
- Puppet.initialize_settings
121
- rescue
122
- # do nothing otherwise calling init twice raises an error
173
+ unless @scope
174
+ do_initialize
175
+ @scope ||= create_scope
123
176
  end
124
- @scope ||= create_scope('node_name')
177
+ @scope
125
178
  end
126
179
 
127
180
  def manifests_dir
128
181
  File.join(Puppet[:environmentpath],puppet_env_name,'manifests')
129
182
  end
130
183
 
131
- def build_node(name, opts = {})
132
- opts.merge!({:environment => node_environment})
133
- Puppet::Node.new(name, opts)
134
- end
135
-
136
184
  end
137
185
  end
138
186
  #scope.environment.known_resource_types
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module PuppetRepl
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
data/puppet-repl.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "puppet-repl"
8
- s.version = "0.0.2"
8
+ s.version = "0.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Corey Osman"]
12
- s.date = "2016-02-25"
12
+ s.date = "2016-02-26"
13
13
  s.description = "A interactive command line tool for evaluating the puppet language"
14
14
  s.email = "corey@nwops.io"
15
15
  s.executables = ["prepl"]
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.files = [
21
21
  ".document",
22
22
  ".rspec",
23
+ ".travis.yml",
23
24
  "Gemfile",
24
25
  "Gemfile.lock",
25
26
  "LICENSE.txt",
@@ -47,32 +48,20 @@ Gem::Specification.new do |s|
47
48
 
48
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
50
  s.add_runtime_dependency(%q<puppet>, [">= 3.8"])
50
- s.add_development_dependency(%q<rspec>, [">= 0"])
51
+ s.add_runtime_dependency(%q<facterdb>, [">= 0"])
51
52
  s.add_development_dependency(%q<pry>, [">= 0"])
52
53
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
53
- s.add_development_dependency(%q<bundler>, [">= 0"])
54
- s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
55
- s.add_development_dependency(%q<simplecov>, [">= 0"])
56
- s.add_development_dependency(%q<rake>, [">= 0"])
57
54
  else
58
55
  s.add_dependency(%q<puppet>, [">= 3.8"])
59
- s.add_dependency(%q<rspec>, [">= 0"])
56
+ s.add_dependency(%q<facterdb>, [">= 0"])
60
57
  s.add_dependency(%q<pry>, [">= 0"])
61
58
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
62
- s.add_dependency(%q<bundler>, [">= 0"])
63
- s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
64
- s.add_dependency(%q<simplecov>, [">= 0"])
65
- s.add_dependency(%q<rake>, [">= 0"])
66
59
  end
67
60
  else
68
61
  s.add_dependency(%q<puppet>, [">= 3.8"])
69
- s.add_dependency(%q<rspec>, [">= 0"])
62
+ s.add_dependency(%q<facterdb>, [">= 0"])
70
63
  s.add_dependency(%q<pry>, [">= 0"])
71
64
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
72
- s.add_dependency(%q<bundler>, [">= 0"])
73
- s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
74
- s.add_dependency(%q<simplecov>, [">= 0"])
75
- s.add_dependency(%q<rake>, [">= 0"])
76
65
  end
77
66
  end
78
67
 
@@ -14,7 +14,7 @@ describe "PuppetRepl" do
14
14
  'help'
15
15
  end
16
16
  it 'can show the help screen' do
17
- repl_output = "Ruby Version: #{RUBY_VERSION}\nPuppet Version: 4.3.2\nPuppet Repl Version: 0.0.1\nCreated by: NWOps <corey@nwops.io>\nType \"exit\", \"functions\", \"types\", \"reset\", \"help\" for more information.\n\n"
17
+ repl_output = "Ruby Version: #{RUBY_VERSION}\nPuppet Version: 4.3.2\nPuppet Repl Version: 0.0.3\nCreated by: NWOps <corey@nwops.io>\nType \"exit\", \"functions\", \"types\", \"reset\", \"help\" for more information.\n\n"
18
18
  expect{repl.handle_input(input)}.to output(repl_output).to_stdout
19
19
  end
20
20
  end
@@ -64,7 +64,6 @@ describe "PuppetRepl" do
64
64
  end
65
65
  end
66
66
 
67
-
68
67
  describe 'each block' do
69
68
  let(:input) do
70
69
  "['/tmp/test3', '/tmp/test4'].each |String $path| { file{$path: ensure => present} }"
@@ -74,4 +73,23 @@ describe "PuppetRepl" do
74
73
  expect{repl.handle_input(input)}.to output(repl_output).to_stdout
75
74
  end
76
75
  end
76
+
77
+ describe 'facts' do
78
+ let(:input) do
79
+ "$::fqdn"
80
+ end
81
+ it 'should be able to resolve fqdn' do
82
+ repl_output = " => foo.example.com\n"
83
+ expect{repl.handle_input(input)}.to output(repl_output).to_stdout
84
+ end
85
+ end
86
+
87
+ describe 'print facts' do
88
+ let(:input) do
89
+ "facts"
90
+ end
91
+ it 'should be able to print facts' do
92
+ expect{repl.handle_input(input)}.to output(/"kernel": "Linux"/).to_stdout
93
+ end
94
+ end
77
95
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'simplecov'
2
2
  require_relative '../lib/puppet-repl'
3
- require 'pry'
4
3
 
5
4
  module SimpleCov::Configuration
6
5
  def clean_filters
data/spec/support_spec.rb CHANGED
@@ -31,13 +31,16 @@ describe 'support' do
31
31
 
32
32
  it 'should return lib dirs' do
33
33
  expect(repl.lib_dirs.count).to be >= 1
34
-
35
-
36
34
  end
37
35
 
38
36
  it 'should return module dirs' do
39
37
  expect(repl.module_dirs.count).to be >= 1
38
+ end
40
39
 
40
+ it 'should return a list of facts' do
41
+ expect(repl.facts).to be_instance_of(Hash)
42
+ expect(repl.facts[:fqdn]).to eq('foo.example.com')
41
43
  end
42
44
 
45
+
43
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-repl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Corey Osman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-25 00:00:00.000000000 Z
11
+ date: 2016-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: puppet
@@ -25,13 +25,13 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.8'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec
28
+ name: facterdb
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
- type: :development
34
+ type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
@@ -66,62 +66,6 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '3.12'
69
- - !ruby/object:Gem::Dependency
70
- name: bundler
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '>='
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '>='
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: jeweler
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ~>
88
- - !ruby/object:Gem::Version
89
- version: 2.0.1
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ~>
95
- - !ruby/object:Gem::Version
96
- version: 2.0.1
97
- - !ruby/object:Gem::Dependency
98
- name: simplecov
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - '>='
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - '>='
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rake
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - '>='
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
69
  description: A interactive command line tool for evaluating the puppet language
126
70
  email: corey@nwops.io
127
71
  executables:
@@ -133,6 +77,7 @@ extra_rdoc_files:
133
77
  files:
134
78
  - .document
135
79
  - .rspec
80
+ - .travis.yml
136
81
  - Gemfile
137
82
  - Gemfile.lock
138
83
  - LICENSE.txt