pcf_blue_green 0.2 → 0.4

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: 2c26974864a9203633d308ef8c1683706ad3f66a
4
- data.tar.gz: 22478f9d5690f1e22fe68975f2b0f01611a195b8
3
+ metadata.gz: d915116064ddab4b0e3396a21efd70914a00bf98
4
+ data.tar.gz: 050772c4e8252090b800ec435aba7e15e5e0d38f
5
5
  SHA512:
6
- metadata.gz: 0edda7a36592d455476bbfe3866eec30853ec1d524d7c5567774cb4d811d91b5ab65c7cba49de8d65fc291ff4003eead21f480e458e24e9e7e685c999576dc84
7
- data.tar.gz: dfac44b727db5ca1b55b79e5fb3a517111857b3afe2758d837b86bf6143a331defd49ac663264b0948716d5a4dfae19cd8a85da3e78973ba39b441cdd87a83f0
6
+ metadata.gz: 2cbde7c30fee961af01a255d5dfd4f5351243d7f0bfe305fa2fb42dc751b0b52e9d09cd5500720da255e931d75a1f40022537bcc9a29075295220a034ac64c0d
7
+ data.tar.gz: fa577b92629e52c89817bf0f0928348c24c50a1e578f206c5372d4a8de135686e7aa556427ff1374b0aaf3b0a927455f60e44d063dd86fdf2e35a534a47763c5
@@ -1,3 +1,3 @@
1
1
  module PcfBlueGreen
2
- VERSION = "0.2"
2
+ VERSION = "0.4"
3
3
  end
@@ -4,8 +4,148 @@ require 'shellwords'
4
4
  require "json"
5
5
 
6
6
  module PcfBlueGreen
7
- class BlueGreenDeployFailed < StandardError
7
+ class BlueGreenDeploymentFailed < StandardError
8
8
  end
9
+
10
+ class Routing
11
+
12
+ def initialize(url, user, pass, org, space, call_login = false, opts = {})
13
+ @options = {:login => '--skip-ssl-validation'}.merge(opts)
14
+ @url = url
15
+ @user = user
16
+ @pass = pass
17
+ @org = org
18
+ @space = space
19
+ @login_options = @options[:login]
20
+ login if call_login
21
+ cmd = "echo $(gem which pcf_blue_green)"
22
+ shell = Mixlib::ShellOut.new(cmd)
23
+ shell.run_command
24
+ gem_path = shell.stdout
25
+ sdf_path = gem_path.gsub("pcf_blue_green.rb\n", "shared-deploy-functions.sh")
26
+ @source_cmd = "source \'#{sdf_path}\'"
27
+ end
28
+
29
+ def cleanup_blue
30
+ remap_routes
31
+ status = bash("#{@source_cmd} && remove-blue")
32
+ raise PcfBlueGreen::BlueGreenDeploymentFailed unless status
33
+ remove_routes
34
+ bash("#{@source_cmd} && announce-success")
35
+ end
36
+
37
+ def remove_routes
38
+ removed_routes = []
39
+ if entity = entity_for(ENV['green'])
40
+ routes_stdout(entity)['resources'].each do |resource|
41
+ domain_url = resource['entity']['domain_url']
42
+ domain = domain_for(domain_url)
43
+ if resource['entity']['path'].empty?
44
+ cmd = "#{delete_route_command} #{domain} -n #{resource['entity']['host']} -f"
45
+ else
46
+ cmd = "#{delete_route_command} #{domain} -n #{resource['entity']['host']} --path #{resource['entity']['path']} -f"
47
+ end
48
+ puts cmd
49
+ shell = Mixlib::ShellOut.new(cmd)
50
+ shell.run_command
51
+ removed_routes += shell.stdout.split("\n")
52
+
53
+ unless shell.stderr.empty?
54
+ puts shell.stderr
55
+ raise PcfBlueGreen::BlueGreenDeploymentFailed
56
+ end
57
+ end
58
+ end
59
+ puts "Removed routes: #{removed_routes.uniq.join(', ')} "
60
+ removed_routes.uniq.join(",\n")
61
+ end
62
+
63
+ def remap_routes
64
+ puts "Remapping routes..."
65
+ puts "cf_app is #{ENV['cf_app']}"
66
+ puts "green is #{ENV['green']}"
67
+ mapped_routes = []
68
+ if entity = entity_for(ENV['cf_app'])
69
+ routes_stdout(entity)['resources'].each do |resource|
70
+ domain_url = resource['entity']['domain_url']
71
+ domain = domain_for(domain_url)
72
+ if resource['entity']['path'].empty?
73
+ cmd = "#{map_route_command} #{ENV['green']} #{domain} -n #{resource['entity']['host']}"
74
+ else
75
+ cmd = "#{map_route_command} #{ENV['green']} #{domain} -n #{resource['entity']['host']} --path #{resource['entity']['path']}"
76
+ end
77
+ puts cmd
78
+ shell = Mixlib::ShellOut.new(cmd)
79
+ shell.run_command
80
+ mapped_routes += shell.stdout.split("\n")
81
+ unless shell.stderr.empty?
82
+ puts shell.stderr
83
+ raise PcfBlueGreen::BlueGreenDeploymentFailed
84
+ end
85
+ end
86
+ end
87
+ puts "Mappped routes: #{mapped_routes.uniq.join(', ')} "
88
+ mapped_routes.uniq.join(",\n")
89
+ end
90
+
91
+ private
92
+
93
+ def entity_for(app_name)
94
+ app_data_cmd = "cf curl \"/v2/apps\" -X GET -H \"Content-Type: application/x-www-form-urlencoded\" -d 'q=name:#{app_name}'"
95
+ app_data_shell = Mixlib::ShellOut.new(app_data_cmd)
96
+ app_data_shell.run_command
97
+ app_stdout = JSON.parse(app_data_shell.stdout)
98
+ entity = app_stdout['resources'].first['entity']
99
+ unless app_data_shell.stderr.empty?
100
+ puts app_data_shell.stderr
101
+ raise PcfBlueGreen::BlueGreenDeploymentFailed
102
+ end
103
+ entity
104
+ end
105
+
106
+ def routes_stdout(entity)
107
+ routes_url = entity['routes_url']
108
+ app_routes_cmd = "cf curl #{routes_url}"
109
+ app_routes_shell = Mixlib::ShellOut.new(app_routes_cmd)
110
+ app_routes_shell.run_command
111
+ JSON.parse(app_routes_shell.stdout)
112
+ end
113
+
114
+ def domain_for(domain_url)
115
+ app_domain_cmd = "cf curl #{domain_url}"
116
+ app_domain_shell = Mixlib::ShellOut.new(app_domain_cmd)
117
+ app_domain_shell.run_command
118
+ domain_stdout = JSON.parse(app_domain_shell.stdout)
119
+ domain_stdout['entity']['name']
120
+ end
121
+
122
+ def login
123
+ puts "Logging in to #{@url}"
124
+ cf_login = "cf login -a #{@url} -u #{@user} -p '#{@pass}' -o #{@org} -s #{@space} #{@login_options} > /dev/null"
125
+ cmd = "#{cf_login}"
126
+ shell = Mixlib::ShellOut.new(cmd)
127
+ shell.run_command
128
+ end
129
+
130
+ def delete_route_command
131
+ "cf delete-route"
132
+ # cmd = "cf routes"
133
+ # shell = Mixlib::ShellOut.new(cmd)
134
+ # shell.run_command
135
+ # shell.stdout
136
+ end
137
+
138
+ def map_route_command
139
+ "cf map-route"
140
+ end
141
+
142
+
143
+ def bash(command)
144
+ escaped_command = Shellwords.escape(command)
145
+ system "bash -c #{escaped_command}"
146
+ end
147
+ end
148
+
9
149
  class SharedDeployFunctions
10
150
 
11
151
  def initialize
@@ -19,7 +159,7 @@ module PcfBlueGreen
19
159
 
20
160
  def blue_green_deploy
21
161
  status = bash("#{@source_cmd} && blue-green")
22
- raise PcfBlueGreen::BlueGreenDeployFailed unless status
162
+ raise PcfBlueGreen::BlueGreenDeploymentFailed unless status
23
163
  end
24
164
 
25
165
  def env_var_manifest_update
@@ -50,7 +190,6 @@ module PcfBlueGreen
50
190
  def bash(command)
51
191
  escaped_command = Shellwords.escape(command)
52
192
  system "bash -c #{escaped_command}"
53
- end
54
-
193
+ end
55
194
  end
56
195
  end
@@ -69,33 +69,19 @@ function cf-push {
69
69
  function check-health {
70
70
  local app_url=$1
71
71
  announce-task "Checking health"
72
- cf_output=$(echo $(cf env ${cf_app})| grep -o 'User-Provided:.*')
73
- echo "Executing curl of ${app_url}\n\n"
74
- if echo $cf_output| egrep -o 'MAINTENANCE_ENABLED: \S*'
75
- then
76
- kv=$(echo $cf_output| egrep -o 'MAINTENANCE_ENABLED: \S*')
77
- arrkv=(${kv// / })
78
- if [ ${arrkv[1]} == true ] ; then
79
- status=$(curl -sSIL -X GET -o /dev/null -w "%{http_code}" ${app_url} --insecure)
80
- if [ $status == 503 ] ; then
81
- echo -e "${BGre}curl of ${app_url} 503 OK"
82
- else
83
- echo ERROR: Expecting 503 status
84
- exit 1
85
- fi
72
+ maitenance_enabled=$(echo $(cf curl '/v2/apps' -X GET -H 'Content-Type: application/x-www-form-urlencoded' -d "q=name:$cf_app" | jq '.resources[0].entity.environment_json.MAINTENANCE_ENABLED'))
73
+ maitenance_enabled=$(echo ${maitenance_enabled//\"} | awk '{ print tolower($1) }')
74
+ if [ $maitenance_enabled == "true" ] ; then
75
+ status=$(curl -sSIL --header "x-digital-auth: ${JWT}" -X GET -o /dev/null -w "%{http_code}" ${app_url} --insecure)
76
+ if [ $status == 503 ] ; then
77
+ echo -e "${BGre}curl of ${app_url} 503 OK"
86
78
  else
87
- curl -fsSIL --user "${BASIC_AUTH_USERNAME}:${BASIC_AUTH_PASSWORD}" ${app_url} --insecure
88
- status=$(curl -sSIL -X GET -o /dev/null -w "%{http_code}" ${app_url} --insecure)
89
- if [ $status == 200 ] ; then
90
- echo -e "${BGre}curl of ${app_url} 200 OK"
91
- else
92
- echo -e "${BGre}curl of ${app_url} ${status} ERR"
79
+ echo ERROR: Expecting 503 status
93
80
  exit 1
94
- fi
95
81
  fi
96
82
  else
97
- curl -fsSIL -X GET --user "${BASIC_AUTH_USERNAME}:${BASIC_AUTH_PASSWORD}" ${app_url} --insecure
98
- status=$(curl -sSIL -X GET -o /dev/null -w "%{http_code}" ${app_url} --insecure)
83
+ curl -fsSIL --header "x-digital-auth: ${JWT}" --user "${BASIC_AUTH_USERNAME}:${BASIC_AUTH_PASSWORD}" ${app_url} --insecure
84
+ status=$(curl -sSIL --header "x-digital-auth: ${JWT}" -X GET -o /dev/null -w "%{http_code}" ${app_url} --insecure)
99
85
  if [ $status == 200 ] ; then
100
86
  echo -e "${BGre}curl of ${app_url} 200 OK"
101
87
  else
@@ -125,37 +111,9 @@ function generate-manifest {
125
111
  fi
126
112
  }
127
113
 
128
- function remap-routes {
129
- announce-task "Remapping routes..."
130
- echo "cf_app is ${cf_app}"
131
- echo "green is ${green}"
132
- set -x
133
- run-cmd cf routes
134
-
135
- if [ -z ${sso_hostname+x} ]; then
136
- run-cmd cf routes | tail -n +4 | grep ${cf_app} | awk '{print $3" -n "$2}'
137
- cf routes | tail -n +4 | grep ${cf_app} | awk '{print $3" -n "$2}' | xargs -n 3 cf map-route ${green}
138
- else
139
- if [ -n "$map_main_route" ]; then
140
- run-cmd cf routes | tail -n +4 | awk '($3==ENVIRON["domain"]) && ($2==ENVIRON["cf_app"]) {print $3" -n " $2 }' | xargs -n 3 cf map-route ${green}
141
- fi
142
- run-cmd cf routes | tail -n +4 | awk '($2==ENVIRON["sso_hostname"]) && ($5==ENVIRON["cf_app"]) {print $3" -n "$2 " --path "substr($4,2) }'
143
- cf routes | tail -n +4 | awk '($2==ENVIRON["sso_hostname"]) && ($5==ENVIRON["cf_app"]) {print $3" -n "$2 " --path "substr($4,2) }' | xargs -n 5 cf map-route ${green}
144
- fi
145
-
146
- set +x
147
- }
148
-
149
114
  function remove-blue {
150
115
  run-cmd cf delete ${blue} -f
151
116
  run-cmd cf rename $green $blue
152
- run-cmd cf delete-route $domain -n $green -f
153
- if [ -n "$sso_hostname" ]; then
154
- set -x
155
- run-cmd cf routes | tail -n +4 | awk '($2==ENVIRON["green"]) && $4 {print $3" -n "$2 " --path "substr($4,2)" -f"}' | xargs -n 6
156
- cf routes | tail -n +4 | awk '($2==ENVIRON["green"]) && $4 {print $3" -n "$2 " --path "substr($4,2)" -f"}' | xargs -n 6 cf delete-route
157
- set +x
158
- fi
159
117
  }
160
118
 
161
119
  function get-domain {
@@ -165,7 +123,7 @@ function get-domain {
165
123
 
166
124
  function prep-green {
167
125
  blue=${cf_app}
168
- export green="${cf_app}-${cf_space}-green"
126
+ export green="${cf_app}-${cf_space}-g"
169
127
  if [ -z ${cf_manifest+x }]; then
170
128
  generate-manifest
171
129
  else
@@ -203,10 +161,6 @@ function blue-green {
203
161
  else
204
162
  check-health "https://${green}.${health_check_domain}/${app_path}"
205
163
  fi
206
-
207
- remap-routes
208
- remove-blue
209
- announce-success
210
164
  }
211
165
 
212
166
  function simple-push {
@@ -32,4 +32,5 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency "bundler", "~> 1.13"
33
33
  spec.add_development_dependency "rake", "~> 10.0"
34
34
  spec.add_development_dependency "rspec", "~> 3.0"
35
+ spec.add_dependency "pry"
35
36
  end
@@ -0,0 +1,14 @@
1
+
2
+
3
+ space host domain port path type apps service
4
+ app-space onemoreapp apps.prod.domain.com onemoreapp
5
+ app-space otherapp apps.prod.domain.com otherapp
6
+ app-space customapp apps.prod.domain.com customapp
7
+ app-space otherapp apps.prod.domain.com customapp
8
+ app-space customapp apps.prod.otherdomain.com otherapp
9
+ app-space customapp apps.prod.domain.com /somepath1 customapp
10
+ app-space otherapp apps.prod.domain.com /somepath2 customapp
11
+ app-space otherapp apps.prod.domain.com /somepath3 customapp
12
+ app-space otherapp apps.prod.domain.com /somepath4 otherapp
13
+ app-space otherapp apps.prod.domain.com /somepath5 otherapp
14
+ app-space otherapp apps.prod.domain.com /somepath6 otherapp
@@ -0,0 +1,16 @@
1
+
2
+
3
+ space host domain port path type apps service
4
+ app-space first-app apps.prod.domain.com.com first-app
5
+ app-space second-app apps.prod.domain.com.com second-app
6
+ app-space third-app apps.prod.domain.com.com third-app
7
+ app-space third-app apps.prod.otherdomain.com third-app
8
+ app-space third-app apps.prod.domain.com.com /firstapp-path1 second-app
9
+ app-space third-app apps.prod.domain.com.com /firstapp-path2 second-app
10
+ app-space third-app apps.prod.domain.com.com /firstapp-path3 second-app
11
+ app-space third-app apps.prod.domain.com.com /firstapp-path4 second-app
12
+ app-space third-app apps.prod.domain.com.com /firstapp-path5 second-app
13
+ app-space third-app apps.prod.otherdomain.com /otherdomainpath first-app
14
+ app-space third-app apps.prod.domain.com.com /secondapp-path second-app
15
+ app-space third-app apps.prod.domain.com.com /secondapp-path second-app
16
+ app-space third-app-other-host apps.prod.otherdomain.com third-app
@@ -0,0 +1,43 @@
1
+ {
2
+ "resources": [
3
+ {
4
+ "metadata": {
5
+ "guid": "ddbc3214-eg68-44ed-836a-a2defae75547",
6
+ "url": "/v2/routes/XXXXXXXXXXXXXXXXXXXX",
7
+ "created_at": "2017-02-08T16:28:08Z",
8
+ "updated_at": null
9
+ },
10
+ "entity": {
11
+ "host": "app-prod",
12
+ "path": "",
13
+ "domain_url": "/v2/shared_domains/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
14
+ }
15
+ },
16
+ {
17
+ "metadata": {
18
+ "guid": "ddsc3214-eg38-44ed-836a-a2defae75547",
19
+ "url": "/v2/routes/XXXXXXXXXXXXXXXXXXXX",
20
+ "created_at": "2017-02-08T16:28:08Z",
21
+ "updated_at": null
22
+ },
23
+ "entity": {
24
+ "host": "app-prod",
25
+ "path": "/some_path",
26
+ "domain_url": "/v2/shared_domains/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
27
+ }
28
+ },
29
+ {
30
+ "metadata": {
31
+ "guid": "dd3c3214-eg68-44ed-836a-a2defae74547",
32
+ "url": "/v2/routes/XXXXXXXXXXXXXXXXXXXX",
33
+ "created_at": "2017-02-08T16:28:08Z",
34
+ "updated_at": null
35
+ },
36
+ "entity": {
37
+ "host": "app-prod",
38
+ "path": "/other_domain_path",
39
+ "domain_url": "/v2/shared_domains/YYYYYYYYYYYYYYYYYYYYYYYYYYYY"
40
+ }
41
+ }
42
+ ]
43
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "app-prod",
3
+ "production": false,
4
+ "detected_buildpack_guid": null,
5
+ "environment_json": {
6
+ },
7
+ "ports": [
8
+ 8080
9
+ ],
10
+ "space_url": "/v2/spaces/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
11
+ "stack_url": "/v2/stacks/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
12
+ "routes_url": "/v2/apps/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/routes",
13
+ "events_url": "/v2/apps/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/events",
14
+ "service_bindings_url": "/v2/apps/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/service_bindings",
15
+ "route_mappings_url": "/v2/apps/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/route_mappings"
16
+ }
@@ -5,7 +5,66 @@ describe PcfBlueGreen do
5
5
  expect(PcfBlueGreen::VERSION).not_to be nil
6
6
  end
7
7
 
8
- it "does something useful" do
9
- expect(false).to eq(true)
8
+ describe "blue green deploy remap_routes" do
9
+ it 're-maps routes correctly for an application' do
10
+ expected_routes = %{simpleapp-app-space-green app.domain.com -n app-prod,
11
+ simpleapp-app-space-green app.domain.com -n app-prod --path /some_path,
12
+ simpleapp-app-space-green app.domain.com -n app-prod --path /other_domain_path}
13
+
14
+ ENV['APP_SPACE'] = 'app-space'
15
+ ENV['APP_NAME'] = 'simpleapp'
16
+ ENV['cf_app'] = 'simpleapp'
17
+ ENV['cf_api'] = 'https://api.sys.sandbox.test.com'
18
+ ENV['cf_user'] = 'testuser'
19
+ ENV['cf_password'] = 'password'
20
+ ENV['cf_org'] = 'ds'
21
+ ENV['green'] = 'simpleapp-app-space-green'
22
+
23
+ space = ENV['APP_SPACE']
24
+ api_url = ENV['cf_api']
25
+ username = ENV['cf_user']
26
+ password = ENV['cf_password']
27
+ org = ENV['cf_org']
28
+
29
+
30
+ @pcf_blue_green = PcfBlueGreen::Routing.new(api_url, username, password, org, space, login = false)
31
+ @pcf_blue_green.stub(:entity_for).and_return(JSON.parse(File.read('spec/mocks/simple_entity.json')))
32
+ @pcf_blue_green.stub(:routes_stdout).and_return(JSON.parse(File.read('spec/mocks/routes_stdout.json')))
33
+ @pcf_blue_green.stub(:domain_for).and_return("app.domain.com")
34
+ @pcf_blue_green.stub(:map_route_command).and_return('echo')
35
+
36
+ expect(expected_routes).to eq(@pcf_blue_green.remap_routes)
37
+ end
10
38
  end
11
- end
39
+ describe "blue green deploy remove_routes" do
40
+ it 'removes routes correctly for an application' do
41
+ expected_routes = %{app.domain.com -n app-prod -f,
42
+ app.domain.com -n app-prod --path /some_path -f,
43
+ app.domain.com -n app-prod --path /other_domain_path -f}
44
+
45
+ ENV['APP_SPACE'] = 'app-space'
46
+ ENV['APP_NAME'] = 'simpleapp'
47
+ ENV['cf_app'] = 'simpleapp'
48
+ ENV['cf_api'] = 'https://api.sys.sandbox.test.com'
49
+ ENV['cf_user'] = 'testuser'
50
+ ENV['cf_password'] = 'password'
51
+ ENV['cf_org'] = 'ds'
52
+ ENV['green'] = 'simpleapp-app-space-green'
53
+
54
+ space = ENV['APP_SPACE']
55
+ api_url = ENV['cf_api']
56
+ username = ENV['cf_user']
57
+ password = ENV['cf_password']
58
+ org = ENV['cf_org']
59
+
60
+
61
+ @pcf_blue_green = PcfBlueGreen::Routing.new(api_url, username, password, org, space, login = false)
62
+ @pcf_blue_green.stub(:entity_for).and_return(JSON.parse(File.read('spec/mocks/simple_entity.json')))
63
+ @pcf_blue_green.stub(:routes_stdout).and_return(JSON.parse(File.read('spec/mocks/routes_stdout.json')))
64
+ @pcf_blue_green.stub(:domain_for).and_return("app.domain.com")
65
+ @pcf_blue_green.stub(:delete_route_command).and_return('echo')
66
+
67
+ expect(expected_routes).to eq(@pcf_blue_green.remove_routes)
68
+ end
69
+ end
70
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pcf_blue_green
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.2'
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pawel Bardzinski
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-03 00:00:00.000000000 Z
11
+ date: 2017-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mixlib-shellout
@@ -72,6 +72,20 @@ dependencies:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
74
  version: '3.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: pry
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
75
89
  description: This is a gem that encapsulates the blue-green bash script. This allows
76
90
  to run blue-green deployments easily
77
91
  email:
@@ -92,6 +106,10 @@ files:
92
106
  - lib/pcf_blue_green/version.rb
93
107
  - lib/shared-deploy-functions.sh
94
108
  - pcf_blue_green.gemspec
109
+ - spec/mocks/custom_routes.txt
110
+ - spec/mocks/custom_routes_domain_host.txt
111
+ - spec/mocks/routes_stdout.json
112
+ - spec/mocks/simple_entity.json
95
113
  - spec/pcf_blue_green_spec.rb
96
114
  - spec/spec_helper.rb
97
115
  homepage: https://github.com/aaa-ncnu-ie/pcf_blue_green