I was attempting to experiment with the testdrive Airavata instance from the 
Gateways tutorial. Since we have already setup an echo app and there is an 
example of using client sdk API library (in JavaScript) to both get a list of 
the running experiments and create and launch a new experiment, I thought I’d 
see if I could generate from the thrift idls the Ruby client library and plugin 
the API keys required to execute the same actions using Ruby.

These are the steps I took. I cloned [email protected]:apache/airavata.git and 
modified 
thrift-interface-descriptions/generate-thrift-stubs.sh<mailto:[email protected]:apache/airavata.git%20and%20modified%20thrift-interface-descriptions/generate-thrift-stubs.sh>
 to add the generation of Ruby stubs. I copied the generate_python_stubs 
function and then change the --gen py to --gen rb and the location of the 
generation directory. I just had the target for now be 
airavata-api/airavata-client-sdks/airavata-ruby-sdk/airavata though I’d imagine 
in a proper setup the resulting airavata-ruby-sdk would be structured as a ruby 
gem with the stubs being added to the lib directory for that gem like a 
lib/airavata/ directory.

Regardless the result was a list of Ruby files reprinted at the bottom of the 
email. Presumably I would also need the Ruby thrift gem to install. However, I 
realize I wasn’t actually sure where to go at this point, assuming that the 
steps I had taken were reasonable.

I wasn’t sure what Python client sdk classes and methods corresponded to the 
JavaScript example from the tutorial (relevant parts copied below):

<script src="{% static 'django_airavata_api/dist/airavata-api.js' %}"></script>
<script>
    const { models, services, session, utils } = AiravataAPI;


    function loadExperiments() {
        return services.ExperimentSearchService.list({
            limit: 5,
            [models.ExperimentSearchFields.USER_NAME.name]:
                session.Session.username,
            [models.ExperimentSearchFields.APPLICATION_ID.name]: appInterfaceId
        }).then(data => {



        const loadAppInterface = 
services.ApplicationInterfaceService.retrieve({lookup: appInterfaceId});
        const loadQueues = services.ApplicationDeploymentService.getQueues({ 
lookup: appDeploymentId });
        const loadWorkspacePrefs = services.WorkspacePreferencesService.get();

        Promise.all([loadAppInterface, loadWorkspacePrefs, loadQueues])
        .then(([appInterface, workspacePrefs, queues]) => {
            const experiment = appInterface.createExperiment();

            return services.ExperimentService.create({data: experiment});
            return services.ExperimentService.launch({lookup: 
exp.experimentId});

Here is the list of rb files I generated below.

➜  airavata git:(master) ✗ ls -1
.
..
account_provisioning_model_constants.rb
account_provisioning_model_types.rb
airavata.rb
airavata_api_constants.rb
airavata_api_types.rb
airavata_commons_constants.rb
airavata_commons_types.rb
airavata_data_models_constants.rb
airavata_data_models_types.rb
airavata_errors_constants.rb
airavata_errors_types.rb
airavata_workflow_model_constants.rb
airavata_workflow_model_types.rb
application_deployment_model_constants.rb
application_deployment_model_types.rb
application_interface_model_constants.rb
application_interface_model_types.rb
application_io_models_constants.rb
application_io_models_types.rb
base_a_p_i.rb
base_api_constants.rb
base_api_types.rb
compute_resource_model_constants.rb
compute_resource_model_types.rb
credential-store-cpi_constants.rb
credential-store-cpi_types.rb
credential_store_data_models_constants.rb
credential_store_data_models_types.rb
credential_store_errors_constants.rb
credential_store_errors_types.rb
credential_store_service.rb
data_movement_models_constants.rb
data_movement_models_types.rb
db_event_model_constants.rb
db_event_model_types.rb
experiment_model_constants.rb
experiment_model_types.rb
gateway_groups_model_constants.rb
gateway_groups_model_types.rb
gateway_resource_profile_model_constants.rb
gateway_resource_profile_model_types.rb
group-manager-cpi_constants.rb
group-manager-cpi_types.rb
group_manager_cpi_errors_constants.rb
group_manager_cpi_errors_types.rb
group_manager_model_constants.rb
group_manager_model_types.rb
group_manager_service.rb
group_resource_profile_model_constants.rb
group_resource_profile_model_types.rb
iam-admin-services-cpi_constants.rb
iam-admin-services-cpi_types.rb
iam_admin_services.rb
iam_admin_services_cpi_errors_constants.rb
iam_admin_services_cpi_errors_types.rb
job_model_constants.rb
job_model_types.rb
messaging_events_constants.rb
messaging_events_types.rb
parallelism_model_constants.rb
parallelism_model_types.rb
parser_model_constants.rb
parser_model_types.rb
process_model_constants.rb
process_model_types.rb
profile-service-cpi_constants.rb
profile-service-cpi_types.rb
profile-tenant-cpi_constants.rb
profile-tenant-cpi_types.rb
profile-user-cpi_constants.rb
profile-user-cpi_types.rb
profile_tenant_cpi_errors_constants.rb
profile_tenant_cpi_errors_types.rb
profile_user_cpi_errors_constants.rb
profile_user_cpi_errors_types.rb
replica_catalog_models_constants.rb
replica_catalog_models_types.rb
scheduling_model_constants.rb
scheduling_model_types.rb
security_model_constants.rb
security_model_types.rb
sharing_cpi_constants.rb
sharing_cpi_types.rb
sharing_models_constants.rb
sharing_models_types.rb
sharing_registry_service.rb
status_models_constants.rb
status_models_types.rb
storage_resource_model_constants.rb
storage_resource_model_types.rb
task_model_constants.rb
task_model_types.rb
tenant_profile_model_constants.rb
tenant_profile_model_types.rb
tenant_profile_service.rb
user_profile_model_constants.rb
user_profile_model_types.rb
user_profile_service.rb
user_resource_profile_model_constants.rb
user_resource_profile_model_types.rb
workspace_model_constants.rb
workspace_model_types.rb


Thanks,
Eric

---
Eric Franz, Gateways Lead Engineer
Ohio Supercomputer Center
An Ohio Technology Consortium (OH-TECH) Member
1224 Kinnear Road
Columbus, OH 43212
email: [email protected]

Reply via email to