fhcap-cli 0.4.13 → 0.4.14

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.
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