k8sflow 0.10.1 → 0.11.0

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: 1ceb1f07813b779bd4f12eb70841be8cdd0ff9da
4
- data.tar.gz: 9d8fc5924bfded059223888a42a472e9fa27f05e
3
+ metadata.gz: 71dd84258b2faf5e407b1e7ab7f573984f071d0c
4
+ data.tar.gz: 6194f078a482c03ab906f781b63a478a644057c2
5
5
  SHA512:
6
- metadata.gz: b1d49a7844e27159bb8719be7a61f5c4f160dda13a74bfa80f58b075d952e35cb51f2f1cd101ea06aaf7c017b46deb343bdcd11ae7a04c14ca0d003523662aef
7
- data.tar.gz: 41d6bfbd1cc5e2198b4b7c031118d1d5d5652113f56b585470bb6ddcf7664a7e4766e7ff7d55937e88b77077d5866345cb67b017e3dfb213828f547803f064d2
6
+ metadata.gz: 2ba661c7870beccb6ecca3ce049a325483f8426327ae32735fdc6db6621eb2226dc8dcc0931212442149d1ecf1847ef7839758cb6a2f87433cee715dc4edf8d7
7
+ data.tar.gz: f9f4c749019a479eb8348747dea1ada48ad8a12489caf4c93bbc188456f2758afcae0ad6ffeed3306d83723a9d47727c40d921ee7d3d718cf0d747e2bdf0b2e6
@@ -19,13 +19,6 @@ module K8sflow
19
19
  def vars
20
20
  if @vars.nil?
21
21
  @vars = {}
22
- if !options[:build_vars].nil?
23
- if options[:build_vars].is_a?(Hash)
24
- @vars = options[:build_vars]
25
- else
26
- @vars = kv_parse(options[:build_vars])
27
- end
28
- end
29
22
  if !options[:vars].nil?
30
23
  if options[:vars].is_a?(Hash)
31
24
  @vars.merge!(options[:vars])
@@ -41,12 +34,14 @@ module K8sflow
41
34
 
42
35
  def files
43
36
  f = []
44
- options[:files].each do |file|
45
- if !file.start_with?("/")
46
- file = "#{@options[:path]}/#{file}"
37
+ if @options.has_key?(:files)
38
+ @options[:files].each do |file|
39
+ if !file.start_with?("/")
40
+ file = "#{@options[:path]}/#{file}"
41
+ end
42
+ file_list = Dir.glob(file)
43
+ f << file_list
47
44
  end
48
- file_list = Dir.glob(file)
49
- f << file_list
50
45
  end
51
46
  return f
52
47
  end
@@ -105,9 +100,16 @@ module K8sflow
105
100
 
106
101
  option :registry, '-r', '--registry DOCKER_REPO', 'Docker registry to pull/fetch images'
107
102
  option :path, '-p', '--path DOCKERFILE PATH', 'dockerfiles source directory to'
108
- option :build_vars, "--build-vars key=value,key=value" , Array, "Default variables"
109
103
  option :docker_api, "-H", "--host", "docker api endpoint", default: "tcp://localhost:4243"
110
- option :tag, '-t', '--tag TAG', "Image tag", default: 'latest'
104
+ option :tag, '-t', '--tag TAG', "Image tag", default: 'lateb'
105
+
106
+ #dockerfile templates
107
+ option :files, "-f", "--files FILE1,FILE2", Array, "List files to copy in dockerfile directory, i.e 'files/*',/etc/conf.cfg'"
108
+ option :tpl, "-l", "--tpl=Dockerfile", "The Dockerfile Template", default: 'Dockerfile.tpl'
109
+ option :vars, "-x", "--vars=VARS", Array, "Variables required by the dockerfile"
110
+
111
+ #docker build options
112
+ option :build_opts, "--build OPTS", "docker build options"
111
113
  end
112
114
 
113
115
 
@@ -117,12 +119,8 @@ module K8sflow
117
119
  description: 'Generate a dockerfile with templated vars .',
118
120
  topic: 'image'
119
121
 
120
- option :files, "-f", "--files FILE1,FILE2", Array, "List files to copy in dockerfile directory, i.e 'files/*',/etc/conf.cfg'"
121
- option :tpl, "-l", "--tpl=Dockerfile", "The Dockerfile Template", default: 'Dockerfile.tpl'
122
- option :vars, "-x", "--vars=VARS", Array, "Variables required by the dockerfile"
123
- option :tag, '-t', '--tag TAG', "Image tag", default: 'master'
124
-
125
122
  def self.call
123
+ puts @options
126
124
  create_dockerfile
127
125
  end
128
126
  end
@@ -133,8 +131,10 @@ module K8sflow
133
131
  banner: 'image:build [OPTIONS]',
134
132
  topic: 'image'
135
133
 
136
- option :build, "--build OPTS", "docker build options"
134
+ option :skip_dockerfile, "--skip-dockerfile", "-s", "Skip Create dockerfile"
137
135
  def self.call
136
+ puts @options
137
+ create_dockerfile unless @options[:skip_dockerfile]
138
138
  dockerbuild
139
139
  end
140
140
  end
@@ -145,13 +145,16 @@ module K8sflow
145
145
  banner: 'image:push [OPTIONS]',
146
146
  topic: 'image'
147
147
 
148
- option :build, "--build=[OPTS]", "docker build options"
148
+ option :skip_build, "--skip-build", "skip docker build"
149
+ option :skip_dockerfile, "--skip-dockerfile", "skip create dockerfile"
149
150
  def self.call
150
- dockerbuild if @options[:build] != nil
151
+ create_dockerfile unless @options[:skip_dockerfile]
152
+ dockerbuild unless @options[:skip_build]
151
153
  dockerpush
152
154
  end
153
155
  end
154
156
 
157
+
155
158
  class List < Clitopic::Command::Base
156
159
  register name: 'list',
157
160
  description: 'List available tags in a registry',
@@ -0,0 +1,26 @@
1
+ require 'uri'
2
+ require_relative 'pg_base'
3
+
4
+ module K8sflow
5
+ module Pg
6
+
7
+
8
+ class Backup < PgBase
9
+ register name: 'backup',
10
+ description: 'Create a database backup and send it to a [remote] directory',
11
+ topic: 'pg'
12
+
13
+ option :src, "--src=file", "Dump to store"
14
+ option :aws_access_id, "--aws-access-id", "Aws S3 access id"
15
+ option :aws_secret, "--aws-secret", "Aws S3 secret"
16
+ option :bucket, "--bucket", "Aws bucket"
17
+ option :dest, "--dest", "File name"
18
+
19
+ def self.call
20
+ echo "store to aws"
21
+ echo "Upload the file #{@options[:src]} to #{options[:bucket]}/#{options[:dest]}"
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ require 'uri'
2
+ require_relative 'pg_base'
3
+
4
+ module K8sflow
5
+ module Pg
6
+
7
+ class Copy < PgBase
8
+ register name: 'copy',
9
+ description: 'Copy a source database to a Target database',
10
+ topic: 'pg'
11
+
12
+ option :source, "--source=database", "source database", required: true
13
+ option :ssl, "--ssl", "enable sslmode"
14
+ option :confirm, "--confirm CONFIRM", "Command line confirmation, no prompt"
15
+
16
+ def self.call
17
+ source_db = database(options[:source])
18
+ puts "env PGSSLMODE=#{ssl?} PGPASSWORD=#{source_db[:password]} pg_dump --host #{source_db[:host]} --port #{source_db[:port]} --username #{source_db[:user]} --verbose -Z 0 --clean --format=c --no-owner --no-acl #{source_db[:database]} | env PGSSLMODE=#{ssl?} PGPASSWORD=#{database[:password]} pg_restore --port #{database[:port]}--host #{database[:host]} --username #{database[:user]} --verbose --no-acl --no-owner -d #{database[:database]}"
19
+ confirm_command("on #{database[:host]} overwrite the database #{database[:database]}")
20
+
21
+ exec("env PGSSLMODE=#{ssl?} PGPASSWORD=#{source_db[:password]} pg_dump --host #{source_db[:host]} --port #{source_db[:port]} --username #{source_db[:user]} --verbose -Z 0 --clean --format=c --no-owner --no-acl #{source_db[:database]} | env PGSSLMODE=#{ssl?} PGPASSWORD=#{database[:password]} pg_restore --port #{database[:port]} --host #{database[:host]} --username #{database[:user]} --verbose --no-acl --no-owner -d #{database[:database]}")
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ require 'uri'
2
+ require_relative 'pg_base'
3
+
4
+ module K8sflow
5
+ module Pg
6
+
7
+ class Dump < PgBase
8
+ register name: 'dump',
9
+ description: 'Create a database dump and store in a localfile',
10
+ topic: 'pg'
11
+
12
+ option :dest, "--dest=DIR", "dest directory", default: "/tmp"
13
+ option :ssl, "--ssl"
14
+
15
+ def self.call
16
+ file = File.new("#{options[:dest]}/#{database[:database]}_#{database[:host]}_#{Time.now.iso8601}.dump", 'wb')
17
+
18
+ puts "PGSSLMODE=#{ssl?} PGPASSWORD=**** pg_dump --host #{database[:host]} -p #{database[:port]} --username #{database[:user]} --verbose -Z 0 --clean --format=c --no-owner --no-acl #{database[:database]} > #{file.path}"
19
+ exec("PGSSLMODE=#{ssl?} PGPASSWORD=#{database[:password]} pg_dump -p #{database[:port]}--host #{database[:host]} --username #{database[:user]} --clean --format=c --no-owner --no-acl #{database[:database]} > #{file.path}")
20
+
21
+ file.close
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,25 @@
1
+ require 'uri'
2
+ require_relative 'pg_base'
3
+
4
+ module K8sflow
5
+ module Pg
6
+
7
+ class Kill < PgBase
8
+ register name: 'kill',
9
+ description: 'kill a query',
10
+ topic: 'pg'
11
+
12
+ option :force, "--force", 'terminates the connection in addition to cancelling the query'
13
+
14
+ def self.call
15
+ output_with_bang "procpid to kill is required" unless @arguments[0] && @arguments[0].to_i != 0
16
+ procpid = @arguments[0]
17
+ procpid = procpid.to_i
18
+ cmd = options[:force] ? 'pg_terminate_backend' : 'pg_cancel_backend'
19
+ sql = %Q(SELECT #{cmd}(#{procpid});)
20
+ puts exec_sql(sql)
21
+ end
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ require 'uri'
2
+ require_relative 'pg_base'
3
+
4
+ module K8sflow
5
+ module Pg
6
+
7
+ class KillAll < PgBase
8
+ register name: 'killall',
9
+ description: 'terminates ALL connections',
10
+ topic: 'pg'
11
+
12
+
13
+ def self.call
14
+ sql = %Q(
15
+ SELECT pg_terminate_backend(#{pid_column})
16
+ FROM pg_stat_activity
17
+ WHERE #{pid_column} <> pg_backend_pid()
18
+ AND #{query_column} <> '<insufficient privilege>'
19
+ )
20
+
21
+ puts exec_sql(sql)
22
+ end
23
+ end
24
+
25
+ end
26
+ end
@@ -0,0 +1,122 @@
1
+ require 'pg_topic'
2
+
3
+ module K8sflow
4
+ module Pg
5
+
6
+ class PgBase < Clitopic::Command::Base
7
+ class << self
8
+ include Clitopic::Helpers
9
+ def exec_sql(sql)
10
+ begin
11
+ ENV["PGPASSWORD"] = database[:password]
12
+ ENV["PGSSLMODE"] = (database[:host] == 'localhost' ? 'prefer' : 'require' )
13
+ user_part = database[:user] ? "-U #{database[:user]}" : ""
14
+ output = `#{psql_cmd} -c "#{sql}" #{user_part} -h #{database[:host]} -p #{database[:port] || 5432} #{database[:database]}`
15
+ if (! $?.success?) || output.nil? || output.empty?
16
+ raise "psql failed. exit status #{$?.to_i}, output: #{output.inspect}"
17
+ end
18
+ output
19
+ rescue Errno::ENOENT
20
+ Clitopic::Helpers.output_with_bang "The local psql command could not be located"
21
+ abort
22
+ end
23
+ end
24
+
25
+ # @TODO INCLUDE THIS IN CLITOPIC
26
+ def kv_parse(list)
27
+ vars = {}
28
+ list.each do |e|
29
+ sp = e.split("=")
30
+ key = sp[0..-2].join("=")
31
+ value = sp[-1]
32
+ vars[key] = value
33
+ end
34
+ return vars
35
+ end
36
+
37
+ # @TODO INCLUDE THIS IN CLITOPIC
38
+ def hash_opt(opt)
39
+ return {} if opt.nil?
40
+ if opt.is_a?(Hash)
41
+ hash = opt
42
+ else
43
+ hash = kv_parse(options[opt])
44
+ end
45
+ return hash
46
+ end
47
+
48
+ def psql_cmd
49
+ 'psql'
50
+ end
51
+
52
+ def version
53
+ return @version if defined? @version
54
+ result = exec_sql("select version();").match(/PostgreSQL (\d+\.\d+\.\d+) on/)
55
+ fail("Unable to determine Postgres version") unless result
56
+ @version = result[1]
57
+ end
58
+
59
+ def nine_two?
60
+ return @nine_two if defined? @nine_two
61
+ @nine_two = version.to_f >= 9.2
62
+ end
63
+
64
+ def pid_column
65
+ if nine_two?
66
+ 'pid'
67
+ else
68
+ 'procpid'
69
+ end
70
+ end
71
+
72
+ def query_column
73
+ if nine_two?
74
+ 'query'
75
+ else
76
+ 'current_query'
77
+ end
78
+ end
79
+
80
+ def parse_pg_uri(uri)
81
+ p = URI.parse(uri)
82
+ h = {
83
+ database: p.path[1..-1],
84
+ user: p.user,
85
+ password: p.password,
86
+ host: p.hostname || "localhost",
87
+ uri: uri,
88
+ port: p.port || 5432
89
+ }
90
+ return h
91
+ end
92
+
93
+ def databases
94
+ if @dbs.nil?
95
+ @dbs = {}
96
+ hash_opt(options[:databases]).each do |k,v|
97
+ h = parse_pg_uri(v)
98
+ @dbs[k] = h
99
+ end
100
+ end
101
+ return @dbs
102
+ end
103
+
104
+ def ssl?
105
+ options[:ssl] ? "require" : "prefer"
106
+ end
107
+
108
+ def database(db=nil)
109
+ db = options[:database] if db.nil?
110
+ uri = URI.parse(db)
111
+ if uri.scheme == "postgres"
112
+ parse_pg_uri(db)
113
+ elsif databases[db]
114
+ return databases[db]
115
+ else
116
+ raise Clitopic::Commands::CommandFailed.new ("No database #{db}")
117
+ end
118
+ end
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,13 @@
1
+ module K8sflow
2
+ module Pg
3
+ class PgTopic < Clitopic::Topic::Base
4
+ register name: 'pg',
5
+ description: 'Manage postgres actions'
6
+
7
+ option :databases, "--databases KEY=postgresql_URI,KEY2=postgresql_URI2", Array, "List of preconfigured databases"
8
+
9
+ option :database, '-d', '--database DATABASE', 'Database name or URI', required: true
10
+ option :ssl, "--ssl", "enable sslmode"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,46 @@
1
+ require 'uri'
2
+ require_relative 'pg_base'
3
+
4
+ module K8sflow
5
+ module Pg
6
+
7
+ class Ps < PgBase
8
+ register name: 'ps',
9
+ description: 'view active queries with execution time',
10
+ topic: 'pg'
11
+
12
+ option :verbose, "--verbose", "also show idle connections"
13
+
14
+ def self.call
15
+ sql = %Q(
16
+ SELECT
17
+ #{pid_column},
18
+ #{"state," if nine_two?}
19
+ application_name AS source,
20
+ age(now(),xact_start) AS running_for,
21
+ waiting,
22
+ #{query_column} AS query
23
+ FROM pg_stat_activity
24
+ WHERE
25
+ #{query_column} <> '<insufficient privilege>'
26
+ #{
27
+ # Apply idle-backend filter appropriate to versions and options.
28
+ case
29
+ when options[:verbose]
30
+ ''
31
+ when nine_two?
32
+ "AND state <> 'idle'"
33
+ else
34
+ "AND current_query <> '<IDLE>'"
35
+ end
36
+ }
37
+ AND #{pid_column} <> pg_backend_pid()
38
+ ORDER BY query_start DESC
39
+ )
40
+
41
+ puts exec_sql(sql)
42
+ end
43
+ end
44
+
45
+ end
46
+ end
@@ -0,0 +1,18 @@
1
+ require 'uri'
2
+ require_relative 'pg_base'
3
+
4
+ module K8sflow
5
+ module Pg
6
+
7
+ class Psql < PgBase
8
+ register name: 'psql',
9
+ description: 'psql to the database',
10
+ topic: 'pg'
11
+ def self.call
12
+ puts "PGPASSWORD=**** psql -h #{database[:host]} -U #{database[:user]} -d #{database[:database]} -p #{database[:port]} #{@arguments.join(" ")}"
13
+ exec("PGSSLMODE=#{ssl?} PGPASSWORD=#{database[:password]} psql -p #{database[:port]} -h #{database[:host]} -U #{database[:user]} -d #{database[:database]} #{@arguments.join(" ")}")
14
+ end
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ require 'uri'
2
+ require_relative 'pg_base'
3
+
4
+ module K8sflow
5
+ module Pg
6
+
7
+ class Restore < PgBase
8
+ register name: 'restore',
9
+ description: 'Restore a dump to target database',
10
+ topic: 'pg'
11
+
12
+ option :src, "--src=file", "Dump to store"
13
+ option :confirm, "--confirm CONFIRM", "Command line confirmation, no prompt"
14
+
15
+ def self.call
16
+ puts "PGSSLMODE=#{ssl?} PGPASSWORD=#{database[:password]} pg_restore --port #{database[:port]} --host #{database[:host]} --username #{database[:user]} --verbose --no-acl --no-owner -d #{database[:database]} < #{file.path}"
17
+ confirm_command("on #{database[:host]} overwrite the database #{database[:database]}")
18
+ exec("PGSSLMODE=#{ssl?} PGPASSWORD=#{database[:password]} pg_restore --port #{database[:port]} --host #{database[:host]} --username #{database[:user]} --verbose --no-acl --no-owner -d #{database[:database]} < #{file.path}")
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
- Dir[File.join(File.dirname(__FILE__), "command", "*.rb")].each do |file|
1
+ Dir[File.join(File.dirname(__FILE__), "command/**/", "*.rb")].each do |file|
2
2
  require file
3
3
  end
@@ -1,3 +1,55 @@
1
+ # -*- coding: utf-8 -*-
1
2
  module K8sflow
2
- VERSION = '0.10.1'
3
+ VERSION = '0.11.0'
4
+ VERSION_NAMES = {1 => 'France II',
5
+ 2 => 'R.C. Rickmers',
6
+ 3 => 'Thomas W. Lawson',
7
+ 4 => 'Preussen',
8
+ 5 => 'Wyoming',
9
+ 6 => 'Wind Star',
10
+ 7 => 'Royal Clipper',
11
+ 8 => 'Potosí',
12
+ 9 => 'Maria Rickmers',
13
+ 10 => 'København',
14
+ 11 => 'France I',
15
+ 12 => 'Viking',
16
+ 13 => 'Amerigo Vespucci',
17
+ 14 => 'Sedov',
18
+ 15 => 'Great Republic',
19
+ 16 => 'Krusenstern',
20
+ 17 => 'Pamir',
21
+ 18 => 'Juan Sebastián de Elcano',
22
+ 19 => 'Esmeralda',
23
+ 20 => 'Star Clipper',
24
+ 21 => 'Star Flyer',
25
+ 22 => 'Dar Młodzieży',
26
+ 23 => 'Simon Bolivar',
27
+ 24 => 'Cuauhtémoc',
28
+ 25 => 'Gloria',
29
+ 26 => 'Créole',
30
+ 27 => 'Mir',
31
+ 28 => 'Statsraad Lehmkuhl',
32
+ 29 => 'Mircea',
33
+ 30 => 'Seute Deern',
34
+ 31 => 'Tovarishch',
35
+ 32 => 'Falls of Clyde',
36
+ 33 => 'Herzogin Cecilie',
37
+ 34 => 'Kaiwo Maru',
38
+ 35 => 'Kaiwo Maru II',
39
+ 36 => 'Lawhill',
40
+ 37 => 'Moshulu',
41
+ 38 => 'Nippon Maru',
42
+ 39 => 'Nippon Maru II',
43
+ 40 => 'Passat',
44
+ 41 => 'Palinuro',
45
+ 42 => 'Peking',
46
+ 43 => 'Pommern',
47
+ 44 => 'Sea Cloud',
48
+ 45 => 'Wind Surf',
49
+ 46 => 'Eagle',
50
+ 47 => 'Sagres II',
51
+ 48 => 'Phocéa',
52
+ 49 => 'Archibald Russell',
53
+ 50 => 'Wind Spirit'}
54
+
3
55
  end
data/lib/k8sflow.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'clitopic'
2
2
  require 'k8sflow/version'
3
3
 
4
+ Clitopic.name = 'k8sflow'
4
5
  Clitopic.version = K8sflow::VERSION
5
6
  #Clitopic.parser = Clitopic::Parser::OptParser
6
7
  Clitopic.commands_dir = "#{__FILE__}/k8sflow/command"
@@ -0,0 +1,143 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # The generated `.rspec` file contains `--require spec_helper` which will cause this
4
+ # file to always be loaded, without a need to explicitly require it in any files.
5
+ #
6
+ # Given that it is always loaded, you are encouraged to keep this file as
7
+ # light-weight as possible. Requiring heavyweight dependencies from this file
8
+ # will add to the boot time of your test suite on EVERY test run, even for an
9
+ # individual file that may not need all of that loaded. Instead, consider making
10
+ # a separate helper file that requires the additional dependencies and performs
11
+ # the additional setup, and require it from the spec files that actually need it.
12
+ #
13
+ # The `.rspec` file also contains a few flags that are not defaults but that
14
+ # users commonly want.
15
+ #
16
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
17
+ require 'simplecov'
18
+ require "codeclimate-test-reporter"
19
+ CodeClimate::TestReporter.start
20
+ SimpleCov.start do
21
+ add_filter 'spec/'
22
+ add_filter 'lib/clitopic/helpers.rb'
23
+ add_group 'lib', 'lib'
24
+ add_group 'commands', 'lib/clitopic/command'
25
+
26
+ end
27
+
28
+ require 'clitopic'
29
+ require 'clitopic/cli'
30
+ require 'clitopic/command'
31
+ class TopicA < Clitopic::Topic::Base
32
+ register name: "a",
33
+ description: "describe a"
34
+ end
35
+
36
+ class TopicB < Clitopic::Topic::Base
37
+ register name: "b",
38
+ description: "describe b"
39
+
40
+ option :merge, "--[no-]merge", "Merge options with current file", default: true
41
+ end
42
+
43
+ class Topic < Clitopic::Topic::Base
44
+ end
45
+
46
+ class RootCmd < Clitopic::Command::Base
47
+ register name: 'root_cmd',
48
+ description: "descrption1",
49
+ banner: "banner1"
50
+ end
51
+
52
+ class TopicaCmd < Clitopic::Command::Base
53
+ register name: 'cmd',
54
+ description: "descrption_cmd",
55
+ banner: "banner_cmd",
56
+ topic: 'a'
57
+ end
58
+
59
+ class TopicaIndex < Clitopic::Command::Base
60
+ register name: 'index', topic: 'a'
61
+ end
62
+
63
+ class TopicbIndex < Clitopic::Command::Base
64
+ register name: 'index', topic: TopicB
65
+ end
66
+
67
+ class TopiccIndex < Clitopic::Command::Base
68
+ register name: 'index', topic: {name: 'c', description: 'topic c'}
69
+ end
70
+
71
+ RSpec.configure do |config|
72
+ # rspec-expectations config goes here. You can use an alternate
73
+ # assertion/expectation library such as wrong or the stdlib/minitest
74
+ # assertions if you prefer.
75
+ config.expect_with :rspec do |expectations|
76
+ # This option will default to `true` in RSpec 4. It makes the `description`
77
+ # and `failure_message` of custom matchers include text for helper methods
78
+ # defined using `chain`, e.g.:
79
+ # be_bigger_than(2).and_smaller_than(4).description
80
+ # # => "be bigger than 2 and smaller than 4"
81
+ # ...rather than:
82
+ # # => "be bigger than 2"
83
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
84
+ end
85
+
86
+ # rspec-mocks config goes here. You can use an alternate test double
87
+ # library (such as bogus or mocha) by changing the `mock_with` option here.
88
+ config.mock_with :rspec do |mocks|
89
+ # Prevents you from mocking or stubbing a method that does not exist on
90
+ # a real object. This is generally recommended, and will default to
91
+ # `true` in RSpec 4.
92
+ mocks.verify_partial_doubles = true
93
+ end
94
+
95
+ # The settings below are suggested to provide a good initial experience
96
+ # with RSpec, but feel free to customize to your heart's content.
97
+ =begin
98
+ # These two settings work together to allow you to limit a spec run
99
+ # to individual examples or groups you care about by tagging them with
100
+ # `:focus` metadata. When nothing is tagged with `:focus`, all examples
101
+ # get run.
102
+ config.filter_run :focus
103
+ config.run_all_when_everything_filtered = true
104
+
105
+ # Limits the available syntax to the non-monkey patched syntax that is recommended.
106
+ # For more details, see:
107
+ # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
108
+ # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
109
+ # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
110
+ config.disable_monkey_patching!
111
+
112
+ # This setting enables warnings. It's recommended, but in some cases may
113
+ # be too noisy due to issues in dependencies.
114
+ config.warnings = true
115
+
116
+ # Many RSpec users commonly either run the entire suite or an individual
117
+ # file, and it's useful to allow more verbose output when running an
118
+ # individual spec file.
119
+ if config.files_to_run.one?
120
+ # Use the documentation formatter for detailed output,
121
+ # unless a formatter has already been configured
122
+ # (e.g. via a command-line flag).
123
+ config.default_formatter = 'doc'
124
+ end
125
+
126
+ # Print the 10 slowest examples and example groups at the
127
+ # end of the spec run, to help surface which specs are running
128
+ # particularly slow.
129
+ config.profile_examples = 10
130
+
131
+ # Run specs in random order to surface order dependencies. If you find an
132
+ # order dependency and want to debug it, you can fix the order by providing
133
+ # the seed, which is printed after each run.
134
+ # --seed 1234
135
+ config.order = :random
136
+
137
+ # Seed global randomization in this process using the `--seed` CLI option.
138
+ # Setting this allows you to use `--seed` to deterministically reproduce
139
+ # test failures related to randomization by passing the same `--seed` value
140
+ # as the one that triggered the failure.
141
+ Kernel.srand config.seed
142
+ =end
143
+ end
metadata CHANGED
@@ -1,43 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k8sflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.1
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Antoine Legrand
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-14 00:00:00.000000000 Z
11
+ date: 2015-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cli-topic
15
- requirement: !ruby/object:Gem::Requirement
15
+ version_requirements: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.9'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
20
+ requirement: !ruby/object:Gem::Requirement
23
21
  requirements:
24
- - - ">="
22
+ - - "~>"
25
23
  - !ruby/object:Gem::Version
26
24
  version: '0.9'
25
+ prerelease: false
26
+ type: :runtime
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: docker-api
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.22'
29
34
  requirement: !ruby/object:Gem::Requirement
30
35
  requirements:
31
- - - ">="
36
+ - - "~>"
32
37
  - !ruby/object:Gem::Version
33
38
  version: '1.22'
39
+ prerelease: false
34
40
  type: :runtime
41
+ - !ruby/object:Gem::Dependency
42
+ name: heroku-api
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.3'
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '0.3'
35
53
  prerelease: false
54
+ type: :runtime
55
+ - !ruby/object:Gem::Dependency
56
+ name: netrc
36
57
  version_requirements: !ruby/object:Gem::Requirement
37
58
  requirements:
38
- - - ">="
59
+ - - "~>"
39
60
  - !ruby/object:Gem::Version
40
- version: '1.22'
61
+ version: '0.7'
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '0.7'
67
+ prerelease: false
68
+ type: :runtime
41
69
  description: Manage workflow from source to kubernetes deployement
42
70
  email:
43
71
  - ant.legrand@gmail.com
@@ -55,16 +83,25 @@ files:
55
83
  - lib/k8sflow/command.rb
56
84
  - lib/k8sflow/command/image.rb
57
85
  - lib/k8sflow/command/maintenance.rb
86
+ - lib/k8sflow/command/pg/backup.rb
87
+ - lib/k8sflow/command/pg/copy.rb
88
+ - lib/k8sflow/command/pg/dump.rb
89
+ - lib/k8sflow/command/pg/kill.rb
90
+ - lib/k8sflow/command/pg/killall.rb
91
+ - lib/k8sflow/command/pg/pg_base.rb
92
+ - lib/k8sflow/command/pg/pg_topic.rb
93
+ - lib/k8sflow/command/pg/ps.rb
94
+ - lib/k8sflow/command/pg/psql.rb
95
+ - lib/k8sflow/command/pg/restore.rb
58
96
  - lib/k8sflow/command/run.rb
59
97
  - lib/k8sflow/utils/heroku.rb
60
98
  - lib/k8sflow/version.rb
61
- - spec/kubeflow_spec.rb
62
- - spec/topic_spec.rb
99
+ - spec/spec_helper.rb
63
100
  homepage: http://gitlab.com/ant31
64
101
  licenses:
65
102
  - MIT
66
103
  metadata: {}
67
- post_install_message:
104
+ post_install_message:
68
105
  rdoc_options: []
69
106
  require_paths:
70
107
  - lib
@@ -79,12 +116,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
116
  - !ruby/object:Gem::Version
80
117
  version: '0'
81
118
  requirements: []
82
- rubyforge_project:
83
- rubygems_version: 2.4.5
84
- signing_key:
119
+ rubyforge_project:
120
+ rubygems_version: 2.4.8
121
+ signing_key:
85
122
  specification_version: 4
86
123
  summary: Manage workflow from source to docker to kubernetes deployement
87
124
  test_files:
88
- - spec/kubeflow_spec.rb
89
- - spec/topic_spec.rb
90
- has_rdoc:
125
+ - spec/spec_helper.rb
@@ -1,6 +0,0 @@
1
- require 'kubeflow'
2
- describe Kubeflow::VERSION do
3
- it "should be equal 0.0.1" do
4
- expect(Kubeflow::VERSION).to eql("0.0.1")
5
- end
6
- end
data/spec/topic_spec.rb DELETED
@@ -1,7 +0,0 @@
1
- require 'kubeflow'
2
- describe MultiCli::Topic do
3
- it "Add topic in class variable" do
4
- a = MultiCli::Topic.new(name: 'topic1', description: "description1", hidden: true)
5
- expect(MultiCli::Topic.topics[
6
- end
7
- end