cloudkeeper 1.2.0 → 1.3.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: d8158ac4e36edb0f861a17631f53932f2444d660
4
- data.tar.gz: 0362bb1cbb7737a2594f53b27caf0ca3f4b0549e
3
+ metadata.gz: b68f4e4bb882318c02878608479323a196857f2e
4
+ data.tar.gz: 13b08b1aae43eb6858fa726ebfe782644b72e681
5
5
  SHA512:
6
- metadata.gz: 5b84c55cdcb593b9c099a49a9902eec3bace57311e63ee1957673225c5ef152831ddcd5f40888e2588609c1db0b8dfd27bbd2070f95aed010630904734138176
7
- data.tar.gz: ce95a0e4622e04d09308f97cc9c99bf6238d0d00d8fb81d6bd0618a708dbae65e81931c507d0c09a4924d02add21cdc60d72aca07988a3aa410a31ad19d310d3
6
+ metadata.gz: c16beb7fe52106c8987ab873fd3c4be88883d3e830f08aadf3e30a8b7fe12ee15c0c0fb9f91e071e7841e01591493ce385fb325ed5a24a24b63ce6f0fb7bf9d1
7
+ data.tar.gz: fae35d54048e43b15d0cdc472aa98cf973bfab70322d7610f55018fd077ec4a16560129b947e4804bf9153016b23216b378f78abed6722de6684ef072ad17b89
@@ -0,0 +1,36 @@
1
+ version: 2
2
+ jobs:
3
+ build:
4
+ branches:
5
+ only:
6
+ - master
7
+ docker:
8
+ - image: docker:stable
9
+ working_directory: /root/cloudkeeper
10
+ steps:
11
+ - run: apk add --no-cache git openssh
12
+ - checkout
13
+ - setup_remote_docker
14
+ - run: |
15
+ TAG=${CIRCLE_BRANCH}
16
+ BRANCH=${CIRCLE_BRANCH}
17
+ VERSION=">= 0"
18
+
19
+ if [ "${TAG}" == "master" ]; then
20
+ TAG=latest
21
+ fi
22
+
23
+ if [ -n "${CIRCLE_TAG}" ]; then
24
+ TAG=${CIRCLE_TAG#v}
25
+ BRANCH=${TAG/%.*/.x}
26
+ VERSION=${TAG}
27
+ fi
28
+
29
+ docker build --build-arg branch=$BRANCH --build-arg version="$VERSION" -t cloudkeeper/cloudkeeper:$TAG .
30
+ docker login -u $DOCKER_USER -p $DOCKER_PASS
31
+ docker push cloudkeeper/cloudkeeper:$TAG
32
+ deployment:
33
+ fake_deploy_for_cci2:
34
+ tag: /v.*/
35
+ commands:
36
+ - echo "make tags run in 2.0"
@@ -0,0 +1,51 @@
1
+ FROM ubuntu:16.04
2
+
3
+ ARG branch=master
4
+ ARG version
5
+
6
+ ENV name="cloudkeeper"
7
+ ENV spoolDir="/var/spool/${name}"
8
+ ENV imgDir="${spoolDir}/images" \
9
+ runDir="/var/run/${name}" \
10
+ logDir="/var/log/${name}" \
11
+ lockDir="/var/lock/${name}" \
12
+ nginxLogDir="/var/log/nginx" \
13
+ nginxLibDir="/var/lib/nginx"
14
+
15
+ LABEL application=${name} \
16
+ description="A tool for synchronizing appliances between AppDB and CMFs" \
17
+ maintainer="kimle@cesnet.cz" \
18
+ version=${version} \
19
+ branch=${branch}
20
+
21
+ SHELL ["/bin/bash", "-c"]
22
+
23
+ # update + dependencies
24
+ RUN apt-get update && \
25
+ apt-get --assume-yes upgrade && \
26
+ apt-get --assume-yes install ruby qemu-utils curl nginx file
27
+
28
+ # EGI trust anchors
29
+ RUN set -o pipefail && \
30
+ curl -s https://dist.eugridpma.info/distribution/igtf/current/GPG-KEY-EUGridPMA-RPM-3 | apt-key add - && \
31
+ echo $'#### EGI Trust Anchor Distribution ####\n\
32
+ deb http://repository.egi.eu/sw/production/cas/1/current egi-igtf core' > /etc/apt/sources.list.d/egi.list && \
33
+ apt-get update && \
34
+ apt-get --assume-yes install ca-policy-egi-core
35
+
36
+ # cloudkeeper
37
+ RUN gem install ${name} -v "${version}" --no-document
38
+
39
+ # env
40
+ RUN useradd --system --shell /bin/false --home ${spoolDir} --create-home ${name} && \
41
+ usermod -L ${name} && \
42
+ mkdir -p ${imgDir} ${runDir} ${logDir} ${lockDir} && \
43
+ chown -R ${name}:${name} ${spoolDir} ${runDir} ${logDir} ${lockDir} ${nginxLogDir} ${nginxLibDir}
44
+
45
+ VOLUME ${imgDir}
46
+
47
+ EXPOSE 7300-7400
48
+
49
+ USER ${name}
50
+
51
+ ENTRYPOINT ["cloudkeeper"]
@@ -40,7 +40,7 @@ Gem::Specification.new do |spec|
40
40
  spec.add_development_dependency 'simplecov', '~> 0.12'
41
41
  spec.add_development_dependency 'pry', '~> 0.10'
42
42
  spec.add_development_dependency 'vcr', '~> 3.0'
43
- spec.add_development_dependency 'webmock', '~> 2.1'
43
+ spec.add_development_dependency 'webmock', '~> 3.0'
44
44
  spec.add_development_dependency 'diffy', '~> 3.1'
45
45
  spec.add_development_dependency 'grpc-tools', '~> 1.0'
46
46
 
@@ -15,8 +15,11 @@ cloudkeeper:
15
15
  access-log-file: /var/log/cloudkeeper/nginx-access.log # File for NGINX access log
16
16
  pid-file: /var/run/cloudkeeper/nginx.pid # NGINX pid file
17
17
  ip-address: 127.0.0.1 # IP address NGINX can listen on
18
- min-port: 7300 # Minimal port NGINX can listen on
19
- max-port: 7400 # Maximal port NGINX can listen on
18
+ port: 50505 # Port NGINX can listen on
19
+ proxy:
20
+ ip-address: # Proxy IP address
21
+ port: # Proxy port
22
+ ssl: false # Whether proxy will use SSL connection
20
23
  backend:
21
24
  endpoint: 127.0.0.1:50051 # Backend's gRPC endpoint
22
25
  certificate: /etc/grid-security/backendcert.pem # Backend's certificate
@@ -84,14 +84,22 @@ module Cloudkeeper
84
84
  default: Cloudkeeper::Settings['nginx']['ip-address'],
85
85
  type: :string,
86
86
  desc: 'IP address NGINX can listen on'
87
- method_option :'nginx-min-port',
88
- default: Cloudkeeper::Settings['nginx']['min-port'],
87
+ method_option :'nginx-port',
88
+ default: Cloudkeeper::Settings['nginx']['port'],
89
89
  type: :numeric,
90
- desc: 'Minimal port NGINX can listen on'
91
- method_option :'nginx-max-port',
92
- default: Cloudkeeper::Settings['nginx']['max-port'],
90
+ desc: 'Port NGINX can listen on'
91
+ method_option :'nginx-proxy-ip-address',
92
+ default: Cloudkeeper::Settings['nginx']['proxy']['ip-address'],
93
+ type: :string,
94
+ desc: 'Proxy IP address'
95
+ method_option :'nginx-proxy-port',
96
+ default: Cloudkeeper::Settings['nginx']['proxy']['port'],
93
97
  type: :numeric,
94
- desc: 'Maximal port NGINX can listen on'
98
+ desc: 'Proxy port'
99
+ method_option :'nginx-proxy-ssl',
100
+ default: Cloudkeeper::Settings['nginx']['proxy']['ssl'],
101
+ type: :boolean,
102
+ desc: 'Whether proxy will use SSL connection'
95
103
  method_option :'backend-endpoint',
96
104
  required: true,
97
105
  default: Cloudkeeper::Settings['backend']['endpoint'],
@@ -142,17 +150,20 @@ module Cloudkeeper
142
150
  end
143
151
 
144
152
  def validate_configuration!
145
- validate_configuration_group! :authentication,
153
+ validate_configuration_group! %i[authentication],
146
154
  %i[certificate key backend-certificate],
147
155
  'Authentication configuration missing'
148
- validate_configuration_group! :'remote-mode',
156
+ validate_configuration_group! %i[remote-mode],
149
157
  %i[nginx-binary nginx-runtime-dir nginx-error-log-file nginx-access-log-file nginx-pid-file
150
- nginx-ip-address nginx-min-port nginx-max-port],
158
+ nginx-ip-address nginx-port],
151
159
  'NGINX configuration missing'
160
+ validate_configuration_group! %i[remote-mode nginx-proxy-ip-address],
161
+ %i[nginx-proxy-port],
162
+ 'NGINX proxy configuration missing'
152
163
  end
153
164
 
154
- def validate_configuration_group!(flag, required_options, error_message)
155
- return unless Cloudkeeper::Settings[flag]
165
+ def validate_configuration_group!(flags, required_options, error_message)
166
+ return unless flags.reduce(true) { |acc, elem| Cloudkeeper::Settings[elem] && acc }
156
167
 
157
168
  raise Cloudkeeper::Errors::InvalidConfigurationError, error_message unless all_options_available(required_options)
158
169
  end
@@ -3,6 +3,7 @@ require 'tempfile'
3
3
  require 'securerandom'
4
4
  require 'erb'
5
5
  require 'tilt/erb'
6
+ require 'uri'
6
7
 
7
8
  module Cloudkeeper
8
9
  module Nginx
@@ -48,8 +49,13 @@ module Cloudkeeper
48
49
  private
49
50
 
50
51
  def fill_access_data(credentials, configuration)
52
+ host = configuration[:proxy_ip_address] || configuration[:ip_address]
53
+ port = configuration[:proxy_port] || configuration[:port]
54
+ scheme = configuration[:proxy_ip_address] && configuration[:proxy_ssl] ? 'https' : 'http'
55
+ path = configuration[:image_file]
56
+
51
57
  access_data.merge! credentials
52
- access_data[:url] = "http://#{configuration[:ip_address]}:#{configuration[:port]}/#{configuration[:image_file]}"
58
+ access_data[:url] = "#{scheme}://#{host}:#{port}/#{path}"
53
59
  end
54
60
 
55
61
  def prepare_credentials
@@ -100,16 +106,15 @@ module Cloudkeeper
100
106
  nginx_configuration[:root_dir] = root_dir
101
107
  nginx_configuration[:image_file] = image_file
102
108
  nginx_configuration[:ip_address] = Cloudkeeper::Settings[:'nginx-ip-address']
103
- nginx_configuration[:port] = choose_port
109
+ nginx_configuration[:port] = Cloudkeeper::Settings[:'nginx-port']
110
+ nginx_configuration[:proxy_ip_address] = Cloudkeeper::Settings[:'nginx-proxy-ip-address']
111
+ nginx_configuration[:proxy_port] = Cloudkeeper::Settings[:'nginx-proxy-port']
112
+ nginx_configuration[:proxy_ssl] = Cloudkeeper::Settings[:'nginx-proxy-ssl']
104
113
 
105
114
  logger.debug("NGINX configuration: #{nginx_configuration.inspect}")
106
115
  nginx_configuration
107
116
  end
108
117
 
109
- def choose_port
110
- rand(Cloudkeeper::Settings[:'nginx-min-port']..Cloudkeeper::Settings[:'nginx-max-port'])
111
- end
112
-
113
118
  def random_string
114
119
  SecureRandom.uuid
115
120
  end
@@ -1,3 +1,3 @@
1
1
  module Cloudkeeper
2
- VERSION = '1.2.0'.freeze
2
+ VERSION = '1.3.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudkeeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michal Kimle
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-07 00:00:00.000000000 Z
11
+ date: 2017-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '2.1'
145
+ version: '3.0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '2.1'
152
+ version: '3.0'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: diffy
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -318,12 +318,14 @@ executables:
318
318
  extensions: []
319
319
  extra_rdoc_files: []
320
320
  files:
321
+ - ".circleci/config.yml"
321
322
  - ".gitignore"
322
323
  - ".gitmodules"
323
324
  - ".rspec"
324
325
  - ".rubocop.yml"
325
326
  - ".travis.yml"
326
327
  - CODE_OF_CONDUCT.md
328
+ - Dockerfile
327
329
  - Gemfile
328
330
  - LICENSE.txt
329
331
  - README.md
@@ -432,7 +434,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
432
434
  version: '0'
433
435
  requirements: []
434
436
  rubyforge_project:
435
- rubygems_version: 2.6.11
437
+ rubygems_version: 2.6.10
436
438
  signing_key:
437
439
  specification_version: 4
438
440
  summary: Synchronize cloud appliances between AppDB and cloud platforms