Project

General

Profile

1
# sets the replication policy for all objects in the MN where the calling member node is the  authoritative member node.
2
# This code can easily be changed to replace $identifiers with a custom list of ids
3
# the $xml_path should point to a XML file with the replication policy to apply to all based on xmlns:d1="http://ns.dataone.org/service/types/v1" 
4
# 
5
# Dependencies:
6
#	xmlstarlet - developed with version 1.0.1
7
#	curl - developed with version 7.19.7
8

    
9
authoritativeMN="urn:node:mnDemo8"
10
MN_base_URL="https://mn-demo-8.test.dataone.org/knb/d1/mn/v1"
11
CN_base_URL="https://cn-dev.test.dataone.org/cn/v1"
12
cert_path="/var/metacat/certs/urn_node_mnDemo8.pem"
13
xml_path="replicapolicy.xml"
14

    
15
identifiers=$(curl -s -o - -E $cert_path "$MN_base_URL/object?count=7&replicaStatus=false" | xmlstarlet sel -t -m "//objectInfo" -v "identifier" -n)
16

    
17
failedIDs=""
18
successCount=0
19
failCount=0
20
skipCount=0
21

    
22
for id in ${identifiers};
23
do
24
        metadata=$(curl -s -o - -E $cert_path "$CN_base_URL/meta/${id}" | xmlstarlet sel -t -v "concat(//serialVersion,';',//authoritativeMemberNode)" -n)
25

    
26
        OIFS=$IFS
27
        IFS=";"
28
        arr=($metadata)
29
        if [ ${arr[1]} = $authoritativeMN ]; then
30
#echo "skip"
31
            echo "Updating replica policy for id: $id"
32
           statusCode=$(curl -s -o - -w "%{http_code}" -X PUT -E $cert_path --capath "/etc/ssl/certs" -F "serialVersion=${arr[0]}" -F "policy=@$xml_path" "$CN_base_URL/replicaPolicies/${id}")
33
            if [ $statusCode = "200" ]; then
34
                successCount=$(($successCount + 1))
35
            else
36
                failCount=$(($failCount + 1))
37
            fi
38

    
39
        else
40
            echo "$authoritativeMN is not the authoritative member node for id: $id. (is ${arr[1]})"
41
            failedIDs=$(printf "$failedIDs\n$id")
42
            skipCount=$(($skipCount + 1))
43
        fi
44
done
45

    
46
echo -e "\n\nDONE\n----------------------------------"
47
echo -e "\nSUCCESSES: $successCount"
48
echo -e "\nFAILURES: $failCount"
49
echo -e "\n\nSKIPS (objects with a different authoritative member node): $skipCount"
50
echo -e "\nIDs of objects with a different authoritative member node: \n$failedIDs"
51

    
52

    
53

    
(8-8/8)