github.com/Venafi/vcert/v5@v5.10.2/aruba/features/provision/cloudkeystore/steps_definitions/my_steps.rb (about) 1 And(/^I use previous Pickup ID to provision (?:from|using) (\S+) a certificate to cloudkeystore "(.*)"( setting keystore and provider names)?$/) do |platform, cloudkeystore_type, keystore_provider_names| 2 3 cmd = build_provision_cmd(platform, cloudkeystore_type, keystore_provider_names, "",true) 4 5 steps %{Then I try to run `#{cmd}`} 6 end 7 8 And(/^I use previous Pickup ID to provision without set Platform flag (?:from|using) (\S+) a certificate to cloudkeystore "(.*)"( setting keystore and provider names)?$/) do |platform, cloudkeystore_type, keystore_provider_names| 9 10 cmd = build_provision_cmd(platform, cloudkeystore_type, keystore_provider_names, "",false) 11 12 steps %{Then I try to run `#{cmd}`} 13 end 14 15 And(/^I use previous Pickup ID to provision (?:from|using) (\S+) a certificate to cloudkeystore "(.*)"( setting keystore and provider names)? with (.+)?/) do |platform, cloudkeystore_type, keystore_provider_names, flags| 16 17 cmd = build_provision_cmd(platform, cloudkeystore_type, keystore_provider_names, flags, true) 18 19 steps %{Then I try to run `#{cmd}`} 20 end 21 22 And(/^I use previous Pickup ID and cloud ID to provision again$/) do 23 keystore_provider_names = true 24 flags = "" 25 case @cloudkeystore_type 26 when KEYSTORE_TYPE_AWS 27 flags += " -arn #{@cloud_id}" 28 when KEYSTORE_TYPE_AZURE 29 flags += " -certificate-name #{@cloud_name}" 30 when KEYSTORE_TYPE_GCP 31 flags += " -certificate-name #{@cloud_id}" 32 else 33 fail(ArgumentError.new("Unknown cloud type: #{@cloudkeystore_type}")) 34 end 35 flags += @global_set_provision_flags 36 cmd = build_provision_cmd(PLATFORM_VCP, @cloudkeystore_type, keystore_provider_names, flags, true) 37 steps %{Then I try to run `#{cmd}`} 38 end 39 40 def build_provision_cmd(platform, cloudkeystore_type, keystore_provider_names, flags = "", set_platform_flag=true) 41 42 @global_set_provision_flags = flags 43 44 cmd = "vcert provision cloudkeystore #{ENDPOINTS[PLATFORM_VCP]} -pickup-id #{@pickup_id}" 45 46 if set_platform_flag 47 platform_flag = " -platform " + platform 48 cmd = cmd + platform_flag 49 end 50 51 keystore_name = "" 52 provider_name = "" 53 keystore_id = "" 54 case cloudkeystore_type 55 when KEYSTORE_TYPE_AWS 56 @cloudkeystore_type = KEYSTORE_TYPE_AWS 57 if keystore_provider_names 58 keystore_name = AWS_KEYSTORE_NAME 59 provider_name = AWS_PROVIDER_NAME 60 61 else 62 keystore_id = AWS_KEYSTORE_ID 63 end 64 when KEYSTORE_TYPE_AZURE 65 @cloudkeystore_type = KEYSTORE_TYPE_AZURE 66 if keystore_provider_names 67 keystore_name = AZURE_KEYSTORE_NAME 68 provider_name = AZURE_PROVIDER_NAME 69 else 70 keystore_id = AZURE_KEYSTORE_ID 71 end 72 when KEYSTORE_TYPE_GCP 73 @cloudkeystore_type = KEYSTORE_TYPE_GCP 74 if keystore_provider_names 75 keystore_name = GCP_KEYSTORE_NAME 76 provider_name = GCP_PROVIDER_NAME 77 else 78 keystore_id = GCP_KEYSTORE_ID 79 end 80 cert_name_flag = " -certificate-name vcert-cert-" + random_string 81 cmd = cmd + cert_name_flag 82 else 83 fail(ArgumentError.new("Unexpected : #{cloudkeystore_type}")) 84 end 85 if keystore_provider_names 86 keystore_name_flag = " -keystore-name '#{keystore_name}'" 87 provider_name_flag = " -provider-name '#{provider_name}'" 88 89 cmd = "#{cmd} #{keystore_name_flag} #{provider_name_flag}" 90 else 91 keystore_id_flag = " -keystore-id " + keystore_id 92 cmd = "#{cmd} #{keystore_id_flag}" 93 end 94 95 if flags != "" 96 cmd += " #{flags}" 97 end 98 99 return cmd 100 end 101 102 Then(/^I grab cloud ID from( JSON)? output$/) do |json| 103 104 @cloud_id = get_value_from_output("cloudId",json) 105 if @cloudkeystore_type == KEYSTORE_TYPE_AZURE 106 @cloud_name = get_value_from_output("azureName",json) 107 end 108 end 109 110 def get_value_from_output(value, json = false) 111 if @previous_command_output.nil? 112 fail(ArgumentError.new('@previous_command_output is nil')) 113 end 114 115 Kernel.puts("Checking output:\n"+@previous_command_output) 116 117 if json 118 json_string = extract_json_from_output(@previous_command_output) 119 JSON.parse(json_string) 120 extracted_val = unescape_text(normalize_json(json_string, "#{value}")).tr('"', '') 121 else 122 m = @previous_command_output.match /#{value}: (.+)$/ 123 extracted_val = m[1] 124 end 125 extracted_val 126 end 127 128 Then(/^the output( in JSON)? should contain the previous cloud ID$/) do |json| 129 validate_provision_replace(json) 130 end 131 132 def validate_provision_replace(json) 133 # for azure case we want to check the name instead 134 if @cloudkeystore_type == KEYSTORE_TYPE_AZURE 135 old_cloud_name = @cloud_name 136 new_cloud_name = get_value_from_output("azureName", json) 137 if old_cloud_name != new_cloud_name 138 cleanup_keystore(old_cloud_name) 139 cleanup_keystore(new_cloud_name) 140 fail(ArgumentError.new("Expected old Cloud Name: #{old_cloud_name} to be same as new Cloud Name, but got: #{new_cloud_name}")) 141 end 142 return 143 end 144 old_cloud_id = @cloud_id 145 new_cloud_id = get_value_from_output("cloudId", json) 146 if old_cloud_id != new_cloud_id 147 cleanup_keystore(old_cloud_id) 148 cleanup_keystore(new_cloud_id) 149 fail(ArgumentError.new("Expected old Cloud ID: #{old_cloud_id} to be same as new Cloud ID, but got: #{new_cloud_id}")) 150 end 151 end 152 153 And(/^I clean up previous installed certificate from cloudkeystore/) do || 154 cleanup_keystore 155 end 156 157 def cleanup_keystore(cloud_id = "") 158 case @cloudkeystore_type 159 when KEYSTORE_TYPE_AWS 160 cleanup_aws(cloud_id) 161 when KEYSTORE_TYPE_AZURE 162 cleanup_akv(@cloud_name) 163 when KEYSTORE_TYPE_GCP 164 cleanup_google(cloud_id) 165 else 166 fail(ArgumentError.new("Unexpected : #{@cloudkeystore_type}")) 167 end 168 end 169 170 def cleanup_google(cloud_id = "") 171 client = create_google_certificate_manager_client 172 if cloud_id != "" 173 certificate_name = "projects/#{ENV['GCP_PROJECT']}/locations/#{ENV['GCP_REGION']}/certificates/#{cloud_id}" 174 else 175 certificate_name = "projects/#{ENV['GCP_PROJECT']}/locations/#{ENV['GCP_REGION']}/certificates/#{@cloud_id}" 176 end 177 178 delete_gcm_certificate(client, certificate_name) 179 end 180 181 def cleanup_aws(cloud_id = "") 182 client = create_aws_certificate_manager_client 183 if cloud_id != "" 184 certificate_arn = cloud_id 185 else 186 certificate_arn = @cloud_id 187 end 188 189 delete_acm_certificate(client, certificate_arn) 190 end 191 192 def cleanup_akv(cloud_name = "") 193 if cloud_name != "" 194 certificate_name = cloud_name 195 else 196 certificate_name = @cloud_name 197 end 198 199 delete_azure_certificate(certificate_name) 200 end