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