cloudkeeper 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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