File tree Expand file tree Collapse file tree 9 files changed +158
-75
lines changed Expand file tree Collapse file tree 9 files changed +158
-75
lines changed Original file line number Diff line number Diff line change 1+ require 'puppet'
2+ require 'json'
3+
4+ # Sets up the transport for a remote task
5+ class Puppet ::Util ::TaskHelper
6+ def initialize ( transport_name )
7+ @transport_name = transport_name
8+
9+ return unless params . key? '_installdir'
10+ add_plugin_paths ( params [ '_installdir' ] )
11+ end
12+
13+ def transport
14+ require 'puppet/resource_api/transport'
15+
16+ Puppet ::ResourceApi ::Transport . connect ( @transport_name , credentials )
17+ end
18+
19+ def params
20+ @params ||= JSON . parse ( ENV [ 'PARAMS' ] || STDIN . read )
21+ end
22+
23+ def target
24+ @target ||= params [ '_target' ]
25+ end
26+
27+ def credentials
28+ @credentials ||= target . each_with_object ( { } ) { |( k , v ) , h | h [ k . to_sym ] = v }
29+ end
30+
31+ private
32+
33+ # Syncs across anything from the module lib
34+ def add_plugin_paths ( install_dir )
35+ Dir . glob ( File . join ( [ install_dir , '*' ] ) ) . each do |mod |
36+ $LOAD_PATH << File . join ( [ mod , 'lib' ] )
37+ end
38+ end
39+ end
Original file line number Diff line number Diff line change 1+ require 'json'
2+ require 'puppet/util/task_helper'
3+ require 'puppet/resource_api/transport'
4+
5+ RSpec . describe Puppet ::Util ::TaskHelper do
6+
7+ let ( :helper ) { described_class . new ( 'panos' ) }
8+ let ( :params ) { { } }
9+
10+ before ( :each ) do
11+ allow ( STDIN ) . to receive ( :read ) . and_return ( JSON . generate ( params ) )
12+ end
13+
14+ it 'does not throw' do
15+ expect { helper } . not_to raise_error
16+ end
17+
18+ context 'when `_installdir` is present' do
19+ let ( :params ) do
20+ {
21+ '_installdir' : '.'
22+ }
23+ end
24+ it 'does not throw' do
25+ expect { helper } . not_to raise_error
26+ end
27+ end
28+
29+ describe '#transport' do
30+ let ( :creds ) do
31+ {
32+ host : '1.2.3.4' ,
33+ user : 'admin' ,
34+ password : 'admin'
35+ }
36+ end
37+ let ( :params ) do
38+ {
39+ '_target' : creds
40+ }
41+ end
42+
43+ it 'returns a transport object' do
44+ expect ( Puppet ::ResourceApi ::Transport ) . to receive ( :connect ) . with ( 'panos' , creds )
45+ helper . transport
46+ end
47+ end
48+
49+ describe '#params' do
50+ context 'when params are provided through STDIN' do
51+ let ( :params ) do
52+ {
53+ 'foo' : 'wibble'
54+ }
55+ end
56+ it { expect ( helper . params ) . to eq ( { "foo" => "wibble" } ) }
57+ end
58+ context 'when params are provided through ENV' do
59+ let ( :env ) { '{"wibble": "foo"}' }
60+
61+ it {
62+ allow ( ENV ) . to receive ( :[] ) . with ( 'PARAMS' ) . and_return ( env )
63+ expect ( helper . params ) . to eq ( { "wibble" => "foo" } )
64+ }
65+ end
66+ end
67+
68+ describe '#target' do
69+ let ( :creds ) do
70+ {
71+ host : '1.2.3.4' ,
72+ user : 'admin' ,
73+ password : 'admin'
74+ }
75+ end
76+ let ( :params ) do
77+ {
78+ '_target' : creds
79+ }
80+ end
81+ it 'returns the creds with string keys' do
82+ expect ( helper . target ) . to eq ( {
83+ "host" => "1.2.3.4" ,
84+ "password" => "admin" ,
85+ "user" => "admin" } )
86+ end
87+ end
88+
89+ describe '#credentials' do
90+ let ( :creds ) do
91+ {
92+ host : '1.2.3.4' ,
93+ user : 'admin' ,
94+ password : 'admin'
95+ }
96+ end
97+ let ( :params ) do
98+ {
99+ '_target' : creds
100+ }
101+ end
102+ it 'returns the creds with symbolised keys' do
103+ expect ( helper . credentials ) . to eq ( {
104+ :host => "1.2.3.4" ,
105+ :password => "admin" ,
106+ :user => "admin" } )
107+ end
108+ end
109+
110+ end
Original file line number Diff line number Diff line change 66 "parameters" : {
77 },
88 "files" : [
9- " panos/tasks/panos_task .rb" ,
9+ " panos/lib/puppet/util/task_helper .rb" ,
1010 " panos/lib/puppet/transport/panos.rb" ,
1111 " panos/lib/puppet/transport/schema/panos.rb"
1212 ]
Original file line number Diff line number Diff line change 11#!/opt/puppetlabs/puppet/bin/ruby
22
3- require_relative 'panos_task '
4- task = PanosTask . new
3+ require_relative '../lib/puppet/util/task_helper '
4+ task = Puppet :: Util :: TaskHelper . new ( 'panos' )
55
66puts JSON . generate ( apikey : task . transport . apikey )
Original file line number Diff line number Diff line change 66 "parameters" : {
77 },
88 "files" : [
9- " panos/tasks/panos_task .rb" ,
9+ " panos/lib/puppet/util/task_helper .rb" ,
1010 " panos/lib/puppet/transport/panos.rb" ,
1111 " panos/lib/puppet/transport/schema/panos.rb"
1212 ]
Original file line number Diff line number Diff line change 11#!/opt/puppetlabs/puppet/bin/ruby
22
3- require_relative 'panos_task '
4- task = PanosTask . new
3+ require_relative '../lib/puppet/util/task_helper '
4+ task = Puppet :: Util :: TaskHelper . new ( 'panos' )
55
66if task . transport . outstanding_changes?
77 task . transport . commit
Load Diff This file was deleted.
Original file line number Diff line number Diff line change 1414 }
1515 },
1616 "files" : [
17- " panos/tasks/panos_task .rb" ,
17+ " panos/lib/puppet/util/task_helper .rb" ,
1818 " panos/lib/puppet/transport/panos.rb" ,
1919 " panos/lib/puppet/transport/schema/panos.rb"
2020 ]
Original file line number Diff line number Diff line change 11#!/opt/puppetlabs/puppet/bin/ruby
22
3- require_relative 'panos_task '
4- task = PanosTask . new
3+ require_relative '../lib/puppet/util/task_helper '
4+ task = Puppet :: Util :: TaskHelper . new ( 'panos' )
55
66file = task . params [ 'config_file' ]
77transport . import ( file , 'configuration' )
You can’t perform that action at this time.
0 commit comments