├── .gitignore ├── docs ├── js │ ├── clipboard_init.js │ └── clipboard.min.js ├── img │ ├── appcatalog.png │ ├── appdetails.png │ ├── devconsole.png │ ├── expstat02.png │ ├── expstat1.png │ ├── expstat2.png │ ├── home-page.png │ ├── home-page2.png │ ├── login-page.png │ ├── manageuser.png │ ├── app-catalog.png │ ├── ext-usr-prof.png │ ├── nek-5000-job.png │ ├── wagtail-home.png │ ├── wagtail-nav.png │ ├── detectcovidexp.png │ ├── gau16appdeploy.png │ ├── gau16appdetails.png │ ├── gau16appinput.png │ ├── nek-app-int-1.png │ ├── nek-app-int-2.png │ ├── nek-app-int-3.png │ ├── nek-app-int-4.png │ ├── nek-app-int-5.png │ ├── nek-app-int-6.png │ ├── nek-app-int-7.png │ ├── user-profiles.png │ ├── user-settings.png │ ├── userprofilefix.png │ ├── cms_default_theme.pdf │ ├── crt-ext-usr-prof.png │ ├── detectcovidinput.png │ ├── django-dashboard.png │ ├── nek-5000-app-mod.png │ ├── user-profiles-old.png │ ├── wagtail-home-edit.png │ ├── emailverifyoverride.png │ ├── extendeduserprofile.png │ ├── gau-app-inputoutput1.png │ ├── gau-app-inputoutput2.png │ ├── gau16-app-detail-tab.png │ ├── helix-architecture.png │ ├── monitoring-framework.jpg │ ├── wagtail-child-edit.png │ ├── pga-menu-and-sub-menu.png │ ├── fillextendeduserprofile.png │ ├── multiple-ways-to-use-airavata.png │ └── multiple-ways-to-use-airavata-1.png ├── configuration │ ├── keycloak-configuration.md │ ├── wso2-is-configuration.md │ └── pga-configuration.md ├── user-documentation │ ├── develop-console.md │ ├── manage-notices.md │ ├── cred-store.md │ ├── central-shared.md │ ├── django-releases.md │ ├── gtwy-resource-profile.md │ ├── manage-users.md │ ├── group-resource-profile.md │ ├── supported-applications.md │ ├── exp-statistics.md │ ├── extended-user-profile.md │ ├── admin-groups.md │ ├── django-theme.md │ ├── quick-start.md │ ├── application-catalog.md │ ├── tutorials.md │ └── advance-inputs.md ├── previous-releases.md ├── maintenance │ ├── code-update │ │ ├── pga-update.md │ │ └── airavata-update.md │ └── pga-maintenance.md ├── css │ └── extra.css ├── installation │ ├── airavata-installation.md │ ├── pga-installation.md │ ├── wso2-is-installation.md │ └── airavata-server-properties.md ├── technical-documentation │ ├── django-portal.md │ ├── helix-job-management.md │ ├── sharing-documentation │ │ ├── api-overview.md │ │ ├── introduction.md │ │ ├── sharing-models.md │ │ └── sharing-cpi.md │ └── airavata-api.md ├── contact-us.md ├── index.md └── faq.md ├── requirements.txt ├── .readthedocs.yaml ├── README.md └── mkdocs.yml /.gitignore: -------------------------------------------------------------------------------- 1 | # Apache Airavata documentation 2 | site/ 3 | venv/ 4 | -------------------------------------------------------------------------------- /docs/js/clipboard_init.js: -------------------------------------------------------------------------------- 1 | new ClipboardJS(".btn[data-clipboard-target]"); 2 | -------------------------------------------------------------------------------- /docs/img/appcatalog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/appcatalog.png -------------------------------------------------------------------------------- /docs/img/appdetails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/appdetails.png -------------------------------------------------------------------------------- /docs/img/devconsole.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/devconsole.png -------------------------------------------------------------------------------- /docs/img/expstat02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/expstat02.png -------------------------------------------------------------------------------- /docs/img/expstat1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/expstat1.png -------------------------------------------------------------------------------- /docs/img/expstat2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/expstat2.png -------------------------------------------------------------------------------- /docs/img/home-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/home-page.png -------------------------------------------------------------------------------- /docs/img/home-page2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/home-page2.png -------------------------------------------------------------------------------- /docs/img/login-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/login-page.png -------------------------------------------------------------------------------- /docs/img/manageuser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/manageuser.png -------------------------------------------------------------------------------- /docs/img/app-catalog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/app-catalog.png -------------------------------------------------------------------------------- /docs/img/ext-usr-prof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/ext-usr-prof.png -------------------------------------------------------------------------------- /docs/img/nek-5000-job.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-5000-job.png -------------------------------------------------------------------------------- /docs/img/wagtail-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/wagtail-home.png -------------------------------------------------------------------------------- /docs/img/wagtail-nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/wagtail-nav.png -------------------------------------------------------------------------------- /docs/img/detectcovidexp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/detectcovidexp.png -------------------------------------------------------------------------------- /docs/img/gau16appdeploy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau16appdeploy.png -------------------------------------------------------------------------------- /docs/img/gau16appdetails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau16appdetails.png -------------------------------------------------------------------------------- /docs/img/gau16appinput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau16appinput.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-1.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-2.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-3.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-4.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-5.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-6.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-7.png -------------------------------------------------------------------------------- /docs/img/user-profiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/user-profiles.png -------------------------------------------------------------------------------- /docs/img/user-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/user-settings.png -------------------------------------------------------------------------------- /docs/img/userprofilefix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/userprofilefix.png -------------------------------------------------------------------------------- /docs/img/cms_default_theme.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/cms_default_theme.pdf -------------------------------------------------------------------------------- /docs/img/crt-ext-usr-prof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/crt-ext-usr-prof.png -------------------------------------------------------------------------------- /docs/img/detectcovidinput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/detectcovidinput.png -------------------------------------------------------------------------------- /docs/img/django-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/django-dashboard.png -------------------------------------------------------------------------------- /docs/img/nek-5000-app-mod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-5000-app-mod.png -------------------------------------------------------------------------------- /docs/img/user-profiles-old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/user-profiles-old.png -------------------------------------------------------------------------------- /docs/img/wagtail-home-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/wagtail-home-edit.png -------------------------------------------------------------------------------- /docs/img/emailverifyoverride.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/emailverifyoverride.png -------------------------------------------------------------------------------- /docs/img/extendeduserprofile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/extendeduserprofile.png -------------------------------------------------------------------------------- /docs/img/gau-app-inputoutput1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau-app-inputoutput1.png -------------------------------------------------------------------------------- /docs/img/gau-app-inputoutput2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau-app-inputoutput2.png -------------------------------------------------------------------------------- /docs/img/gau16-app-detail-tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau16-app-detail-tab.png -------------------------------------------------------------------------------- /docs/img/helix-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/helix-architecture.png -------------------------------------------------------------------------------- /docs/img/monitoring-framework.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/monitoring-framework.jpg -------------------------------------------------------------------------------- /docs/img/wagtail-child-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/wagtail-child-edit.png -------------------------------------------------------------------------------- /docs/img/pga-menu-and-sub-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/pga-menu-and-sub-menu.png -------------------------------------------------------------------------------- /docs/img/fillextendeduserprofile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/fillextendeduserprofile.png -------------------------------------------------------------------------------- /docs/img/multiple-ways-to-use-airavata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/multiple-ways-to-use-airavata.png -------------------------------------------------------------------------------- /docs/img/multiple-ways-to-use-airavata-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/multiple-ways-to-use-airavata-1.png -------------------------------------------------------------------------------- /docs/configuration/keycloak-configuration.md: -------------------------------------------------------------------------------- 1 | 2 | !!! note 3 | Please refer to [this](https://docs.google.com/document/d/1tzqmXPtQgFJR0L_pKuDVdq0D1TjpciBPwLsJE9Ib9ic/edit?usp=sharing). 4 | 5 | -------------------------------------------------------------------------------- /docs/user-documentation/develop-console.md: -------------------------------------------------------------------------------- 1 | ## Developer Console 2 | 3 | 1. This is for gateway developers (Who should have admin access) can download the properties file to set up local Django Portal development environment. 4 | 5 |  6 | Image: Developer Console 7 | -------------------------------------------------------------------------------- /docs/previous-releases.md: -------------------------------------------------------------------------------- 1 | ## Previous Releases 2 | 3 | -
git pull
5 | 2. Do a composer update
6 | composer update
7 | This may take little time....
8 | 3. You are all set with latest updates!
9 | 4. For Airavata updating steps try [Airavata Update](airavata-update.md)
10 |
--------------------------------------------------------------------------------
/docs/css/extra.css:
--------------------------------------------------------------------------------
1 | .darkred{
2 | color: #7f0000;
3 | /*darkred*/
4 | }
5 |
6 | .lred{
7 | color: #b20000;
8 | /*lighterred*/
9 | }
10 |
11 | .blue{
12 | color: #3333ff;
13 | /*darkblue*/
14 | }
15 |
16 | h3
17 | {
18 | display:inline;
19 | }
20 |
21 | h5
22 | {
23 | display:inline;
24 | }
25 |
26 | h6
27 | {
28 | display:inline;
29 | }
30 |
31 | .wy-nav-content{
32 | max-width: 80%;
33 | }
--------------------------------------------------------------------------------
/.readthedocs.yaml:
--------------------------------------------------------------------------------
1 | # .readthedocs.yaml
2 | # Read the Docs configuration file
3 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
4 |
5 | # Required
6 | version: 2
7 |
8 | # Set the version of Python and other tools you might need
9 | build:
10 | os: ubuntu-22.04
11 | tools:
12 | python: "3.10"
13 |
14 | mkdocs:
15 | configuration: mkdocs.yml
16 |
17 | # Optionally declare the Python requirements required to build your docs
18 | python:
19 | install:
20 | - requirements: requirements.txt
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Apache Airavata User Documentation
2 |
3 | Apache Airavata user documentation with Markdown.
4 |
5 | ---
6 |
7 | - View the [Apache Airavata user documentation][airavata-doc].
8 |
9 | [airavata-doc]: http://airavata-user-docs.readthedocs.io
10 |
11 |
12 | ## Building documentation
13 |
14 | ## Documentation
15 |
16 | Create a virtual environment first (one time setup):
17 |
18 | ```
19 | python3 -m venv venv
20 | source venv/bin/activate
21 | pip install -r requirements.txt
22 | ```
23 |
24 | Build the documentation locally:
25 | ```
26 | mkdocs serve
27 | ```
28 |
--------------------------------------------------------------------------------
/docs/installation/airavata-installation.md:
--------------------------------------------------------------------------------
1 | ##Airavata & Django Portal Installation
2 |
3 | ###Intended Users
4 | 1. This section is mainly for gateway developers.
5 | 2. Installing local copy of Airavata, Django and related other applications will provides insight in to the system.
6 |
7 | ###Installation Instructions
8 | Please follow the instructions provided in InteliJ IDEA Installationgit pull
5 | Hint: If you are in the wrong folder you would probably get message 'fatal: Not a git repository (or any of the parent directories): .git'
6 | 3. Now build the code
7 | mvn clean install
8 | Hint: To avoid the 'tests on install' run mvn clean install -Dmaven.test.skip=true
9 | 4. Once the build is success, stop the running Airavata server. You can either stop the java server using
10 | kill -9 <process ID>
11 | OR./airavata-server.sh stop -force
14 | 5. For references, back up the currently existing release
15 | mv apache-airavata-server-0.15-SNAPSHOT apache-airavata-server-0.15-SNAPSHOT-bk
16 | 6. Copy the new release to your local folder (LocalAiravata)
17 | cp /<path to created folder>/LocalAiravata/airavata/distribution/target/apache-airavata-server-0.16-SNAPSHOT-bin.tar.gz .
18 | 7. Un-tar the copied new release
19 | tar -xvf apache-airavata-server-0.16-SNAPSHOT-bin.tar.gz
20 | 8. Navigate to the new bin folder and back up airavata-server.properties and gfac-config.yaml files.
21 | 9. Copy your previously used airavata-server.properties from the backed up release to bin folder (This is the easiest way to get the properties file updated. If you prefer, you can change the new file manually. ☺)
22 | /<your local path>/LocalAiravata/LocalAiravata/apache-airavata-server-0.16-SNAPSHOT-bk/bin/airavata-server.properties .
23 | 10. Copy your previously used gfac-config.yaml from the backed up release
24 | cp /<your local path>/LocalAiravata/apache-airavata-server-0.16-SNAPSHOT-bk/bin/gfac-config.yaml .
25 | 11. Now compare with the new airavata-server.properties and gfac-config.yaml and make necessary changes in the copied files.
26 | Try diff airavata-server.properties airavata-server.properties-bk
27 | 12. Check the path correctness of credential store keystore in airavata-server.properties file.
28 | credential.store.keystore.url=/<your local path>/LocalAiravata/airavata_sym.jks
29 | 13. Go to lib folder and copy mySQL jar (mysql-connector-java-5.1.38-bin.jar) from old backed up lib to the new lib
30 | cp /home/airavata/LocalAiravata/apache-airavata-server-0.16-SNAPSHOT-bk/lib/mysql-connector-java-5.1.38-bin.jar .
31 | 14. Now restart airavata server in bin folder
32 | ./airavata-server.sh start
33 | 15. Airavata ready for job submissions!
34 | 16. For PGA updating steps try [PGA Update](pga-update.md).
35 |
--------------------------------------------------------------------------------
/docs/user-documentation/django-theme.md:
--------------------------------------------------------------------------------
1 | ## Gateway Theme Management
2 |
3 | In Django portal, the gateway branding or the theme is managed through a CMS. The Djangop portal uses WagTail CMS for the theme.<HideAdminServiceWSDLs>false</HideAdminServiceWSDLs>
7 | 3. To enable self signup and account confirmation follow the below steps
8 | - Open <IS_HOME>/repository/conf/claim-config.xml and add the following claims mappings in the <Dialect dialectURI="http://wso2.org/claims"> section.
9 | <Claim>
10 | <ClaimURI>http://wso2.org/claims/identity/accountLocked</ClaimURI>
11 | <DisplayName>Account Locked</DisplayName>
12 | <AttributeID>accountLock</AttributeID>
13 | <Description>Account Locked</Description>
14 | </Claim>
15 | <Claim>
16 | <ClaimURI>http://wso2.org/claims/identity/passwordTimestamp</ClaimURI>
17 | <DisplayName>Password Timestamp</DisplayName>
18 | <AttributeID>facsimileTelephoneNumber</AttributeID>
19 | <Description>Password Timestamp</Description>
20 | </Claim>
21 | <Claim>
22 | <ClaimURI>http://wso2.org/claims/username</ClaimURI>
23 | <DisplayName>Username</DisplayName>
24 | <AttributeID>uid</AttributeID>
25 | <Description>Username</Description>
26 | </Claim>
27 |
28 | - Open <IS_HOME>/repository/conf/claim-config.xml and add the following claims mappings in the <Dialect dialectURI="http://wso2.org/oidc/claim"> section.
29 | <Claim>
30 | <ClaimURI>roles</ClaimURI>
31 | <DisplayName>Roles</DisplayName>
32 | <AttributeID>role</AttributeID>
33 | <Description>Roles</Description>
34 | </Claim>
35 |
36 | <EventListener type="org.wso2.carbon.user.core.listener.UserOperationEventListener" name="org.wso2.carbon.identity.mgt.IdentityMgtEventListener" orderId="50" enable="true"/>
40 |
41 | - Do the following configurations in the <IS_HOME>/repository/conf/identity/identity-mgt.properties file.
42 |
43 | Notification.Sending.Internally.Managed=true
44 | Authentication.Policy.Account.Lock.On.Creation=true
45 | Notification.Expire.Time=7200
46 | Notification.Sending.Enable=true
47 | Authentication.Policy.Enable=true
48 |
49 |
50 | - Configure the email-admin-config.xml file found in <IS_HOME>/repository/conf/email/ with the email template of type “accountConfirmation”.
51 |
52 | - Edit the org.apache.axis2.transport.mail.MailTransportSender section in the <IS_HOME>/repository/conf/axis2/axis2.xml to valid email account configuration.
53 |
55 | <transportSender name="mailto"class="org.apache.axis2.transport.mail.MailTransportSender">
56 | <parameter name="mail.smtp.from">wso2demomail@gmail.com</parameter>
57 | <parameter name="mail.smtp.user">wso2demomail</parameter>
58 | <parameter name="mail.smtp.password">mailpassword</parameter>
59 | <parameter name="mail.smtp.host">smtp.gmail.com</parameter>
60 | <parameter name="mail.smtp.port">587</parameter>
61 | <parameter name="mail.smtp.starttls.enable">true</parameter>
62 | <parameter name="mail.smtp.auth">true</parameter>
63 | </transportSender>
64 |
65 |
66 | 4. Go to <IS_HOME>/bin and start IS server using ./wso2server.sh (use ./wso2server.sh start for starting in daemon mode).
67 |
68 | ### WSO2 IS Configuration
69 | 1. Creating a new tenant.
70 | 2. Registering a new OAuth Service Provider.
71 |
72 | ### Optional Steps
73 | 1. How to configure a mysql backend database for wso2 IS server - MySQL DB Configuration
74 | 2. How to configure a valid server certificate for the wso2 IS server - Configure Server Certificate
75 |
--------------------------------------------------------------------------------
/docs/technical-documentation/sharing-documentation/api-overview.md:
--------------------------------------------------------------------------------
1 |
2 | ## All Thrift Declarations
3 |
4 | | Module | Services | Data types | Constants |
5 | | ------ | -------- | ---------- | --------- |
6 | | sharing_cpi | [SharingRegistryService](sharing-cpi.md#Svc_SharingRegistryService)rabbitmq-server -detached to start.
77 | - Create a virtual-host and user with a password. Follow documentation in RabbitMQ Users & VirtualHost
78 | - To create a user; rabbitmqctl add_user Username Password
79 | - To create a vitrual-host rabbitmqctl add_vhost vhostauthvhost
80 | - Provide permission to created 'Username' to the created vhost rabbitmqctl set_permissions -p messaging airavata ".*" ".*" ".*”
81 | - Uncomment rabbitmq.broker.url=amqp://Username:Password@localhost:5672/Vhost. Add the created username, password and Vhost in the URL.
82 | - If you need to stop RabbitMQ use rabbitmqctl stop
83 | - If the RabbitMQ server stopped then the above user creation, vhost creation and permission granting commands need to run again after restarting the servers.
84 | 19. Zookeeper Server Configuration
85 | - For 'Production' scenario make;
86 | - embedded.zk=false
87 | 20. Aurora Scheduler Configuration
88 |
89 |
90 | 21. API Security Configuration
91 | - Make sure
92 | - api.secured=false
93 | - TLS.enabled=false
94 |
--------------------------------------------------------------------------------
/docs/maintenance/pga-maintenance.md:
--------------------------------------------------------------------------------
1 | ## PGA Maintenance
2 |
3 |
4 | 1. Investigate FAILED experiments/jobs
5 | 2. Handling unavailable Compute Resources
6 | 3. Managing User Accounts
7 | 4. Changing roles are not providing proper access
8 | 5. Community account ran out of SUs
9 | 6. Add Pre and Post Job Commands for an Application
10 | 7. Add Environment Variables for an Application Deployment
11 | 8. Register your Compute & Storage Resources
12 | 9. Gateway Preference Management
13 | 10. Communication with Gateway Users
14 | 11. Monitor Gateway Traffic
15 | 12. Using Credential Store
16 |
17 | Q1. One of my gateway users wants me to investigate his FAILED experiment. How should I proceed?
18 | vi /var/www/html/airavata-php-gateway/app/config/pga_config.php
48 | 2. Roles attached to users should exists in the config file against correct role attribute type
49 |
50 | /**
51 | * Admin Role Name
52 | */
53 | 'admin-role-name' => 'admin',
54 | /**
55 | * Read only Admin Role Name
56 | */
57 | 'read-only-admin-role-name' => 'admin-read-only',
58 | /**
59 | * Gateway user role
60 | */
61 | 'user-role-name' => 'airavata-user',
62 |
63 |
64 | NOTE: In order to view and change config file you require access to PGA backend. If not you need to contact SciGaP admins.
65 |
66 | Q5. I have ran out of allocation for my current community account used in gateway for a resource. What should I do?
67 | vi /var/www/html/airavata-php-gateway/app/config/pga_config.php Then change the initial user role to 'gateway-user'
85 | /**
86 | * Initial user role. This is the initial user role assigned to a new
87 | * user. Set this to one of the three roles above to automatically
88 | * grant new users that role, or set to some other role ('user-pending')
89 | * to require admin approval before users have access.
90 | */
91 | 'initial-role-name' => 'gateway-user',
92 |
93 |
94 | Q7. I want my gateway users to use their own compute resource allocation to submit jobs through the gateway. How to do this?
95 | #SBATCH -N 1
106 | - export MODULEPATH=/share/apps/compute/modulefiles/applications:$MODULEPATH; module load gaussian/16.B.01
107 | - Pre Job Commands:
108 | - export AIRAVATA_USERNAME=$gatewayUserName
109 | - export AIRAVATA_INPUTS=$inputs
110 | - export AIRAVATA_ExptDataDir=$experimentDataDir;
111 | - Default Queue Name: shared
112 | - Default Node Count: 1
113 | - Default CPU Count: 4
114 | - Default Walltime: 30
115 | - Save
116 |
117 | 
118 | Image: Gaussian16 Deployment
119 |
120 | #####email.based.monitor.host=imap.gmail.com
17 | email.based.monitor.address=airavata-user@kuytje.nl
18 | email.based.monitor.password=zzzz
19 | email.based.monitor.folder.name=INBOX
20 | email.based.monitor.store.protocol=imaps (either imaps or pop3)
21 | CREATE TABLE COMMUNITY_USER
27 | (
28 | GATEWAY_ID VARCHAR(256) NOT NULL,
29 | COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,
30 | TOKEN_ID VARCHAR(256) NOT NULL,
31 | COMMUNITY_USER_EMAIL VARCHAR(256) NOT NULL,
32 | PRIMARY KEY (GATEWAY_ID, COMMUNITY_USER_NAME, TOKEN_ID)
33 | );
34 |
35 | CREATE TABLE CREDENTIALS
36 | (
37 | GATEWAY_ID VARCHAR(256) NOT NULL,
38 | TOKEN_ID VARCHAR(256) NOT NULL,
39 | CREDENTIAL BLOB NOT NULL,
40 | PORTAL_USER_ID VARCHAR(256) NOT NULL,
41 | TIME_PERSISTED TIMESTAMP DEFAULT NOW() ON UPDATE NOW(),
42 | PRIMARY KEY (GATEWAY_ID, TOKEN_ID)
43 | );
44 |
45 |
46 |
66 |
67 | ServerAdmin webmaster@dummy-host.example.com
68 | DocumentRoot /var/www/html/portal/public
69 | ServerName pga.example.com
70 |
71 | AllowOverride all
72 |
73 | ErrorLog logs/pga_error_log
74 | CustomLog logs/pga--access_log common
75 |
76 | sudo chmod -R 777 app/storage
80 |
81 | sudo apt-get install php5-mcrypt
84 | Locate mcrypt.so ,to get its location
85 | Locate mcrypt.ini and open the mcrypt.ini file
86 | sudo pico /etc/php5/mods-available/mcrypt.ini
87 | Change the at line a extension=sudo php5enmod mcrypt
89 | Now restart the apache server again and test PGA web-interface
90 |
91 | 40 | <dependency> 41 | <groupId>org.apache.airavata</groupId> 42 | <artifactId>airavata-sharing-registry-stubs</artifactId> 43 | <version>0.17-SNAPSHOT</version> 44 | </dependency> 45 | 46 | <dependency> 47 | <groupId>org.apache.thrift</groupId> 48 | <artifactId>libthrift</artifactId> 49 | <version>0.9.3</version> 50 | </dependency> 51 |52 |
57 | //should use the correct host name and port here 58 | String serverHost = "gw56.iu.xsede.org"; 59 | int serverPort = 7878; 60 | 61 | TTransport transport = new TSocket(serverHost, serverPort); 62 | transport.open(); 63 | TProtocol protocol = new TBinaryProtocol(transport); 64 | SharingRegistryService.Client sharingServiceClient = new SharingRegistryService.Client(protocol); 65 |66 |
71 | Domain domain = new Domain();
72 | //has to be one word
73 | domain.setName("test-domain");
74 | //optional
75 | domain.setDescription("test domain description");
76 |
77 | //domain id will be same as domain name
78 | String domainId = sharingServiceClient.createDomain(domain);
79 |
80 |
85 | User user1 = new User();
86 | String userName = "test-user-1";
87 | String userId1 = "test-user-1";
88 | //required
89 | user1.setUserId(userId1);
90 | //required
91 | user.setUserName(userName);
92 | //required
93 | user1.setDomainId(domainId);
94 | //required
95 | user1.setFirstName("John");
96 | //required
97 | user1.setLastName("Doe");
98 | //required
99 | user1.setEmail("john.doe@abc.com");
100 | //optional - this should be bytes of the users image icon
101 | //byte[] icon = new byte[10];
102 | //user1.setIcon(icon);
103 |
104 | sharingServiceClient.createUser(user1);
105 |
106 | //Similarly create two more users user2 and user3.
107 | .
108 | .
109 | .
110 |
111 |
116 | UserGroup userGroup1 = new UserGroup();
117 | //required
118 | userGroup1.setGroupId("test-group-1");
119 | //required
120 | userGroup1.setDomainId(domainId);
121 | //required
122 | userGroup1.setName("test-group-1");
123 | //optional
124 | userGroup1.setDescription("test group description");
125 | //required
126 | userGroup1.setOwnerId("test-user-1");
127 | //required
128 | userGroup1.setGroupType(GroupType.USER_LEVEL_GROUP);
129 |
130 | sharingServiceClient.createGroup(userGroup1);
131 |
132 | //Similarly create another group "userGroup2" with the owner being "test-user-2".
133 | .
134 | .
135 | .
136 |
137 |
142 | sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("test-user-3"), "test-group-2");
143 |
144 |
149 | sharingServiceClient.addChildGroupsToParentGroup(domainId, Arrays.asList("test-group-2"), "test-group-1");
150 |
151 | /********************************************/
152 | /* test-group-1 */
153 | /* / \ */
154 | /* / \ */
155 | /* test-user-1 test-group-2 */
156 | /* / \ */
157 | /* test-user-2 test-user-3 */
158 | /********************************************/
159 |
160 |
165 | PermissionType permissionType1 = new PermissionType();
166 | //required
167 | permissionType1.setPermissionTypeId("READ");
168 | //required
169 | permissionType1.setDomainId(domainId);
170 | //required
171 | permissionType1.setName("READ");
172 | //optional
173 | permissionType1.setDescription("READ description");
174 | sharingServiceClient.createPermissionType(permissionType1);
175 |
176 | PermissionType permissionType2 = new PermissionType();
177 | permissionType2.setPermissionTypeId("WRITE");
178 | permissionType2.setDomainId(domainId);
179 | permissionType2.setName("WRITE");
180 | permissionType2.setDescription("WRITE description");
181 | sharingServiceClient.createPermissionType(permissionType2);
182 |
183 | PermissionType permissionType3 = new PermissionType();
184 | permissionType3.setPermissionTypeId("CLONE");
185 | permissionType3.setDomainId(domainId);
186 | permissionType3.setName("CLONE");
187 | permissionType3.setDescription("CLONE description");
188 | sharingServiceClient.createPermissionType(permissionType3);
189 |
190 |
195 | EntityType entityType1 = new EntityType();
196 | //required
197 | entityType1.setEntityTypeId("PROJECT");
198 | //required
199 | entityType1.setDomainId(domainId);
200 | //required
201 | entityType1.setName("PROJECT");
202 | //optional
203 | entityType1.setDescription("PROJECT entity type description");
204 | sharingServiceClient.createEntityType(entityType1);
205 |
206 | EntityType entityType2 = new EntityType();
207 | entityType2.setEntityTypeId("EXPERIMENT");
208 | entityType2.setDomainId(domainId);
209 | entityType2.setName("EXPERIMENT");
210 | entityType2.setDescription("EXPERIMENT entity type");
211 | sharingServiceClient.createEntityType(entityType2);
212 |
213 | EntityType entityType3 = new EntityType();
214 | entityType3.setEntityTypeId("FILE");
215 | entityType3.setDomainId(domainId);
216 | entityType3.setName("FILE");
217 | entityType3.setDescription("FILE entity type");
218 | sharingServiceClient.createEntityType(entityType3);
219 |
220 |
225 | Entity entity1 = new Entity();
226 | //required
227 | entity1.setEntityId("test-project-1");
228 | //required
229 | entity1.setDomainId(domainId);
230 | //required
231 | entity1.setEntityTypeId("PROJECT");
232 | //required
233 | entity1.setOwnerId("test-user-1");
234 | //required
235 | entity1.setName("test-project-1");
236 | //optional
237 | entity1.setDescription("test project 1 description");
238 | //optional
239 | entity1.setFullText("test project 1 stampede gaussian seagrid");
240 | //optional - If not set this will be default to current system time
241 | entity1.setOriginalEntityCreationTime(System.currentTimeMillis());
242 |
243 | Entity entity2 = new Entity();
244 | entity2.setEntityId("test-experiment-1");
245 | entity2.setDomainId(domainId);
246 | entity2.setEntityTypeId("EXPERIMENT");
247 | entity2.setOwnerId("test-user-1");
248 | entity2.setName("test-experiment-1");
249 | entity2.setDescription("test experiment 1 description");
250 | entity2.setParentEntityId("test-project-1");
251 | entity2.setFullText("test experiment 1 benzene");
252 | sharingServiceClient.createEntity(entity2);
253 |
254 | Entity entity3 = new Entity();
255 | entity3.setEntityId("test-experiment-2");
256 | entity3.setDomainId(domainId);
257 | entity3.setEntityTypeId("EXPERIMENT");
258 | entity3.setOwnerId("test-user-1");
259 | entity3.setName("test-experiment-2");
260 | entity3.setDescription("test experiment 2 description");
261 | entity3.setParentEntityId("test-project-1");
262 | entity3.setFullText("test experiment 1 3-methyl 1-butanol stampede");
263 | sharingServiceClient.createEntity(entity3);
264 |
265 | Entity entity4 = new Entity();
266 | entity4.setEntityId("test-file-1");
267 | entity4.setDomainId(domainId);
268 | entity4.setEntityTypeId("FILE");
269 | entity4.setOwnerId("test-user-1");
270 | entity4.setName("test-file-1");
271 | entity4.setDescription("test file 1 description");
272 | entity4.setParentEntityId("test-experiment-2");
273 | entity4.setFullText("test input file 1 for experiment 2");
274 | sharingServiceClient.createEntity(entity4);
275 |
276 |
281 | //shared with cascading permissions
282 | sharingServiceClient.shareEntityWithUsers(domainId, "test-project-1", Arrays.asList("test-user-2"), "WRITE", true);
283 | sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "READ", true);
284 |
285 | //shared with non cascading permissions
286 | sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "CLONE", false);
287 |
288 | /************************************************************************************************************/
289 | /* test-project-1 (OWNER:test-user-1, WRITE:test-user-2) */
290 | /* / \ */
291 | /* test-experiment-1 test-experiment-2 */
292 | /* (OWNER:test-user-1,WRITE:test-user-2) (OWNER:test-user-1, WRITE:test-user-2, READ/CLONE:test-group-2) */
293 | /* | */
294 | /* test-file-1 */
295 | /* (OWNER:test-user-1, WRITE:test-user-2, READ:test-group-2) */
296 | /************************************************************************************************************/
297 |
298 | 303 | //test-project-1 is explicitly shared with test-user-2 with WRITE permission 304 | System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-project-1", "WRITE")); 305 | 306 | //test-user-2 has WRITE permission to test-experiment-1 and test-experiment-2 indirectly 307 | System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "WRITE")); 308 | System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "WRITE")); 309 | 310 | //test-user-2 does not have READ permission to test-experiment-1 and test-experiment-2 311 | System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "READ")); 312 | System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "READ")); 313 | 314 | //test-user-3 does not have READ permission to test-project-1 315 | System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-project-1", "READ")); 316 | 317 | //test-experiment-2 is shared with test-group-2 with READ permission. Therefore test-user-3 has READ permission 318 | System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "READ")); 319 | 320 | //test-user-3 does not have WRITE permission to test-experiment-2 321 | System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "WRITE")); 322 | 323 | //test-user-3 has CLONE permission to test-experiment-2 324 | System.out.println((sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "CLONE"))); 325 | //test-user-3 does not have CLONE permission to test-file-1 326 | System.out.println((sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-file-1", "CLONE"))); 327 |328 |
333 | ArrayList<SearchCriteria> filters = new ArrayList<>();
334 | SearchCriteria searchCriteria = new SearchCriteria();
335 | searchCriteria.setSearchCondition(SearchCondition.FULL_TEXT);
336 | searchCriteria.setValue("experiment stampede methyl");
337 | searchCriteria.setSearchField(EntitySearchField.FULL_TEXT);
338 | filters.add(searchCriteria);
339 |
340 | searchCriteria = new SearchCriteria();
341 | searchCriteria.setSearchCondition(SearchCondition.EQUAL);
342 | searchCriteria.setValue("EXPERIMENT");
343 | searchCriteria.setSearchField(EntitySearchField.ENTITY_TYPE_ID);
344 | filters.add(searchCriteria);
345 |
346 | searchCriteria = new SearchCriteria();
347 | searchCriteria.setSearchCondition(SearchCondition.EQUAL);
348 | searchCriteria.setValue("READ");
349 | searchCriteria.setSearchField(EntitySearchField.PERMISSION_TYPE_ID);
350 | filters.add(searchCriteria);
351 |
352 | System.out.println(sharingServiceClient.searchEntities(domainId, "test-user-2", "EXPERIMENT", filters, 0, -1).size());
353 |
354 | | Module | Services | Data types | Constants | 5 |
|---|---|---|---|
| sharing_models | 7 | | Domain 8 | Entity 9 | EntitySearchField 10 | EntityType 11 | GroupCardinality 12 | GroupChildType 13 | GroupMembership 14 | GroupType 15 | PermissionType 16 | SearchCondition 17 | SearchCriteria 18 | Sharing 19 | SharingRegistryException 20 | SharingType 21 | User 22 | UserGroup 23 | |
24 | DO_NOT_SET_AT_CLIENTS_ID25 | |
26 |
| Constant | Type | Value | 29 |
|---|---|---|
DO_NOT_SET_AT_CLIENTS_ID | string | "DO_NOT_SET_AT_CLIENTS_ID" |
This is an system internal enum used to define single user groups and multi users groups. Every user is also 32 | considered as a group in it's own right for implementation ease
33 | 34 |SINGLE_USER | 0 | 36 | |
MULTI_USER | 1 | 38 | |
Group types can be either user level or domain level groups.
42 | 43 |DOMAIN_LEVEL_GROUP | 0 | 45 | |
USER_LEVEL_GROUP | 1 | 47 | |
System internal data type to match group child types
51 | 52 |USER | 0 | 54 | |
GROUP | 1 | 56 | |
This list of fields that can be used to search entities
60 |NAME | 0 | 71 | |
DESCRIPTION | 1 | 73 | |
FULL_TEXT | 2 | 75 | |
PARRENT_ENTITY_ID | 3 | 77 | |
OWNER_ID | 4 | 79 | |
PERMISSION_TYPE_ID | 5 | 81 | |
CREATED_TIME | 6 | 83 | |
UPDATED_TIME | 7 | 85 | |
ENTITY_TYPE_ID |
88 | 8 |
89 | 90 | | 91 |
Different search operators that can be used with the entity search fields
95 |EQUAL | 0 | 104 | |
LIKE | 1 | 106 | |
FULL_TEXT | 2 | 108 | |
GTE | 3 | 110 | |
LTE | 4 | 112 | |
NOT |
115 | 5 |
116 | 117 | | 118 |
This is an internal enum type for managing sharings
122 | 123 |DIRECT_NON_CASCADING | 0 | 125 | |
DIRECT_CASCADING | 1 | 127 | |
INDIRECT_CASCADING | 2 | 129 | |
| Key | Field | Type | Description | Requiredness | Default value | 134 |
|---|---|---|---|---|---|
| 1 | domainId | string | optional | "DO_NOT_SET_AT_CLIENTS_ID" | |
| 2 | name | string | optional | ||
| 3 | description | string | optional | ||
| 4 | createdTime | i64 | optional | ||
| 5 | updatedTime | i64 | optional |
Domain is the entity that enables multi-tenency in this componenet. Every tenant will be 140 | operating separately it's own silo which is identified by the domain id. In the current implementation domain id 141 | will be same as the domain name
142 || Key | Field | Type | Description | Requiredness | Default value | 150 |
|---|---|---|---|---|---|
| 1 | userId | string | optional | ||
| 2 | domainId | string | optional | ||
| 3 | userName | string | optional | ||
| 4 | firstName | string | optional | ||
| 5 | lastName | string | optional | ||
| 6 | string | optional | |||
| 7 | icon | binary | optional | ||
| 8 | createdTime | i64 | optional | ||
| 9 | updatedTime | i64 | optional |
User is the model used to register a user in the system. Minimal user information will be required to provide 160 | regarding the user.
161 || Key | Field | Type | Description | Requiredness | Default value | 173 |
|---|---|---|---|---|---|
| 1 | groupId | string | optional | ||
| 2 | domainId | string | optional | ||
| 3 | name | string | optional | ||
| 4 | description | string | optional | ||
| 5 | ownerId | string | optional | ||
| 6 | groupType | GroupType | optional | ||
| 7 | groupCardinality | GroupCardinality | optional | ||
| 8 | createdTime | i64 | optional | ||
| 9 | updatedTime | i64 | optional |
User group is a collection of users.
183 || Key | Field | Type | Description | Requiredness | Default value | 195 |
|---|---|---|---|---|---|
| 1 | parentId | string | optional | ||
| 2 | childId | string | optional | ||
| 3 | domainId | string | optional | ||
| 4 | childType | GroupChildType | optional | ||
| 5 | createdTime | i64 | optional | ||
| 6 | updatedTime | i64 | optional |
System internal data type to map group memberships
202 | 203 || Key | Field | Type | Description | Requiredness | Default value | 205 |
|---|---|---|---|---|---|
| 1 | entityTypeId | string | optional | ||
| 2 | domainId | string | optional | ||
| 3 | name | string | optional | ||
| 4 | description | string | optional | ||
| 5 | createdTime | i64 | optional | ||
| 6 | updatedTime | i64 | optional |
client defined entity types
212 || Key | Field | Type | Description | Requiredness | Default value | 221 |
|---|---|---|---|---|---|
| 1 | searchField | EntitySearchField | optional | ||
| 2 | value | string | optional | ||
| 3 | searchCondition | SearchCondition | optional |
Container object for search criteria
225 || Key | Field | Type | Description | Requiredness | Default value | 231 |
|---|---|---|---|---|---|
| 1 | entityId | string | optional | ||
| 2 | domainId | string | optional | ||
| 3 | entityTypeId | string | optional | ||
| 4 | ownerId | string | optional | ||
| 5 | parentEntityId | string | optional | ||
| 6 | name | string | optional | ||
| 7 | description | string | optional | ||
| 8 | binaryData | binary | optional | ||
| 9 | fullText | string | optional | ||
| 10 | originalEntityCreationTime | i64 | optional | ||
| 11 | createdTime | i64 | optional | ||
| 12 | updatedTime | i64 | optional |
Entity object which is used to register an entity in the system.
244 || Key | Field | Type | Description | Requiredness | Default value | 260 |
|---|---|---|---|---|---|
| 1 | permissionTypeId | string | optional | ||
| 2 | domainId | string | optional | ||
| 3 | name | string | optional | ||
| 4 | description | string | optional | ||
| 5 | createdTime | i64 | optional | ||
| 6 | updatedTime | i64 | optional |
Object for creating client defined permission type
267 || Key | Field | Type | Description | Requiredness | Default value | 276 |
|---|---|---|---|---|---|
| 1 | permissionTypeId | string | optional | ||
| 2 | entityId | string | optional | ||
| 3 | groupId | string | optional | ||
| 4 | sharingType | SharingType | optional | ||
| 5 | domainId | string | optional | ||
| 6 | inheritedParentId | string | optional | ||
| 7 | createdTime | i64 | optional | ||
| 8 | updatedTime | i64 | optional |
This is an internal enum type for managing sharings
285 | 286 || Key | Field | Type | Description | Requiredness | Default value | 288 |
|---|---|---|---|---|---|
| 1 | message | string | required |
Exception model used in the sharing registry service
290 | 291 |