wiki:ESGFNodeInstallation

Version 83 (modified by carlos, 8 years ago) (diff)

--

This installation guide will provide instructions about how to install an ESGF data/compute node. In order to do it, the VM should have 1 core, 2GB of RAM memory and 20GB of Hard Disk.

For the installation process, it is highly recommendable to provide more than 1 core

Pre-requisites

TCP and UDP ports firewall configuration

Corporate Firewall

Port Direction Type Application Description
80 in tcp Tomcat Web server access
443 in tcp Tomcat SSL - Secure Web Server Access.
5432 in tcp Postgres Postgres Access. (not external: by default bound ONLY TO LOCAL INTERFACE)
2811 in tcp GridFTP user-configured GridFTP Server control channel
(60000-61000) in/out tcp GridFTP user-configured GridFTP Server data channel (or as defined in the global variable GLOBUS_TCP_PORT_RANGE)
2812 in tcp GridFTP BDM-configured GridFTP Server control channel. May run together with the user-configured one though not recommended - system resource intensive!
(60000-61000) in/out tcp GridFTP BDM-configured GridFTP Server data channel. May run together with the user-configured one though not recommended - system resource intensive!
7512 out tcp MyProxy MyProxy client access to the certificate repository
8984 - tcp esgf-search (Tomcat)local connection to the Solr master instance (not external!)
8983 in/out tcp esgf-search (Tomcat) Connection to remotes Solr slave instance. Used in distributed search (shard).
80 out tcp esg-publisher Local connection to THREDDS server (e.g., to check catalogs) and other nodes (node-manager)
443 out tcp esg-publisher Local secure connection to THREDDS server (e.g., to restart the application) and to the idp

IPTables configuration

Add the rules below to the IPTables configuration file, i.e. /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2811 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2812 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8984 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8983 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 60000:61000 -j ACCEPT

then, restart the IPTables services

$ services iptables restart

Install RPM packages

First, install the sourceforge RPM repository for the *ExtUtils* packages:

$ rpm -iv http://dag.wieers.com/packages/rpmforge-release/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm

after that, the ESGF required RPM packages :

$ yum install autoconf automake bison file flex gcc gcc-c++ gettext-devel libtool libuuid-devel libxml2 libxml2-devel libxslt libxslt-devel lsof make openssl-devel pam-devel pax readline-devel tk-devel wget zlib-devel perl-Archive-Tar perl-XML-Parser libX11-devel libtool-ltdl-devel e2fsprogs-devel.x86_64 gcc-gfortran libicu-devel.x86_64 libgtextutils-devel.x86_64 perl-ExtUtils-AutoInstall.noarch perl-ExtUtils-Depends.noarch perl-ExtUtils-CBuilder.x86_64 perl-ExtUtils-CChecker.x86_64 perl-ExtUtils-Config.noarch perl-ExtUtils-DynaGlue.noarch perl-ExtUtils-Embed.x86_64 perl-ExtUtils-F77.noarch perl-ExtUtils-FakeConfig.noarch perl-ExtUtils-FindFunctions.noarch perl-ExtUtils-H2PM.noarch perl-ExtUtils-Helpers.noarch perl-ExtUtils-InstallPaths.noarch perl-ExtUtils-MakeMaker.x86_64 perl-ExtUtils-MakeMaker-Coverage.noarch perl-ExtUtils-ParseXS.x86_64 perl-ExtUtils-PerlPP.noarch perl-ExtUtils-PkgConfig.noarch perl-ExtUtils-TBone.noarch perl-ExtUtils-XSBuilder.noarch

Please make sure that the ntp package is installed $ rpm -qa | grep ntp, otherwise instal it $ yum install ntp

ESGF user configuration

Fist, add a esgf user:

$ adduser esgf
...

After that, change the password:

$ passwd esgf
...

To finish, configure the esgf user with sudoers privileges. Add the following line to /etc/sudoers file:

esgf    ALL=(ALL)       ALL

Install the ESGF data/compute node

The instructions have been provided by the IPSL1.

Do it as esgf user

$ whoami 
esgf
$ cd /usr/local/bin
$ wget -O esg-bootstrap  http://198.128.245.140/dist/esgf-installer/esg-bootstrap
$ diff <(md5sum esg-bootstrap | tr -s " " | cut -d " " -f 1) <(curl -s  http://198.128.245.140/dist/esgf-installer/esg-bootstrap.md5 | tr -s " " | cut -d " " -f 1) 
$ chmod 555 esg-bootstrap
$ esg-bootstrap --devel

In our case, we are going to configure only data and compute types:

$ sudo ./esg-node --type data compute --install
-------------------------------------------------------

During the installation, you will have to fill in several questionnaires:

Welcome to the ESGF Node installation program! :-)

What is the fully qualified domain name of this node? [data.meteo.unican.es]: 
What is the admin password to use for this installation? (alpha-numeric only) []: 
Please re-enter password: 
What is the name of your organization? [unican]: 
Please give this node a "short" name: []: data-unican
Please give this node a more descriptive "long" name []: data-unican
What is the namespace to use for this node? (set to your reverse fqdn - Ex: "gov.llnl") [es.unican.meteo]: 
What peer group(s) will this node participate in? (if not sure, use default) [esgf-test]: 
What is the default peer to this node? [esgf-node1.llnl.gov]: data.meteo.unican.es
What is the hostname of the node do you plan to publish to? [esgf-node1.llnl.gov]: vesgdev-idx.ipsl.jussieu.fr
What email address should notifications be sent as? []: meteo@unican.es
Is the database external to this node? [y/N]: 
Please enter the database connection string...
 (form: postgresql://[username]@[host]:[port]/esgcet)
What is the database connection string? [postgresql://dbsuper@localhost:5432/esgcet]: postgresql://
entered: postgresql://dbsuper@localhost:5432/esgcet
What is the (low priv) db account for publisher? [esgcet]: 
Finished processing dependencies for esgcet==2.12.1
Would you like a "system" or "user" publisher configuration: 
	-------------------------------------------
	*[1] : System
	 [2] : User
	-------------------------------------------
	 [C] : (Custom)
	-------------------------------------------
select [1] >  

You have selected: 1
Publisher configuration file -> [/esg/config/esgcet/esg.ini]

Is this correct? [Y/n] 

Looking for keystore [/esg/config/tomcat/keystore-tomcat]... (don't see one)... 
Keystore setup: 
Launching Java's keytool:
store_password = ******
Would you like to use the DN: (OU=ESGF.ORG, O=ESGF) ? [Y/n]: 
Using keystore DN = CN=data.meteo.unican.es, OU=ESGF.ORG, O=ESGF
Enter key password for <my_esgf_node>
	(RETURN if same as keystore password):  
Re-enter new password: 
Do you wish to generate a Certificate Signing Request at this time? [Y/n] 

Please enter the password for this keystore   : 
Please re-enter the password for this keystore: 

Create user credentials
Please enter username for tomcat [dnode_user]:  
dnode_user
Please enter password for user, "dnode_user" [********]:   73769edbd97410aacfb3560ebb817f882d141517
Would you like to add another user? [y/N]: 


Please Enter the IP address of this host [134.157.179.48]:> 

Using IP: 134.157.179.48
Please select the IDP Peer for this node: 
        -------------------------------------------
        *[1] : ESGF-PCMDI-9 -> pcmdi9.llnl.gov
         [2] : ESGF-PCMDI   -> pcmdi3.llnl.gov
         [3] : ESGF-JPL     -> esg-gateway.jpl.nasa.gov
         [4] : ESGF-ORNL    -> esg2-gw.ccs.ornl.gov
         [5] : ESGF-BADC    -> cmip-gw.badc.rl.ac.uk
         [6] : ESGF-DKRZ    -> ipcc-ar5.dkrz.de
         [7] : ESGF-PNNL    -> esg1-gw.pnl.gov
         [8] : ESGF-ANL     -> dev.esg.anl.gov
         [9] : ESGF-PCMDI-TEST3 -> esgf-node3.llnl.gov
        -------------------------------------------
         [C] : (Manual Entry)
        -------------------------------------------
select [1] > C
Please enter the IDP Peer's name [ESGF-PCMDI-9] ESGF-TEST
Please enter the IDP Peer's hostname [pcmdi9.llnl.gov] data.meteo.unican.es

You have selected: (Manual Entry)
ESGF-TEST -> data.meteo.unican.es

Is this correct? [Y/n] Y

Creating directory /esg/content/thredds/esgcet
INFO       2013-08-02 16:48:46,144 Writing THREDDS ESG master catalog /esg/content/thredds/esgcet/catalog.xml
INFO       2013-08-02 16:48:46,173 Writing THREDDS root catalog /esg/content/thredds/catalog.xml
THREDDS dataset root directories (option=thredds_dataset_roots)
Each entry has the form 'path_identifier | absolute_directory_path':
Current value is: 

esg_dataroot | /esg/data

Enter lines, or <RETURN> to end
Add new line: 

# ESGF cronjob BEGIN ###
35 0,12 * * * ESG_USAGE_PARSER_CONF=/esg/config/gridftp/esg-bdm-usage-gridftp.conf /esg/tools/esg_usage_parser 
# ESGF cronjob END ###
Is this ok ? [Y/n]Y
# ESGF cronjob BEGIN ###
35 0,12 * * * ESG_USAGE_PARSER_CONF=/esg/config/gridftp/esg-bdm-usage-gridftp.conf /esg/tools/esg_usage_parser 
5 0,12 * * * ESG_USAGE_PARSER_CONF=/esg/config/gridftp/esg-server-usage-gridftp.conf /esg/tools/esg_usage_parser 
# ESGF cronjob END ###
Is this ok ? [Y/n]Y

Server sent 2 certificate(s):

 1 Subject CN=vesgdev-idx.ipsl.fr, OU=simpleCA-vesgdev-idx.ipsl.fr, OU=GlobusTest, O=Grid
   Issuer  CN=Globus Simple CA, OU=simpleCA-vesgdev-idx.ipsl.fr, OU=GlobusTest, O=Grid
   sha1    cf f9 20 2b ce a6 bc b0 5d b4 a7 bb 0c 08 18 99 14 47 a6 86 
   md5     bd 6d ab cb 0b 75 58 fb 54 52 89 60 8e 1b 44 b8 

 2 Subject CN=Globus Simple CA, OU=simpleCA-vesgdev-idx.ipsl.fr, OU=GlobusTest, O=Grid
   Issuer  CN=Globus Simple CA, OU=simpleCA-vesgdev-idx.ipsl.fr, OU=GlobusTest, O=Grid
   sha1    06 09 9b cc b6 70 6f 3e 59 00 34 b9 fa 0a ba 87 0b f1 16 10 
   md5     0b b0 a3 56 f6 a7 c7 32 7e 35 b5 b9 e3 bb cd 26 

Enter certificate to add to trusted keystore or 'q' to quit: [1] > 1

After that, you should restart the esg-node:

$ sudo ./esg-node restart

If you want to re-install it, you have to use the force option :

$ sudo ./esg-node --type data compute --install --force

Index peer configuration

Do it as root user

In order to configure the host certificate and CA public key, you have to send the csr file located under /esg/config/tomcat/ directory to the CA.

$/esg/config/tomcat/data.meteo.unican.es-esg-node.csr

Then you should put the signed csr under the /etc/grid-security/ directory.

$ /etc/grid-security/data.meteo.unican.es-esg-node-globus.csr.signed.pem

And, if the tomcat key is not in /etc/grid-security directory, copy it inside:

$ cd /etc/grid-security
$ cp /esg/conf/tomcat/hostkey.pem ./

Install the key pair in tomcat. You will be prompted to enter the cacert file; enter the url to the index node cacert.pem:

$ esg-node --install-keypair data.meteo.unican.es-esg-node-globus.csr.signed hostkey.pem
Please enter your Certificate Athority's certificate chain file(s): 
 [enter each cert file/url press return, press return with blank entry when done]
certfile> http://vesgint-idx.ipsl.jussieu.fr/cacert.pem
...................................
...................................

Set auto fetch certs false, otherwise /etc/grid-security/certificates/* will be overwritten by esgf-prod peer groups certificates

$ esg-node --set-auto-fetch-certs false
$ esg-node restart

Register connects to desired node, fetches and stores their certificate to enable ingress SSL connections

$ esg-node --register vesgint-idx.ipsl.jussieu.fr
$ cd /etc/grid-security/certificates/
$ grep vesgint-idx.ipsl.jussieu.fr *
373bd876.signing_policy: access_id_CA      X509         '/O=ESGF/OU=ESGF.ORG/OU=ESGF-vesgint-idx.ipsl.jussieu.fr/CN=ESGF CA'
373bd876.signing_policy: cond_subjects     globus       '"/O=ESGF/OU=ESGF.ORG/OU=ESGF-vesgint-idx.ipsl.jussieu.fr/*"'

This process should fetch the CA cert to /etc/grid-security/certificates

Then rebuild the Tomcat's trustsore

$ esg-node --rebuild-truststore

Data Publishing

Configuring a new project for ESGF publication

See the ESGF publication reference for details.

In order to publish, you have to configure a text file, /esg/config/esgcet/esg.ini. For this propose, we are going to create a new project called cordex:

[initialize][initialize]
log_level = DEBUG
initial_models_table = /esg/config/esgcet/esgcet_models_table.txt


[DEFAULT]
thredds_dataset_roots =
        esg_dataroot | /datasets

project_options =
        cordex | CORDEX Output data | 1
[project:cordex]
#       name | category_type | is_mandatory | is_thredds_property | display_order
categories =
        project          | enum | true | true | 0
        domain           | enum | true | true | 1
        institute        | enum | true | true | 2
        driving_model    | enum | false | true | 3
        experiment       | enum | false | true | 4
        ensemble         | enum | false | true | 5
        model            | enum | false | true | 6
        time_frequency   | enum | false | true | 7
        version          | enum | false | true | 8
        rcm_model        | enum | false | true | 9
        rcm_version      | enum | false | true | 10
        description      | text | false | false | 99
category_defaults =
        domain | EUR-22
        institute | UCAN
        driving_model | ERAINT
        ensemble | r1i1p1
        model | WRF331G
        time_frequency| mon
dataset_id = cordex.%(domain)s.%(institute)s.%(driving_model)s.%(experiment)s.%(ensemble)s.WRF331G_v02.%(time_frequency)s.%(variable)s
directory_format = /datasets/CORDEX/output/%(domain)s/%(institute)s/%(driving_model)s/%(experiment)s/%(ensemble)s/%(rcm_model)s/%(rcm_version)s/%(time_frequency)s/%(variable)s/%(version)s
domain_map = map(project_id,domain : domain_description)
        cordex | SAM-44 | South America
        cordex | CAM-44 | Central America
        cordex | NAM-44 | North America
        cordex | EUR-44 | Europe
        cordex | EUR-22 | Europe
        cordex | AFR-44 | Africa
        cordex | WAS-44 | West Asia
        cordex | EAS-44 | East Asia
        cordex | CAS-44 | Central Asia
        cordex | AUS-44 | Australasia
        cordex | ANT-44 | Antarctica
        cordex | ARC-44 | The Arctic
        cordex | MED-44 | HYMEX Mediterranean
        cordex | EUR-11 | High-res. Europe
        cordex | SAM-44i | South America
        cordex | CAM-44i | Central America
        cordex | NAM-44i | North America
        cordex | EUR-44i | Europe
        cordex | AFR-44i | Africa
        cordex | WAS-44i | West Asia
        cordex | EAS-44i | East Asia
        cordex | CAS-44i | Central Asia
        cordex | AUS-44i | Australasia
        cordex | ANT-44i | Antarctica
        cordex | ARC-44i | The Arctic
        cordex | MED-44i | HYMEX Mediterranean
        cordex | EUR-11i | High-res. Europe
        cordex | MNA-44  | Middle East and North Africa
        cordex | MNA-44i | Middle East and North Africa
        cordex | MNA-22  | Middle East and North Africa
        cordex | MNA-22i | Middle East and North Africa
domain_options = SAM-44,CAM-44,NAM-44,EUR-44,EUR-22,EUR-44i,AFR-44,AFR-44i,WAS-44,EAS-44,CAS-44,AUS-44,ANT-44,ARC-44,MED-44,EUR-11,SAM-44i,CAM-44i,NAM-44i,EUR-44i,AFR-44i,WAS-44i,EAS-44i,CAS-44i,AUS-44i,ANT-44i,ARC-44i,MED-44i,EUR-11i,MNA-44,MNA-44i,MNA-22,MNA-22i
driving_model_options = ERAINT, ECMWF-ERAINT, CCCma-CanESM2, CNRM-CERFACS-CNRM-CM5, ICHEC-EC-EARTH, MIROC-MIROC5, MOHC-HadGEM2-ES, MPI-M-MPI-ESM-LR, NCC-NorESM1-M, NOAA-GFDL-GFDL-ESM2M, IPSL-IPSL-CM5A-MR
ensemble_options = r1i1p1, r12i1p1, r0i0p0
experiment_options =
        cordex | evaluation | no description
        cordex | historical | no description
        cordex | rcp4 | no description
        cordex | rcp26 | no description
        cordex | rcp45 | no description
        cordex | rcp85 | no description
institute_map = map(project_id,model : institute)
        cordex | WRF331G | UCAN
institute_options = UCAN
las_configure = false
las_time_delta_map = map(time_frequency : las_time_delta)
        mon     | 1 month
        day     | 1 day
        fx      | fixed
        sem     | semi
maps = institute_map, las_time_delta_map, domain_map
model_options = WRF331G
parent_id = wdcc2.cordex
project_handler_name = basic_builtin
rcm_model_options = UCAN-WRF331G
rcm_version_options = v02
thredds_exclude_variables = a, a_bnds, alev1, alevel, alevhalf, alt40, b, b_bnds, basin, bnds, bounds_lat, bounds_lon, dbze, depth, depth0m, depth100m, depth_bnds, geo_region, height, height10m, height2m, Lambert_Conformal, lat, lat_bnds, lat_bounds, latitude, latitude_bnds, layer, lev, lev_bnds, location, lon, lon_bnds, lon_bounds, longitude, longitude_bnds, olayer100m, olevel, oline, p0, p220, p500, p560, p700, p840, plev, plev3, plev7, plev8, plev_bnds, plevs, pressure1, region, rho, rlat, rotated_pole, rlon, scatratio, sdepth, sdepth1, sza5, tau, tau_bnds, time, time1, time2, time_bnds, vegtype, x, y
time_frequency_options = day,fx,mon,sem,3hr,6hr
variable_locate = ps,ps_ | vas,vas_ | uas,uas_ |tasmin,tasmin_|tasmax,tasmax_| tas,tas_ | sfcWindmax,sfcWindmax_ | sfcWind,sfcWind_ |rsds,rsds_|rlds,rlds_| pr,pr_ | prc,prc_| mrso,mrso_| mrros,mrros_|huss,huss_| hfss,hfss_|hfls,hfls_
variable_per_file = true
version_options = 20131108

Therefore, if you use the above configuration file, you will have to create a tree directory like this:

[esgf@data datasets]# tree
.
`-- CORDEX
    `-- output
        `-- EUR-22
            `-- UCAN
                `-- ECMWF-ERAINT
                    `-- evaluation
                        `-- r1i1p1
                            `-- UCAN-WRF311G
                                `-- v02
                                    |-- 3hr
                                    |   |-- hfls
                                    |   |   `-- 20131108
                                    |   |       |-- hfls_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19790101-19791231.nc
                                    |   |       `-- hfls_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_20100101-20101231.nc
                                    |   |-- hfss
                                    |   |   `-- 20131108
                                    |   |       |-- hfss_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19790101-19791231.nc
                                    |   |       |-- hfss_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19800101-19801231.nc
                                    |   |       `-- hfss_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_20100101-20101231.nc
                                    |   |-- huss
                                    |   |   `-- 20131108
                                    |   |       |-- huss_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19790101-19791231.nc
                                    |   |       |-- huss_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19800101-19801231.nc
                                    |   |       `-- huss_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_20100101-20101231.nc
                                    |   |-- pr
                                    |   |   `-- 20131108
                                    |   |       |-- pr_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19790101-19791231.nc
                                    |   |       `-- pr_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_20100101-20101231.nc
                                    |   |-- prc
                                    |   |   `-- 20131108
                                    |   |       |-- prc_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19790101-19791231.nc
                                    |   |       `-- prc_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_20100101-20101231.nc
                                    |   |-- ps
                                    |   |   `-- 20131108
                                    |   |       |-- ps_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19790101-19791231.nc
                                    |   |       `-- ps_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_20100101-20101231.nc
                                    |   |-- rlds
                                    |   |   `-- 20131108
                                    |   |       |-- rlds_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19790101-19791231.nc
                                    |   |       |-- rsds_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_20090101-20091231.nc
                                    |   |       `-- rsds_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_20100101-20101231.nc
                                    |   |-- sfcWind
                                    |   |   `-- 20131108
                                    |   |       |-- sfcWind_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19790101-19791231.nc
                                    |   |       |-- sfcWind_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19800101-19801231.nc
                                    |   |       |-- sfcWind_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_20090101-20091231.nc
                                    |   |       `-- sfcWind_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_20100101-20101231.nc
                                    |   `-- tas
                                    |       `-- 20131108
                                    |           |-- tas_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_19790101-19791231.nc
                                    |           `-- tas_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_3hr_20100101-20101231.nc
                                    |-- 6hr
                                    |   |-- mrros
                                    |   |   `-- 20131108
                                    |   |       |-- mrros_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_6hr_19790101-19791231.nc
                                    |   |       |-- mrros_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_6hr_20090101-20091231.nc
                                    |   |       `-- mrros_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_6hr_20100101-20101231.nc
                                    |   |-- uas
                                    |   |   `-- 20131108
                                    |   |       |-- uas_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_6hr_19790101-19791231.nc
                                    |   |       |-- uas_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_6hr_20090101-20091231.nc
                                    |   |       `-- uas_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_6hr_20100101-20101231.nc
                                    |   `-- vas
                                    |       `-- 20131108
                                    |           |-- vas_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_6hr_19790101-19791231.nc
                                    |           |-- vas_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_6hr_20090101-20091231.nc
                                    |           `-- vas_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_6hr_20100101-20101231.nc
                                    |-- day
                                    |   |-- mrso
                                    |   |   `-- 20131108
                                    |   |       |-- mrso_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_day_19790101-19801231.nc
                                    |   |       `-- mrso_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_day_20060101-20101231.nc
                                    |   |-- pr
                                    |   |   `-- 20131108
                                    |   |       |-- pr_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_day_19790101-19801231.nc
                                    |   |       `-- pr_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_day_20060101-20101231.nc
                                    |   |-- sfcWindmax
                                    |   |   `-- 20131108
                                    |   |       |-- sfcWindmax_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_day_19790101-19801231.nc
                                    |   |       |-- sfcWindmax_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_day_20010101-20051231.nc
                                    |   |       `-- sfcWindmax_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_day_20060101-20101231.nc
                                    |   |-- tasmax
                                    |   |   `-- 20131108
                                    |   |       |-- tasmax_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_day_19790101-19801231.nc
                                    |   |       `-- tasmax_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_day_20060101-20101231.nc
                                    |   `-- tasmin
                                    |       `-- 20131108
                                    |           |-- tasmin_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_day_19790101-19801231.nc
                                    |           `-- tasmin_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_day_20060101-20101231.nc
                                    `-- mon
                                        |-- pr
                                        |   `-- 20131108
                                        |       |-- pr_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_mon_19790101-19801231.nc
                                        |       `-- pr_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_mon_20010101-20101231.nc
                                        `-- tas
                                            `-- 20131108
                                                |-- tas_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_mon_19790101-19801231.nc
                                                |-- tas_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_mon_19910101-20001231.nc
                                                `-- tas_EUR-22_ECMWF-ERAINT_evaluation_r1i1p1_UCAN-WRF331G_v02_mon_20010101-20101231.nc


Then you have to add the project name to the esgcet_models_table.txt file

$ echo "   cordex | WRF331G | http://meteo.unican.es | UNICAN WRF3.3.1 Model version, 2.0" >> /esg/config/esgcet/esgcet_models_table.txt 

After modifying esgcet_models_table.txt and esg.ini files, you have to update the data base by executing :

$ cd /usr/local/uvcdat/1.4.0/bin/
$ ./esginitialize -i /esg/config/esgcet/esg.ini -c
  • ./esginitialize -d 0: To remove all tables
  • ./esginitialize -c : Upgrade the database schema to the latest version, and initialize projects, models, experiments, and standard names from configuration files.

Using the ESGF Publisher

This takes place in three steps:

  • Scan each file for metadata and save the metadata in the node database. (This is in contrast to running esgscan_directory, which just scans the directory structure.)
  • Generate a THREDDS catalog based on the scanned information. THREDDS is a data and metadata server used by ESGF.
  • Notify the idx that one or more catalogs have been generated.

File Scan Phase

In order to scan the cordex files for metadata, run esgscan_directory to generate a mapfile and after that run esgpublish with input from a mapfile:

$ whoami 
esgf
$ cd /usr/local/uvcdat/1.4.0/bin
$ ./esgscan_directory -i /esg/config/esgcet/esg.ini --project cordex -o ~/cordex.txt /datasets/CORDEX
$ sudo ./esgunpublish -i /esg/config/esgcet/esg.ini --map ~/cordex.txt 
INFO       2013-11-19 19:32:44,981 Deleting cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfls
INFO       2013-11-19 19:32:45,162   Result: SUCCESSFUL
INFO       2013-11-19 19:32:45,173 Deleting cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfss
INFO       2013-11-19 19:32:45,345   Result: SUCCESSFUL
..........................................

In order to check that the datasets were entered correctly into the database, list the datasets for cordex project:

$ ./esglist_datasets -i /esg/config/esgcet/esg.ini cordex
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id | name                                                                         | project | model   | experiment | run_name | offline | master_gateway | domain | institute | publish_time        | publish_status  | parent | version | version_name                                                                    | comment |
+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 1  | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfls       | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:42:21 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfls.v1       | None    |
| 2  | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfss       | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:42:25 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfss.v1       | None    |
| 3  | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.huss       | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:42:29 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.huss.v1       | None    |
| 4  | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.pr         | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:42:33 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.pr.v1         | None    |
| 5  | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.prc        | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:42:37 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.prc.v1        | None    |
| 6  | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.ps         | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:42:40 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.ps.v1         | None    |
| 7  | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.rlds       | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:42:44 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.rlds.v1       | None    |
| 8  | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.rsds       | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:42:48 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.rsds.v1       | None    |
| 9  | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.sfcWind    | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:42:52 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.sfcWind.v1    | None    |
| 10 | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.tas        | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:42:56 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.tas.v1        | None    |
| 11 | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.6hr.mrros      | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:43:00 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.6hr.mrros.v1      | None    |
| 12 | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.6hr.uas        | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:43:06 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.6hr.uas.v1        | None    |
| 13 | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.6hr.vas        | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:43:12 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.6hr.vas.v1        | None    |
| 14 | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.day.mrso       | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:43:13 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.day.mrso.v1       | None    |
| 15 | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.day.pr         | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:43:14 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.day.pr.v1         | None    |
| 16 | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.day.sfcWindmax | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:43:15 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.day.sfcWindmax.v1 | None    |
| 17 | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.day.tasmax     | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:43:16 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.day.tasmax.v1     | None    |
| 18 | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.day.tasmin     | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:43:18 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.day.tasmin.v1     | None    |
| 19 | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.mon.pr         | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:43:18 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.mon.pr.v1         | None    |
| 20 | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.mon.tas        | cordex  | WRF331G | evaluation | None     | False   | None           | EUR-22 | UCAN      | 2013-11-18 19:43:19 | PUBLISH_DATASET | ROOT   | 1       | cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.mon.tas.v1        | None    |
+------------------------------------------------------------------------------------------------------------------------------------------------

In order undo the scan, run esgunpublish with the following flags:

$ ./esgunpublish  -i /esg/config/esgcet/esg.ini --skip-gateway --skip-thredds --database-delete --map ~/cordex.txt

Generate a THREDDS catalog

You can generate the THREDDS catalog with :

$ sudo ./esgpublish -i /esg/config/esgcet/esg.ini --project cordex --map ~/cordex.txt --noscan --thredds
INFO       2013-11-19 19:46:30,642 Writing THREDDS catalog /esg/content/thredds/esgcet/1/cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfls.v1.xml
INFO       2013-11-19 19:46:30,837 Writing THREDDS catalog /esg/content/thredds/esgcet/1/cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfss.v1.xml
INFO       2013-11-19 19:46:31,019 Writing THREDDS catalog /esg/content/thredds/esgcet/1/cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.huss.v1.xml
INFO       2013-11-19 19:46:31,198 Writing THREDDS catalog /esg/content/thredds/esgcet/1/cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.pr.v1.xml
INFO       2013-11-19 19:46:31,536 Writing THREDDS catalog /esg/content/thredds/esgcet/1/cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.prc.v1.xml
...............................................

In order to remove the catalogs from the THREDDS :

$ ./esgunpublish -i /esg/config/esgcet/esg.ini --map ~/cordex.txt --skip-gateway

idx notification

First, obtain a digital certificate from an ESGF trusted MyProxy server, and rename it to whatever path you have defined in esg.ini.

Remember, you have to log in a Federation to do it.

$ sudo /usr/local/globus/bin/myproxy-logon -s vesgint-idx.ipsl.jussieu.fr -l blancojc -o ~/.globus/certificate-file

Then you can publish the cordex catalog by executing :

$ sudo ./esgpublish -i /esg/config/esgcet/esg.ini --project cordex --map ~/cordex.txt --noscan --publish
INFO       2013-11-19 20:01:24,817 Publishing: cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfls
INFO       2013-11-19 20:01:28,678   Result: SUCCESSFUL
INFO       2013-11-19 20:01:28,678 Publishing: cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfss
INFO       2013-11-19 20:01:32,416   Result: SUCCESSFUL
INFO       2013-11-19 20:01:32,417 Publishing: cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.huss
INFO       2013-11-19 20:01:36,125   Result: SUCCESSFUL
INFO       2013-11-19 20:01:36,125 Publishing: cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.pr
INFO       2013-11-19 20:01:39,964   Result: SUCCESSFUL
INFO       2013-11-19 20:01:39,965 Publishing: cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.prc

Use esgunpublish to delete idx datasets:

$ ./esgpublish -i /esg/config/esgcet/esg.ini --map ~/cordex.txt --skip-thredds

Running all publication steps

For convenience, the full publication can be performed with one command. Also, if the arguments are directories rather than a mapfile, the directories will be scanned as if esgscan_directory were run:

$ sudo ./esgpublish -i /esg/config/esgcet/esg.ini --project cordex --map ~/cordex.txt --noscan --thredds
INFO       2013-11-19 19:46:30,642 Writing THREDDS catalog /esg/content/thredds/esgcet/1/cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfls.v1.xml
INFO       2013-11-19 19:46:30,837 Writing THREDDS catalog /esg/content/thredds/esgcet/1/cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.hfss.v1.xml
INFO       2013-11-19 19:46:31,019 Writing THREDDS catalog /esg/content/thredds/esgcet/1/cordex.EUR-22.UCAN.ECMWF-ERAINT.evaluation.r1i1p1.WRF331G_v02.3hr.huss.v1.xml

esgunpublish will remove the datasets from the idx, THREDDS, and node database in that order:

$ sudo ./esgpublish -i /esg/config/esgcet/esg.ini --database-delete --map ~/cordex.txt

Access files

Finally, in order to grant access to our files you need to add the line below :

<policy resource=".*CORDEX.*" attribute_type="ANY" attribute_value="" action="Read"/>

in your esgf_policies_local.xml file :

$ cat /usr/local/apache-tomcat-7.0.47/webapps/esg-orp/WEB-INF/classes/esg/orp/orp/config/esgf_policies_local.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<!-- This file is intended to be edited and maintained by the local Node admnistrators.
     It should contain only policies specific to data served by the local Node.
     It will not be overridden by a software update. -->
<policies xmlns="http://www.esgf.org/security">
     <policy resource=".*CORDEX.*" attribute_type="ANY" attribute_value="" action="Read"/>
    <!-- The following statements allow all members of group "CMIP5 Research" or "CMIP5 Commercial" to read any local URL that contains "cmip5".
         Note that the groups "CMIP5 Research" and "CMIP5 Commercial" are administered by PCMDI -->
    <!-- <policy resource=".*cmip5.*" attribute_type="CMIP5 Research" attribute_value="user" action="Read"/> -->
    <!-- <policy resource=".*cmip5.*" attribute_type="CMIP5 Commercial" attribute_value="user" action="Read"/> -->
    <!-- These statements provide CMIP5 Read access for members of the old gateways -->
    <!-- <policy resource=".*cmip5.*" attribute_type="CMIP5 Research" attribute_value="default" action="Read"/> -->
    <!-- <policy resource=".*cmip5.*" attribute_type="CMIP5 Commercial" attribute_value="default" action="Read"/> -->
    

    <!-- The following statement allows all members of group "MY GROUP" to read any local URL that contains "my_data"
    <policy resource=".*my_data.*" attribute_type="MY GROUP" attribute_value="user" action="Read"/> -->
    
    <!-- The following statement allows members of group "MY GROUP" with role="publisher" to publish local datasets with id containing "my_data" 
    <policy resource=".*my_data.*" attribute_type="MY GROUP" attribute_value="publisher" action="Write"/> -->
    
    <!-- The following statements makes resources that contain '.*test.*' freely available for download -->
    <!-- <policy resource=".*test.*" attribute_type="ANY" attribute_value="" action="Read"/> -->
    
    <!-- The following statements makes all resources freely available for download -->
    <!-- <policy resource=".*" attribute_type="ANY" attribute_value="" action="Read"/> -->

</policies>
<policy resource=".*CORDEX.*" attribute_type="ANY" attribute_value="" action="Read"/>

In production status, you will have to something like this:

<policy resource=".*CORDEX.*" attribute_type="CORDEX_Research" attribute_value="user" action="Read"/>
<policy resource=".*CORDEX.*" attribute_type="CORDEX_Research" attribute_value="default" action="Read"/>
<policy resource=".*CORDEX.*" attribute_type="CORDEX_Commercial" attribute_value="user" action="Read"/>
<policy resource=".*CORDEX.*" attribute_type="CORDEX_Commercial" attribute_value="default" action="Read"/>

Attachments (8)

Download all attachments as: .zip