fhcap-cli 0.4.13 → 0.4.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -1
  3. data/Jenkinsfile +26 -0
  4. data/lib/fhcap/cli.rb +2 -0
  5. data/lib/fhcap/component.rb +3 -3
  6. data/lib/fhcap/config.rb +12 -0
  7. data/lib/fhcap/cookbook.rb +42 -2
  8. data/lib/fhcap/misc.rb +8 -1
  9. data/lib/fhcap/repo.rb +1 -1
  10. data/lib/fhcap/repos_helper.rb +11 -0
  11. data/lib/fhcap/tasks/chef/cookbook/aws/s3_helper.rb +21 -0
  12. data/lib/fhcap/tasks/chef/cookbook/check_bumps.rb +109 -0
  13. data/lib/fhcap/tasks/chef/cookbook/list_artifacts.rb +73 -17
  14. data/lib/fhcap/tasks/chef/cookbook/update_attribute.rb +51 -0
  15. data/lib/fhcap/tasks/chef/environments/create.rb +3 -1
  16. data/lib/fhcap/tasks/cluster/create_environment.rb +4 -3
  17. data/lib/fhcap/tasks/misc/platform_bump.rb +36 -0
  18. data/lib/fhcap/tasks/repo/add.rb +4 -6
  19. data/lib/fhcap/tasks/setup.rb +7 -1
  20. data/lib/fhcap/version.rb +1 -1
  21. data/lib/fhcap.rb +1 -1
  22. data/spec/fhcap/tasks/chef/cookbook/check_bumps_spec.rb +33 -0
  23. data/templates/chef/{environment_oscp.json.erb → environment_ocp.json.erb} +16 -1
  24. data/templates/chef/environment_ose-single.json.erb +1 -1
  25. data/templates/cluster/aws/common.json.erb +22 -23
  26. data/templates/cluster/aws/{oscp-7node.json.erb → ocp-multi-infra.json.erb} +64 -51
  27. data/templates/cluster/aws/{oscp-5node.json.erb → ocp-multi.json.erb} +47 -59
  28. data/templates/cluster/ocp-multi-infra.json.erb +8 -0
  29. data/templates/cluster/ocp-multi.json.erb +8 -0
  30. data/templates/cluster/openstack/{oscp-7node.json.erb → ocp-multi-infra.json.erb} +0 -0
  31. data/templates/cluster/openstack/{oscp-5node.json.erb → ocp-multi.json.erb} +0 -0
  32. metadata +16 -9
  33. data/templates/cluster/oscp-5node.json.erb +0 -8
  34. data/templates/cluster/oscp-7node.json.erb +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 78c7eb91b57300a3bde0b17a9e658c95daf0ae28
4
- data.tar.gz: e53cae790a8184c7b0f3d39bc9b8b9f0196bd938
3
+ metadata.gz: df6384b3f0a956ef606c3ce4543bdf5416501505
4
+ data.tar.gz: e468e58706453980ecde19e48309ff3f7eb0d0b8
5
5
  SHA512:
6
- metadata.gz: 3642959bb379209b96a820250ea2aaf16d142d894ac195cb3ec9261cd79a25a791cb57b3b809d92335ad0e43ae45c55f9a8a959cf4ed98d48e01778f8768b229
7
- data.tar.gz: e4343b8c5346771acb9386a1d192fe36ba5659c8126381e412e3af8429614ac7019398b9fd7951d1c7ab3b01c23a6f5271eccf3488f11afb249b5760737533d8
6
+ metadata.gz: 32bbd3b888485117124bb672a68018f0a71212e799fe22ee94b0a6dbcb08654c60cefdb4c55734ded424171afc11fb2e49da49df773ad96e3a244c2cc20e2d82
7
+ data.tar.gz: cf572600c4a85f9e1f94c5711c9a40d1f1355f34831991ec6b6852493fdbf579c211711549db6b21e2580608a13ade2787cc915637b57477d4eaac9bae814918
data/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
-
2
1
  ## Unreleased
3
2
 
3
+ ## 0.4.14
4
+
5
+ * [RHMAP-16161] - Adding S3 support for RHMAP component validation as part of list_artifacts task
6
+ * [RHMAP-8094] - Add cookbook check-bumps task
7
+ * [RHMAP-16470] - Added cookbook update attribute task
8
+ * [RHMAP-14096] - Adding platform version bump task
9
+ * [RHMAP-15648] - Add Jenkinsfile to repository for Wendy Jenkins builds
10
+ * [RHMAP-16052] - Allow updating clusters-dir option during repo add
11
+ * [RHMAP-16052] - Add empty-config and knife-dir option to setup task.
12
+ * [RHMAP-15292] - Renaming OSCP multi node cluster templates to ocp-multi and ocp-multi-infra
13
+ * [RHMAP-15292] - Adding support for AWS Elastic File System
14
+ * [RHMAP-15112] - Add 'dirty' option to cookbook update task. Allows manipulating cookbooks that have uncommited changes locally
15
+
4
16
  ## 0.4.13
5
17
 
6
18
  * [RHMAP-15127] - Add meta only option to cluster info task
data/Jenkinsfile ADDED
@@ -0,0 +1,26 @@
1
+ #!groovy
2
+
3
+ // https://github.com/feedhenry/fh-pipeline-library
4
+ @Library('fh-pipeline-library') _
5
+
6
+ node("ruby") {
7
+
8
+ step([$class: 'WsCleanup'])
9
+
10
+ stage('Checkout') {
11
+ checkout scm
12
+ }
13
+
14
+ stage('Install Dependencies') {
15
+ sh 'bundle install --binstubs'
16
+ }
17
+
18
+ stage('Unit Tests') {
19
+ sh 'bin/rspec --format documentation --color'
20
+ }
21
+
22
+ stage('Build') {
23
+ sh 'bin/rake build'
24
+ archiveArtifacts 'pkg/fhcap-cli-*.gem'
25
+ }
26
+ }
data/lib/fhcap/cli.rb CHANGED
@@ -20,6 +20,8 @@ module Fhcap
20
20
 
21
21
  method_option 'repos-dir', :type => :string, :desc => "Local directory where configured repos will be checked out"
22
22
  method_option 'fh-src-dir', :type => :string, :desc => "Local directory where FH component src repos are checked out"
23
+ method_option 'knife-dir', :type => :string, :desc => "Local directory where knife configuration will be stored"
24
+ method_option 'empty-config', :type => :boolean, :default => false, :desc => "Create an empty fhcap config i.e. No repos or knife config is pre configured"
23
25
 
24
26
  desc "setup", "Setup the FHCAP CLI"
25
27
 
@@ -28,7 +28,7 @@ module Fhcap
28
28
  Fhcap::CLI::Component.new.invoke(:update_config, [component], {force: options[:force]}) if options['update-config']
29
29
 
30
30
  #3. Update cookbook
31
- Fhcap::CLI::Cookbook.new.invoke(:update, [], {cookbooks: [artifact_cookbook], level: options['level']}) if options['update-cookbook']
31
+ Fhcap::CLI::Cookbook.new.invoke(:update, [], {dirty: true, level: options['level']}) if options['update-cookbook']
32
32
 
33
33
  end
34
34
 
@@ -67,11 +67,11 @@ module Fhcap
67
67
 
68
68
  method_option 'format', :type => :string, :default => 'table', :desc => "Format to output data in", :enum => %w{table json}
69
69
 
70
- def list
70
+ def list_artifacts
71
71
  require "fhcap/tasks/chef/cookbook/list_artifacts"
72
72
  Tasks::Chef::Cookbook::ListArtifacts.new(task_options(options.dup)).run
73
73
  end
74
74
 
75
75
  end
76
76
  end
77
- end
77
+ end
data/lib/fhcap/config.rb CHANGED
@@ -98,6 +98,18 @@ module Fhcap
98
98
  }
99
99
  end
100
100
 
101
+ def fhcap_empty_config
102
+ @fhcap_config ||= {
103
+ :repos_dir => File.join(default_dir, 'repos'),
104
+ :fh_src_dir => File.join(default_dir, 'repos'),
105
+ :repos => {
106
+ },
107
+ :knife_dir => File.join(default_dir, '.chef'),
108
+ :knife => {
109
+ }
110
+ }
111
+ end
112
+
101
113
  private
102
114
 
103
115
  def symbolize_keys_deep(h)
@@ -5,8 +5,11 @@ module Fhcap
5
5
  module CLI
6
6
  class Cookbook < Fhcap::ThorBase
7
7
 
8
+ include Fhcap::ReposHelper
9
+
8
10
  add_shared_option :cookbooks, :aliases => "-c", :desc => "Apply to these Cookbooks", :type => :array
9
11
  add_shared_option :modified, :aliases => "-m", :desc => "Apply only to modified Cookbooks", :type => :boolean, :required => false, :default => false
12
+ add_shared_option :dirty, :desc => "Apply only to cookbooks with uncommitted local changes", :type => :boolean, :required => false, :default => false
10
13
 
11
14
  desc "update", "Update a cookbook, defaults to all cookbooks."
12
15
  long_desc <<-LONGDESC
@@ -31,7 +34,7 @@ module Fhcap
31
34
  fhcap cookbook update -c feedhenry_common -v 1.2.3
32
35
  LONGDESC
33
36
 
34
- shared_options :cookbooks, :modified
37
+ shared_options :cookbooks, :modified, :dirty
35
38
 
36
39
  method_option 'level', :type => :string, :aliases => "-l", :desc => "Cookbook Bump level", :default => 'minor', :enum => %w{major minor patch}
37
40
  method_option 'version', :type => :string, :aliases => "-v", :desc => "Version to set manually"
@@ -47,6 +50,26 @@ module Fhcap
47
50
  end
48
51
  end
49
52
 
53
+ desc "check_bumps", "Check modified cookbook versions are bumped as expected"
54
+ long_desc <<-LONGDESC
55
+ Checks that all modified cookbook versions are bumped as expected against the base-branch
56
+
57
+ With --base-branch <git ref>, checks for modified cookbooks since <git ref>, default is origin/master
58
+
59
+ Examples:
60
+
61
+ fhcap cookbook check-bumps
62
+
63
+ fhcap cookbook check-bumps --base-branch origin/FH-v3.18
64
+ LONGDESC
65
+
66
+ method_option 'base-branch', :type => :string, :default => 'origin/master', :desc => "Base branch to check modified cookbooks against"
67
+
68
+ def check_bumps
69
+ require "fhcap/tasks/chef/cookbook/check_bumps"
70
+ Tasks::Chef::Cookbook::CheckBumps.new(task_options(options.dup.merge({modified: true, base_branch: options['base-branch']}))).run
71
+ end
72
+
50
73
  desc "update_metadata", "Update a cookbooks metadata, defaults to all cookbooks."
51
74
 
52
75
  shared_options :cookbooks, :modified
@@ -80,6 +103,23 @@ module Fhcap
80
103
  Tasks::Chef::Cookbook::Archive.new(task_options(options.dup)).run
81
104
  end
82
105
 
106
+ desc "update_attribute", "update_attribute"
107
+
108
+ shared_options :cookbooks
109
+ method_option :'attribute', :type => :string, :desc => "Attribute"
110
+ method_option :'value', :type => :string, :desc => "Value"
111
+ method_option :'attribute-file', :type => :string, :desc => "Attribute File (artifacts.rb)"
112
+
113
+ def update_attribute
114
+ require "fhcap/tasks/chef/cookbook/update_attribute"
115
+ cookbooks = get_cookbooks(options, nil, repo_cookbook_paths('-cookbooks'))
116
+ say("Cookbook update_attribute for #{cookbooks}", :yellow)
117
+
118
+ cookbooks.each do |cookbook|
119
+ Tasks::Chef::Cookbook::UpdateAttribute.new(task_options(options.dup.merge({cookbook: cookbook}))).run
120
+ end
121
+ end
122
+
83
123
  end
84
124
  end
85
- end
125
+ end
data/lib/fhcap/misc.rb CHANGED
@@ -91,6 +91,13 @@ module Fhcap
91
91
  end
92
92
  end
93
93
 
94
+ desc "platform_bump VERSION", "Bumps RHMAP Platform Version"
95
+
96
+ def platform_bump(version)
97
+ require "fhcap/tasks/misc/platform_bump"
98
+ Tasks::Misc::PlatformBump.new(task_options(options.dup.merge({version: version}))).run
99
+ end
100
+
94
101
  end
95
102
  end
96
- end
103
+ end
data/lib/fhcap/repo.rb CHANGED
@@ -13,7 +13,7 @@ module Fhcap
13
13
 
14
14
  shared_options :verbose, :name, :interactive
15
15
  method_option 'url', :type => :string, :desc => "Repo url i.e. git@github.com:fheng/fhcap-dev.git"
16
- method_option 'clusters-dir', :type => :string, :default => 'clusters', :desc => "Directlory in repo where cluster configs are stored i.e. organisations"
16
+ method_option 'clusters-dir', :type => :string, :default => 'clusters', :desc => "Directory in repo where cluster configs are stored i.e. organisations"
17
17
 
18
18
  def add
19
19
  require "fhcap/tasks/repo/add"
@@ -125,6 +125,8 @@ module Fhcap
125
125
  def get_cookbooks(options, default=nil, paths=repo_cookbook_paths)
126
126
  if options[:modified]
127
127
  get_modified_cookbooks(options, paths)
128
+ elsif options[:dirty]
129
+ get_dirty_cookbooks(options, paths)
128
130
  else
129
131
  options[:cookbooks] || (default || cookbook_loader(paths).cookbook_names)
130
132
  end
@@ -139,6 +141,15 @@ module Fhcap
139
141
  modified
140
142
  end
141
143
 
144
+ def get_dirty_cookbooks(options, paths=repo_cookbook_paths)
145
+ dirty = []
146
+ cookbook_loader(paths).cookbook_names.each do |name|
147
+ cookbook_dir = cookbook_loader.cookbooks_by_name[name].root_dir
148
+ dirty << name if is_dirty?(cookbook_dir)
149
+ end
150
+ dirty
151
+ end
152
+
142
153
  def get_cookbook_meta(name, paths=repo_cookbook_paths)
143
154
  cookbook_loader(paths).metadata[name]
144
155
  end
@@ -0,0 +1,21 @@
1
+ require 'aws-sdk'
2
+ require 'fhcap/providers_helper'
3
+
4
+ module Fhcap
5
+ module S3Helper
6
+
7
+ include Fhcap::ProvidersHelper
8
+
9
+ def with_provider_client(provider_name, provider_region)
10
+ cfg = provider_config(provider_name)
11
+ region = provider_region || provider_regions(provider_name).keys.first
12
+ creds = cfg[:credentials]
13
+ client = Aws::S3::Resource.new(
14
+ region: region,
15
+ credentials: Aws::Credentials.new(creds[:'aws-access-key'], creds[:'aws-secret-key'])
16
+ )
17
+ yield client
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,109 @@
1
+ require 'fhcap/tasks/chef/chef_task_base'
2
+
3
+ module Fhcap
4
+ module Tasks
5
+ module Chef
6
+ module Cookbook
7
+ class CheckBumps < ChefTaskBase
8
+
9
+ attr_reader :base_branch
10
+
11
+ def initialize(options)
12
+ super
13
+ @base_branch = options[:base_branch]
14
+ end
15
+
16
+ def run
17
+ cookbooks = get_cookbooks(options, nil, repo_cookbook_paths('-cookbooks'))
18
+ thor.say("Cookbook Check Bumps for #{cookbooks}", :yellow)
19
+
20
+ errors = []
21
+
22
+ cookbooks.each do |c|
23
+ cookbook = cookbook_loader.cookbooks_by_name[c]
24
+ metadata_file = cookbook.metadata_filenames.first
25
+
26
+ if not File.exist?(metadata_file)
27
+ thor.say("#{cookbook.name} no longer seems to exist", :yellow)
28
+ next
29
+ elsif is_new_since?(base_branch, metadata_file)
30
+ thor.say("#{cookbook.name} seems to be a new cookbook, not checking", :yellow)
31
+ next
32
+ end
33
+
34
+ version = cookbook.version
35
+ oldversion = get_old_cookbook_version(base_branch, metadata_file, version)
36
+
37
+ if base_branch =~ /master$/
38
+ min = next_minor_version(oldversion)
39
+ if minor_bumped_incorrectly?(version, min)
40
+ errors << "#{cookbook.name} is at version #{version}, but should be at least #{min} and not be incremented at the patch level"
41
+ end
42
+ else
43
+ min = next_patch_version(oldversion)
44
+ too_high = next_minor_version(oldversion)
45
+ if patch_bumped_incorrectly?(version, min, too_high)
46
+ errors << "#{cookbook.name} is at version #{version}, but should be at least #{min} and less than #{too_high}"
47
+ end
48
+ end
49
+ end
50
+
51
+ unless errors.empty?
52
+ thor.say("Incorrectly bumped cookbooks:", :red)
53
+ errors.each { |error|
54
+ puts error
55
+ }
56
+ thor.say("If you haven't changed these cookbooks, then your branch might be behind the base branch (#{base_branch}). In this case, rebasing should make these errors disappear.", :yellow)
57
+ exit 1
58
+ end
59
+ end
60
+
61
+ private
62
+
63
+ def get_old_cookbook_version(gitref, metadata_file, current_version)
64
+ Dir.chdir(File.dirname metadata_file) do
65
+ diff = `git diff #{gitref} -- #{File.basename metadata_file}`
66
+ oldver = diff.lines.select { |e| e.start_with?("-version") }[0]
67
+ if oldver
68
+ oldver.tr("-version '\n", "")
69
+ else
70
+ return current_version
71
+ end
72
+ end
73
+ end
74
+
75
+ def next_minor_version(version)
76
+ segments = Gem::Version.new(version).segments
77
+ segments[1] = segments[1].succ
78
+ segments[2] = 0
79
+ segments.join '.'
80
+ end
81
+
82
+ def next_patch_version(version)
83
+ segments = Gem::Version.new(version).segments
84
+ segments[2] = segments[2].succ
85
+ segments.join '.'
86
+ end
87
+
88
+ def is_new_since?(gitref, file)
89
+ Dir.chdir(File.dirname file) do
90
+ diff = `git diff --stat --diff-filter=A #{gitref} -- #{File.basename file}`
91
+ not diff.empty?
92
+ end
93
+ end
94
+
95
+ def minor_bumped_incorrectly?(version, min)
96
+ Gem::Version.new(min) > Gem::Version.new(version) or
97
+ !version.end_with? '.0'
98
+ end
99
+
100
+ def patch_bumped_incorrectly?(version, min, too_high)
101
+ Gem::Version.new(min) > Gem::Version.new(version) or
102
+ Gem::Version.new(version) >= Gem::Version.new(too_high)
103
+ end
104
+
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
@@ -1,4 +1,6 @@
1
1
  require 'fhcap/tasks/chef/chef_task_base'
2
+ require 'fhcap/tasks/chef/cookbook/aws/s3_helper'
3
+ require 'aws-sdk'
2
4
 
3
5
  module Fhcap
4
6
  module Tasks
@@ -6,6 +8,8 @@ module Fhcap
6
8
  module Cookbook
7
9
  class ListArtifacts < ChefTaskBase
8
10
 
11
+ include Fhcap::S3Helper
12
+
9
13
  def initialize(options)
10
14
  super(options)
11
15
  @format = options[:format] || 'table'
@@ -13,29 +17,60 @@ module Fhcap
13
17
 
14
18
  def run
15
19
  if print_table?
16
- thor.say "Chef::Cookbook::Component::List", :yellow
20
+ thor.say "Chef::Cookbook::Component::ListArtifacts", :yellow
17
21
  end
22
+
23
+ results = print_table? ? [table_header("Component", "Version", "Build", "Artifact", "Available")] : []
24
+
25
+ artifact_meta = get_cookbook_meta(['fh-artifact'], 'artifacts')
26
+ artifact_s3_bucket = artifact_meta['artifact']['s3']['bucket']
27
+ # Provider must be fheng to have access to S3 artifact buckets
28
+ s3_provider_name = "aws:fheng"
29
+ s3_provider_region = "eu-west-1"
30
+ exit_status = 0
31
+
18
32
  cookbooks = get_cookbooks(options, nil, repo_cookbook_paths('site-cookbooks'))
19
33
 
20
- results = print_table? ? [table_header("Component", "Version", "Build")] : []
21
-
22
- cookbooks.each do |name|
23
- cookbook = cookbook_loader.cookbooks_by_name[name]
24
- artifact_attribute_filepath = cookbook.attribute_filenames.find { |e| /artifact.rb/ =~ e }
25
- if artifact_attribute_filepath
26
- node = ::Chef::Node.new
27
- node.from_file(artifact_attribute_filepath)
28
- artifact_version = node.default[name]['version']
29
- artifact_build = node.default[name]['build']
30
- if print_table?
31
- results << table_row(name, artifact_version, artifact_build)
32
- else
33
- results << {component: name, version: artifact_version, build: artifact_build}
34
- end
34
+ components_meta = get_cookbook_meta(cookbooks, 'artifact')
35
+ components_meta.each_attribute do |component_name, component_cfg|
36
+ component_version = component_cfg['version']
37
+ component_build = component_cfg['build']
38
+ component_artifact_filename = component_cfg['artifact_filename'] || "#{component_name}-%s-%s-ubuntu.x64.tar.gz"
39
+ component_artifact = component_artifact_filename % [component_version, component_build]
40
+
41
+ # Trying to handle naming inconsistencies between components and S3 directories
42
+ case component_name
43
+ when "unifiedpush", "unifiedpush-auth-server"
44
+ component_s3_dir = "aerogear-unifiedpush-server"
45
+ when "fh-metrics"
46
+ component_s3_dir = "fh-messaging"
47
+ when "fh-stats"
48
+ component_s3_dir = "fh-stats"
49
+ component_artifact = "fh-statsd-%s-%s-ubuntu.x64.tar.gz" % [component_version, component_build]
50
+ when "migrate"
51
+ component_s3_dir = "millicore"
52
+ else
53
+ component_s3_dir = component_name
54
+ end
55
+
56
+ # Checking that artifact exists
57
+ artifact_exists = check_artifact_exists(artifact_s3_bucket, s3_provider_name, s3_provider_region, component_s3_dir, component_build, component_artifact)
58
+
59
+ # If artifact not found return exit status error
60
+ unless artifact_exists
61
+ exit_status = 1
62
+ end
63
+
64
+ if print_table?
65
+ results << table_row(component_name, component_version, component_build, @component_s3_url, artifact_exists)
66
+ else
67
+ results << {component: component_name, version: component_version, build: component_build, artifact: @component_s3_url, available: artifact_exists}
35
68
  end
69
+
36
70
  end
37
71
  thor.print_table results if print_table?
38
72
  thor.say JSON.pretty_generate(results) if print_json?
73
+ exit exit_status
39
74
  end
40
75
 
41
76
  private
@@ -48,8 +83,29 @@ module Fhcap
48
83
  @format == 'json'
49
84
  end
50
85
 
86
+ def get_cookbook_meta(cookbooks, attribute_filename)
87
+ node = ::Chef::Node.new
88
+ cookbooks.each do |cookbook|
89
+ cookbook_data = cookbook_loader.cookbooks_by_name[cookbook]
90
+ cookbook_attribute_filepath = cookbook_data.attribute_filenames.find { |e| /#{attribute_filename}.rb/ =~ e }
91
+ if cookbook_attribute_filepath
92
+ node.from_file(cookbook_attribute_filepath)
93
+ end
94
+ end
95
+ node
96
+ end
97
+
98
+ def check_artifact_exists(bucket_name, provider_name, provider_region, component_name, build, artifact_file)
99
+ with_provider_client(provider_name, provider_region) do |client|
100
+ bucket = client.bucket(bucket_name)
101
+ file = "#{component_name}/#{build}/#{artifact_file}"
102
+ @component_s3_url = bucket.object(file).public_url
103
+ bucket.object(file).exists?
104
+ end
105
+ end
106
+
51
107
  end
52
108
  end
53
109
  end
54
110
  end
55
- end
111
+ end
@@ -0,0 +1,51 @@
1
+ require 'fhcap/tasks/chef/chef_task_base'
2
+
3
+ module Fhcap
4
+ module Tasks
5
+ module Chef
6
+ module Cookbook
7
+ class UpdateAttribute < ChefTaskBase
8
+
9
+ attr_reader :name, :cookbook, :attribute, :value, :attribute_file
10
+
11
+ def initialize(options)
12
+ super
13
+ @cookbook = options[:cookbook]
14
+ @attribute = options[:attribute]
15
+ @value = options[:value]
16
+ @attribute_file = options[:'attribute-file'] || 'default.rb'
17
+ end
18
+
19
+ def run
20
+ thor.say "Chef::Cookbook::UpdateAttribute cookbook = #{cookbook}, attribute = #{attribute}, value = #{value}", :yellow
21
+ c = cookbook_loader.cookbooks_by_name[cookbook]
22
+ unless c
23
+ exit_with_error("Failed to load cookbook \"#{cookbook}\"!")
24
+ end
25
+
26
+ artifact_attribute_filepath = c.attribute_filenames.find { |e| /#{attribute_file}/ =~ e }
27
+
28
+ if artifact_attribute_filepath
29
+ text = File.read(artifact_attribute_filepath)
30
+
31
+ attr = "default"
32
+ attr_regexp = "default"
33
+ attribute.to_s.split('.').each do |part|
34
+ attr = attr + "['#{part}']"
35
+ attr_regexp = attr_regexp + "\\['#{part}'\\]"
36
+ end
37
+
38
+ replace = text.gsub(/#{attr_regexp} = .+$/, "#{attr} = '#{value}'")
39
+
40
+ thor.create_file(artifact_attribute_filepath, replace, {force: !options[:interactive]})
41
+ else
42
+ thor.say_status("error", "No attribute file #{attribute_file} found in #{cookbook}", :red)
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -14,6 +14,7 @@ module Fhcap
14
14
  @type = options[:type]
15
15
  @repo = options[:repo]
16
16
  @passwords = {}
17
+ @efs_enabled = options[:efs_enabled]
17
18
  end
18
19
 
19
20
  def run
@@ -21,7 +22,8 @@ module Fhcap
21
22
  env_config = {
22
23
  name: @name,
23
24
  domain: @domain,
24
- skip: true
25
+ skip: true,
26
+ efs_enabled: @efs_enabled
25
27
  }
26
28
  create_environment(env_config)
27
29
  create_data_bag(env_config)
@@ -40,7 +40,8 @@ module Fhcap
40
40
  name: "#{name}-#{environment_name}",
41
41
  domain: domain,
42
42
  type: get_env_type(environment_name),
43
- repo: cluster_config[:repo]
43
+ repo: cluster_config[:repo],
44
+ efs_enabled: cluster_config[:provider_config][:efs_enabled]
44
45
  }
45
46
  generate_environment_config
46
47
  create_chef_environment(env_cfg)
@@ -160,8 +161,8 @@ module Fhcap
160
161
  'mbaas'
161
162
  when /ose-single/
162
163
  'ose-single'
163
- when /oscp/
164
- 'oscp'
164
+ when /ocp/
165
+ 'ocp'
165
166
  when /single/
166
167
  'single'
167
168
  when /farm/
@@ -0,0 +1,36 @@
1
+ require 'fhcap/tasks/task_base'
2
+
3
+ module Fhcap
4
+ module Tasks
5
+ module Misc
6
+ class PlatformBump < TaskBase
7
+
8
+ attr_reader :version
9
+
10
+ def initialize(options)
11
+ super
12
+ @version = options[:version]
13
+ end
14
+
15
+ def run
16
+ thor.say "Misc::PlatformBump version = #{version}", :yellow
17
+ c = cookbook_loader.cookbooks_by_name['feedhenry_common']
18
+ unless c
19
+ exit_with_error("Failed to load cookbook \"#{cookbook}\"!")
20
+ end
21
+
22
+ artifact_attribute_filepath = c.attribute_filenames.find { |e| /platform_info.rb/ =~ e }
23
+
24
+ if artifact_attribute_filepath
25
+ text = File.read(artifact_attribute_filepath)
26
+ replace = text.gsub(/default\['feedhenry_common'\]\['platform_info'\]\['version'\] = .+$/, "default['feedhenry_common']['platform_info']['version'] = '#{version}'")
27
+ thor.create_file(artifact_attribute_filepath, replace, {force: !options[:interactive]})
28
+ else
29
+ thor.say_status("error", "No artifact file found in feedhenry_common", :red)
30
+ end
31
+ end
32
+
33
+ end
34
+ end
35
+ end
36
+ end
@@ -14,10 +14,8 @@ module Fhcap
14
14
  @name = options[:name]
15
15
 
16
16
  @repo_config = config[:repos][@name.to_sym] || {}
17
- @repo_config = {
18
- url: options[:url],
19
- clusters_dir: options[:'clusters-dir'] || 'clusters',
20
- }.merge(@repo_config)
17
+ @repo_config[:url] = options[:url] if options[:url]
18
+ @repo_config[:clusters_dir] = options[:'clusters-dir'] if options[:'clusters-dir']
21
19
 
22
20
  @skip_setup = options[:'skip-setup']
23
21
  end
@@ -36,7 +34,7 @@ module Fhcap
36
34
  config[:repos][name.to_sym] = repo_config
37
35
  thor.create_file(config.config_file, JSON.pretty_generate(config.data), :force => true)
38
36
  config.reload
39
- Checkout.new(@options.dup.merge({:repo => name, :'git-ref' => 'master'})).run
37
+ Checkout.new(@options.dup.merge({:repo => name})).run
40
38
  Tasks::Setup.new(@options).run unless @skip_setup
41
39
  end
42
40
 
@@ -54,4 +52,4 @@ module Fhcap
54
52
  end
55
53
  end
56
54
  end
57
- end
55
+ end