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