github.com/Venafi/vcert/v5@v5.10.2/aruba/features/playbook/support/aruba.rb (about)

     1  # Helper method to recursively convert symbol keys to string keys
     2  def stringify_keys(hash)
     3      hash.each_with_object({}) do |(key, value), new_hash|
     4        new_key = key.is_a?(Symbol) ? key.to_s : key
     5        new_value = value.is_a?(Hash) ? stringify_keys(value) : value
     6        new_hash[new_key] = new_value
     7      end
     8  end
     9  
    10  class Installation;
    11    attr_accessor :afterInstallAction
    12    attr_accessor :installValidationAction
    13    attr_accessor :capiIsNonExportable
    14    attr_accessor :jksAlias
    15    attr_accessor :jksPassword
    16    attr_accessor :location
    17    attr_accessor :file
    18    attr_accessor :chainFile
    19    attr_accessor :keyFile
    20    attr_accessor :format
    21    attr_accessor :backupFiles # will add the .bak for creating a copy of the generated file
    22    attr_accessor :keyPassword
    23    attr_accessor :p12Password
    24    attr_accessor :useLegacyP12
    25  
    26  end
    27  
    28  class Location
    29    attr_accessor :instance
    30    attr_accessor :workload
    31    attr_accessor :tlsAddress
    32    attr_accessor :replace
    33  
    34  end
    35  
    36  class Subject
    37    attr_accessor :commonName
    38    attr_accessor :country
    39    attr_accessor :locality
    40    attr_accessor :organization
    41    attr_accessor :orgUnits
    42    attr_accessor :state
    43  
    44  end
    45  
    46  class Request
    47    attr_accessor :cadn
    48    attr_accessor :chain
    49    attr_accessor :csr
    50    attr_accessor :fields
    51    attr_accessor :sanDNS
    52    attr_accessor :sanEmail
    53    attr_accessor :fetchPrivateKey
    54    attr_accessor :nickname
    55    attr_accessor :sanIP
    56    attr_accessor :issuerHint
    57    attr_accessor :keyCurve
    58    attr_accessor :keySize
    59    attr_accessor :keyType
    60    attr_accessor :omitSans
    61    attr_accessor :appInfo
    62    attr_accessor :sanUPN
    63    attr_accessor :sanURI
    64    attr_accessor :validDays
    65    attr_accessor :zone
    66    attr_accessor :location
    67    attr_accessor :subject
    68  
    69  end
    70  
    71  class PlaybookTask
    72    attr_accessor :name
    73    attr_accessor :renewBefore
    74    attr_accessor :setenvvars
    75    attr_accessor :installations
    76    attr_accessor :request
    77  
    78  end
    79  
    80  def object_to_hash(obj)
    81    if obj.is_a?(Array)
    82      obj.map { |item| object_to_hash(item) }
    83    elsif obj.is_a?(Hash)
    84      obj.transform_values { |value| object_to_hash(value) }
    85    elsif obj.is_a?(Integer) or [true, false].include? obj
    86      return obj
    87    elsif obj.is_a?(String)
    88      return obj
    89    elsif obj.is_a?(Object)
    90      obj.instance_variables.each_with_object({}) do |var, hash|
    91        key = var.to_s.delete("@")
    92        value = obj.instance_variable_get(var)
    93        hash[key] = value
    94  
    95        if value.is_a?(Object)
    96          hash[key] = object_to_hash(value) # Recursively convert nested objects to hashes
    97        end
    98      end
    99    else
   100      obj
   101    end
   102  end
   103  
   104  def request_key_should_be_string(key)
   105    request_string_keys = %w[cadn chain csr nickname issuerHint keyCurve keyPassword keyType appInfo validDays zone]
   106    request_string_keys.include?(key)
   107  end
   108  
   109  def request_key_should_be_integer(key)
   110    request_integer_keys = %w[keySize]
   111    request_integer_keys.include?(key)
   112  end
   113  
   114  def request_key_should_be_boolean(key)
   115    request_boolean_keys = %w[fetchPrivateKey omitSans]
   116    request_boolean_keys.include?(key)
   117  end
   118  
   119  def request_key_should_be_array_of_strings(key)
   120    request_array_string_keys =  %w[fields sanDns sanEmail sanIP sanUpn sanUri]
   121    request_array_string_keys.include?(key)
   122  end
   123  
   124  def request_subject_key_should_be_string(key)
   125    request_subject_string_keys = %w[commonName country locality organization state]
   126    request_subject_string_keys.include?(key)
   127  end
   128  
   129  def request_subject_key_should_be_array_of_strings(key)
   130    request_subject_array_string_keys = %w[ orgUnits ]
   131    request_subject_array_string_keys.include?(key)
   132  end
   133  
   134  def to_boolean_kv(key, value)
   135    case value.downcase.strip
   136    when 'true'
   137      true
   138    when 'false'
   139      false
   140    else
   141      fail(ArgumentError.new("Wrong type of value provided for key: #{key}, expected an Boolean but got: #{value}"))
   142    end
   143  end
   144  
   145  def to_boolean(value)
   146    case value.downcase.strip
   147    when 'true'
   148      true
   149    when 'false'
   150      false
   151    else
   152      fail(ArgumentError.new("Wrong type of value, expected an Boolean but got: #{value}"))
   153    end
   154  end
   155  
   156  def to_integer(key, value)
   157    integer_value = value.to_i
   158    if integer_value.to_s == value.strip
   159      integer_value
   160    else
   161      fail(ArgumentError.new("Wrong type of value provided for key: #{key}, expected an Boolean but got: #{value}"))
   162    end
   163  end
   164  
   165  def env_variable_exists_and_set(variable_name)
   166    if ENV[variable_name].nil?
   167      return false
   168    else
   169      if ENV[variable_name].to_s.empty?
   170        return false
   171      else
   172        return true
   173      end
   174    end
   175  end
   176  
   177  def validate_tpp_envs
   178    tpp_envs = %w[TPP_URL TPP_CN TPP_USER TPP_PASSWORD TPP_ZONE TPP_ACCESS_TOKEN TPP_ZONE_ECDSA TPP_IP TPP_TRUST_BUNDLE]
   179  
   180    tpp_envs.each do |tpp_env|
   181      unless env_variable_exists_and_set(tpp_env)
   182        fail(ArgumentError.new("ENV variable #{tpp_env} is not set"))
   183      end
   184    end
   185  end
   186  
   187  def validate_vaas_envs
   188    vaas_envs = %w[CLOUD_APIKEY CLOUD_ZONE]
   189  
   190    vaas_envs.each do |vaas_env|
   191      unless env_variable_exists_and_set(vaas_env)
   192        fail(ArgumentError.new("ENV variable #{vaas_env} is not set"))
   193      end
   194    end
   195  end