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]
