Subversion Repositories DevTools

Rev

Rev 6023 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6023 Rev 6128
Line 181... Line 181...
181
        -H "Host: ${bucket}.s3.amazonaws.com" \
181
        -H "Host: ${bucket}.s3.amazonaws.com" \
182
        -H "Date: ${dateValue}" \
182
        -H "Date: ${dateValue}" \
183
        -H "Authorization: AWS ${aws_access_key_id}:${signature}" \
183
        -H "Authorization: AWS ${aws_access_key_id}:${signature}" \
184
        "https://${bucket}.s3.amazonaws.com/${file}" \
184
        "https://${bucket}.s3.amazonaws.com/${file}" \
185
        )
185
        )
-
 
186
[ $verbose -gt 2 ] && echo "Testing file response: ${results}"
186
if [[ "$results" =~ "HTTP/1.1 200 OK" ]]; then
187
if [[ "$results" =~ "HTTP/1.1 200 OK" ]]; then
187
    fileTest=1
188
    fileTest=1
188
fi
189
fi
189
 
190
 
190
# Display results
191
# Display results
Line 196... Line 197...
196
    echo "${ProgName}: Error cannot access $pkgName/$pkgVer in S3 bucket ${bucket}"
197
    echo "${ProgName}: Error cannot access $pkgName/$pkgVer in S3 bucket ${bucket}"
197
    exit 1
198
    exit 1
198
fi
199
fi
199
 
200
 
200
# Ensure correct storage class
201
# Ensure correct storage class
-
 
202
#   STANDARD_IA - Good
-
 
203
#   REDUCED_REDUNDANCY - Good
-
 
204
#   GLACIER - May be good
-
 
205
#       If it has been restored, then its good
-
 
206
#       Else its an error
-
 
207
#       Restored status is held in x-amz-restore attribute
-
 
208
#           When it exists the file is restored or is being restored
-
 
209
#           When the 'ongoing-request' is false, then it has been restored
-
 
210
canGet=false
-
 
211
mustRestore=false
-
 
212
message=""
201
storageClass=$( echo $results | tr '\r' '\n' | awk -F: '/x-amz-storage-class/{print $2}')
213
storageClass=$( echo $results | tr '\r' '\n' | awk -F: '/x-amz-storage-class/{print $2}')
202
[ $verbose -gt 0 ] && echo storageClass : $storageClass
214
[ $verbose -gt 0 ] && echo storageClass : $storageClass
203
if [[ "$storageClass" != " REDUCED_REDUNDANCY" &&  "$storageClass" != " STANDARD_IA" ]]; then
215
if [[ "$storageClass" != " REDUCED_REDUNDANCY" &&  "$storageClass" != " STANDARD_IA" ]]; then
-
 
216
    if [[ "$storageClass" == " GLACIER" ]]; then
-
 
217
        [ $verbose -gt 1 ] && echo "$pkgName/$pkgVer has been transferred to glacier"
-
 
218
        glacierState="In Glacier"
-
 
219
        RestoreData=$( echo $results | tr '\r' '\n' | awk -F: '/x-amz-restore/{print $2,$3,$4,$5,$6,$7,$8,$9}')
-
 
220
        if [ -n "$RestoreData" ] ; then
-
 
221
            [ $verbose -gt 1 ] && echo "$pkgName/$pkgVer Restored progress: $RestoreData"
-
 
222
            ongoingRequest=$( echo "$RestoreData" | sed -n 's/.*ongoing-request="\([^"]*\)".*'/\\1/p)
-
 
223
            expiryDate=$( echo "$RestoreData" | sed -n 's/.*expiry-date="\([^"]*\)".*'/\\1/p )
-
 
224
            [ $verbose -gt 1 ] && echo "$pkgName/$pkgVer Restored State: $ongoingRequest"
-
 
225
            [ $verbose -gt 1 ] && echo "$pkgName/$pkgVer Restored Expiry Date: $expiryDate"
-
 
226
            if [ "$ongoingRequest" != "false" ] ; then
-
 
227
                glacierState="Restore in progress"
-
 
228
                message="Restore not complete: ongoing-request=$ongoingRequest"
-
 
229
            else
-
 
230
                glacierState="Restored"
-
 
231
                canGet=true
-
 
232
            fi
-
 
233
        else
-
 
234
            message="Incorrect storage class: '$storageClass'"
-
 
235
            mustRestore="true"        
-
 
236
        fi
-
 
237
        [ $verbose -gt 0 ] && echo "glacierState : $glacierState"
-
 
238
    else
-
 
239
        message="Unhandled storage class: '$storageClass'"        
-
 
240
    fi
-
 
241
else
-
 
242
    canGet=true
-
 
243
fi
-
 
244
 
-
 
245
##############################################################
-
 
246
#   Initiate a Restore from Glacier
-
 
247
#
-
 
248
if $mustRestore ; then
-
 
249
    if [ 1 ] ; then
-
 
250
        [ $verbose -gt 0 ] && echo "Initiate restore from Glacier $pkgName/$pkgVer"
-
 
251
 
-
 
252
        # Generate a Restore Request
-
 
253
        #   And an MD5 over the data
-
 
254
        tmpData=$( mktemp )
-
 
255
        echo > $tmpData '<RestoreRequest>'
-
 
256
        echo >>$tmpData '  <Days>1</Days>'
-
 
257
        echo >>$tmpData '  <GlacierJobParameters>'
-
 
258
        echo >>$tmpData '    <Tier>Standard</Tier>'
-
 
259
        echo >>$tmpData '  </GlacierJobParameters>'
-
 
260
        echo >>$tmpData '</RestoreRequest>'
-
 
261
 
-
 
262
        md5Value=$(
-
 
263
            openssl md5 -binary $tmpData |
-
 
264
            base64
-
 
265
        )
-
 
266
 
-
 
267
        # Generate the request signature
-
 
268
        contentType="application/xml"
-
 
269
        stringToSign="POST\n${md5Value}\n${contentType}\n${dateValue}\n${resource}?restore"
-
 
270
        signature=$(
-
 
271
            echo -en "${stringToSign}" |
-
 
272
            openssl sha1 -hmac "${aws_secret_access_key}" -binary |
-
 
273
            base64
-
 
274
        )
-
 
275
 
-
 
276
        #set -x
-
 
277
        tmpResult=$( mktemp )
-
 
278
        results=$(curl -s -w '%{http_code}' -o $tmpResult\
-
 
279
             --insecure \
-
 
280
             --data @$tmpData \
-
 
281
            -H "Host: ${bucket}.s3.amazonaws.com" \
-
 
282
            -H "Date: ${dateValue}" \
-
 
283
            -H "Content-MD5: ${md5Value}" \
-
 
284
            -H "Authorization: AWS ${aws_access_key_id}:${signature}" \
-
 
285
            -H "Content-Type: ${contentType}" \
-
 
286
            "https://${bucket}.s3.amazonaws.com/${file}?restore"
-
 
287
            )
-
 
288
 
-
 
289
        canGet=false
-
 
290
        if [[ "$results" == "200" ]] ; then
-
 
291
            canGet=true
-
 
292
        elif [[ "$results" == "202" ]] ; then
-
 
293
            message="Restore from Glacier initiated"
-
 
294
        elif [[ "$results" == "409" ]] ; then
-
 
295
            message="Restore already in progress"
-
 
296
        elif [[ "$results" == "503" ]] ; then
-
 
297
            message="Glacier expedited retrievals are currently not available"
-
 
298
        else
-
 
299
            mesage="Error previously reported"
-
 
300
            echo "Glacier restore error code: $results"
-
 
301
            tail -n+2 $tmpResult | fold | awk '{print "    " $0}'
-
 
302
        fi                              
-
 
303
        set +x
-
 
304
        rm -rf $tmpData $tmpResult
-
 
305
 
-
 
306
    fi
-
 
307
fi
-
 
308
 
-
 
309
if ! $canGet; then
204
    echo "${ProgName}: Error cannot access $pkgName/$pkgVer. Incorrect storage class: '$storageClass'"
310
        echo "${ProgName}: Error cannot access $pkgName/$pkgVer. $message"
205
    echo "Resource: $resource"
311
        echo "Resource: $resource"
206
    exit 1
312
        exit 1
207
fi
313
fi
208
 
314
 
209
#############################################################
315
#############################################################
210
# GET!
316
# GET!
211
 
317
 
Line 248... Line 354...
248
 
354
 
249
    # Remove if not correctly formatted
355
    # Remove if not correctly formatted
250
    chmod -R +w $dpkgPath
356
    chmod -R +w $dpkgPath
251
    rm -rf $dpkgPath
357
    rm -rf $dpkgPath
252
    exit 1
358
    exit 1
-
 
359
else
-
 
360
    # Package extracted
-
 
361
    # Touch the top directory so that it will not be quarantined immediatly
-
 
362
    chmod +w "$dpkgPath"
-
 
363
    chmod -w "$dpkgPath"
253
fi
364
fi
254
 
365
 
255
[ $verbose -gt 0 ] && echo "Transfer complete"
366
[ $verbose -gt 0 ] && echo "Transfer complete"
256
 
367
 
257
  
368