train-pgsql 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3a5a7f95a8bbb5fa60e7582b24b6bd7ba271dd659ff66e524c13aa6f4790b86d
4
+ data.tar.gz: b9350bb9dcad6c1ed426b0a58ff663d4f676e3058494a047f3ba754c0d439368
5
+ SHA512:
6
+ metadata.gz: 707700dcf6d3067f7082d2973a5c1f14235a78a4b026f3c042af70c1c9e63c20822b52fe0553731a05cb618f53e58833159e5f090d0a38068b17aaac5344552d
7
+ data.tar.gz: 2e7a11fa24fff87cb75d7effa39646276b6ab7e589d97de2dd176b33af3d9d04c2c6ba9541c10f0fc6178bc222221ea8f6a01f8a76b6a6edf67b84d8ebaccea6
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem "pry"
7
+ gem "bundler"
8
+ gem "rake"
9
+ gem "chefstyle"
10
+ end
@@ -0,0 +1,38 @@
1
+ # train-pgsql - Train Plugin for connecting via pgsql
2
+
3
+ This plugin allows applications that rely on Train to communicate via postgres SQL.
4
+
5
+
6
+ ## Installation
7
+
8
+ You will have to build this gem yourself to install it as it is not yet on
9
+ Rubygems.Org. For this there is a rake task which makes this a one-liner:
10
+
11
+ ```bash
12
+ rake install:local
13
+ ```
14
+
15
+ ## Transport parameters
16
+
17
+ | Option | Explanation | Default |
18
+ | ---------- | ------------------- | ---------- |
19
+ | `host` | Hostname | (required) |
20
+ | `user` | Username to connect | (required) |
21
+ | `password` | Password to connect | (required) |
22
+ | `database` | Database to connect | `postgres` |
23
+ | `port` | Remote port | `5432` |
24
+
25
+ ## Example use
26
+
27
+ This will work for a Cisco IOS XE device with Telnet enabled:
28
+ ```ruby
29
+ require "train"
30
+ train = Train.create("pgsql", {
31
+ host: "localhost",
32
+ user: "username",
33
+ password: "password",
34
+ })
35
+ conn = train.connection
36
+ result = conn.run_command("show version\n")
37
+ conn.close
38
+ ```
@@ -0,0 +1,6 @@
1
+ libdir = File.dirname(__FILE__)
2
+ $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
3
+
4
+ require "train-pgsql/version"
5
+ require "train-pgsql/transport"
6
+ require "train-pgsql/connection"
@@ -0,0 +1,67 @@
1
+ require 'train'
2
+ require 'pg'
3
+
4
+ module TrainPlugins
5
+ module Pgsql
6
+ class Connection < Train::Plugins::Transport::BaseConnection
7
+ def initialize(options)
8
+ super(options)
9
+ end
10
+
11
+ def platform
12
+ Train::Platforms.name('pgsql').in_family('sql')
13
+ force_platform!('pgsql',
14
+ release: TrainPlugins::Pgsql::VERSION)
15
+ end
16
+
17
+ def close
18
+ return if @connection.nil?
19
+
20
+ logger.info format('[Pgsql] Closed connection to %s:%d', @options[:host], @options[:port])
21
+ @connection.finish
22
+ ensure
23
+ @connection = nil
24
+ end
25
+
26
+ def uri
27
+ "pgsql://#{options[:user]}@#{@options[:host]}:#{@options[:port]}/"
28
+ end
29
+
30
+ def run_command_via_connection(query)
31
+ stdout = ''
32
+ stderr = ''
33
+ exit_status = 0
34
+
35
+ logger.debug format('[Pgsql] Sending command (%s) to %s:%d', query, @options[:host], @options[:port])
36
+ connection.exec(query) do |result|
37
+ result.each_row do |values|
38
+ stdout += values.join(', ') + "\n"
39
+ end
40
+ stdout = stdout.strip
41
+ end
42
+
43
+ CommandResult.new(stdout, stderr, exit_status)
44
+ rescue PG::Error => e
45
+ raise Train::TransportError, "Pgsql exec failed (#{e.message})"
46
+ end
47
+
48
+ def connection
49
+ @connection ||= connect
50
+ end
51
+
52
+ def connect
53
+ logger.info format('[Pgsql] Opening connection to %s:%d', @options[:host], @options[:port])
54
+
55
+ @connection = PG::Connection.new(
56
+ host: @options[:host],
57
+ port: @options[:port],
58
+ user: @options[:user],
59
+ password: @options[:password],
60
+ dbname: @options[:database]
61
+ )
62
+
63
+ @connection
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,22 @@
1
+ require "train-pgsql/connection"
2
+
3
+ module TrainPlugins
4
+ module Pgsql
5
+ class Transport < Train.plugin(1)
6
+ name "pgsql"
7
+
8
+ option :host, required: true
9
+ option :user, required: true
10
+ option :password, required: true
11
+ option :database, default: "postgres"
12
+ option :port, default: 5432
13
+
14
+ # Non documented options for development
15
+ option :debug_pgsql, default: false
16
+
17
+ def connection(_instance_opts = nil)
18
+ @connection ||= TrainPlugins::Pgsql::Connection.new(@options)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,5 @@
1
+ module TrainPlugins
2
+ module Pgsql
3
+ VERSION = '1.0.0'.freeze
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ lib = File.expand_path('lib', __dir__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'train-pgsql/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'train-pgsql'
7
+ spec.version = TrainPlugins::Pgsql::VERSION
8
+ spec.authors = ['Cris Barbero']
9
+ spec.email = ['cris.barbero@stridehealth.com']
10
+ spec.summary = 'Train Transport for PostgreSQL connections'
11
+ spec.description = 'Allows applications using Train connect via pg sql'
12
+ spec.homepage = 'https://github.com/coveredinc/train-pgsql'
13
+ spec.license = 'Apache-2.0'
14
+
15
+ spec.files = %w[
16
+ README.md train-pgsql.gemspec Gemfile
17
+ ] + Dir.glob(
18
+ 'lib/**/*', File::FNM_DOTMATCH
19
+ ).reject { |f| File.directory?(f) }
20
+ spec.require_paths = ['lib']
21
+
22
+ spec.add_dependency 'train', '~> 3.0'
23
+ spec.add_dependency 'pg', '~> 1.0'
24
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: train-pgsql
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Cris Barbero
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-10-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: train
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pg
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ description: Allows applications using Train connect via pg sql
42
+ email:
43
+ - cris.barbero@stridehealth.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - Gemfile
49
+ - README.md
50
+ - lib/train-pgsql.rb
51
+ - lib/train-pgsql/connection.rb
52
+ - lib/train-pgsql/transport.rb
53
+ - lib/train-pgsql/version.rb
54
+ - train-pgsql.gemspec
55
+ homepage: https://github.com/coveredinc/train-pgsql
56
+ licenses:
57
+ - Apache-2.0
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubygems_version: 3.1.4
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: Train Transport for PostgreSQL connections
78
+ test_files: []