84 lines
3.8 KiB
Markdown
84 lines
3.8 KiB
Markdown
|
|
# Example client side iRODS rule to show metadata operations
|
||
|
|
|
||
|
|
- The rule requires the local host be connected/authenticated to iRODS server with the appropriate ~/.irods directory and contained connection profile
|
||
|
|
- The rule does not require any input
|
||
|
|
- The rule is written in the iRODS native rule engine language
|
||
|
|
- The rule is intended to be run client side only, most functions and microservices will work in server side rules, some will not
|
||
|
|
- The rule intends to assist users with common metadata manipulation tasks
|
||
|
|
- To augment existing workflow scripts, the user could call their custom metadata rule passing an iRODS data-object as INPUT
|
||
|
|
|
||
|
|
## Run the rule
|
||
|
|
|
||
|
|
- remove the data-object generated from iRODS rule
|
||
|
|
`irm test.txt`
|
||
|
|
- clear the trash to ensure there is no history of the data-object
|
||
|
|
`irmtrash`
|
||
|
|
- run the rule, pass -t for test mode,-F for file (data-object), specify the rule engine with -r (this is only required if multiple rule engines are present on the server - such as the python rule engine)
|
||
|
|
`irule -r irods_rule_engine_plugin-irods_rule_language-instance -F ~/test-meta.r`
|
||
|
|
- check test.txt now exists
|
||
|
|
`ils test.txt`
|
||
|
|
- check metadata of test.txt, -d for file (data-object)
|
||
|
|
`imeta ls -d test.txt`
|
||
|
|
- the rule output should resemble
|
||
|
|
```
|
||
|
|
a = 10
|
||
|
|
zebra = horse
|
||
|
|
hula = dance
|
||
|
|
art = crayon
|
||
|
|
timestamp = 2021-06-30.12:09:54
|
||
|
|
a || 10
|
||
|
|
zebra || horse
|
||
|
|
hula || dance
|
||
|
|
art || crayon
|
||
|
|
timestamp || 2021-06-30.12:09:54
|
||
|
|
a
|
||
|
|
zebra
|
||
|
|
hula
|
||
|
|
art
|
||
|
|
timestamp
|
||
|
|
1: a = 10
|
||
|
|
1: zebra = horse
|
||
|
|
1: hula = dance
|
||
|
|
1: art = crayon
|
||
|
|
1: timestamp = 2021-06-30.12:09:54
|
||
|
|
2: a = 5
|
||
|
|
2: zebra = horse
|
||
|
|
2: no match
|
||
|
|
2: no match
|
||
|
|
2: timestamp = 2021-06-30.12:09:54
|
||
|
|
3: AND a = 10
|
||
|
|
3: zebra = horse
|
||
|
|
3: art = crayon
|
||
|
|
3: timestamp = 2021-06-30.12:09:54
|
||
|
|
4: collection exists: /OCF/home/rods true
|
||
|
|
4: file created: /OCF/home/rods/test.txt
|
||
|
|
4: metadata to keep on /OCF/home/rods/test.txt, a=10
|
||
|
|
4: metadata to keep on /OCF/home/rods/test.txt, art=crayon
|
||
|
|
4: metadata to remove from /OCF/home/rods/test.txt, hula=dance
|
||
|
|
4: metadata to remove from /OCF/home/rods/test.txt, timestamp=2021-06-30.12:09:54
|
||
|
|
4: metadata to remove from /OCF/home/rods/test.txt, zebra=horse
|
||
|
|
4: year: 2021
|
||
|
|
4: file: test.txt created between 2020 - 2030
|
||
|
|
5: writeoff: catC saab £1200
|
||
|
|
```
|
||
|
|
|
||
|
|
## What does the script do?
|
||
|
|
|
||
|
|
- creates a metadata array like object from a delimited string of key value pairs
|
||
|
|
- adds key value pairs to the metadata object
|
||
|
|
- finds values from keys and keys from values
|
||
|
|
- example of conditional behaviour based upon key value match
|
||
|
|
- tests for existence of file in iRODS
|
||
|
|
- add/remove metadata conditionally where file (data-object) iRODS exists
|
||
|
|
- creates a file (data-object) in iRODS with simple string content, the file did not pre-exist on a local filesystem
|
||
|
|
- convert metadata object to metadata structure and apply to iRODS file (data-object)
|
||
|
|
- use inbuilt function to list iRODS path (collection) and iRODS file (data-object) from a full iRODS path (ZONE + collection + data-object)
|
||
|
|
- perform SQL like query against the iCAT database to find a file (data-object) with specific keys or values, output specific metadata keys to metadata structure from query result
|
||
|
|
- loop metadata structure conditionally and remove unwanted key value pair
|
||
|
|
- remove key value pair without looping using more recent inbuilt function
|
||
|
|
- use inbuilt function to get and format date/time, use inbuilt split function to create year/month/day key value pairs
|
||
|
|
- accociate metadata structure directly to an iRODS file (data-object)
|
||
|
|
- perform SQL like query against the iCAT database to find a file (data-object) with a key value between a range of values
|
||
|
|
- illustrate usage of the new microservice msiModAVUMetadata to perform all metadata operations that previously required many intermediatory steps
|
||
|
|
- car lot example, use existing metadata to decide if a car is to sell or writeoff, the *new* unit attribute of a key value pair is used more granular metadata evaluation
|