From: Ward Vandewege Date: Mon, 28 Sep 2020 15:58:54 +0000 (-0400) Subject: 16267: Merge branch 'master' into 16267-change-arvbox-deps X-Git-Tag: 2.1.0~33^2 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/bcb16d1825fd2e3105a51a2a2f9a119d71f33c8d?hp=a463a62cdef50691f333c5c6f0d2860a542e138a 16267: Merge branch 'master' into 16267-change-arvbox-deps Arvados-DCO-1.1-Signed-off-by: Ward Vandewege --- diff --git a/apps/workbench/app/controllers/application_controller.rb b/apps/workbench/app/controllers/application_controller.rb index 77ec68bdb0..cf4bfa8c54 100644 --- a/apps/workbench/app/controllers/application_controller.rb +++ b/apps/workbench/app/controllers/application_controller.rb @@ -927,7 +927,7 @@ class ApplicationController < ActionController::Base helper_method :my_starred_projects def my_starred_projects user return if defined?(@starred_projects) && @starred_projects - links = Link.filter([['owner_uuid', 'in', ["#{Rails.configuration.ClusterID}-j7d0g-fffffffffffffff", user.uuid]], + links = Link.filter([['owner_uuid', 'in', ["#{Rails.configuration.ClusterID}-j7d0g-publicfavorites", user.uuid]], ['link_class', '=', 'star'], ['head_uuid', 'is_a', 'arvados#group']]).with_count("none").select(%w(head_uuid)) uuids = links.collect { |x| x.head_uuid } diff --git a/apps/workbench/app/controllers/projects_controller.rb b/apps/workbench/app/controllers/projects_controller.rb index 66dc3dcea2..e448e1b453 100644 --- a/apps/workbench/app/controllers/projects_controller.rb +++ b/apps/workbench/app/controllers/projects_controller.rb @@ -133,7 +133,7 @@ class ProjectsController < ApplicationController def remove_items @removed_uuids = [] params[:item_uuids].collect { |uuid| ArvadosBase.find uuid }.each do |item| - if item.class == Collection or item.class == Group + if item.class == Collection or item.class == Group or item.class == Workflow or item.class == ContainerRequest # Use delete API on collections and projects/groups item.destroy @removed_uuids << item.uuid diff --git a/apps/workbench/app/views/work_units/_show_component.html.erb b/apps/workbench/app/views/work_units/_show_component.html.erb index cac263d1ec..4cce090a22 100644 --- a/apps/workbench/app/views/work_units/_show_component.html.erb +++ b/apps/workbench/app/views/work_units/_show_component.html.erb @@ -45,13 +45,13 @@ SPDX-License-Identifier: AGPL-3.0 %>
<% if wu.runtime_status[:errorDetail] %> -
<%= sanitize(wu.runtime_status[:errorDetail]) %>
+
<%= h(wu.runtime_status[:errorDetail]) %>
<% else %> No detailed information available. <% end %> @@ -69,13 +69,13 @@ SPDX-License-Identifier: AGPL-3.0 %>
<% if wu.runtime_status[:warningDetail] %> -
<%= sanitize(wu.runtime_status[:warningDetail]) %>
+
<%= h(wu.runtime_status[:warningDetail]) %>
<% else %> No detailed information available. <% end %> diff --git a/build/run-tests.sh b/build/run-tests.sh index 32d4a75d2b..595f721080 100755 --- a/build/run-tests.sh +++ b/build/run-tests.sh @@ -88,7 +88,7 @@ lib/cloud/cloudtest lib/dispatchcloud lib/dispatchcloud/container lib/dispatchcloud/scheduler -lib/dispatchcloud/ssh_executor +lib/dispatchcloud/sshexecutor lib/dispatchcloud/worker lib/mount lib/pam @@ -709,7 +709,7 @@ do_test() { stop_services check_arvados_config "$1" ;; - gofmt | doc | lib/cli | lib/cloud/azure | lib/cloud/ec2 | lib/cloud/cloudtest | lib/cmd | lib/dispatchcloud/ssh_executor | lib/dispatchcloud/worker) + gofmt | doc | lib/cli | lib/cloud/azure | lib/cloud/ec2 | lib/cloud/cloudtest | lib/cmd | lib/dispatchcloud/sshexecutor | lib/dispatchcloud/worker) check_arvados_config "$1" # don't care whether services are running ;; diff --git a/doc/_includes/_install_ruby_and_bundler.liquid b/doc/_includes/_install_ruby_and_bundler.liquid index d14e555f89..d1d33cbbe3 100644 --- a/doc/_includes/_install_ruby_and_bundler.liquid +++ b/doc/_includes/_install_ruby_and_bundler.liquid @@ -4,7 +4,7 @@ Copyright (C) The Arvados Authors. All rights reserved. SPDX-License-Identifier: CC-BY-SA-3.0 {% endcomment %} -Minimum of Ruby 2.3 is required. Ruby 2.5 is recommended. +Ruby 2.5 or newer is required. * "Option 1: Install from packages":#packages * "Option 2: Install with RVM":#rvm @@ -13,16 +13,18 @@ Minimum of Ruby 2.3 is required. Ruby 2.5 is recommended. h2(#packages). Option 1: Install from packages {% include 'notebox_begin' %} -Future versions of Arvados may require a newer version of Ruby than is packaged with your OS. Using OS packages simplifies initial install, but may complicate upgrades that rely on a newer Ruby. If this is a concern, we recommend using "RVM.":#rvm +Future versions of Arvados may require a newer version of Ruby than is packaged with your OS. Using OS packages simplifies initial install, but may complicate upgrades that rely on a newer Ruby. If this is a concern, we recommend using "RVM":#rvm. {% include 'notebox_end' %} h3. Centos 7 -The Ruby version shipped with Centos 7 is too old. Use "RVM.":#rvm +The Ruby version shipped with Centos 7 is too old. Use "RVM":#rvm to install Ruby 2.5 or later. h3. Debian and Ubuntu -Debian 9 (stretch) and Ubuntu 16.04 (xenial) ship Ruby 2.3, which is sufficient to run Arvados. Later releases have newer versions of Ruby that can also run Arvados. +Debian 9 (stretch) and Ubuntu 16.04 (xenial) ship Ruby 2.3, which is not supported by Arvados. Use "RVM":#rvm to install Ruby 2.5 or later. + +Debian 10 (buster) and Ubuntu 18.04 (bionic) and later ship with Ruby 2.5, which is supported by Arvados.
# apt-get --no-install-recommends install ruby ruby-dev bundler
diff --git a/doc/admin/upgrading.html.textile.liquid b/doc/admin/upgrading.html.textile.liquid index 061b68fa5d..1eb2468c32 100644 --- a/doc/admin/upgrading.html.textile.liquid +++ b/doc/admin/upgrading.html.textile.liquid @@ -16,6 +16,7 @@ h2. General process # Consult upgrade notes below to see if any manual configuration updates are necessary. # Wait for the cluster to be idle and stop Arvados services. +# Make a backup of your database, as a precaution. # Install new packages using @apt-get upgrade@ or @yum upgrade@. # Wait for package installation scripts as they perform any necessary data migrations. # Restart Arvados services. @@ -34,10 +35,14 @@ TODO: extract this information based on git commit messages and generate changel
-h2(#master). development master (as of 2020-06-17) +h2(#master). development master (as of 2020-09-22) "Upgrading from 2.0.0":#v2_0_0 +h3. Minimum supported Ruby version is now 2.5 + +The minimum supported Ruby version is now 2.5. If you are running Arvados on Debian 9 or Ubuntu 16.04, you may need to switch to using RVM or upgrade your OS. See "Install Ruby and Bundler":../install/ruby.html for more information. + h3. Removing libpam-arvados, replaced with libpam-arvados-go The Python-based PAM package has been replaced with a version written in Go. See "using PAM for authentication":{{site.baseurl}}/install/setup-login.html#pam for details. @@ -87,6 +92,10 @@ for uuid in $(arv link list --filters '[["link_class", "=", "permission"], ["tai done +h4. "Public favorites" moved to their own project + +As a side effect of new permission system constraints, "star" links (indicating shortcuts in Workbench) that were previously owned by "All users" (which is now a "role" and cannot own things) will be migrated to a new system project called "Public favorites" which is readable by the "Anonymous users" role. + h2(#v2_0_0). v2.0.0 (2020-02-07) "Upgrading from 1.4":#v1_4_1 diff --git a/doc/admin/user-management-cli.html.textile.liquid b/doc/admin/user-management-cli.html.textile.liquid index 6892176604..8cebf02cdc 100644 --- a/doc/admin/user-management-cli.html.textile.liquid +++ b/doc/admin/user-management-cli.html.textile.liquid @@ -85,6 +85,52 @@ To get the token string, combine the values of @uuid@ and @api_token@ in the for ARVADOS_API_TOKEN=v2/zzzzz-gj3su-yyyyyyyyyyyyyyy/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +h3(#delete-token). Delete a token + +If you need to revoke a token, for example the token is leaked to an unauthorized party, you can delete the token at the command line. + +1. First, determine the token UUID. If it is a "v2" format token (starts with "v2/") then the token UUID is middle section between the two slashes. For example: + +
+v2/zzzzz-gj3su-yyyyyyyyyyyyyyy/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+
+ +the UUID is "zzzzz-gj3su-yyyyyyyyyyyyyyy" and you can skip to the next step. + +If you have a "bare" token (only the secret part) then, as an admin, you need to query the token to get the uuid: + +
+$ ARVADOS_API_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx arv api_client_authorization current
+{
+ "href":"/api_client_authorizations/x33hz-gj3su-fk8nbj4byptz6ma",
+ "kind":"arvados#apiClientAuthorization",
+ "etag":"77wktnitqeelbgb4riv84zi2q",
+ "uuid":"zzzzz-gj3su-yyyyyyyyyyyyyyy",
+ "owner_uuid":"zzzzz-tpzed-j8w1ymjsn4vf4v4",
+ "created_at":"2020-09-25T15:19:48.606984000Z",
+ "modified_by_client_uuid":null,
+ "modified_by_user_uuid":null,
+ "modified_at":null,
+ "user_id":3,
+ "api_client_id":1,
+ "api_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
+ "created_by_ip_address":null,
+ "default_owner_uuid":null,
+ "expires_at":null,
+ "last_used_at":null,
+ "last_used_by_ip_address":null,
+ "scopes":[
+  "all"
+ ]
+}
+
+ +2. Now use the token to delete itself: + +
+$ ARVADOS_API_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx arv api_client_authorization delete --uuid zzzzz-gj3su-yyyyyyyyyyyyyyy
+
+ h2. Adding Permissions h3. VM login diff --git a/doc/api/methods/links.html.textile.liquid b/doc/api/methods/links.html.textile.liquid index 2e5de1856d..c71105c745 100644 --- a/doc/api/methods/links.html.textile.liquid +++ b/doc/api/methods/links.html.textile.liquid @@ -43,28 +43,30 @@ h3. star A **star** link is a shortcut to a project that is displayed in the user interface (Workbench) as "favorites". Users can mark their own favorites (implemented by creating or deleting **star** links). -An admin can also create **star** links owned by the "All Users" group, these will be displayed to all users that have permission to read the project that has been favorited. +An admin can also create **star** links owned by the "Public favorites" project. These are favorites will be displayed to all users that have permission to read the project that has been favorited. The schema for a star link is: table(table table-bordered table-condensed). |_. Field|_. Value|_. Description| -|owner_uuid|user or group uuid|Either the user that owns the favorite, or the "All Users" group for public favorites.| +|owner_uuid|user or group uuid|Either the user that owns the favorite, or the "Public favorites" group.| +|tail_uuid|user or group uuid|Should be the same as owner_uuid| |head_uuid|project uuid|The project being favorited| |link_class|string of value "star"|Indicates this represents a link to a user favorite| -h4. Creating a favorite +h4. Creating a public favorite -@owner_uuid@ is either an individual user, or the "All Users" group. The @head_uuid@ is the project being favorited. +@owner_uuid@ is either an individual user, or the "Public favorites" group. The @head_uuid@ is the project being favorited.
-$ arv link create --link '{
-    "owner_uuid": "zzzzz-j7d0g-fffffffffffffff",
-    "head_uuid":  "zzzzz-j7d0g-theprojectuuid",
-    "link_class": "star"}'
+$ linkuuid=$(arv --format=uuid link create --link '{
+    "link_class": "star",
+    "owner_uuid": "zzzzz-j7d0g-publicfavorites",
+    "tail_uuid": "zzzzz-j7d0g-publicfavorites",
+    "head_uuid":  "zzzzz-j7d0g-theprojectuuid"}')
 
-h4. Deleting a favorite +h4. Removing a favorite
 $ arv link delete --uuid zzzzz-o0j2j-thestarlinkuuid
@@ -77,7 +79,7 @@ To list all 'star' links that will be displayed for a user:
 
 $ arv link list --filters '[
   ["link_class", "=", "star"],
-  ["owner_uuid", "in", ["zzzzz-j7d0g-fffffffffffffff", "zzzzz-tpzed-currentuseruuid"]]]'
+  ["tail_uuid", "in", ["zzzzz-j7d0g-publicfavorites", "zzzzz-tpzed-currentuseruuid"]]]'
 
h3. tag diff --git a/doc/user/tutorials/wgs-tutorial.html.textile.liquid b/doc/user/tutorials/wgs-tutorial.html.textile.liquid index 2d60f7a3ab..cd4d1cc715 100644 --- a/doc/user/tutorials/wgs-tutorial.html.textile.liquid +++ b/doc/user/tutorials/wgs-tutorial.html.textile.liquid @@ -125,9 +125,11 @@ h3. 4b. Optional: Setting up to Run a Workflow Using Command Line and an Arvados Arvados provides a virtual machine which has all the necessary client-side libraries installed to submit to your Arvados cluster using the command line. Webshell gives you access to an Arvados Virtual Machine (VM) from your browser with no additional setup. You can access webshell through the Arvados Workbench. It is the easiest way to try out submitting a workflow to Arvados via the command line. -To get access to webshell on the Arvados Playground, you need to contact a Curii Arvados Playground Administrator to get access to an Arvados shell node by emailing "info@curii.com.":mailto:info@curii.com +New users are playground are automatically given access to a shell account. -Once you receive an email letting you know your access has been set up and you should be able to access the shell virtual machine. You can follow the instructions here to access the machine using the browser (also known as using webshell): +_Note_: the shell accounts are created on an interval and it may take up to two minutes from your initial log in before the shell account is created. + +You can follow the instructions here to access the machine using the browser (also known as using webshell): * "Accessing an Arvados VM with Webshell":{{ site.baseurl }}/user/getting_started/vm-login-with-webshell.html Arvados also allows you to ssh into the shell machine and other hosted VMs instead of using the webshell capabilities. However this tutorial does not cover that option in-depth. If you like to explore it on your own, you can allow the instructions in the documentation here: diff --git a/lib/cloud/cloudtest/tester.go b/lib/cloud/cloudtest/tester.go index 5288b5c76c..9fd7c9e749 100644 --- a/lib/cloud/cloudtest/tester.go +++ b/lib/cloud/cloudtest/tester.go @@ -12,7 +12,7 @@ import ( "time" "git.arvados.org/arvados.git/lib/cloud" - "git.arvados.org/arvados.git/lib/dispatchcloud/ssh_executor" + "git.arvados.org/arvados.git/lib/dispatchcloud/sshexecutor" "git.arvados.org/arvados.git/lib/dispatchcloud/worker" "git.arvados.org/arvados.git/sdk/go/arvados" "github.com/sirupsen/logrus" @@ -48,7 +48,7 @@ type tester struct { is cloud.InstanceSet testInstance *worker.TagVerifier secret string - executor *ssh_executor.Executor + executor *sshexecutor.Executor showedLoginInfo bool failed bool @@ -150,9 +150,8 @@ func (t *tester) Run() bool { if time.Now().After(bootDeadline) { t.Logger.Error("timed out") return false - } else { - t.sleepSyncInterval() } + t.sleepSyncInterval() } t.Logger.WithField("Instance", t.testInstance.ID()).Info("new instance appeared") t.showLoginInfo() @@ -308,7 +307,7 @@ func (t *tester) waitForBoot(deadline time.Time) bool { // current address. func (t *tester) updateExecutor() { if t.executor == nil { - t.executor = ssh_executor.New(t.testInstance) + t.executor = sshexecutor.New(t.testInstance) t.executor.SetTargetPort(t.SSHPort) t.executor.SetSigners(t.SSHKey) } else { diff --git a/lib/cloud/ec2/ec2.go b/lib/cloud/ec2/ec2.go index c329c1f88a..29062c491e 100644 --- a/lib/cloud/ec2/ec2.go +++ b/lib/cloud/ec2/ec2.go @@ -308,9 +308,8 @@ func (inst *ec2Instance) Destroy() error { func (inst *ec2Instance) Address() string { if inst.instance.PrivateIpAddress != nil { return *inst.instance.PrivateIpAddress - } else { - return "" } + return "" } func (inst *ec2Instance) RemoteUser() string { diff --git a/lib/config/config.default.yml b/lib/config/config.default.yml index 15e7c7c06c..d0338e8c86 100644 --- a/lib/config/config.default.yml +++ b/lib/config/config.default.yml @@ -287,6 +287,20 @@ Clusters: # address is used. PreferDomainForUsername: "" + UserSetupMailText: | + <% if not @user.full_name.empty? -%> + <%= @user.full_name %>, + <% else -%> + Hi there, + <% end -%> + + Your Arvados account has been set up. You can log in at + + <%= Rails.configuration.Services.Workbench1.ExternalURL %> + + Thanks, + Your Arvados administrator. + AuditLogs: # Time to keep audit logs, in seconds. (An audit log is a row added # to the "logs" table in the PostgreSQL database each time an diff --git a/lib/config/export.go b/lib/config/export.go index 6ab69d21fe..81c6767a10 100644 --- a/lib/config/export.go +++ b/lib/config/export.go @@ -214,6 +214,7 @@ var whitelist = map[string]bool{ "Users.PreferDomainForUsername": false, "Users.UserNotifierEmailFrom": false, "Users.UserProfileNotificationAddress": false, + "Users.UserSetupMailText": false, "Volumes": true, "Volumes.*": true, "Volumes.*.*": false, diff --git a/lib/config/generated_config.go b/lib/config/generated_config.go index 7ed332151b..88d71eb0ac 100644 --- a/lib/config/generated_config.go +++ b/lib/config/generated_config.go @@ -293,6 +293,20 @@ Clusters: # address is used. PreferDomainForUsername: "" + UserSetupMailText: | + <% if not @user.full_name.empty? -%> + <%= @user.full_name %>, + <% else -%> + Hi there, + <% end -%> + + Your Arvados account has been set up. You can log in at + + <%= Rails.configuration.Services.Workbench1.ExternalURL %> + + Thanks, + Your Arvados administrator. + AuditLogs: # Time to keep audit logs, in seconds. (An audit log is a row added # to the "logs" table in the PostgreSQL database each time an diff --git a/lib/controller/federation/conn.go b/lib/controller/federation/conn.go index 361c9613dd..61cac9bbab 100644 --- a/lib/controller/federation/conn.go +++ b/lib/controller/federation/conn.go @@ -203,9 +203,8 @@ func (conn *Conn) Login(ctx context.Context, options arvados.LoginOptions) (arva return arvados.LoginResponse{ RedirectLocation: target.String(), }, nil - } else { - return conn.local.Login(ctx, options) } + return conn.local.Login(ctx, options) } func (conn *Conn) Logout(ctx context.Context, options arvados.LogoutOptions) (arvados.LogoutResponse, error) { diff --git a/lib/controller/localdb/login_oidc.go b/lib/controller/localdb/login_oidc.go index 9274d75d7c..e0b01f13eb 100644 --- a/lib/controller/localdb/login_oidc.go +++ b/lib/controller/localdb/login_oidc.go @@ -106,34 +106,33 @@ func (ctrl *oidcLoginController) Login(ctx context.Context, opts arvados.LoginOp // one Google account. oauth2.SetAuthURLParam("prompt", "select_account")), }, nil - } else { - // Callback after OIDC sign-in. - state := ctrl.parseOAuth2State(opts.State) - if !state.verify([]byte(ctrl.Cluster.SystemRootToken)) { - return loginError(errors.New("invalid OAuth2 state")) - } - oauth2Token, err := ctrl.oauth2conf.Exchange(ctx, opts.Code) - if err != nil { - return loginError(fmt.Errorf("error in OAuth2 exchange: %s", err)) - } - rawIDToken, ok := oauth2Token.Extra("id_token").(string) - if !ok { - return loginError(errors.New("error in OAuth2 exchange: no ID token in OAuth2 token")) - } - idToken, err := ctrl.verifier.Verify(ctx, rawIDToken) - if err != nil { - return loginError(fmt.Errorf("error verifying ID token: %s", err)) - } - authinfo, err := ctrl.getAuthInfo(ctx, oauth2Token, idToken) - if err != nil { - return loginError(err) - } - ctxRoot := auth.NewContext(ctx, &auth.Credentials{Tokens: []string{ctrl.Cluster.SystemRootToken}}) - return ctrl.RailsProxy.UserSessionCreate(ctxRoot, rpc.UserSessionCreateOptions{ - ReturnTo: state.Remote + "," + state.ReturnTo, - AuthInfo: *authinfo, - }) } + // Callback after OIDC sign-in. + state := ctrl.parseOAuth2State(opts.State) + if !state.verify([]byte(ctrl.Cluster.SystemRootToken)) { + return loginError(errors.New("invalid OAuth2 state")) + } + oauth2Token, err := ctrl.oauth2conf.Exchange(ctx, opts.Code) + if err != nil { + return loginError(fmt.Errorf("error in OAuth2 exchange: %s", err)) + } + rawIDToken, ok := oauth2Token.Extra("id_token").(string) + if !ok { + return loginError(errors.New("error in OAuth2 exchange: no ID token in OAuth2 token")) + } + idToken, err := ctrl.verifier.Verify(ctx, rawIDToken) + if err != nil { + return loginError(fmt.Errorf("error verifying ID token: %s", err)) + } + authinfo, err := ctrl.getAuthInfo(ctx, oauth2Token, idToken) + if err != nil { + return loginError(err) + } + ctxRoot := auth.NewContext(ctx, &auth.Credentials{Tokens: []string{ctrl.Cluster.SystemRootToken}}) + return ctrl.RailsProxy.UserSessionCreate(ctxRoot, rpc.UserSessionCreateOptions{ + ReturnTo: state.Remote + "," + state.ReturnTo, + AuthInfo: *authinfo, + }) } func (ctrl *oidcLoginController) UserAuthenticate(ctx context.Context, opts arvados.UserAuthenticateOptions) (arvados.APIClientAuthorization, error) { @@ -190,9 +189,8 @@ func (ctrl *oidcLoginController) getAuthInfo(ctx context.Context, token *oauth2. // only the "fix config" advice to the user. ctxlog.FromContext(ctx).WithError(err).WithField("email", ret.Email).Error("People API is not enabled") return nil, errors.New("configuration error: Login.GoogleAlternateEmailAddresses is true, but Google People API is not enabled") - } else { - return nil, fmt.Errorf("error getting profile info from People API: %s", err) } + return nil, fmt.Errorf("error getting profile info from People API: %s", err) } // The given/family names returned by the People API and diff --git a/lib/crunchrun/crunchrun_test.go b/lib/crunchrun/crunchrun_test.go index e8c7660d1a..55cc6ee564 100644 --- a/lib/crunchrun/crunchrun_test.go +++ b/lib/crunchrun/crunchrun_test.go @@ -157,9 +157,8 @@ func (t *TestDockerClient) ContainerStart(ctx context.Context, container string, if container == "abcde" { // t.fn gets executed in ContainerWait return nil - } else { - return errors.New("Invalid container id") } + return errors.New("Invalid container id") } func (t *TestDockerClient) ContainerRemove(ctx context.Context, container string, options dockertypes.ContainerRemoveOptions) error { @@ -196,9 +195,8 @@ func (t *TestDockerClient) ImageInspectWithRaw(ctx context.Context, image string if t.imageLoaded == image { return dockertypes.ImageInspect{}, nil, nil - } else { - return dockertypes.ImageInspect{}, nil, errors.New("") } + return dockertypes.ImageInspect{}, nil, errors.New("") } func (t *TestDockerClient) ImageLoad(ctx context.Context, input io.Reader, quiet bool) (dockertypes.ImageLoadResponse, error) { @@ -208,10 +206,9 @@ func (t *TestDockerClient) ImageLoad(ctx context.Context, input io.Reader, quiet _, err := io.Copy(ioutil.Discard, input) if err != nil { return dockertypes.ImageLoadResponse{}, err - } else { - t.imageLoaded = hwImageId - return dockertypes.ImageLoadResponse{Body: ioutil.NopCloser(input)}, nil } + t.imageLoaded = hwImageId + return dockertypes.ImageLoadResponse{Body: ioutil.NopCloser(input)}, nil } func (*TestDockerClient) ImageRemove(ctx context.Context, image string, options dockertypes.ImageRemoveOptions) ([]dockertypes.ImageDeleteResponseItem, error) { @@ -260,9 +257,8 @@ func (client *ArvTestClient) Call(method, resourceType, uuid, action string, par case method == "GET" && resourceType == "containers" && action == "secret_mounts": if client.secretMounts != nil { return json.Unmarshal(client.secretMounts, output) - } else { - return json.Unmarshal([]byte(`{"secret_mounts":{}}`), output) } + return json.Unmarshal([]byte(`{"secret_mounts":{}}`), output) default: return fmt.Errorf("Not found") } diff --git a/lib/crunchrun/logging.go b/lib/crunchrun/logging.go index d5de184e5c..febfb1404d 100644 --- a/lib/crunchrun/logging.go +++ b/lib/crunchrun/logging.go @@ -368,9 +368,8 @@ func (arvlog *ArvLogWriter) rateLimit(line []byte, now time.Time) (bool, []byte) // instead of the log message that exceeded the limit. message += " A complete log is still being written to Keep, and will be available when the job finishes." return true, []byte(message) - } else { - return arvlog.logThrottleIsOpen, line } + return arvlog.logThrottleIsOpen, line } // load the rate limit discovery config parameters diff --git a/lib/dispatchcloud/dispatcher.go b/lib/dispatchcloud/dispatcher.go index 278bcb6657..7614a143ab 100644 --- a/lib/dispatchcloud/dispatcher.go +++ b/lib/dispatchcloud/dispatcher.go @@ -17,7 +17,7 @@ import ( "git.arvados.org/arvados.git/lib/cloud" "git.arvados.org/arvados.git/lib/dispatchcloud/container" "git.arvados.org/arvados.git/lib/dispatchcloud/scheduler" - "git.arvados.org/arvados.git/lib/dispatchcloud/ssh_executor" + "git.arvados.org/arvados.git/lib/dispatchcloud/sshexecutor" "git.arvados.org/arvados.git/lib/dispatchcloud/worker" "git.arvados.org/arvados.git/sdk/go/arvados" "git.arvados.org/arvados.git/sdk/go/auth" @@ -100,7 +100,7 @@ func (disp *dispatcher) Close() { // Make a worker.Executor for the given instance. func (disp *dispatcher) newExecutor(inst cloud.Instance) worker.Executor { - exr := ssh_executor.New(inst) + exr := sshexecutor.New(inst) exr.SetTargetPort(disp.Cluster.Containers.CloudVMs.SSHPort) exr.SetSigners(disp.sshKey) return exr diff --git a/lib/dispatchcloud/dispatcher_test.go b/lib/dispatchcloud/dispatcher_test.go index 9f1eb098e0..d5d90bf351 100644 --- a/lib/dispatchcloud/dispatcher_test.go +++ b/lib/dispatchcloud/dispatcher_test.go @@ -227,6 +227,10 @@ func (s *DispatcherSuite) TestDispatchToStubDriver(c *check.C) { c.Check(resp.Body.String(), check.Matches, `(?ms).*time_from_shutdown_request_to_disappearance_seconds_sum [0-9.]*`) c.Check(resp.Body.String(), check.Matches, `(?ms).*time_from_queue_to_crunch_run_seconds_count [0-9]*`) c.Check(resp.Body.String(), check.Matches, `(?ms).*time_from_queue_to_crunch_run_seconds_sum [0-9e+.]*`) + c.Check(resp.Body.String(), check.Matches, `(?ms).*run_probe_duration_seconds_count{outcome="success"} [0-9]*`) + c.Check(resp.Body.String(), check.Matches, `(?ms).*run_probe_duration_seconds_sum{outcome="success"} [0-9e+.]*`) + c.Check(resp.Body.String(), check.Matches, `(?ms).*run_probe_duration_seconds_count{outcome="fail"} [0-9]*`) + c.Check(resp.Body.String(), check.Matches, `(?ms).*run_probe_duration_seconds_sum{outcome="fail"} [0-9e+.]*`) } func (s *DispatcherSuite) TestAPIPermissions(c *check.C) { diff --git a/lib/dispatchcloud/ssh_executor/executor.go b/lib/dispatchcloud/sshexecutor/executor.go similarity index 98% rename from lib/dispatchcloud/ssh_executor/executor.go rename to lib/dispatchcloud/sshexecutor/executor.go index 79b82e6c37..c37169921c 100644 --- a/lib/dispatchcloud/ssh_executor/executor.go +++ b/lib/dispatchcloud/sshexecutor/executor.go @@ -2,9 +2,9 @@ // // SPDX-License-Identifier: AGPL-3.0 -// Package ssh_executor provides an implementation of pool.Executor +// Package sshexecutor provides an implementation of pool.Executor // using a long-lived multiplexed SSH session. -package ssh_executor +package sshexecutor import ( "bytes" diff --git a/lib/dispatchcloud/ssh_executor/executor_test.go b/lib/dispatchcloud/sshexecutor/executor_test.go similarity index 99% rename from lib/dispatchcloud/ssh_executor/executor_test.go rename to lib/dispatchcloud/sshexecutor/executor_test.go index b7f3aadd8a..b4afeafa82 100644 --- a/lib/dispatchcloud/ssh_executor/executor_test.go +++ b/lib/dispatchcloud/sshexecutor/executor_test.go @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0 -package ssh_executor +package sshexecutor import ( "bytes" diff --git a/lib/dispatchcloud/worker/pool.go b/lib/dispatchcloud/worker/pool.go index c6eaeae2b6..a25ed60150 100644 --- a/lib/dispatchcloud/worker/pool.go +++ b/lib/dispatchcloud/worker/pool.go @@ -86,9 +86,8 @@ const ( func duration(conf arvados.Duration, def time.Duration) time.Duration { if conf > 0 { return time.Duration(conf) - } else { - return def } + return def } // NewPool creates a Pool of workers backed by instanceSet. @@ -184,6 +183,7 @@ type Pool struct { mTimeToReadyForContainer prometheus.Summary mTimeFromShutdownToGone prometheus.Summary mTimeFromQueueToCrunchRun prometheus.Summary + mRunProbeDuration *prometheus.SummaryVec } type createCall struct { @@ -682,6 +682,14 @@ func (wp *Pool) registerMetrics(reg *prometheus.Registry) { Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.95: 0.005, 0.99: 0.001}, }) reg.MustRegister(wp.mTimeFromQueueToCrunchRun) + wp.mRunProbeDuration = prometheus.NewSummaryVec(prometheus.SummaryOpts{ + Namespace: "arvados", + Subsystem: "dispatchcloud", + Name: "instances_run_probe_duration_seconds", + Help: "Number of seconds per runProbe call.", + Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.95: 0.005, 0.99: 0.001}, + }, []string{"outcome"}) + reg.MustRegister(wp.mRunProbeDuration) } func (wp *Pool) runMetrics() { diff --git a/lib/dispatchcloud/worker/worker.go b/lib/dispatchcloud/worker/worker.go index 5b145d7c65..9e89d7daaf 100644 --- a/lib/dispatchcloud/worker/worker.go +++ b/lib/dispatchcloud/worker/worker.go @@ -192,7 +192,7 @@ func (wkr *worker) startContainer(ctr arvados.Container) { } // ProbeAndUpdate conducts appropriate boot/running probes (if any) -// for the worker's curent state. If a previous probe is still +// for the worker's current state. If a previous probe is still // running, it does nothing. // // It should be called in a new goroutine. @@ -376,6 +376,7 @@ func (wkr *worker) probeRunning() (running []string, reportsBroken, ok bool) { if u := wkr.instance.RemoteUser(); u != "root" { cmd = "sudo " + cmd } + before := time.Now() stdout, stderr, err := wkr.executor.Execute(nil, cmd, nil) if err != nil { wkr.logger.WithFields(logrus.Fields{ @@ -383,8 +384,10 @@ func (wkr *worker) probeRunning() (running []string, reportsBroken, ok bool) { "stdout": string(stdout), "stderr": string(stderr), }).WithError(err).Warn("probe failed") + wkr.wp.mRunProbeDuration.WithLabelValues("fail").Observe(time.Now().Sub(before).Seconds()) return } + wkr.wp.mRunProbeDuration.WithLabelValues("success").Observe(time.Now().Sub(before).Seconds()) ok = true staleRunLock := false diff --git a/lib/dispatchcloud/worker/worker_test.go b/lib/dispatchcloud/worker/worker_test.go index a4c2a6370f..cfb7a1bfb7 100644 --- a/lib/dispatchcloud/worker/worker_test.go +++ b/lib/dispatchcloud/worker/worker_test.go @@ -17,6 +17,7 @@ import ( "git.arvados.org/arvados.git/lib/dispatchcloud/test" "git.arvados.org/arvados.git/sdk/go/arvados" "git.arvados.org/arvados.git/sdk/go/ctxlog" + "github.com/prometheus/client_golang/prometheus" check "gopkg.in/check.v1" ) @@ -239,6 +240,7 @@ func (suite *WorkerSuite) TestProbeAndUpdate(c *check.C) { runnerData: trial.deployRunner, runnerMD5: md5.Sum(trial.deployRunner), } + wp.registerMetrics(prometheus.NewRegistry()) if trial.deployRunner != nil { svHash := md5.Sum(trial.deployRunner) wp.runnerCmd = fmt.Sprintf("/var/run/arvados/crunch-run~%x", svHash) diff --git a/lib/install/deps.go b/lib/install/deps.go index 93a0ce452b..4378023158 100644 --- a/lib/install/deps.go +++ b/lib/install/deps.go @@ -144,6 +144,11 @@ func (installCommand) RunCommand(prog string, args []string, stdin io.Reader, st "python3-dev", "r-base", "r-cran-testthat", + "r-cran-devtools", + "r-cran-knitr", + "r-cran-markdown", + "r-cran-roxygen2", + "r-cran-xml", "sudo", "python3-virtualenv", "python3-venv", diff --git a/sdk/R/DESCRIPTION b/sdk/R/DESCRIPTION index 878a709014..75ac892b4b 100644 --- a/sdk/R/DESCRIPTION +++ b/sdk/R/DESCRIPTION @@ -1,9 +1,9 @@ Package: ArvadosR Type: Package Title: Arvados R SDK -Version: 0.0.5 -Authors@R: person("Fuad", "Muhic", role = c("aut", "cre"), email = "fmuhic@capeannenterprises.com") -Maintainer: Ward Vandewege +Version: 0.0.6 +Authors@R: c(person("Fuad", "Muhic", role = c("aut", "ctr"), email = "fmuhic@capeannenterprises.com"), + person("Peter", "Amstutz", role = c("cre"), email = "peter.amstutz@curii.com")) Description: This is the Arvados R SDK URL: http://doc.arvados.org License: Apache-2.0 diff --git a/sdk/R/R/Arvados.R b/sdk/R/R/Arvados.R index 744cb3c296..528a606650 100644 --- a/sdk/R/R/Arvados.R +++ b/sdk/R/R/Arvados.R @@ -1,130 +1,60 @@ -#' users.get -#' -#' users.get is a method defined in Arvados class. -#' -#' @usage arv$users.get(uuid) -#' @param uuid The UUID of the User in question. -#' @return User object. -#' @name users.get -NULL - -#' users.create -#' -#' users.create is a method defined in Arvados class. -#' -#' @usage arv$users.create(user, ensure_unique_name = "false") -#' @param user User object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return User object. -#' @name users.create -NULL - -#' users.update -#' -#' users.update is a method defined in Arvados class. -#' -#' @usage arv$users.update(user, uuid) -#' @param user User object. -#' @param uuid The UUID of the User in question. -#' @return User object. -#' @name users.update -NULL - -#' users.delete -#' -#' users.delete is a method defined in Arvados class. -#' -#' @usage arv$users.delete(uuid) -#' @param uuid The UUID of the User in question. -#' @return User object. -#' @name users.delete -NULL - -#' users.current -#' -#' users.current is a method defined in Arvados class. -#' -#' @usage arv$users.current(NULL) -#' @return User object. -#' @name users.current -NULL - -#' users.system -#' -#' users.system is a method defined in Arvados class. -#' -#' @usage arv$users.system(NULL) -#' @return User object. -#' @name users.system -NULL - -#' users.activate -#' -#' users.activate is a method defined in Arvados class. -#' -#' @usage arv$users.activate(uuid) -#' @param uuid -#' @return User object. -#' @name users.activate -NULL +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 -#' users.setup +#' api_clients.get #' -#' users.setup is a method defined in Arvados class. +#' api_clients.get is a method defined in Arvados class. #' -#' @usage arv$users.setup(user = NULL, openid_prefix = NULL, -#' repo_name = NULL, vm_uuid = NULL, send_notification_email = "false") -#' @param user -#' @param openid_prefix -#' @param repo_name -#' @param vm_uuid -#' @param send_notification_email -#' @return User object. -#' @name users.setup +#' @usage arv$api_clients.get(uuid) +#' @param uuid The UUID of the ApiClient in question. +#' @return ApiClient object. +#' @name api_clients.get NULL -#' users.unsetup +#' api_clients.create #' -#' users.unsetup is a method defined in Arvados class. +#' api_clients.create is a method defined in Arvados class. #' -#' @usage arv$users.unsetup(uuid) -#' @param uuid -#' @return User object. -#' @name users.unsetup +#' @usage arv$api_clients.create(apiclient, +#' ensure_unique_name = "false", cluster_id = NULL) +#' @param apiClient ApiClient object. +#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return ApiClient object. +#' @name api_clients.create NULL -#' users.update_uuid +#' api_clients.update #' -#' users.update_uuid is a method defined in Arvados class. +#' api_clients.update is a method defined in Arvados class. #' -#' @usage arv$users.update_uuid(uuid, new_uuid) -#' @param uuid -#' @param new_uuid -#' @return User object. -#' @name users.update_uuid +#' @usage arv$api_clients.update(apiclient, +#' uuid) +#' @param apiClient ApiClient object. +#' @param uuid The UUID of the ApiClient in question. +#' @return ApiClient object. +#' @name api_clients.update NULL -#' users.merge +#' api_clients.delete #' -#' users.merge is a method defined in Arvados class. +#' api_clients.delete is a method defined in Arvados class. #' -#' @usage arv$users.merge(new_owner_uuid, -#' new_user_token, redirect_to_new_user = NULL) -#' @param new_owner_uuid -#' @param new_user_token -#' @param redirect_to_new_user -#' @return User object. -#' @name users.merge +#' @usage arv$api_clients.delete(uuid) +#' @param uuid The UUID of the ApiClient in question. +#' @return ApiClient object. +#' @name api_clients.delete NULL -#' users.list +#' api_clients.list #' -#' users.list is a method defined in Arvados class. +#' api_clients.list is a method defined in Arvados class. #' -#' @usage arv$users.list(filters = NULL, +#' @usage arv$api_clients.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL) #' @param filters #' @param where #' @param order @@ -133,8 +63,10 @@ NULL #' @param limit #' @param offset #' @param count -#' @return UserList object. -#' @name users.list +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @return ApiClientList object. +#' @name api_clients.list NULL #' api_client_authorizations.get @@ -152,9 +84,10 @@ NULL #' api_client_authorizations.create is a method defined in Arvados class. #' #' @usage arv$api_client_authorizations.create(apiclientauthorization, -#' ensure_unique_name = "false") +#' ensure_unique_name = "false", cluster_id = NULL) #' @param apiClientAuthorization ApiClientAuthorization object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. +#' @param cluster_id Create object on a remote federated cluster instead of the current one. #' @return ApiClientAuthorization object. #' @name api_client_authorizations.create NULL @@ -209,7 +142,7 @@ NULL #' @usage arv$api_client_authorizations.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL) #' @param filters #' @param where #' @param order @@ -218,111 +151,173 @@ NULL #' @param limit #' @param offset #' @param count +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only #' @return ApiClientAuthorizationList object. #' @name api_client_authorizations.list NULL -#' containers.get +#' authorized_keys.get #' -#' containers.get is a method defined in Arvados class. +#' authorized_keys.get is a method defined in Arvados class. #' -#' @usage arv$containers.get(uuid) -#' @param uuid The UUID of the Container in question. -#' @return Container object. -#' @name containers.get +#' @usage arv$authorized_keys.get(uuid) +#' @param uuid The UUID of the AuthorizedKey in question. +#' @return AuthorizedKey object. +#' @name authorized_keys.get NULL -#' containers.create +#' authorized_keys.create #' -#' containers.create is a method defined in Arvados class. +#' authorized_keys.create is a method defined in Arvados class. #' -#' @usage arv$containers.create(container, -#' ensure_unique_name = "false") -#' @param container Container object. +#' @usage arv$authorized_keys.create(authorizedkey, +#' ensure_unique_name = "false", cluster_id = NULL) +#' @param authorizedKey AuthorizedKey object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return Container object. -#' @name containers.create +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return AuthorizedKey object. +#' @name authorized_keys.create NULL -#' containers.update +#' authorized_keys.update #' -#' containers.update is a method defined in Arvados class. +#' authorized_keys.update is a method defined in Arvados class. #' -#' @usage arv$containers.update(container, +#' @usage arv$authorized_keys.update(authorizedkey, #' uuid) -#' @param container Container object. -#' @param uuid The UUID of the Container in question. -#' @return Container object. -#' @name containers.update +#' @param authorizedKey AuthorizedKey object. +#' @param uuid The UUID of the AuthorizedKey in question. +#' @return AuthorizedKey object. +#' @name authorized_keys.update NULL -#' containers.delete +#' authorized_keys.delete #' -#' containers.delete is a method defined in Arvados class. +#' authorized_keys.delete is a method defined in Arvados class. #' -#' @usage arv$containers.delete(uuid) -#' @param uuid The UUID of the Container in question. -#' @return Container object. -#' @name containers.delete +#' @usage arv$authorized_keys.delete(uuid) +#' @param uuid The UUID of the AuthorizedKey in question. +#' @return AuthorizedKey object. +#' @name authorized_keys.delete NULL -#' containers.auth +#' authorized_keys.list #' -#' containers.auth is a method defined in Arvados class. +#' authorized_keys.list is a method defined in Arvados class. #' -#' @usage arv$containers.auth(uuid) -#' @param uuid -#' @return Container object. -#' @name containers.auth +#' @usage arv$authorized_keys.list(filters = NULL, +#' where = NULL, order = NULL, select = NULL, +#' distinct = NULL, limit = "100", offset = "0", +#' count = "exact", cluster_id = NULL, bypass_federation = NULL) +#' @param filters +#' @param where +#' @param order +#' @param select +#' @param distinct +#' @param limit +#' @param offset +#' @param count +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @return AuthorizedKeyList object. +#' @name authorized_keys.list NULL -#' containers.lock +#' collections.get #' -#' containers.lock is a method defined in Arvados class. +#' collections.get is a method defined in Arvados class. #' -#' @usage arv$containers.lock(uuid) -#' @param uuid -#' @return Container object. -#' @name containers.lock +#' @usage arv$collections.get(uuid) +#' @param uuid The UUID of the Collection in question. +#' @return Collection object. +#' @name collections.get NULL -#' containers.unlock +#' collections.create #' -#' containers.unlock is a method defined in Arvados class. +#' collections.create is a method defined in Arvados class. #' -#' @usage arv$containers.unlock(uuid) -#' @param uuid -#' @return Container object. -#' @name containers.unlock +#' @usage arv$collections.create(collection, +#' ensure_unique_name = "false", cluster_id = NULL) +#' @param collection Collection object. +#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return Collection object. +#' @name collections.create NULL -#' containers.secret_mounts +#' collections.update #' -#' containers.secret_mounts is a method defined in Arvados class. +#' collections.update is a method defined in Arvados class. #' -#' @usage arv$containers.secret_mounts(uuid) -#' @param uuid -#' @return Container object. -#' @name containers.secret_mounts +#' @usage arv$collections.update(collection, +#' uuid) +#' @param collection Collection object. +#' @param uuid The UUID of the Collection in question. +#' @return Collection object. +#' @name collections.update NULL -#' containers.current +#' collections.delete #' -#' containers.current is a method defined in Arvados class. +#' collections.delete is a method defined in Arvados class. #' -#' @usage arv$containers.current(NULL) -#' @return Container object. -#' @name containers.current +#' @usage arv$collections.delete(uuid) +#' @param uuid The UUID of the Collection in question. +#' @return Collection object. +#' @name collections.delete NULL -#' containers.list +#' collections.provenance #' -#' containers.list is a method defined in Arvados class. +#' collections.provenance is a method defined in Arvados class. #' -#' @usage arv$containers.list(filters = NULL, +#' @usage arv$collections.provenance(uuid) +#' @param uuid +#' @return Collection object. +#' @name collections.provenance +NULL + +#' collections.used_by +#' +#' collections.used_by is a method defined in Arvados class. +#' +#' @usage arv$collections.used_by(uuid) +#' @param uuid +#' @return Collection object. +#' @name collections.used_by +NULL + +#' collections.trash +#' +#' collections.trash is a method defined in Arvados class. +#' +#' @usage arv$collections.trash(uuid) +#' @param uuid +#' @return Collection object. +#' @name collections.trash +NULL + +#' collections.untrash +#' +#' collections.untrash is a method defined in Arvados class. +#' +#' @usage arv$collections.untrash(uuid) +#' @param uuid +#' @return Collection object. +#' @name collections.untrash +NULL + +#' collections.list +#' +#' collections.list is a method defined in Arvados class. +#' +#' @usage arv$collections.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL, +#' include_trash = NULL, include_old_versions = NULL) #' @param filters #' @param where #' @param order @@ -331,62 +326,116 @@ NULL #' @param limit #' @param offset #' @param count -#' @return ContainerList object. -#' @name containers.list +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @param include_trash Include collections whose is_trashed attribute is true. +#' @param include_old_versions Include past collection versions. +#' @return CollectionList object. +#' @name collections.list NULL -#' api_clients.get +#' containers.get #' -#' api_clients.get is a method defined in Arvados class. +#' containers.get is a method defined in Arvados class. #' -#' @usage arv$api_clients.get(uuid) -#' @param uuid The UUID of the ApiClient in question. -#' @return ApiClient object. -#' @name api_clients.get +#' @usage arv$containers.get(uuid) +#' @param uuid The UUID of the Container in question. +#' @return Container object. +#' @name containers.get NULL -#' api_clients.create +#' containers.create #' -#' api_clients.create is a method defined in Arvados class. +#' containers.create is a method defined in Arvados class. #' -#' @usage arv$api_clients.create(apiclient, -#' ensure_unique_name = "false") -#' @param apiClient ApiClient object. +#' @usage arv$containers.create(container, +#' ensure_unique_name = "false", cluster_id = NULL) +#' @param container Container object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return ApiClient object. -#' @name api_clients.create +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return Container object. +#' @name containers.create NULL -#' api_clients.update +#' containers.update #' -#' api_clients.update is a method defined in Arvados class. +#' containers.update is a method defined in Arvados class. #' -#' @usage arv$api_clients.update(apiclient, +#' @usage arv$containers.update(container, #' uuid) -#' @param apiClient ApiClient object. -#' @param uuid The UUID of the ApiClient in question. -#' @return ApiClient object. -#' @name api_clients.update +#' @param container Container object. +#' @param uuid The UUID of the Container in question. +#' @return Container object. +#' @name containers.update NULL -#' api_clients.delete +#' containers.delete #' -#' api_clients.delete is a method defined in Arvados class. +#' containers.delete is a method defined in Arvados class. #' -#' @usage arv$api_clients.delete(uuid) -#' @param uuid The UUID of the ApiClient in question. -#' @return ApiClient object. -#' @name api_clients.delete +#' @usage arv$containers.delete(uuid) +#' @param uuid The UUID of the Container in question. +#' @return Container object. +#' @name containers.delete NULL -#' api_clients.list +#' containers.auth #' -#' api_clients.list is a method defined in Arvados class. +#' containers.auth is a method defined in Arvados class. #' -#' @usage arv$api_clients.list(filters = NULL, +#' @usage arv$containers.auth(uuid) +#' @param uuid +#' @return Container object. +#' @name containers.auth +NULL + +#' containers.lock +#' +#' containers.lock is a method defined in Arvados class. +#' +#' @usage arv$containers.lock(uuid) +#' @param uuid +#' @return Container object. +#' @name containers.lock +NULL + +#' containers.unlock +#' +#' containers.unlock is a method defined in Arvados class. +#' +#' @usage arv$containers.unlock(uuid) +#' @param uuid +#' @return Container object. +#' @name containers.unlock +NULL + +#' containers.secret_mounts +#' +#' containers.secret_mounts is a method defined in Arvados class. +#' +#' @usage arv$containers.secret_mounts(uuid) +#' @param uuid +#' @return Container object. +#' @name containers.secret_mounts +NULL + +#' containers.current +#' +#' containers.current is a method defined in Arvados class. +#' +#' @usage arv$containers.current(NULL) +#' @return Container object. +#' @name containers.current +NULL + +#' containers.list +#' +#' containers.list is a method defined in Arvados class. +#' +#' @usage arv$containers.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL) #' @param filters #' @param where #' @param order @@ -395,8 +444,10 @@ NULL #' @param limit #' @param offset #' @param count -#' @return ApiClientList object. -#' @name api_clients.list +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @return ContainerList object. +#' @name containers.list NULL #' container_requests.get @@ -414,9 +465,10 @@ NULL #' container_requests.create is a method defined in Arvados class. #' #' @usage arv$container_requests.create(containerrequest, -#' ensure_unique_name = "false") +#' ensure_unique_name = "false", cluster_id = NULL) #' @param containerRequest ContainerRequest object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. +#' @param cluster_id Create object on a remote federated cluster instead of the current one. #' @return ContainerRequest object. #' @name container_requests.create NULL @@ -450,7 +502,8 @@ NULL #' @usage arv$container_requests.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL, +#' include_trash = NULL) #' @param filters #' @param where #' @param order @@ -459,62 +512,96 @@ NULL #' @param limit #' @param offset #' @param count +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @param include_trash Include container requests whose owner project is trashed. #' @return ContainerRequestList object. #' @name container_requests.list NULL -#' authorized_keys.get +#' groups.get #' -#' authorized_keys.get is a method defined in Arvados class. +#' groups.get is a method defined in Arvados class. #' -#' @usage arv$authorized_keys.get(uuid) -#' @param uuid The UUID of the AuthorizedKey in question. -#' @return AuthorizedKey object. -#' @name authorized_keys.get +#' @usage arv$groups.get(uuid) +#' @param uuid The UUID of the Group in question. +#' @return Group object. +#' @name groups.get NULL -#' authorized_keys.create +#' groups.create #' -#' authorized_keys.create is a method defined in Arvados class. +#' groups.create is a method defined in Arvados class. #' -#' @usage arv$authorized_keys.create(authorizedkey, -#' ensure_unique_name = "false") -#' @param authorizedKey AuthorizedKey object. +#' @usage arv$groups.create(group, ensure_unique_name = "false", +#' cluster_id = NULL, async = "false") +#' @param group Group object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return AuthorizedKey object. -#' @name authorized_keys.create +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @param async defer permissions update +#' @return Group object. +#' @name groups.create NULL -#' authorized_keys.update +#' groups.update #' -#' authorized_keys.update is a method defined in Arvados class. +#' groups.update is a method defined in Arvados class. #' -#' @usage arv$authorized_keys.update(authorizedkey, -#' uuid) -#' @param authorizedKey AuthorizedKey object. -#' @param uuid The UUID of the AuthorizedKey in question. -#' @return AuthorizedKey object. -#' @name authorized_keys.update +#' @usage arv$groups.update(group, uuid, +#' async = "false") +#' @param group Group object. +#' @param uuid The UUID of the Group in question. +#' @param async defer permissions update +#' @return Group object. +#' @name groups.update NULL -#' authorized_keys.delete +#' groups.delete #' -#' authorized_keys.delete is a method defined in Arvados class. +#' groups.delete is a method defined in Arvados class. #' -#' @usage arv$authorized_keys.delete(uuid) -#' @param uuid The UUID of the AuthorizedKey in question. -#' @return AuthorizedKey object. -#' @name authorized_keys.delete +#' @usage arv$groups.delete(uuid) +#' @param uuid The UUID of the Group in question. +#' @return Group object. +#' @name groups.delete NULL -#' authorized_keys.list +#' groups.contents #' -#' authorized_keys.list is a method defined in Arvados class. +#' groups.contents is a method defined in Arvados class. #' -#' @usage arv$authorized_keys.list(filters = NULL, +#' @usage arv$groups.contents(filters = NULL, +#' where = NULL, order = NULL, distinct = NULL, +#' limit = "100", offset = "0", count = "exact", +#' cluster_id = NULL, bypass_federation = NULL, +#' include_trash = NULL, uuid = NULL, recursive = NULL, +#' include = NULL) +#' @param filters +#' @param where +#' @param order +#' @param distinct +#' @param limit +#' @param offset +#' @param count +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @param include_trash Include items whose is_trashed attribute is true. +#' @param uuid +#' @param recursive Include contents from child groups recursively. +#' @param include Include objects referred to by listed field in "included" (only owner_uuid) +#' @return Group object. +#' @name groups.contents +NULL + +#' groups.shared +#' +#' groups.shared is a method defined in Arvados class. +#' +#' @usage arv$groups.shared(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL, +#' include_trash = NULL, include = NULL) #' @param filters #' @param where #' @param order @@ -523,102 +610,120 @@ NULL #' @param limit #' @param offset #' @param count -#' @return AuthorizedKeyList object. -#' @name authorized_keys.list +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @param include_trash Include items whose is_trashed attribute is true. +#' @param include +#' @return Group object. +#' @name groups.shared NULL -#' collections.get +#' groups.trash #' -#' collections.get is a method defined in Arvados class. +#' groups.trash is a method defined in Arvados class. #' -#' @usage arv$collections.get(uuid) -#' @param uuid The UUID of the Collection in question. -#' @return Collection object. -#' @name collections.get +#' @usage arv$groups.trash(uuid) +#' @param uuid +#' @return Group object. +#' @name groups.trash NULL -#' collections.create +#' groups.untrash #' -#' collections.create is a method defined in Arvados class. +#' groups.untrash is a method defined in Arvados class. #' -#' @usage arv$collections.create(collection, -#' ensure_unique_name = "false") -#' @param collection Collection object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return Collection object. -#' @name collections.create +#' @usage arv$groups.untrash(uuid) +#' @param uuid +#' @return Group object. +#' @name groups.untrash NULL -#' collections.update +#' groups.list #' -#' collections.update is a method defined in Arvados class. +#' groups.list is a method defined in Arvados class. #' -#' @usage arv$collections.update(collection, -#' uuid) -#' @param collection Collection object. -#' @param uuid The UUID of the Collection in question. -#' @return Collection object. -#' @name collections.update +#' @usage arv$groups.list(filters = NULL, +#' where = NULL, order = NULL, select = NULL, +#' distinct = NULL, limit = "100", offset = "0", +#' count = "exact", cluster_id = NULL, bypass_federation = NULL, +#' include_trash = NULL) +#' @param filters +#' @param where +#' @param order +#' @param select +#' @param distinct +#' @param limit +#' @param offset +#' @param count +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @param include_trash Include items whose is_trashed attribute is true. +#' @return GroupList object. +#' @name groups.list NULL -#' collections.delete +#' keep_services.get #' -#' collections.delete is a method defined in Arvados class. +#' keep_services.get is a method defined in Arvados class. #' -#' @usage arv$collections.delete(uuid) -#' @param uuid The UUID of the Collection in question. -#' @return Collection object. -#' @name collections.delete +#' @usage arv$keep_services.get(uuid) +#' @param uuid The UUID of the KeepService in question. +#' @return KeepService object. +#' @name keep_services.get NULL -#' collections.provenance +#' keep_services.create #' -#' collections.provenance is a method defined in Arvados class. +#' keep_services.create is a method defined in Arvados class. #' -#' @usage arv$collections.provenance(uuid) -#' @param uuid -#' @return Collection object. -#' @name collections.provenance +#' @usage arv$keep_services.create(keepservice, +#' ensure_unique_name = "false", cluster_id = NULL) +#' @param keepService KeepService object. +#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return KeepService object. +#' @name keep_services.create NULL -#' collections.used_by +#' keep_services.update #' -#' collections.used_by is a method defined in Arvados class. +#' keep_services.update is a method defined in Arvados class. #' -#' @usage arv$collections.used_by(uuid) -#' @param uuid -#' @return Collection object. -#' @name collections.used_by +#' @usage arv$keep_services.update(keepservice, +#' uuid) +#' @param keepService KeepService object. +#' @param uuid The UUID of the KeepService in question. +#' @return KeepService object. +#' @name keep_services.update NULL -#' collections.trash +#' keep_services.delete #' -#' collections.trash is a method defined in Arvados class. +#' keep_services.delete is a method defined in Arvados class. #' -#' @usage arv$collections.trash(uuid) -#' @param uuid -#' @return Collection object. -#' @name collections.trash +#' @usage arv$keep_services.delete(uuid) +#' @param uuid The UUID of the KeepService in question. +#' @return KeepService object. +#' @name keep_services.delete NULL -#' collections.untrash +#' keep_services.accessible #' -#' collections.untrash is a method defined in Arvados class. +#' keep_services.accessible is a method defined in Arvados class. #' -#' @usage arv$collections.untrash(uuid) -#' @param uuid -#' @return Collection object. -#' @name collections.untrash +#' @usage arv$keep_services.accessible(NULL) +#' @return KeepService object. +#' @name keep_services.accessible NULL -#' collections.list +#' keep_services.list #' -#' collections.list is a method defined in Arvados class. +#' keep_services.list is a method defined in Arvados class. #' -#' @usage arv$collections.list(filters = NULL, +#' @usage arv$keep_services.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact", include_trash = NULL) +#' count = "exact", cluster_id = NULL, bypass_federation = NULL) #' @param filters #' @param where #' @param order @@ -627,61 +732,64 @@ NULL #' @param limit #' @param offset #' @param count -#' @param include_trash Include collections whose is_trashed attribute is true. -#' @return CollectionList object. -#' @name collections.list +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @return KeepServiceList object. +#' @name keep_services.list NULL -#' humans.get +#' links.get #' -#' humans.get is a method defined in Arvados class. +#' links.get is a method defined in Arvados class. #' -#' @usage arv$humans.get(uuid) -#' @param uuid The UUID of the Human in question. -#' @return Human object. -#' @name humans.get +#' @usage arv$links.get(uuid) +#' @param uuid The UUID of the Link in question. +#' @return Link object. +#' @name links.get NULL -#' humans.create +#' links.create #' -#' humans.create is a method defined in Arvados class. +#' links.create is a method defined in Arvados class. #' -#' @usage arv$humans.create(human, ensure_unique_name = "false") -#' @param human Human object. +#' @usage arv$links.create(link, ensure_unique_name = "false", +#' cluster_id = NULL) +#' @param link Link object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return Human object. -#' @name humans.create +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return Link object. +#' @name links.create NULL -#' humans.update +#' links.update #' -#' humans.update is a method defined in Arvados class. +#' links.update is a method defined in Arvados class. #' -#' @usage arv$humans.update(human, uuid) -#' @param human Human object. -#' @param uuid The UUID of the Human in question. -#' @return Human object. -#' @name humans.update +#' @usage arv$links.update(link, uuid) +#' @param link Link object. +#' @param uuid The UUID of the Link in question. +#' @return Link object. +#' @name links.update NULL -#' humans.delete +#' links.delete #' -#' humans.delete is a method defined in Arvados class. +#' links.delete is a method defined in Arvados class. #' -#' @usage arv$humans.delete(uuid) -#' @param uuid The UUID of the Human in question. -#' @return Human object. -#' @name humans.delete +#' @usage arv$links.delete(uuid) +#' @param uuid The UUID of the Link in question. +#' @return Link object. +#' @name links.delete NULL -#' humans.list +#' links.list #' -#' humans.list is a method defined in Arvados class. +#' links.list is a method defined in Arvados class. #' -#' @usage arv$humans.list(filters = NULL, +#' @usage arv$links.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL) #' @param filters #' @param where #' @param order @@ -690,60 +798,74 @@ NULL #' @param limit #' @param offset #' @param count -#' @return HumanList object. -#' @name humans.list +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @return LinkList object. +#' @name links.list +NULL + +#' links.get_permissions +#' +#' links.get_permissions is a method defined in Arvados class. +#' +#' @usage arv$links.get_permissions(uuid) +#' @param uuid +#' @return Link object. +#' @name links.get_permissions NULL -#' job_tasks.get +#' logs.get #' -#' job_tasks.get is a method defined in Arvados class. +#' logs.get is a method defined in Arvados class. #' -#' @usage arv$job_tasks.get(uuid) -#' @param uuid The UUID of the JobTask in question. -#' @return JobTask object. -#' @name job_tasks.get +#' @usage arv$logs.get(uuid) +#' @param uuid The UUID of the Log in question. +#' @return Log object. +#' @name logs.get NULL -#' job_tasks.create +#' logs.create #' -#' job_tasks.create is a method defined in Arvados class. +#' logs.create is a method defined in Arvados class. #' -#' @usage arv$job_tasks.create(jobtask, ensure_unique_name = "false") -#' @param jobTask JobTask object. +#' @usage arv$logs.create(log, ensure_unique_name = "false", +#' cluster_id = NULL) +#' @param log Log object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return JobTask object. -#' @name job_tasks.create +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return Log object. +#' @name logs.create NULL -#' job_tasks.update +#' logs.update #' -#' job_tasks.update is a method defined in Arvados class. +#' logs.update is a method defined in Arvados class. #' -#' @usage arv$job_tasks.update(jobtask, uuid) -#' @param jobTask JobTask object. -#' @param uuid The UUID of the JobTask in question. -#' @return JobTask object. -#' @name job_tasks.update +#' @usage arv$logs.update(log, uuid) +#' @param log Log object. +#' @param uuid The UUID of the Log in question. +#' @return Log object. +#' @name logs.update NULL -#' job_tasks.delete +#' logs.delete #' -#' job_tasks.delete is a method defined in Arvados class. +#' logs.delete is a method defined in Arvados class. #' -#' @usage arv$job_tasks.delete(uuid) -#' @param uuid The UUID of the JobTask in question. -#' @return JobTask object. -#' @name job_tasks.delete +#' @usage arv$logs.delete(uuid) +#' @param uuid The UUID of the Log in question. +#' @return Log object. +#' @name logs.delete NULL -#' job_tasks.list +#' logs.list #' -#' job_tasks.list is a method defined in Arvados class. +#' logs.list is a method defined in Arvados class. #' -#' @usage arv$job_tasks.list(filters = NULL, -#' where = NULL, order = NULL, select = NULL, -#' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' @usage arv$logs.list(filters = NULL, where = NULL, +#' order = NULL, select = NULL, distinct = NULL, +#' limit = "100", offset = "0", count = "exact", +#' cluster_id = NULL, bypass_federation = NULL) #' @param filters #' @param where #' @param order @@ -752,196 +874,145 @@ NULL #' @param limit #' @param offset #' @param count -#' @return JobTaskList object. -#' @name job_tasks.list +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @return LogList object. +#' @name logs.list NULL -#' jobs.get +#' users.get #' -#' jobs.get is a method defined in Arvados class. +#' users.get is a method defined in Arvados class. #' -#' @usage arv$jobs.get(uuid) -#' @param uuid The UUID of the Job in question. -#' @return Job object. -#' @name jobs.get +#' @usage arv$users.get(uuid) +#' @param uuid The UUID of the User in question. +#' @return User object. +#' @name users.get NULL -#' jobs.create +#' users.create #' -#' jobs.create is a method defined in Arvados class. +#' users.create is a method defined in Arvados class. #' -#' @usage arv$jobs.create(job, ensure_unique_name = "false", -#' find_or_create = "false", filters = NULL, -#' minimum_script_version = NULL, exclude_script_versions = NULL) -#' @param job Job object. +#' @usage arv$users.create(user, ensure_unique_name = "false", +#' cluster_id = NULL) +#' @param user User object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @param find_or_create -#' @param filters -#' @param minimum_script_version -#' @param exclude_script_versions -#' @return Job object. -#' @name jobs.create +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return User object. +#' @name users.create NULL -#' jobs.update +#' users.update #' -#' jobs.update is a method defined in Arvados class. +#' users.update is a method defined in Arvados class. #' -#' @usage arv$jobs.update(job, uuid) -#' @param job Job object. -#' @param uuid The UUID of the Job in question. -#' @return Job object. -#' @name jobs.update +#' @usage arv$users.update(user, uuid, bypass_federation = NULL) +#' @param user User object. +#' @param uuid The UUID of the User in question. +#' @param bypass_federation +#' @return User object. +#' @name users.update NULL -#' jobs.delete +#' users.delete #' -#' jobs.delete is a method defined in Arvados class. +#' users.delete is a method defined in Arvados class. #' -#' @usage arv$jobs.delete(uuid) -#' @param uuid The UUID of the Job in question. -#' @return Job object. -#' @name jobs.delete +#' @usage arv$users.delete(uuid) +#' @param uuid The UUID of the User in question. +#' @return User object. +#' @name users.delete NULL -#' jobs.queue +#' users.current #' -#' jobs.queue is a method defined in Arvados class. +#' users.current is a method defined in Arvados class. #' -#' @usage arv$jobs.queue(filters = NULL, -#' where = NULL, order = NULL, select = NULL, -#' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") -#' @param filters -#' @param where -#' @param order -#' @param select -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @return Job object. -#' @name jobs.queue +#' @usage arv$users.current(NULL) +#' @return User object. +#' @name users.current NULL -#' jobs.queue_size +#' users.system #' -#' jobs.queue_size is a method defined in Arvados class. +#' users.system is a method defined in Arvados class. #' -#' @usage arv$jobs.queue_size(NULL) -#' @return Job object. -#' @name jobs.queue_size +#' @usage arv$users.system(NULL) +#' @return User object. +#' @name users.system NULL -#' jobs.cancel +#' users.activate #' -#' jobs.cancel is a method defined in Arvados class. +#' users.activate is a method defined in Arvados class. #' -#' @usage arv$jobs.cancel(uuid) +#' @usage arv$users.activate(uuid) #' @param uuid -#' @return Job object. -#' @name jobs.cancel +#' @return User object. +#' @name users.activate NULL -#' jobs.lock +#' users.setup #' -#' jobs.lock is a method defined in Arvados class. +#' users.setup is a method defined in Arvados class. #' -#' @usage arv$jobs.lock(uuid) +#' @usage arv$users.setup(uuid = NULL, user = NULL, +#' repo_name = NULL, vm_uuid = NULL, send_notification_email = "false") #' @param uuid -#' @return Job object. -#' @name jobs.lock +#' @param user +#' @param repo_name +#' @param vm_uuid +#' @param send_notification_email +#' @return User object. +#' @name users.setup NULL -#' jobs.list +#' users.unsetup #' -#' jobs.list is a method defined in Arvados class. +#' users.unsetup is a method defined in Arvados class. #' -#' @usage arv$jobs.list(filters = NULL, where = NULL, -#' order = NULL, select = NULL, distinct = NULL, -#' limit = "100", offset = "0", count = "exact") -#' @param filters -#' @param where -#' @param order -#' @param select -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @return JobList object. -#' @name jobs.list +#' @usage arv$users.unsetup(uuid) +#' @param uuid +#' @return User object. +#' @name users.unsetup NULL -#' keep_disks.get +#' users.update_uuid #' -#' keep_disks.get is a method defined in Arvados class. +#' users.update_uuid is a method defined in Arvados class. #' -#' @usage arv$keep_disks.get(uuid) -#' @param uuid The UUID of the KeepDisk in question. -#' @return KeepDisk object. -#' @name keep_disks.get +#' @usage arv$users.update_uuid(uuid, new_uuid) +#' @param uuid +#' @param new_uuid +#' @return User object. +#' @name users.update_uuid NULL -#' keep_disks.create +#' users.merge #' -#' keep_disks.create is a method defined in Arvados class. +#' users.merge is a method defined in Arvados class. #' -#' @usage arv$keep_disks.create(keepdisk, -#' ensure_unique_name = "false") -#' @param keepDisk KeepDisk object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return KeepDisk object. -#' @name keep_disks.create -NULL - -#' keep_disks.update -#' -#' keep_disks.update is a method defined in Arvados class. -#' -#' @usage arv$keep_disks.update(keepdisk, -#' uuid) -#' @param keepDisk KeepDisk object. -#' @param uuid The UUID of the KeepDisk in question. -#' @return KeepDisk object. -#' @name keep_disks.update -NULL - -#' keep_disks.delete -#' -#' keep_disks.delete is a method defined in Arvados class. -#' -#' @usage arv$keep_disks.delete(uuid) -#' @param uuid The UUID of the KeepDisk in question. -#' @return KeepDisk object. -#' @name keep_disks.delete -NULL - -#' keep_disks.ping -#' -#' keep_disks.ping is a method defined in Arvados class. -#' -#' @usage arv$keep_disks.ping(uuid = NULL, -#' ping_secret, node_uuid = NULL, filesystem_uuid = NULL, -#' service_host = NULL, service_port, service_ssl_flag) -#' @param uuid -#' @param ping_secret -#' @param node_uuid -#' @param filesystem_uuid -#' @param service_host -#' @param service_port -#' @param service_ssl_flag -#' @return KeepDisk object. -#' @name keep_disks.ping +#' @usage arv$users.merge(new_owner_uuid, +#' new_user_token = NULL, redirect_to_new_user = NULL, +#' old_user_uuid = NULL, new_user_uuid = NULL) +#' @param new_owner_uuid +#' @param new_user_token +#' @param redirect_to_new_user +#' @param old_user_uuid +#' @param new_user_uuid +#' @return User object. +#' @name users.merge NULL -#' keep_disks.list +#' users.list #' -#' keep_disks.list is a method defined in Arvados class. +#' users.list is a method defined in Arvados class. #' -#' @usage arv$keep_disks.list(filters = NULL, +#' @usage arv$users.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL) #' @param filters #' @param where #' @param order @@ -950,74 +1021,74 @@ NULL #' @param limit #' @param offset #' @param count -#' @return KeepDiskList object. -#' @name keep_disks.list +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @return UserList object. +#' @name users.list NULL -#' nodes.get +#' repositories.get #' -#' nodes.get is a method defined in Arvados class. +#' repositories.get is a method defined in Arvados class. #' -#' @usage arv$nodes.get(uuid) -#' @param uuid The UUID of the Node in question. -#' @return Node object. -#' @name nodes.get +#' @usage arv$repositories.get(uuid) +#' @param uuid The UUID of the Repository in question. +#' @return Repository object. +#' @name repositories.get NULL -#' nodes.create +#' repositories.create #' -#' nodes.create is a method defined in Arvados class. +#' repositories.create is a method defined in Arvados class. #' -#' @usage arv$nodes.create(node, ensure_unique_name = "false", -#' assign_slot = NULL) -#' @param node Node object. +#' @usage arv$repositories.create(repository, +#' ensure_unique_name = "false", cluster_id = NULL) +#' @param repository Repository object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @param assign_slot assign slot and hostname -#' @return Node object. -#' @name nodes.create +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return Repository object. +#' @name repositories.create NULL -#' nodes.update +#' repositories.update #' -#' nodes.update is a method defined in Arvados class. +#' repositories.update is a method defined in Arvados class. #' -#' @usage arv$nodes.update(node, uuid, assign_slot = NULL) -#' @param node Node object. -#' @param uuid The UUID of the Node in question. -#' @param assign_slot assign slot and hostname -#' @return Node object. -#' @name nodes.update +#' @usage arv$repositories.update(repository, +#' uuid) +#' @param repository Repository object. +#' @param uuid The UUID of the Repository in question. +#' @return Repository object. +#' @name repositories.update NULL -#' nodes.delete +#' repositories.delete #' -#' nodes.delete is a method defined in Arvados class. +#' repositories.delete is a method defined in Arvados class. #' -#' @usage arv$nodes.delete(uuid) -#' @param uuid The UUID of the Node in question. -#' @return Node object. -#' @name nodes.delete +#' @usage arv$repositories.delete(uuid) +#' @param uuid The UUID of the Repository in question. +#' @return Repository object. +#' @name repositories.delete NULL -#' nodes.ping +#' repositories.get_all_permissions #' -#' nodes.ping is a method defined in Arvados class. +#' repositories.get_all_permissions is a method defined in Arvados class. #' -#' @usage arv$nodes.ping(uuid, ping_secret) -#' @param uuid -#' @param ping_secret -#' @return Node object. -#' @name nodes.ping +#' @usage arv$repositories.get_all_permissions(NULL) +#' @return Repository object. +#' @name repositories.get_all_permissions NULL -#' nodes.list +#' repositories.list #' -#' nodes.list is a method defined in Arvados class. +#' repositories.list is a method defined in Arvados class. #' -#' @usage arv$nodes.list(filters = NULL, +#' @usage arv$repositories.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL) #' @param filters #' @param where #' @param order @@ -1026,143 +1097,84 @@ NULL #' @param limit #' @param offset #' @param count -#' @return NodeList object. -#' @name nodes.list +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @return RepositoryList object. +#' @name repositories.list NULL -#' links.get +#' virtual_machines.get #' -#' links.get is a method defined in Arvados class. +#' virtual_machines.get is a method defined in Arvados class. #' -#' @usage arv$links.get(uuid) -#' @param uuid The UUID of the Link in question. -#' @return Link object. -#' @name links.get +#' @usage arv$virtual_machines.get(uuid) +#' @param uuid The UUID of the VirtualMachine in question. +#' @return VirtualMachine object. +#' @name virtual_machines.get NULL -#' links.create +#' virtual_machines.create #' -#' links.create is a method defined in Arvados class. +#' virtual_machines.create is a method defined in Arvados class. #' -#' @usage arv$links.create(link, ensure_unique_name = "false") -#' @param link Link object. +#' @usage arv$virtual_machines.create(virtualmachine, +#' ensure_unique_name = "false", cluster_id = NULL) +#' @param virtualMachine VirtualMachine object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return Link object. -#' @name links.create -NULL - -#' links.update -#' -#' links.update is a method defined in Arvados class. -#' -#' @usage arv$links.update(link, uuid) -#' @param link Link object. -#' @param uuid The UUID of the Link in question. -#' @return Link object. -#' @name links.update +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return VirtualMachine object. +#' @name virtual_machines.create NULL -#' links.delete +#' virtual_machines.update #' -#' links.delete is a method defined in Arvados class. +#' virtual_machines.update is a method defined in Arvados class. #' -#' @usage arv$links.delete(uuid) -#' @param uuid The UUID of the Link in question. -#' @return Link object. -#' @name links.delete +#' @usage arv$virtual_machines.update(virtualmachine, +#' uuid) +#' @param virtualMachine VirtualMachine object. +#' @param uuid The UUID of the VirtualMachine in question. +#' @return VirtualMachine object. +#' @name virtual_machines.update NULL -#' links.list +#' virtual_machines.delete #' -#' links.list is a method defined in Arvados class. +#' virtual_machines.delete is a method defined in Arvados class. #' -#' @usage arv$links.list(filters = NULL, -#' where = NULL, order = NULL, select = NULL, -#' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") -#' @param filters -#' @param where -#' @param order -#' @param select -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @return LinkList object. -#' @name links.list +#' @usage arv$virtual_machines.delete(uuid) +#' @param uuid The UUID of the VirtualMachine in question. +#' @return VirtualMachine object. +#' @name virtual_machines.delete NULL -#' links.get_permissions +#' virtual_machines.logins #' -#' links.get_permissions is a method defined in Arvados class. +#' virtual_machines.logins is a method defined in Arvados class. #' -#' @usage arv$links.get_permissions(uuid) +#' @usage arv$virtual_machines.logins(uuid) #' @param uuid -#' @return Link object. -#' @name links.get_permissions -NULL - -#' keep_services.get -#' -#' keep_services.get is a method defined in Arvados class. -#' -#' @usage arv$keep_services.get(uuid) -#' @param uuid The UUID of the KeepService in question. -#' @return KeepService object. -#' @name keep_services.get -NULL - -#' keep_services.create -#' -#' keep_services.create is a method defined in Arvados class. -#' -#' @usage arv$keep_services.create(keepservice, -#' ensure_unique_name = "false") -#' @param keepService KeepService object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return KeepService object. -#' @name keep_services.create -NULL - -#' keep_services.update -#' -#' keep_services.update is a method defined in Arvados class. -#' -#' @usage arv$keep_services.update(keepservice, -#' uuid) -#' @param keepService KeepService object. -#' @param uuid The UUID of the KeepService in question. -#' @return KeepService object. -#' @name keep_services.update -NULL - -#' keep_services.delete -#' -#' keep_services.delete is a method defined in Arvados class. -#' -#' @usage arv$keep_services.delete(uuid) -#' @param uuid The UUID of the KeepService in question. -#' @return KeepService object. -#' @name keep_services.delete +#' @return VirtualMachine object. +#' @name virtual_machines.logins NULL -#' keep_services.accessible +#' virtual_machines.get_all_logins #' -#' keep_services.accessible is a method defined in Arvados class. +#' virtual_machines.get_all_logins is a method defined in Arvados class. #' -#' @usage arv$keep_services.accessible(NULL) -#' @return KeepService object. -#' @name keep_services.accessible +#' @usage arv$virtual_machines.get_all_logins(NULL) +#' @return VirtualMachine object. +#' @name virtual_machines.get_all_logins NULL -#' keep_services.list +#' virtual_machines.list #' -#' keep_services.list is a method defined in Arvados class. +#' virtual_machines.list is a method defined in Arvados class. #' -#' @usage arv$keep_services.list(filters = NULL, +#' @usage arv$virtual_machines.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL) #' @param filters #' @param where #' @param order @@ -1171,62 +1183,65 @@ NULL #' @param limit #' @param offset #' @param count -#' @return KeepServiceList object. -#' @name keep_services.list +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @return VirtualMachineList object. +#' @name virtual_machines.list NULL -#' pipeline_templates.get +#' workflows.get #' -#' pipeline_templates.get is a method defined in Arvados class. +#' workflows.get is a method defined in Arvados class. #' -#' @usage arv$pipeline_templates.get(uuid) -#' @param uuid The UUID of the PipelineTemplate in question. -#' @return PipelineTemplate object. -#' @name pipeline_templates.get +#' @usage arv$workflows.get(uuid) +#' @param uuid The UUID of the Workflow in question. +#' @return Workflow object. +#' @name workflows.get NULL -#' pipeline_templates.create +#' workflows.create #' -#' pipeline_templates.create is a method defined in Arvados class. +#' workflows.create is a method defined in Arvados class. #' -#' @usage arv$pipeline_templates.create(pipelinetemplate, -#' ensure_unique_name = "false") -#' @param pipelineTemplate PipelineTemplate object. +#' @usage arv$workflows.create(workflow, +#' ensure_unique_name = "false", cluster_id = NULL) +#' @param workflow Workflow object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return PipelineTemplate object. -#' @name pipeline_templates.create +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return Workflow object. +#' @name workflows.create NULL -#' pipeline_templates.update +#' workflows.update #' -#' pipeline_templates.update is a method defined in Arvados class. +#' workflows.update is a method defined in Arvados class. #' -#' @usage arv$pipeline_templates.update(pipelinetemplate, +#' @usage arv$workflows.update(workflow, #' uuid) -#' @param pipelineTemplate PipelineTemplate object. -#' @param uuid The UUID of the PipelineTemplate in question. -#' @return PipelineTemplate object. -#' @name pipeline_templates.update +#' @param workflow Workflow object. +#' @param uuid The UUID of the Workflow in question. +#' @return Workflow object. +#' @name workflows.update NULL -#' pipeline_templates.delete +#' workflows.delete #' -#' pipeline_templates.delete is a method defined in Arvados class. +#' workflows.delete is a method defined in Arvados class. #' -#' @usage arv$pipeline_templates.delete(uuid) -#' @param uuid The UUID of the PipelineTemplate in question. -#' @return PipelineTemplate object. -#' @name pipeline_templates.delete +#' @usage arv$workflows.delete(uuid) +#' @param uuid The UUID of the Workflow in question. +#' @return Workflow object. +#' @name workflows.delete NULL -#' pipeline_templates.list +#' workflows.list #' -#' pipeline_templates.list is a method defined in Arvados class. +#' workflows.list is a method defined in Arvados class. #' -#' @usage arv$pipeline_templates.list(filters = NULL, +#' @usage arv$workflows.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL) #' @param filters #' @param where #' @param order @@ -1235,209 +1250,83 @@ NULL #' @param limit #' @param offset #' @param count -#' @return PipelineTemplateList object. -#' @name pipeline_templates.list +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @return WorkflowList object. +#' @name workflows.list NULL -#' pipeline_instances.get +#' user_agreements.get #' -#' pipeline_instances.get is a method defined in Arvados class. +#' user_agreements.get is a method defined in Arvados class. #' -#' @usage arv$pipeline_instances.get(uuid) -#' @param uuid The UUID of the PipelineInstance in question. -#' @return PipelineInstance object. -#' @name pipeline_instances.get +#' @usage arv$user_agreements.get(uuid) +#' @param uuid The UUID of the UserAgreement in question. +#' @return UserAgreement object. +#' @name user_agreements.get NULL -#' pipeline_instances.create +#' user_agreements.create #' -#' pipeline_instances.create is a method defined in Arvados class. +#' user_agreements.create is a method defined in Arvados class. #' -#' @usage arv$pipeline_instances.create(pipelineinstance, -#' ensure_unique_name = "false") -#' @param pipelineInstance PipelineInstance object. +#' @usage arv$user_agreements.create(useragreement, +#' ensure_unique_name = "false", cluster_id = NULL) +#' @param userAgreement UserAgreement object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return PipelineInstance object. -#' @name pipeline_instances.create +#' @param cluster_id Create object on a remote federated cluster instead of the current one. +#' @return UserAgreement object. +#' @name user_agreements.create NULL -#' pipeline_instances.update +#' user_agreements.update #' -#' pipeline_instances.update is a method defined in Arvados class. +#' user_agreements.update is a method defined in Arvados class. #' -#' @usage arv$pipeline_instances.update(pipelineinstance, +#' @usage arv$user_agreements.update(useragreement, #' uuid) -#' @param pipelineInstance PipelineInstance object. -#' @param uuid The UUID of the PipelineInstance in question. -#' @return PipelineInstance object. -#' @name pipeline_instances.update +#' @param userAgreement UserAgreement object. +#' @param uuid The UUID of the UserAgreement in question. +#' @return UserAgreement object. +#' @name user_agreements.update NULL -#' pipeline_instances.delete +#' user_agreements.delete #' -#' pipeline_instances.delete is a method defined in Arvados class. +#' user_agreements.delete is a method defined in Arvados class. #' -#' @usage arv$pipeline_instances.delete(uuid) -#' @param uuid The UUID of the PipelineInstance in question. -#' @return PipelineInstance object. -#' @name pipeline_instances.delete -NULL - -#' pipeline_instances.cancel -#' -#' pipeline_instances.cancel is a method defined in Arvados class. -#' -#' @usage arv$pipeline_instances.cancel(uuid) -#' @param uuid -#' @return PipelineInstance object. -#' @name pipeline_instances.cancel -NULL - -#' pipeline_instances.list -#' -#' pipeline_instances.list is a method defined in Arvados class. -#' -#' @usage arv$pipeline_instances.list(filters = NULL, -#' where = NULL, order = NULL, select = NULL, -#' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") -#' @param filters -#' @param where -#' @param order -#' @param select -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @return PipelineInstanceList object. -#' @name pipeline_instances.list -NULL - -#' repositories.get -#' -#' repositories.get is a method defined in Arvados class. -#' -#' @usage arv$repositories.get(uuid) -#' @param uuid The UUID of the Repository in question. -#' @return Repository object. -#' @name repositories.get -NULL - -#' repositories.create -#' -#' repositories.create is a method defined in Arvados class. -#' -#' @usage arv$repositories.create(repository, -#' ensure_unique_name = "false") -#' @param repository Repository object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return Repository object. -#' @name repositories.create -NULL - -#' repositories.update -#' -#' repositories.update is a method defined in Arvados class. -#' -#' @usage arv$repositories.update(repository, -#' uuid) -#' @param repository Repository object. -#' @param uuid The UUID of the Repository in question. -#' @return Repository object. -#' @name repositories.update -NULL - -#' repositories.delete -#' -#' repositories.delete is a method defined in Arvados class. -#' -#' @usage arv$repositories.delete(uuid) -#' @param uuid The UUID of the Repository in question. -#' @return Repository object. -#' @name repositories.delete -NULL - -#' repositories.get_all_permissions -#' -#' repositories.get_all_permissions is a method defined in Arvados class. -#' -#' @usage arv$repositories.get_all_permissions(NULL) -#' @return Repository object. -#' @name repositories.get_all_permissions -NULL - -#' repositories.list -#' -#' repositories.list is a method defined in Arvados class. -#' -#' @usage arv$repositories.list(filters = NULL, -#' where = NULL, order = NULL, select = NULL, -#' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") -#' @param filters -#' @param where -#' @param order -#' @param select -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @return RepositoryList object. -#' @name repositories.list -NULL - -#' specimens.get -#' -#' specimens.get is a method defined in Arvados class. -#' -#' @usage arv$specimens.get(uuid) -#' @param uuid The UUID of the Specimen in question. -#' @return Specimen object. -#' @name specimens.get -NULL - -#' specimens.create -#' -#' specimens.create is a method defined in Arvados class. -#' -#' @usage arv$specimens.create(specimen, -#' ensure_unique_name = "false") -#' @param specimen Specimen object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return Specimen object. -#' @name specimens.create +#' @usage arv$user_agreements.delete(uuid) +#' @param uuid The UUID of the UserAgreement in question. +#' @return UserAgreement object. +#' @name user_agreements.delete NULL -#' specimens.update +#' user_agreements.signatures #' -#' specimens.update is a method defined in Arvados class. +#' user_agreements.signatures is a method defined in Arvados class. #' -#' @usage arv$specimens.update(specimen, -#' uuid) -#' @param specimen Specimen object. -#' @param uuid The UUID of the Specimen in question. -#' @return Specimen object. -#' @name specimens.update +#' @usage arv$user_agreements.signatures(NULL) +#' @return UserAgreement object. +#' @name user_agreements.signatures NULL -#' specimens.delete +#' user_agreements.sign #' -#' specimens.delete is a method defined in Arvados class. +#' user_agreements.sign is a method defined in Arvados class. #' -#' @usage arv$specimens.delete(uuid) -#' @param uuid The UUID of the Specimen in question. -#' @return Specimen object. -#' @name specimens.delete +#' @usage arv$user_agreements.sign(NULL) +#' @return UserAgreement object. +#' @name user_agreements.sign NULL -#' specimens.list +#' user_agreements.list #' -#' specimens.list is a method defined in Arvados class. +#' user_agreements.list is a method defined in Arvados class. #' -#' @usage arv$specimens.list(filters = NULL, +#' @usage arv$user_agreements.list(filters = NULL, #' where = NULL, order = NULL, select = NULL, #' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' count = "exact", cluster_id = NULL, bypass_federation = NULL) #' @param filters #' @param where #' @param order @@ -1446,1774 +1335,312 @@ NULL #' @param limit #' @param offset #' @param count -#' @return SpecimenList object. -#' @name specimens.list -NULL - -#' logs.get -#' -#' logs.get is a method defined in Arvados class. -#' -#' @usage arv$logs.get(uuid) -#' @param uuid The UUID of the Log in question. -#' @return Log object. -#' @name logs.get -NULL - -#' logs.create -#' -#' logs.create is a method defined in Arvados class. -#' -#' @usage arv$logs.create(log, ensure_unique_name = "false") -#' @param log Log object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return Log object. -#' @name logs.create -NULL - -#' logs.update -#' -#' logs.update is a method defined in Arvados class. -#' -#' @usage arv$logs.update(log, uuid) -#' @param log Log object. -#' @param uuid The UUID of the Log in question. -#' @return Log object. -#' @name logs.update +#' @param cluster_id List objects on a remote federated cluster instead of the current one. +#' @param bypass_federation bypass federation behavior, list items from local instance database only +#' @return UserAgreementList object. +#' @name user_agreements.list NULL -#' logs.delete +#' user_agreements.new #' -#' logs.delete is a method defined in Arvados class. +#' user_agreements.new is a method defined in Arvados class. #' -#' @usage arv$logs.delete(uuid) -#' @param uuid The UUID of the Log in question. -#' @return Log object. -#' @name logs.delete +#' @usage arv$user_agreements.new(NULL) +#' @return UserAgreement object. +#' @name user_agreements.new NULL -#' logs.list +#' configs.get #' -#' logs.list is a method defined in Arvados class. +#' configs.get is a method defined in Arvados class. #' -#' @usage arv$logs.list(filters = NULL, where = NULL, -#' order = NULL, select = NULL, distinct = NULL, -#' limit = "100", offset = "0", count = "exact") -#' @param filters -#' @param where -#' @param order -#' @param select -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @return LogList object. -#' @name logs.list +#' @usage arv$configs.get(NULL) +#' @return object. +#' @name configs.get NULL -#' traits.get +#' project.get #' -#' traits.get is a method defined in Arvados class. +#' projects.get is equivalent to groups.get method. #' -#' @usage arv$traits.get(uuid) -#' @param uuid The UUID of the Trait in question. -#' @return Trait object. -#' @name traits.get +#' @usage arv$projects.get(uuid) +#' @param uuid The UUID of the Group in question. +#' @return Group object. +#' @name projects.get NULL -#' traits.create +#' project.create #' -#' traits.create is a method defined in Arvados class. +#' projects.create wrapps groups.create method by setting group_class attribute to "project". #' -#' @usage arv$traits.create(trait, ensure_unique_name = "false") -#' @param trait Trait object. +#' @usage arv$projects.create(group, ensure_unique_name = "false") +#' @param group Group object. #' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return Trait object. -#' @name traits.create +#' @return Group object. +#' @name projects.create NULL -#' traits.update +#' project.update #' -#' traits.update is a method defined in Arvados class. +#' projects.update wrapps groups.update method by setting group_class attribute to "project". #' -#' @usage arv$traits.update(trait, uuid) -#' @param trait Trait object. -#' @param uuid The UUID of the Trait in question. -#' @return Trait object. -#' @name traits.update +#' @usage arv$projects.update(group, uuid) +#' @param group Group object. +#' @param uuid The UUID of the Group in question. +#' @return Group object. +#' @name projects.update NULL -#' traits.delete +#' project.delete #' -#' traits.delete is a method defined in Arvados class. +#' projects.delete is equivalent to groups.delete method. #' -#' @usage arv$traits.delete(uuid) -#' @param uuid The UUID of the Trait in question. -#' @return Trait object. -#' @name traits.delete +#' @usage arv$project.delete(uuid) +#' @param uuid The UUID of the Group in question. +#' @return Group object. +#' @name projects.delete NULL -#' traits.list +#' project.list #' -#' traits.list is a method defined in Arvados class. +#' projects.list wrapps groups.list method by setting group_class attribute to "project". #' -#' @usage arv$traits.list(filters = NULL, -#' where = NULL, order = NULL, select = NULL, -#' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") +#' @usage arv$projects.list(filters = NULL, +#' where = NULL, order = NULL, distinct = NULL, +#' limit = "100", offset = "0", count = "exact", +#' include_trash = NULL, uuid = NULL, recursive = NULL) #' @param filters #' @param where #' @param order -#' @param select #' @param distinct #' @param limit #' @param offset #' @param count -#' @return TraitList object. -#' @name traits.list -NULL - -#' virtual_machines.get -#' -#' virtual_machines.get is a method defined in Arvados class. -#' -#' @usage arv$virtual_machines.get(uuid) -#' @param uuid The UUID of the VirtualMachine in question. -#' @return VirtualMachine object. -#' @name virtual_machines.get -NULL - -#' virtual_machines.create -#' -#' virtual_machines.create is a method defined in Arvados class. -#' -#' @usage arv$virtual_machines.create(virtualmachine, -#' ensure_unique_name = "false") -#' @param virtualMachine VirtualMachine object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return VirtualMachine object. -#' @name virtual_machines.create -NULL - -#' virtual_machines.update -#' -#' virtual_machines.update is a method defined in Arvados class. -#' -#' @usage arv$virtual_machines.update(virtualmachine, -#' uuid) -#' @param virtualMachine VirtualMachine object. -#' @param uuid The UUID of the VirtualMachine in question. -#' @return VirtualMachine object. -#' @name virtual_machines.update +#' @param include_trash Include items whose is_trashed attribute is true. +#' @param uuid +#' @param recursive Include contents from child groups recursively. +#' @return Group object. +#' @name projects.list NULL -#' virtual_machines.delete -#' -#' virtual_machines.delete is a method defined in Arvados class. -#' -#' @usage arv$virtual_machines.delete(uuid) -#' @param uuid The UUID of the VirtualMachine in question. -#' @return VirtualMachine object. -#' @name virtual_machines.delete -NULL - -#' virtual_machines.logins -#' -#' virtual_machines.logins is a method defined in Arvados class. -#' -#' @usage arv$virtual_machines.logins(uuid) -#' @param uuid -#' @return VirtualMachine object. -#' @name virtual_machines.logins -NULL - -#' virtual_machines.get_all_logins -#' -#' virtual_machines.get_all_logins is a method defined in Arvados class. -#' -#' @usage arv$virtual_machines.get_all_logins(NULL) -#' @return VirtualMachine object. -#' @name virtual_machines.get_all_logins -NULL - -#' virtual_machines.list -#' -#' virtual_machines.list is a method defined in Arvados class. -#' -#' @usage arv$virtual_machines.list(filters = NULL, -#' where = NULL, order = NULL, select = NULL, -#' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") -#' @param filters -#' @param where -#' @param order -#' @param select -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @return VirtualMachineList object. -#' @name virtual_machines.list -NULL - -#' workflows.get -#' -#' workflows.get is a method defined in Arvados class. -#' -#' @usage arv$workflows.get(uuid) -#' @param uuid The UUID of the Workflow in question. -#' @return Workflow object. -#' @name workflows.get -NULL - -#' workflows.create -#' -#' workflows.create is a method defined in Arvados class. -#' -#' @usage arv$workflows.create(workflow, -#' ensure_unique_name = "false") -#' @param workflow Workflow object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return Workflow object. -#' @name workflows.create -NULL - -#' workflows.update -#' -#' workflows.update is a method defined in Arvados class. -#' -#' @usage arv$workflows.update(workflow, -#' uuid) -#' @param workflow Workflow object. -#' @param uuid The UUID of the Workflow in question. -#' @return Workflow object. -#' @name workflows.update -NULL - -#' workflows.delete -#' -#' workflows.delete is a method defined in Arvados class. -#' -#' @usage arv$workflows.delete(uuid) -#' @param uuid The UUID of the Workflow in question. -#' @return Workflow object. -#' @name workflows.delete -NULL - -#' workflows.list -#' -#' workflows.list is a method defined in Arvados class. -#' -#' @usage arv$workflows.list(filters = NULL, -#' where = NULL, order = NULL, select = NULL, -#' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") -#' @param filters -#' @param where -#' @param order -#' @param select -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @return WorkflowList object. -#' @name workflows.list -NULL - -#' groups.get -#' -#' groups.get is a method defined in Arvados class. -#' -#' @usage arv$groups.get(uuid) -#' @param uuid The UUID of the Group in question. -#' @return Group object. -#' @name groups.get -NULL - -#' groups.create -#' -#' groups.create is a method defined in Arvados class. -#' -#' @usage arv$groups.create(group, ensure_unique_name = "false") -#' @param group Group object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return Group object. -#' @name groups.create -NULL - -#' groups.update -#' -#' groups.update is a method defined in Arvados class. -#' -#' @usage arv$groups.update(group, uuid) -#' @param group Group object. -#' @param uuid The UUID of the Group in question. -#' @return Group object. -#' @name groups.update -NULL - -#' groups.delete -#' -#' groups.delete is a method defined in Arvados class. -#' -#' @usage arv$groups.delete(uuid) -#' @param uuid The UUID of the Group in question. -#' @return Group object. -#' @name groups.delete -NULL - -#' groups.contents -#' -#' groups.contents is a method defined in Arvados class. -#' -#' @usage arv$groups.contents(filters = NULL, -#' where = NULL, order = NULL, distinct = NULL, -#' limit = "100", offset = "0", count = "exact", -#' include_trash = NULL, uuid = NULL, recursive = NULL) -#' @param filters -#' @param where -#' @param order -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @param include_trash Include items whose is_trashed attribute is true. -#' @param uuid -#' @param recursive Include contents from child groups recursively. -#' @return Group object. -#' @name groups.contents -NULL - -#' groups.trash -#' -#' groups.trash is a method defined in Arvados class. -#' -#' @usage arv$groups.trash(uuid) -#' @param uuid -#' @return Group object. -#' @name groups.trash -NULL - -#' groups.untrash -#' -#' groups.untrash is a method defined in Arvados class. -#' -#' @usage arv$groups.untrash(uuid) -#' @param uuid -#' @return Group object. -#' @name groups.untrash -NULL - -#' groups.list -#' -#' groups.list is a method defined in Arvados class. -#' -#' @usage arv$groups.list(filters = NULL, -#' where = NULL, order = NULL, select = NULL, -#' distinct = NULL, limit = "100", offset = "0", -#' count = "exact", include_trash = NULL) -#' @param filters -#' @param where -#' @param order -#' @param select -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @param include_trash Include items whose is_trashed attribute is true. -#' @return GroupList object. -#' @name groups.list -NULL - -#' user_agreements.get -#' -#' user_agreements.get is a method defined in Arvados class. -#' -#' @usage arv$user_agreements.get(uuid) -#' @param uuid The UUID of the UserAgreement in question. -#' @return UserAgreement object. -#' @name user_agreements.get -NULL - -#' user_agreements.create -#' -#' user_agreements.create is a method defined in Arvados class. -#' -#' @usage arv$user_agreements.create(useragreement, -#' ensure_unique_name = "false") -#' @param userAgreement UserAgreement object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return UserAgreement object. -#' @name user_agreements.create -NULL - -#' user_agreements.update -#' -#' user_agreements.update is a method defined in Arvados class. -#' -#' @usage arv$user_agreements.update(useragreement, -#' uuid) -#' @param userAgreement UserAgreement object. -#' @param uuid The UUID of the UserAgreement in question. -#' @return UserAgreement object. -#' @name user_agreements.update -NULL - -#' user_agreements.delete -#' -#' user_agreements.delete is a method defined in Arvados class. -#' -#' @usage arv$user_agreements.delete(uuid) -#' @param uuid The UUID of the UserAgreement in question. -#' @return UserAgreement object. -#' @name user_agreements.delete -NULL - -#' user_agreements.signatures -#' -#' user_agreements.signatures is a method defined in Arvados class. -#' -#' @usage arv$user_agreements.signatures(NULL) -#' @return UserAgreement object. -#' @name user_agreements.signatures -NULL - -#' user_agreements.sign -#' -#' user_agreements.sign is a method defined in Arvados class. -#' -#' @usage arv$user_agreements.sign(NULL) -#' @return UserAgreement object. -#' @name user_agreements.sign -NULL - -#' user_agreements.list -#' -#' user_agreements.list is a method defined in Arvados class. -#' -#' @usage arv$user_agreements.list(filters = NULL, -#' where = NULL, order = NULL, select = NULL, -#' distinct = NULL, limit = "100", offset = "0", -#' count = "exact") -#' @param filters -#' @param where -#' @param order -#' @param select -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @return UserAgreementList object. -#' @name user_agreements.list -NULL - -#' user_agreements.new -#' -#' user_agreements.new is a method defined in Arvados class. -#' -#' @usage arv$user_agreements.new(NULL) -#' @return UserAgreement object. -#' @name user_agreements.new -NULL - -#' project.get -#' -#' projects.get is equivalent to groups.get method. -#' -#' @usage arv$projects.get(uuid) -#' @param uuid The UUID of the Group in question. -#' @return Group object. -#' @name projects.get -NULL - -#' project.create -#' -#' projects.create wrapps groups.create method by setting group_class attribute to "project". -#' -#' @usage arv$projects.create(group, ensure_unique_name = "false") -#' @param group Group object. -#' @param ensure_unique_name Adjust name to ensure uniqueness instead of returning an error on (owner_uuid, name) collision. -#' @return Group object. -#' @name projects.create -NULL - -#' project.update -#' -#' projects.update wrapps groups.update method by setting group_class attribute to "project". -#' -#' @usage arv$projects.update(group, uuid) -#' @param group Group object. -#' @param uuid The UUID of the Group in question. -#' @return Group object. -#' @name projects.update -NULL - -#' project.delete -#' -#' projects.delete is equivalent to groups.delete method. -#' -#' @usage arv$project.delete(uuid) -#' @param uuid The UUID of the Group in question. -#' @return Group object. -#' @name projects.delete -NULL - -#' project.list -#' -#' projects.list wrapps groups.list method by setting group_class attribute to "project". -#' -#' @usage arv$projects.list(filters = NULL, -#' where = NULL, order = NULL, distinct = NULL, -#' limit = "100", offset = "0", count = "exact", -#' include_trash = NULL, uuid = NULL, recursive = NULL) -#' @param filters -#' @param where -#' @param order -#' @param distinct -#' @param limit -#' @param offset -#' @param count -#' @param include_trash Include items whose is_trashed attribute is true. -#' @param uuid -#' @param recursive Include contents from child groups recursively. -#' @return Group object. -#' @name projects.list -NULL - -#' Arvados -#' -#' Arvados class gives users ability to access Arvados REST API. -#' -#' @section Usage: -#' \preformatted{arv = Arvados$new(authToken = NULL, hostName = NULL, numRetries = 0)} -#' -#' @section Arguments: -#' \describe{ -#' \item{authToken}{Authentification token. If not specified ARVADOS_API_TOKEN environment variable will be used.} -#' \item{hostName}{Host name. If not specified ARVADOS_API_HOST environment variable will be used.} -#' \item{numRetries}{Number which specifies how many times to retry failed service requests.} -#' } -#' -#' @section Methods: -#' \describe{ -#' \item{}{\code{\link{api_client_authorizations.create}}} -#' \item{}{\code{\link{api_client_authorizations.create_system_auth}}} -#' \item{}{\code{\link{api_client_authorizations.current}}} -#' \item{}{\code{\link{api_client_authorizations.delete}}} -#' \item{}{\code{\link{api_client_authorizations.get}}} -#' \item{}{\code{\link{api_client_authorizations.list}}} -#' \item{}{\code{\link{api_client_authorizations.update}}} -#' \item{}{\code{\link{api_clients.create}}} -#' \item{}{\code{\link{api_clients.delete}}} -#' \item{}{\code{\link{api_clients.get}}} -#' \item{}{\code{\link{api_clients.list}}} -#' \item{}{\code{\link{api_clients.update}}} -#' \item{}{\code{\link{authorized_keys.create}}} -#' \item{}{\code{\link{authorized_keys.delete}}} -#' \item{}{\code{\link{authorized_keys.get}}} -#' \item{}{\code{\link{authorized_keys.list}}} -#' \item{}{\code{\link{authorized_keys.update}}} -#' \item{}{\code{\link{collections.create}}} -#' \item{}{\code{\link{collections.delete}}} -#' \item{}{\code{\link{collections.get}}} -#' \item{}{\code{\link{collections.list}}} -#' \item{}{\code{\link{collections.provenance}}} -#' \item{}{\code{\link{collections.trash}}} -#' \item{}{\code{\link{collections.untrash}}} -#' \item{}{\code{\link{collections.update}}} -#' \item{}{\code{\link{collections.used_by}}} -#' \item{}{\code{\link{container_requests.create}}} -#' \item{}{\code{\link{container_requests.delete}}} -#' \item{}{\code{\link{container_requests.get}}} -#' \item{}{\code{\link{container_requests.list}}} -#' \item{}{\code{\link{container_requests.update}}} -#' \item{}{\code{\link{containers.auth}}} -#' \item{}{\code{\link{containers.create}}} -#' \item{}{\code{\link{containers.current}}} -#' \item{}{\code{\link{containers.delete}}} -#' \item{}{\code{\link{containers.get}}} -#' \item{}{\code{\link{containers.list}}} -#' \item{}{\code{\link{containers.lock}}} -#' \item{}{\code{\link{containers.secret_mounts}}} -#' \item{}{\code{\link{containers.unlock}}} -#' \item{}{\code{\link{containers.update}}} -#' \item{}{\code{\link{groups.contents}}} -#' \item{}{\code{\link{groups.create}}} -#' \item{}{\code{\link{groups.delete}}} -#' \item{}{\code{\link{groups.get}}} -#' \item{}{\code{\link{groups.list}}} -#' \item{}{\code{\link{groups.trash}}} -#' \item{}{\code{\link{groups.untrash}}} -#' \item{}{\code{\link{groups.update}}} -#' \item{}{\code{\link{humans.create}}} -#' \item{}{\code{\link{humans.delete}}} -#' \item{}{\code{\link{humans.get}}} -#' \item{}{\code{\link{humans.list}}} -#' \item{}{\code{\link{humans.update}}} -#' \item{}{\code{\link{jobs.cancel}}} -#' \item{}{\code{\link{jobs.create}}} -#' \item{}{\code{\link{jobs.delete}}} -#' \item{}{\code{\link{jobs.get}}} -#' \item{}{\code{\link{jobs.list}}} -#' \item{}{\code{\link{jobs.lock}}} -#' \item{}{\code{\link{jobs.queue}}} -#' \item{}{\code{\link{jobs.queue_size}}} -#' \item{}{\code{\link{jobs.update}}} -#' \item{}{\code{\link{job_tasks.create}}} -#' \item{}{\code{\link{job_tasks.delete}}} -#' \item{}{\code{\link{job_tasks.get}}} -#' \item{}{\code{\link{job_tasks.list}}} -#' \item{}{\code{\link{job_tasks.update}}} -#' \item{}{\code{\link{keep_disks.create}}} -#' \item{}{\code{\link{keep_disks.delete}}} -#' \item{}{\code{\link{keep_disks.get}}} -#' \item{}{\code{\link{keep_disks.list}}} -#' \item{}{\code{\link{keep_disks.ping}}} -#' \item{}{\code{\link{keep_disks.update}}} -#' \item{}{\code{\link{keep_services.accessible}}} -#' \item{}{\code{\link{keep_services.create}}} -#' \item{}{\code{\link{keep_services.delete}}} -#' \item{}{\code{\link{keep_services.get}}} -#' \item{}{\code{\link{keep_services.list}}} -#' \item{}{\code{\link{keep_services.update}}} -#' \item{}{\code{\link{links.create}}} -#' \item{}{\code{\link{links.delete}}} -#' \item{}{\code{\link{links.get}}} -#' \item{}{\code{\link{links.get_permissions}}} -#' \item{}{\code{\link{links.list}}} -#' \item{}{\code{\link{links.update}}} -#' \item{}{\code{\link{logs.create}}} -#' \item{}{\code{\link{logs.delete}}} -#' \item{}{\code{\link{logs.get}}} -#' \item{}{\code{\link{logs.list}}} -#' \item{}{\code{\link{logs.update}}} -#' \item{}{\code{\link{nodes.create}}} -#' \item{}{\code{\link{nodes.delete}}} -#' \item{}{\code{\link{nodes.get}}} -#' \item{}{\code{\link{nodes.list}}} -#' \item{}{\code{\link{nodes.ping}}} -#' \item{}{\code{\link{nodes.update}}} -#' \item{}{\code{\link{pipeline_instances.cancel}}} -#' \item{}{\code{\link{pipeline_instances.create}}} -#' \item{}{\code{\link{pipeline_instances.delete}}} -#' \item{}{\code{\link{pipeline_instances.get}}} -#' \item{}{\code{\link{pipeline_instances.list}}} -#' \item{}{\code{\link{pipeline_instances.update}}} -#' \item{}{\code{\link{pipeline_templates.create}}} -#' \item{}{\code{\link{pipeline_templates.delete}}} -#' \item{}{\code{\link{pipeline_templates.get}}} -#' \item{}{\code{\link{pipeline_templates.list}}} -#' \item{}{\code{\link{pipeline_templates.update}}} -#' \item{}{\code{\link{projects.create}}} -#' \item{}{\code{\link{projects.delete}}} -#' \item{}{\code{\link{projects.get}}} -#' \item{}{\code{\link{projects.list}}} -#' \item{}{\code{\link{projects.update}}} -#' \item{}{\code{\link{repositories.create}}} -#' \item{}{\code{\link{repositories.delete}}} -#' \item{}{\code{\link{repositories.get}}} -#' \item{}{\code{\link{repositories.get_all_permissions}}} -#' \item{}{\code{\link{repositories.list}}} -#' \item{}{\code{\link{repositories.update}}} -#' \item{}{\code{\link{specimens.create}}} -#' \item{}{\code{\link{specimens.delete}}} -#' \item{}{\code{\link{specimens.get}}} -#' \item{}{\code{\link{specimens.list}}} -#' \item{}{\code{\link{specimens.update}}} -#' \item{}{\code{\link{traits.create}}} -#' \item{}{\code{\link{traits.delete}}} -#' \item{}{\code{\link{traits.get}}} -#' \item{}{\code{\link{traits.list}}} -#' \item{}{\code{\link{traits.update}}} -#' \item{}{\code{\link{user_agreements.create}}} -#' \item{}{\code{\link{user_agreements.delete}}} -#' \item{}{\code{\link{user_agreements.get}}} -#' \item{}{\code{\link{user_agreements.list}}} -#' \item{}{\code{\link{user_agreements.new}}} -#' \item{}{\code{\link{user_agreements.sign}}} -#' \item{}{\code{\link{user_agreements.signatures}}} -#' \item{}{\code{\link{user_agreements.update}}} -#' \item{}{\code{\link{users.activate}}} -#' \item{}{\code{\link{users.create}}} -#' \item{}{\code{\link{users.current}}} -#' \item{}{\code{\link{users.delete}}} -#' \item{}{\code{\link{users.get}}} -#' \item{}{\code{\link{users.list}}} -#' \item{}{\code{\link{users.merge}}} -#' \item{}{\code{\link{users.setup}}} -#' \item{}{\code{\link{users.system}}} -#' \item{}{\code{\link{users.unsetup}}} -#' \item{}{\code{\link{users.update}}} -#' \item{}{\code{\link{users.update_uuid}}} -#' \item{}{\code{\link{virtual_machines.create}}} -#' \item{}{\code{\link{virtual_machines.delete}}} -#' \item{}{\code{\link{virtual_machines.get}}} -#' \item{}{\code{\link{virtual_machines.get_all_logins}}} -#' \item{}{\code{\link{virtual_machines.list}}} -#' \item{}{\code{\link{virtual_machines.logins}}} -#' \item{}{\code{\link{virtual_machines.update}}} -#' \item{}{\code{\link{workflows.create}}} -#' \item{}{\code{\link{workflows.delete}}} -#' \item{}{\code{\link{workflows.get}}} -#' \item{}{\code{\link{workflows.list}}} -#' \item{}{\code{\link{workflows.update}}} -#' } -#' -#' @name Arvados -#' @examples -#' \dontrun{ -#' arv <- Arvados$new("your Arvados token", "example.arvadosapi.com") -#' -#' collection <- arv$collections.get("uuid") -#' -#' collectionList <- arv$collections.list(list(list("name", "like", "Test%"))) -#' collectionList <- listAll(arv$collections.list, list(list("name", "like", "Test%"))) -#' -#' deletedCollection <- arv$collections.delete("uuid") -#' -#' updatedCollection <- arv$collections.update(list(name = "New name", description = "New description"), -#' "uuid") -#' -#' createdCollection <- arv$collections.create(list(name = "Example", -#' description = "This is a test collection")) -#' } -NULL - -#' @export -Arvados <- R6::R6Class( - - "Arvados", - - public = list( - - initialize = function(authToken = NULL, hostName = NULL, numRetries = 0) - { - if(!is.null(hostName)) - Sys.setenv(ARVADOS_API_HOST = hostName) - - if(!is.null(authToken)) - Sys.setenv(ARVADOS_API_TOKEN = authToken) - - hostName <- Sys.getenv("ARVADOS_API_HOST") - token <- Sys.getenv("ARVADOS_API_TOKEN") - - if(hostName == "" | token == "") - stop(paste("Please provide host name and authentification token", - "or set ARVADOS_API_HOST and ARVADOS_API_TOKEN", - "environment variables.")) - - private$token <- token - private$host <- paste0("https://", hostName, "/arvados/v1/") - private$numRetries <- numRetries - private$REST <- RESTService$new(token, hostName, - HttpRequest$new(), HttpParser$new(), - numRetries) - - }, - - projects.get = function(uuid) - { - self$groups.get(uuid) - }, - - projects.create = function(group, ensure_unique_name = "false") - { - group <- c("group_class" = "project", group) - self$groups.create(group, ensure_unique_name) - }, - - projects.update = function(group, uuid) - { - group <- c("group_class" = "project", group) - self$groups.update(group, uuid) - }, - - projects.list = function(filters = NULL, where = NULL, - order = NULL, select = NULL, distinct = NULL, - limit = "100", offset = "0", count = "exact", - include_trash = NULL) - { - filters[[length(filters) + 1]] <- list("group_class", "=", "project") - self$groups.list(filters, where, order, select, distinct, - limit, offset, count, include_trash) - }, - - projects.delete = function(uuid) - { - self$groups.delete(uuid) - }, - - users.get = function(uuid) - { - endPoint <- stringr::str_interp("users/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - users.create = function(user, ensure_unique_name = "false") - { - endPoint <- stringr::str_interp("users") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) - - if(length(user) > 0) - body <- jsonlite::toJSON(list(user = user), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - users.update = function(user, uuid) - { - endPoint <- stringr::str_interp("users/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - if(length(user) > 0) - body <- jsonlite::toJSON(list(user = user), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("PUT", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - users.delete = function(uuid) - { - endPoint <- stringr::str_interp("users/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("DELETE", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - users.current = function() - { - endPoint <- stringr::str_interp("users/current") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - users.system = function() - { - endPoint <- stringr::str_interp("users/system") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - users.activate = function(uuid) - { - endPoint <- stringr::str_interp("users/${uuid}/activate") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - users.setup = function(user = NULL, openid_prefix = NULL, - repo_name = NULL, vm_uuid = NULL, send_notification_email = "false") - { - endPoint <- stringr::str_interp("users/setup") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(user = user, openid_prefix = openid_prefix, - repo_name = repo_name, vm_uuid = vm_uuid, - send_notification_email = send_notification_email) - - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - users.unsetup = function(uuid) - { - endPoint <- stringr::str_interp("users/${uuid}/unsetup") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - users.update_uuid = function(uuid, new_uuid) - { - endPoint <- stringr::str_interp("users/${uuid}/update_uuid") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(new_uuid = new_uuid) - - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - users.merge = function(new_owner_uuid, new_user_token, - redirect_to_new_user = NULL) - { - endPoint <- stringr::str_interp("users/merge") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(new_owner_uuid = new_owner_uuid, - new_user_token = new_user_token, redirect_to_new_user = redirect_to_new_user) - - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - users.list = function(filters = NULL, where = NULL, - order = NULL, select = NULL, distinct = NULL, - limit = "100", offset = "0", count = "exact") - { - endPoint <- stringr::str_interp("users") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - api_client_authorizations.get = function(uuid) - { - endPoint <- stringr::str_interp("api_client_authorizations/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - api_client_authorizations.create = function(apiclientauthorization, - ensure_unique_name = "false") - { - endPoint <- stringr::str_interp("api_client_authorizations") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) - - if(length(apiclientauthorization) > 0) - body <- jsonlite::toJSON(list(apiclientauthorization = apiclientauthorization), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - api_client_authorizations.update = function(apiclientauthorization, uuid) - { - endPoint <- stringr::str_interp("api_client_authorizations/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - if(length(apiclientauthorization) > 0) - body <- jsonlite::toJSON(list(apiclientauthorization = apiclientauthorization), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("PUT", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - api_client_authorizations.delete = function(uuid) - { - endPoint <- stringr::str_interp("api_client_authorizations/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("DELETE", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - api_client_authorizations.create_system_auth = function(api_client_id = NULL, scopes = NULL) - { - endPoint <- stringr::str_interp("api_client_authorizations/create_system_auth") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(api_client_id = api_client_id, - scopes = scopes) - - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - api_client_authorizations.current = function() - { - endPoint <- stringr::str_interp("api_client_authorizations/current") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - api_client_authorizations.list = function(filters = NULL, - where = NULL, order = NULL, select = NULL, - distinct = NULL, limit = "100", offset = "0", - count = "exact") - { - endPoint <- stringr::str_interp("api_client_authorizations") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - containers.get = function(uuid) - { - endPoint <- stringr::str_interp("containers/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - containers.create = function(container, ensure_unique_name = "false") - { - endPoint <- stringr::str_interp("containers") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) - - if(length(container) > 0) - body <- jsonlite::toJSON(list(container = container), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - containers.update = function(container, uuid) - { - endPoint <- stringr::str_interp("containers/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - if(length(container) > 0) - body <- jsonlite::toJSON(list(container = container), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("PUT", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - containers.delete = function(uuid) - { - endPoint <- stringr::str_interp("containers/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("DELETE", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - containers.auth = function(uuid) - { - endPoint <- stringr::str_interp("containers/${uuid}/auth") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - containers.lock = function(uuid) - { - endPoint <- stringr::str_interp("containers/${uuid}/lock") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - containers.unlock = function(uuid) - { - endPoint <- stringr::str_interp("containers/${uuid}/unlock") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - containers.secret_mounts = function(uuid) - { - endPoint <- stringr::str_interp("containers/${uuid}/secret_mounts") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - containers.current = function() - { - endPoint <- stringr::str_interp("containers/current") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - containers.list = function(filters = NULL, - where = NULL, order = NULL, select = NULL, - distinct = NULL, limit = "100", offset = "0", - count = "exact") - { - endPoint <- stringr::str_interp("containers") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - api_clients.get = function(uuid) - { - endPoint <- stringr::str_interp("api_clients/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - api_clients.create = function(apiclient, ensure_unique_name = "false") - { - endPoint <- stringr::str_interp("api_clients") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) - - if(length(apiclient) > 0) - body <- jsonlite::toJSON(list(apiclient = apiclient), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - api_clients.update = function(apiclient, uuid) - { - endPoint <- stringr::str_interp("api_clients/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - if(length(apiclient) > 0) - body <- jsonlite::toJSON(list(apiclient = apiclient), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("PUT", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - api_clients.delete = function(uuid) - { - endPoint <- stringr::str_interp("api_clients/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("DELETE", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, +#' Arvados +#' +#' Arvados class gives users ability to access Arvados REST API. +#' +#' @section Usage: +#' \preformatted{arv = Arvados$new(authToken = NULL, hostName = NULL, numRetries = 0)} +#' +#' @section Arguments: +#' \describe{ +#' \item{authToken}{Authentification token. If not specified ARVADOS_API_TOKEN environment variable will be used.} +#' \item{hostName}{Host name. If not specified ARVADOS_API_HOST environment variable will be used.} +#' \item{numRetries}{Number which specifies how many times to retry failed service requests.} +#' } +#' +#' @section Methods: +#' \describe{ +#' \item{}{\code{\link{api_client_authorizations.create}}} +#' \item{}{\code{\link{api_client_authorizations.create_system_auth}}} +#' \item{}{\code{\link{api_client_authorizations.current}}} +#' \item{}{\code{\link{api_client_authorizations.delete}}} +#' \item{}{\code{\link{api_client_authorizations.get}}} +#' \item{}{\code{\link{api_client_authorizations.list}}} +#' \item{}{\code{\link{api_client_authorizations.update}}} +#' \item{}{\code{\link{api_clients.create}}} +#' \item{}{\code{\link{api_clients.delete}}} +#' \item{}{\code{\link{api_clients.get}}} +#' \item{}{\code{\link{api_clients.list}}} +#' \item{}{\code{\link{api_clients.update}}} +#' \item{}{\code{\link{authorized_keys.create}}} +#' \item{}{\code{\link{authorized_keys.delete}}} +#' \item{}{\code{\link{authorized_keys.get}}} +#' \item{}{\code{\link{authorized_keys.list}}} +#' \item{}{\code{\link{authorized_keys.update}}} +#' \item{}{\code{\link{collections.create}}} +#' \item{}{\code{\link{collections.delete}}} +#' \item{}{\code{\link{collections.get}}} +#' \item{}{\code{\link{collections.list}}} +#' \item{}{\code{\link{collections.provenance}}} +#' \item{}{\code{\link{collections.trash}}} +#' \item{}{\code{\link{collections.untrash}}} +#' \item{}{\code{\link{collections.update}}} +#' \item{}{\code{\link{collections.used_by}}} +#' \item{}{\code{\link{configs.get}}} +#' \item{}{\code{\link{container_requests.create}}} +#' \item{}{\code{\link{container_requests.delete}}} +#' \item{}{\code{\link{container_requests.get}}} +#' \item{}{\code{\link{container_requests.list}}} +#' \item{}{\code{\link{container_requests.update}}} +#' \item{}{\code{\link{containers.auth}}} +#' \item{}{\code{\link{containers.create}}} +#' \item{}{\code{\link{containers.current}}} +#' \item{}{\code{\link{containers.delete}}} +#' \item{}{\code{\link{containers.get}}} +#' \item{}{\code{\link{containers.list}}} +#' \item{}{\code{\link{containers.lock}}} +#' \item{}{\code{\link{containers.secret_mounts}}} +#' \item{}{\code{\link{containers.unlock}}} +#' \item{}{\code{\link{containers.update}}} +#' \item{}{\code{\link{groups.contents}}} +#' \item{}{\code{\link{groups.create}}} +#' \item{}{\code{\link{groups.delete}}} +#' \item{}{\code{\link{groups.get}}} +#' \item{}{\code{\link{groups.list}}} +#' \item{}{\code{\link{groups.shared}}} +#' \item{}{\code{\link{groups.trash}}} +#' \item{}{\code{\link{groups.untrash}}} +#' \item{}{\code{\link{groups.update}}} +#' \item{}{\code{\link{keep_services.accessible}}} +#' \item{}{\code{\link{keep_services.create}}} +#' \item{}{\code{\link{keep_services.delete}}} +#' \item{}{\code{\link{keep_services.get}}} +#' \item{}{\code{\link{keep_services.list}}} +#' \item{}{\code{\link{keep_services.update}}} +#' \item{}{\code{\link{links.create}}} +#' \item{}{\code{\link{links.delete}}} +#' \item{}{\code{\link{links.get}}} +#' \item{}{\code{\link{links.get_permissions}}} +#' \item{}{\code{\link{links.list}}} +#' \item{}{\code{\link{links.update}}} +#' \item{}{\code{\link{logs.create}}} +#' \item{}{\code{\link{logs.delete}}} +#' \item{}{\code{\link{logs.get}}} +#' \item{}{\code{\link{logs.list}}} +#' \item{}{\code{\link{logs.update}}} +#' \item{}{\code{\link{projects.create}}} +#' \item{}{\code{\link{projects.delete}}} +#' \item{}{\code{\link{projects.get}}} +#' \item{}{\code{\link{projects.list}}} +#' \item{}{\code{\link{projects.update}}} +#' \item{}{\code{\link{repositories.create}}} +#' \item{}{\code{\link{repositories.delete}}} +#' \item{}{\code{\link{repositories.get}}} +#' \item{}{\code{\link{repositories.get_all_permissions}}} +#' \item{}{\code{\link{repositories.list}}} +#' \item{}{\code{\link{repositories.update}}} +#' \item{}{\code{\link{user_agreements.create}}} +#' \item{}{\code{\link{user_agreements.delete}}} +#' \item{}{\code{\link{user_agreements.get}}} +#' \item{}{\code{\link{user_agreements.list}}} +#' \item{}{\code{\link{user_agreements.new}}} +#' \item{}{\code{\link{user_agreements.sign}}} +#' \item{}{\code{\link{user_agreements.signatures}}} +#' \item{}{\code{\link{user_agreements.update}}} +#' \item{}{\code{\link{users.activate}}} +#' \item{}{\code{\link{users.create}}} +#' \item{}{\code{\link{users.current}}} +#' \item{}{\code{\link{users.delete}}} +#' \item{}{\code{\link{users.get}}} +#' \item{}{\code{\link{users.list}}} +#' \item{}{\code{\link{users.merge}}} +#' \item{}{\code{\link{users.setup}}} +#' \item{}{\code{\link{users.system}}} +#' \item{}{\code{\link{users.unsetup}}} +#' \item{}{\code{\link{users.update}}} +#' \item{}{\code{\link{users.update_uuid}}} +#' \item{}{\code{\link{virtual_machines.create}}} +#' \item{}{\code{\link{virtual_machines.delete}}} +#' \item{}{\code{\link{virtual_machines.get}}} +#' \item{}{\code{\link{virtual_machines.get_all_logins}}} +#' \item{}{\code{\link{virtual_machines.list}}} +#' \item{}{\code{\link{virtual_machines.logins}}} +#' \item{}{\code{\link{virtual_machines.update}}} +#' \item{}{\code{\link{workflows.create}}} +#' \item{}{\code{\link{workflows.delete}}} +#' \item{}{\code{\link{workflows.get}}} +#' \item{}{\code{\link{workflows.list}}} +#' \item{}{\code{\link{workflows.update}}} +#' } +#' +#' @name Arvados +#' @examples +#' \dontrun{ +#' arv <- Arvados$new("your Arvados token", "example.arvadosapi.com") +#' +#' collection <- arv$collections.get("uuid") +#' +#' collectionList <- arv$collections.list(list(list("name", "like", "Test%"))) +#' collectionList <- listAll(arv$collections.list, list(list("name", "like", "Test%"))) +#' +#' deletedCollection <- arv$collections.delete("uuid") +#' +#' updatedCollection <- arv$collections.update(list(name = "New name", description = "New description"), +#' "uuid") +#' +#' createdCollection <- arv$collections.create(list(name = "Example", +#' description = "This is a test collection")) +#' } +NULL - api_clients.list = function(filters = NULL, - where = NULL, order = NULL, select = NULL, - distinct = NULL, limit = "100", offset = "0", - count = "exact") - { - endPoint <- stringr::str_interp("api_clients") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, +#' @export +Arvados <- R6::R6Class( - container_requests.get = function(uuid) - { - endPoint <- stringr::str_interp("container_requests/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, + "Arvados", - container_requests.create = function(containerrequest, - ensure_unique_name = "false") - { - endPoint <- stringr::str_interp("container_requests") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) - - if(length(containerrequest) > 0) - body <- jsonlite::toJSON(list(containerrequest = containerrequest), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, + public = list( - container_requests.update = function(containerrequest, uuid) + initialize = function(authToken = NULL, hostName = NULL, numRetries = 0) { - endPoint <- stringr::str_interp("container_requests/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - if(length(containerrequest) > 0) - body <- jsonlite::toJSON(list(containerrequest = containerrequest), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("PUT", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, + if(!is.null(hostName)) + Sys.setenv(ARVADOS_API_HOST = hostName) - container_requests.delete = function(uuid) - { - endPoint <- stringr::str_interp("container_requests/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("DELETE", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, + if(!is.null(authToken)) + Sys.setenv(ARVADOS_API_TOKEN = authToken) + + hostName <- Sys.getenv("ARVADOS_API_HOST") + token <- Sys.getenv("ARVADOS_API_TOKEN") + + if(hostName == "" | token == "") + stop(paste("Please provide host name and authentification token", + "or set ARVADOS_API_HOST and ARVADOS_API_TOKEN", + "environment variables.")) + + private$token <- token + private$host <- paste0("https://", hostName, "/arvados/v1/") + private$numRetries <- numRetries + private$REST <- RESTService$new(token, hostName, + HttpRequest$new(), HttpParser$new(), + numRetries) - container_requests.list = function(filters = NULL, - where = NULL, order = NULL, select = NULL, - distinct = NULL, limit = "100", offset = "0", - count = "exact") - { - endPoint <- stringr::str_interp("container_requests") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource }, - authorized_keys.get = function(uuid) + projects.get = function(uuid) { - endPoint <- stringr::str_interp("authorized_keys/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource + self$groups.get(uuid) }, - authorized_keys.create = function(authorizedkey, - ensure_unique_name = "false") + projects.create = function(group, ensure_unique_name = "false") { - endPoint <- stringr::str_interp("authorized_keys") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) - - if(length(authorizedkey) > 0) - body <- jsonlite::toJSON(list(authorizedkey = authorizedkey), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource + group <- c("group_class" = "project", group) + self$groups.create(group, ensure_unique_name) }, - authorized_keys.update = function(authorizedkey, uuid) + projects.update = function(group, uuid) { - endPoint <- stringr::str_interp("authorized_keys/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - if(length(authorizedkey) > 0) - body <- jsonlite::toJSON(list(authorizedkey = authorizedkey), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("PUT", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource + group <- c("group_class" = "project", group) + self$groups.update(group, uuid) }, - authorized_keys.delete = function(uuid) + projects.list = function(filters = NULL, where = NULL, + order = NULL, select = NULL, distinct = NULL, + limit = "100", offset = "0", count = "exact", + include_trash = NULL) { - endPoint <- stringr::str_interp("authorized_keys/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - body <- NULL - - response <- private$REST$http$exec("DELETE", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource + filters[[length(filters) + 1]] <- list("group_class", "=", "project") + self$groups.list(filters, where, order, select, distinct, + limit, offset, count, include_trash) }, - authorized_keys.list = function(filters = NULL, - where = NULL, order = NULL, select = NULL, - distinct = NULL, limit = "100", offset = "0", - count = "exact") - { - endPoint <- stringr::str_interp("authorized_keys") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource + projects.delete = function(uuid) + { + self$groups.delete(uuid) }, - collections.get = function(uuid) + api_clients.get = function(uuid) { - endPoint <- stringr::str_interp("collections/${uuid}") + endPoint <- stringr::str_interp("api_clients/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3229,16 +1656,18 @@ Arvados <- R6::R6Class( resource }, - collections.create = function(collection, ensure_unique_name = "false") + api_clients.create = function(apiclient, + ensure_unique_name = "false", cluster_id = NULL) { - endPoint <- stringr::str_interp("collections") + endPoint <- stringr::str_interp("api_clients") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - if(length(collection) > 0) - body <- jsonlite::toJSON(list(collection = collection), + if(length(apiclient) > 0) + body <- jsonlite::toJSON(list(apiclient = apiclient), auto_unbox = TRUE) else body <- NULL @@ -3253,16 +1682,16 @@ Arvados <- R6::R6Class( resource }, - collections.update = function(collection, uuid) + api_clients.update = function(apiclient, uuid) { - endPoint <- stringr::str_interp("collections/${uuid}") + endPoint <- stringr::str_interp("api_clients/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - if(length(collection) > 0) - body <- jsonlite::toJSON(list(collection = collection), + if(length(apiclient) > 0) + body <- jsonlite::toJSON(list(apiclient = apiclient), auto_unbox = TRUE) else body <- NULL @@ -3277,11 +1706,11 @@ Arvados <- R6::R6Class( resource }, - collections.delete = function(uuid) + api_clients.delete = function(uuid) { - endPoint <- stringr::str_interp("collections/${uuid}") + endPoint <- stringr::str_interp("api_clients/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3297,13 +1726,19 @@ Arvados <- R6::R6Class( resource }, - collections.provenance = function(uuid) + api_clients.list = function(filters = NULL, + where = NULL, order = NULL, select = NULL, + distinct = NULL, limit = "100", offset = "0", + count = "exact", cluster_id = NULL, bypass_federation = NULL) { - endPoint <- stringr::str_interp("collections/${uuid}/provenance") + endPoint <- stringr::str_interp("api_clients") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- NULL + queryArgs <- list(filters = filters, where = where, + order = order, select = select, distinct = distinct, + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation) body <- NULL @@ -3317,11 +1752,11 @@ Arvados <- R6::R6Class( resource }, - collections.used_by = function(uuid) + api_client_authorizations.get = function(uuid) { - endPoint <- stringr::str_interp("collections/${uuid}/used_by") + endPoint <- stringr::str_interp("api_client_authorizations/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3337,15 +1772,21 @@ Arvados <- R6::R6Class( resource }, - collections.trash = function(uuid) + api_client_authorizations.create = function(apiclientauthorization, + ensure_unique_name = "false", cluster_id = NULL) { - endPoint <- stringr::str_interp("collections/${uuid}/trash") + endPoint <- stringr::str_interp("api_client_authorizations") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- NULL + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - body <- NULL + if(length(apiclientauthorization) > 0) + body <- jsonlite::toJSON(list(apiclientauthorization = apiclientauthorization), + auto_unbox = TRUE) + else + body <- NULL response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) @@ -3357,43 +1798,21 @@ Arvados <- R6::R6Class( resource }, - collections.untrash = function(uuid) + api_client_authorizations.update = function(apiclientauthorization, uuid) { - endPoint <- stringr::str_interp("collections/${uuid}/untrash") + endPoint <- stringr::str_interp("api_client_authorizations/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - collections.list = function(filters = NULL, - where = NULL, order = NULL, select = NULL, - distinct = NULL, limit = "100", offset = "0", - count = "exact", include_trash = NULL) - { - endPoint <- stringr::str_interp("collections") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count, - include_trash = include_trash) - - body <- NULL + if(length(apiclientauthorization) > 0) + body <- jsonlite::toJSON(list(apiclientauthorization = apiclientauthorization), + auto_unbox = TRUE) + else + body <- NULL - response <- private$REST$http$exec("GET", url, headers, body, + response <- private$REST$http$exec("PUT", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -3403,17 +1822,17 @@ Arvados <- R6::R6Class( resource }, - humans.get = function(uuid) + api_client_authorizations.delete = function(uuid) { - endPoint <- stringr::str_interp("humans/${uuid}") + endPoint <- stringr::str_interp("api_client_authorizations/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("GET", url, headers, body, + response <- private$REST$http$exec("DELETE", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -3423,19 +1842,16 @@ Arvados <- R6::R6Class( resource }, - humans.create = function(human, ensure_unique_name = "false") + api_client_authorizations.create_system_auth = function(api_client_id = NULL, scopes = NULL) { - endPoint <- stringr::str_interp("humans") + endPoint <- stringr::str_interp("api_client_authorizations/create_system_auth") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(api_client_id = api_client_id, + scopes = scopes) - if(length(human) > 0) - body <- jsonlite::toJSON(list(human = human), - auto_unbox = TRUE) - else - body <- NULL + body <- NULL response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) @@ -3447,41 +1863,17 @@ Arvados <- R6::R6Class( resource }, - humans.update = function(human, uuid) - { - endPoint <- stringr::str_interp("humans/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - if(length(human) > 0) - body <- jsonlite::toJSON(list(human = human), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("PUT", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - humans.delete = function(uuid) + api_client_authorizations.current = function() { - endPoint <- stringr::str_interp("humans/${uuid}") + endPoint <- stringr::str_interp("api_client_authorizations/current") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("DELETE", url, headers, body, + response <- private$REST$http$exec("GET", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -3491,17 +1883,19 @@ Arvados <- R6::R6Class( resource }, - humans.list = function(filters = NULL, where = NULL, - order = NULL, select = NULL, distinct = NULL, - limit = "100", offset = "0", count = "exact") + api_client_authorizations.list = function(filters = NULL, + where = NULL, order = NULL, select = NULL, + distinct = NULL, limit = "100", offset = "0", + count = "exact", cluster_id = NULL, bypass_federation = NULL) { - endPoint <- stringr::str_interp("humans") + endPoint <- stringr::str_interp("api_client_authorizations") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation) body <- NULL @@ -3515,11 +1909,11 @@ Arvados <- R6::R6Class( resource }, - job_tasks.get = function(uuid) + authorized_keys.get = function(uuid) { - endPoint <- stringr::str_interp("job_tasks/${uuid}") + endPoint <- stringr::str_interp("authorized_keys/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3535,16 +1929,18 @@ Arvados <- R6::R6Class( resource }, - job_tasks.create = function(jobtask, ensure_unique_name = "false") + authorized_keys.create = function(authorizedkey, + ensure_unique_name = "false", cluster_id = NULL) { - endPoint <- stringr::str_interp("job_tasks") + endPoint <- stringr::str_interp("authorized_keys") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - if(length(jobtask) > 0) - body <- jsonlite::toJSON(list(jobtask = jobtask), + if(length(authorizedkey) > 0) + body <- jsonlite::toJSON(list(authorizedkey = authorizedkey), auto_unbox = TRUE) else body <- NULL @@ -3559,16 +1955,16 @@ Arvados <- R6::R6Class( resource }, - job_tasks.update = function(jobtask, uuid) + authorized_keys.update = function(authorizedkey, uuid) { - endPoint <- stringr::str_interp("job_tasks/${uuid}") + endPoint <- stringr::str_interp("authorized_keys/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - if(length(jobtask) > 0) - body <- jsonlite::toJSON(list(jobtask = jobtask), + if(length(authorizedkey) > 0) + body <- jsonlite::toJSON(list(authorizedkey = authorizedkey), auto_unbox = TRUE) else body <- NULL @@ -3583,11 +1979,11 @@ Arvados <- R6::R6Class( resource }, - job_tasks.delete = function(uuid) + authorized_keys.delete = function(uuid) { - endPoint <- stringr::str_interp("job_tasks/${uuid}") + endPoint <- stringr::str_interp("authorized_keys/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3603,18 +1999,19 @@ Arvados <- R6::R6Class( resource }, - job_tasks.list = function(filters = NULL, + authorized_keys.list = function(filters = NULL, where = NULL, order = NULL, select = NULL, distinct = NULL, limit = "100", offset = "0", - count = "exact") + count = "exact", cluster_id = NULL, bypass_federation = NULL) { - endPoint <- stringr::str_interp("job_tasks") + endPoint <- stringr::str_interp("authorized_keys") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation) body <- NULL @@ -3628,11 +2025,11 @@ Arvados <- R6::R6Class( resource }, - jobs.get = function(uuid) + collections.get = function(uuid) { - endPoint <- stringr::str_interp("jobs/${uuid}") + endPoint <- stringr::str_interp("collections/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3648,21 +2045,18 @@ Arvados <- R6::R6Class( resource }, - jobs.create = function(job, ensure_unique_name = "false", - find_or_create = "false", filters = NULL, - minimum_script_version = NULL, exclude_script_versions = NULL) + collections.create = function(collection, + ensure_unique_name = "false", cluster_id = NULL) { - endPoint <- stringr::str_interp("jobs") + endPoint <- stringr::str_interp("collections") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(ensure_unique_name = ensure_unique_name, - find_or_create = find_or_create, filters = filters, - minimum_script_version = minimum_script_version, - exclude_script_versions = exclude_script_versions) + cluster_id = cluster_id) - if(length(job) > 0) - body <- jsonlite::toJSON(list(job = job), + if(length(collection) > 0) + body <- jsonlite::toJSON(list(collection = collection), auto_unbox = TRUE) else body <- NULL @@ -3677,16 +2071,16 @@ Arvados <- R6::R6Class( resource }, - jobs.update = function(job, uuid) + collections.update = function(collection, uuid) { - endPoint <- stringr::str_interp("jobs/${uuid}") + endPoint <- stringr::str_interp("collections/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - if(length(job) > 0) - body <- jsonlite::toJSON(list(job = job), + if(length(collection) > 0) + body <- jsonlite::toJSON(list(collection = collection), auto_unbox = TRUE) else body <- NULL @@ -3701,11 +2095,11 @@ Arvados <- R6::R6Class( resource }, - jobs.delete = function(uuid) + collections.delete = function(uuid) { - endPoint <- stringr::str_interp("jobs/${uuid}") + endPoint <- stringr::str_interp("collections/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3721,17 +2115,13 @@ Arvados <- R6::R6Class( resource }, - jobs.queue = function(filters = NULL, where = NULL, - order = NULL, select = NULL, distinct = NULL, - limit = "100", offset = "0", count = "exact") + collections.provenance = function(uuid) { - endPoint <- stringr::str_interp("jobs/queue") + endPoint <- stringr::str_interp("collections/${uuid}/provenance") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + queryArgs <- NULL body <- NULL @@ -3745,11 +2135,11 @@ Arvados <- R6::R6Class( resource }, - jobs.queue_size = function() + collections.used_by = function(uuid) { - endPoint <- stringr::str_interp("jobs/queue_size") + endPoint <- stringr::str_interp("collections/${uuid}/used_by") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3765,11 +2155,11 @@ Arvados <- R6::R6Class( resource }, - jobs.cancel = function(uuid) + collections.trash = function(uuid) { - endPoint <- stringr::str_interp("jobs/${uuid}/cancel") + endPoint <- stringr::str_interp("collections/${uuid}/trash") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3785,11 +2175,11 @@ Arvados <- R6::R6Class( resource }, - jobs.lock = function(uuid) + collections.untrash = function(uuid) { - endPoint <- stringr::str_interp("jobs/${uuid}/lock") + endPoint <- stringr::str_interp("collections/${uuid}/untrash") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3805,17 +2195,21 @@ Arvados <- R6::R6Class( resource }, - jobs.list = function(filters = NULL, where = NULL, - order = NULL, select = NULL, distinct = NULL, - limit = "100", offset = "0", count = "exact") + collections.list = function(filters = NULL, + where = NULL, order = NULL, select = NULL, + distinct = NULL, limit = "100", offset = "0", + count = "exact", cluster_id = NULL, bypass_federation = NULL, + include_trash = NULL, include_old_versions = NULL) { - endPoint <- stringr::str_interp("jobs") + endPoint <- stringr::str_interp("collections") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation, + include_trash = include_trash, include_old_versions = include_old_versions) body <- NULL @@ -3829,11 +2223,11 @@ Arvados <- R6::R6Class( resource }, - keep_disks.get = function(uuid) + containers.get = function(uuid) { - endPoint <- stringr::str_interp("keep_disks/${uuid}") + endPoint <- stringr::str_interp("containers/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3849,16 +2243,18 @@ Arvados <- R6::R6Class( resource }, - keep_disks.create = function(keepdisk, ensure_unique_name = "false") + containers.create = function(container, ensure_unique_name = "false", + cluster_id = NULL) { - endPoint <- stringr::str_interp("keep_disks") + endPoint <- stringr::str_interp("containers") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - if(length(keepdisk) > 0) - body <- jsonlite::toJSON(list(keepdisk = keepdisk), + if(length(container) > 0) + body <- jsonlite::toJSON(list(container = container), auto_unbox = TRUE) else body <- NULL @@ -3873,16 +2269,16 @@ Arvados <- R6::R6Class( resource }, - keep_disks.update = function(keepdisk, uuid) + containers.update = function(container, uuid) { - endPoint <- stringr::str_interp("keep_disks/${uuid}") + endPoint <- stringr::str_interp("containers/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - if(length(keepdisk) > 0) - body <- jsonlite::toJSON(list(keepdisk = keepdisk), + if(length(container) > 0) + body <- jsonlite::toJSON(list(container = container), auto_unbox = TRUE) else body <- NULL @@ -3897,11 +2293,11 @@ Arvados <- R6::R6Class( resource }, - keep_disks.delete = function(uuid) + containers.delete = function(uuid) { - endPoint <- stringr::str_interp("keep_disks/${uuid}") + endPoint <- stringr::str_interp("containers/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -3917,43 +2313,13 @@ Arvados <- R6::R6Class( resource }, - keep_disks.ping = function(uuid = NULL, ping_secret, - node_uuid = NULL, filesystem_uuid = NULL, - service_host = NULL, service_port, service_ssl_flag) - { - endPoint <- stringr::str_interp("keep_disks/ping") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(uuid = uuid, ping_secret = ping_secret, - node_uuid = node_uuid, filesystem_uuid = filesystem_uuid, - service_host = service_host, service_port = service_port, - service_ssl_flag = service_ssl_flag) - - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - keep_disks.list = function(filters = NULL, - where = NULL, order = NULL, select = NULL, - distinct = NULL, limit = "100", offset = "0", - count = "exact") + containers.auth = function(uuid) { - endPoint <- stringr::str_interp("keep_disks") + endPoint <- stringr::str_interp("containers/${uuid}/auth") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + queryArgs <- NULL body <- NULL @@ -3967,42 +2333,16 @@ Arvados <- R6::R6Class( resource }, - nodes.get = function(uuid) + containers.lock = function(uuid) { - endPoint <- stringr::str_interp("nodes/${uuid}") + endPoint <- stringr::str_interp("containers/${uuid}/lock") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - nodes.create = function(node, ensure_unique_name = "false", - assign_slot = NULL) - { - endPoint <- stringr::str_interp("nodes") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name, - assign_slot = assign_slot) - - if(length(node) > 0) - body <- jsonlite::toJSON(list(node = node), - auto_unbox = TRUE) - else - body <- NULL - response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -4013,21 +2353,17 @@ Arvados <- R6::R6Class( resource }, - nodes.update = function(node, uuid, assign_slot = NULL) + containers.unlock = function(uuid) { - endPoint <- stringr::str_interp("nodes/${uuid}") + endPoint <- stringr::str_interp("containers/${uuid}/unlock") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(assign_slot = assign_slot) + queryArgs <- NULL - if(length(node) > 0) - body <- jsonlite::toJSON(list(node = node), - auto_unbox = TRUE) - else - body <- NULL + body <- NULL - response <- private$REST$http$exec("PUT", url, headers, body, + response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -4037,17 +2373,17 @@ Arvados <- R6::R6Class( resource }, - nodes.delete = function(uuid) + containers.secret_mounts = function(uuid) { - endPoint <- stringr::str_interp("nodes/${uuid}") + endPoint <- stringr::str_interp("containers/${uuid}/secret_mounts") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("DELETE", url, headers, body, + response <- private$REST$http$exec("GET", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -4057,17 +2393,17 @@ Arvados <- R6::R6Class( resource }, - nodes.ping = function(uuid, ping_secret) + containers.current = function() { - endPoint <- stringr::str_interp("nodes/${uuid}/ping") + endPoint <- stringr::str_interp("containers/current") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ping_secret = ping_secret) + queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("POST", url, headers, body, + response <- private$REST$http$exec("GET", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -4077,17 +2413,19 @@ Arvados <- R6::R6Class( resource }, - nodes.list = function(filters = NULL, where = NULL, - order = NULL, select = NULL, distinct = NULL, - limit = "100", offset = "0", count = "exact") + containers.list = function(filters = NULL, + where = NULL, order = NULL, select = NULL, + distinct = NULL, limit = "100", offset = "0", + count = "exact", cluster_id = NULL, bypass_federation = NULL) { - endPoint <- stringr::str_interp("nodes") + endPoint <- stringr::str_interp("containers") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation) body <- NULL @@ -4101,11 +2439,11 @@ Arvados <- R6::R6Class( resource }, - links.get = function(uuid) + container_requests.get = function(uuid) { - endPoint <- stringr::str_interp("links/${uuid}") + endPoint <- stringr::str_interp("container_requests/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -4121,16 +2459,18 @@ Arvados <- R6::R6Class( resource }, - links.create = function(link, ensure_unique_name = "false") + container_requests.create = function(containerrequest, + ensure_unique_name = "false", cluster_id = NULL) { - endPoint <- stringr::str_interp("links") + endPoint <- stringr::str_interp("container_requests") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - if(length(link) > 0) - body <- jsonlite::toJSON(list(link = link), + if(length(containerrequest) > 0) + body <- jsonlite::toJSON(list(containerrequest = containerrequest), auto_unbox = TRUE) else body <- NULL @@ -4145,16 +2485,16 @@ Arvados <- R6::R6Class( resource }, - links.update = function(link, uuid) + container_requests.update = function(containerrequest, uuid) { - endPoint <- stringr::str_interp("links/${uuid}") + endPoint <- stringr::str_interp("container_requests/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - if(length(link) > 0) - body <- jsonlite::toJSON(list(link = link), + if(length(containerrequest) > 0) + body <- jsonlite::toJSON(list(containerrequest = containerrequest), auto_unbox = TRUE) else body <- NULL @@ -4169,11 +2509,11 @@ Arvados <- R6::R6Class( resource }, - links.delete = function(uuid) + container_requests.delete = function(uuid) { - endPoint <- stringr::str_interp("links/${uuid}") + endPoint <- stringr::str_interp("container_requests/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -4189,37 +2529,21 @@ Arvados <- R6::R6Class( resource }, - links.list = function(filters = NULL, where = NULL, - order = NULL, select = NULL, distinct = NULL, - limit = "100", offset = "0", count = "exact") + container_requests.list = function(filters = NULL, + where = NULL, order = NULL, select = NULL, + distinct = NULL, limit = "100", offset = "0", + count = "exact", cluster_id = NULL, bypass_federation = NULL, + include_trash = NULL) { - endPoint <- stringr::str_interp("links") + endPoint <- stringr::str_interp("container_requests") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) - - body <- NULL - - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - links.get_permissions = function(uuid) - { - endPoint <- stringr::str_interp("permissions/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation, + include_trash = include_trash) body <- NULL @@ -4233,11 +2557,11 @@ Arvados <- R6::R6Class( resource }, - keep_services.get = function(uuid) + groups.get = function(uuid) { - endPoint <- stringr::str_interp("keep_services/${uuid}") + endPoint <- stringr::str_interp("groups/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -4253,17 +2577,18 @@ Arvados <- R6::R6Class( resource }, - keep_services.create = function(keepservice, - ensure_unique_name = "false") + groups.create = function(group, ensure_unique_name = "false", + cluster_id = NULL, async = "false") { - endPoint <- stringr::str_interp("keep_services") + endPoint <- stringr::str_interp("groups") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id, async = async) - if(length(keepservice) > 0) - body <- jsonlite::toJSON(list(keepservice = keepservice), + if(length(group) > 0) + body <- jsonlite::toJSON(list(group = group), auto_unbox = TRUE) else body <- NULL @@ -4278,16 +2603,16 @@ Arvados <- R6::R6Class( resource }, - keep_services.update = function(keepservice, uuid) + groups.update = function(group, uuid, async = "false") { - endPoint <- stringr::str_interp("keep_services/${uuid}") + endPoint <- stringr::str_interp("groups/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- NULL + queryArgs <- list(async = async) - if(length(keepservice) > 0) - body <- jsonlite::toJSON(list(keepservice = keepservice), + if(length(group) > 0) + body <- jsonlite::toJSON(list(group = group), auto_unbox = TRUE) else body <- NULL @@ -4302,11 +2627,11 @@ Arvados <- R6::R6Class( resource }, - keep_services.delete = function(uuid) + groups.delete = function(uuid) { - endPoint <- stringr::str_interp("keep_services/${uuid}") + endPoint <- stringr::str_interp("groups/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -4322,13 +2647,22 @@ Arvados <- R6::R6Class( resource }, - keep_services.accessible = function() + groups.contents = function(filters = NULL, + where = NULL, order = NULL, distinct = NULL, + limit = "100", offset = "0", count = "exact", + cluster_id = NULL, bypass_federation = NULL, + include_trash = NULL, uuid = NULL, recursive = NULL, + include = NULL) { - endPoint <- stringr::str_interp("keep_services/accessible") + endPoint <- stringr::str_interp("groups/contents") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- NULL + queryArgs <- list(filters = filters, where = where, + order = order, distinct = distinct, limit = limit, + offset = offset, count = count, cluster_id = cluster_id, + bypass_federation = bypass_federation, include_trash = include_trash, + uuid = uuid, recursive = recursive, include = include) body <- NULL @@ -4342,18 +2676,21 @@ Arvados <- R6::R6Class( resource }, - keep_services.list = function(filters = NULL, + groups.shared = function(filters = NULL, where = NULL, order = NULL, select = NULL, distinct = NULL, limit = "100", offset = "0", - count = "exact") + count = "exact", cluster_id = NULL, bypass_federation = NULL, + include_trash = NULL, include = NULL) { - endPoint <- stringr::str_interp("keep_services") + endPoint <- stringr::str_interp("groups/shared") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation, + include_trash = include_trash, include = include) body <- NULL @@ -4367,41 +2704,16 @@ Arvados <- R6::R6Class( resource }, - pipeline_templates.get = function(uuid) + groups.trash = function(uuid) { - endPoint <- stringr::str_interp("pipeline_templates/${uuid}") + endPoint <- stringr::str_interp("groups/${uuid}/trash") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("GET", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - pipeline_templates.create = function(pipelinetemplate, - ensure_unique_name = "false") - { - endPoint <- stringr::str_interp("pipeline_templates") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) - - if(length(pipelinetemplate) > 0) - body <- jsonlite::toJSON(list(pipelinetemplate = pipelinetemplate), - auto_unbox = TRUE) - else - body <- NULL - response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -4412,41 +2724,17 @@ Arvados <- R6::R6Class( resource }, - pipeline_templates.update = function(pipelinetemplate, uuid) - { - endPoint <- stringr::str_interp("pipeline_templates/${uuid}") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- NULL - - if(length(pipelinetemplate) > 0) - body <- jsonlite::toJSON(list(pipelinetemplate = pipelinetemplate), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("PUT", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - pipeline_templates.delete = function(uuid) + groups.untrash = function(uuid) { - endPoint <- stringr::str_interp("pipeline_templates/${uuid}") + endPoint <- stringr::str_interp("groups/${uuid}/untrash") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("DELETE", url, headers, body, + response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -4456,18 +2744,21 @@ Arvados <- R6::R6Class( resource }, - pipeline_templates.list = function(filters = NULL, - where = NULL, order = NULL, select = NULL, - distinct = NULL, limit = "100", offset = "0", - count = "exact") + groups.list = function(filters = NULL, where = NULL, + order = NULL, select = NULL, distinct = NULL, + limit = "100", offset = "0", count = "exact", + cluster_id = NULL, bypass_federation = NULL, + include_trash = NULL) { - endPoint <- stringr::str_interp("pipeline_templates") + endPoint <- stringr::str_interp("groups") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation, + include_trash = include_trash) body <- NULL @@ -4481,11 +2772,11 @@ Arvados <- R6::R6Class( resource }, - pipeline_instances.get = function(uuid) + keep_services.get = function(uuid) { - endPoint <- stringr::str_interp("pipeline_instances/${uuid}") + endPoint <- stringr::str_interp("keep_services/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -4501,17 +2792,18 @@ Arvados <- R6::R6Class( resource }, - pipeline_instances.create = function(pipelineinstance, - ensure_unique_name = "false") + keep_services.create = function(keepservice, + ensure_unique_name = "false", cluster_id = NULL) { - endPoint <- stringr::str_interp("pipeline_instances") + endPoint <- stringr::str_interp("keep_services") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - if(length(pipelineinstance) > 0) - body <- jsonlite::toJSON(list(pipelineinstance = pipelineinstance), + if(length(keepservice) > 0) + body <- jsonlite::toJSON(list(keepservice = keepservice), auto_unbox = TRUE) else body <- NULL @@ -4526,16 +2818,16 @@ Arvados <- R6::R6Class( resource }, - pipeline_instances.update = function(pipelineinstance, uuid) + keep_services.update = function(keepservice, uuid) { - endPoint <- stringr::str_interp("pipeline_instances/${uuid}") + endPoint <- stringr::str_interp("keep_services/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - if(length(pipelineinstance) > 0) - body <- jsonlite::toJSON(list(pipelineinstance = pipelineinstance), + if(length(keepservice) > 0) + body <- jsonlite::toJSON(list(keepservice = keepservice), auto_unbox = TRUE) else body <- NULL @@ -4550,11 +2842,11 @@ Arvados <- R6::R6Class( resource }, - pipeline_instances.delete = function(uuid) + keep_services.delete = function(uuid) { - endPoint <- stringr::str_interp("pipeline_instances/${uuid}") + endPoint <- stringr::str_interp("keep_services/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -4570,17 +2862,17 @@ Arvados <- R6::R6Class( resource }, - pipeline_instances.cancel = function(uuid) + keep_services.accessible = function() { - endPoint <- stringr::str_interp("pipeline_instances/${uuid}/cancel") + endPoint <- stringr::str_interp("keep_services/accessible") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("POST", url, headers, body, + response <- private$REST$http$exec("GET", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -4590,18 +2882,19 @@ Arvados <- R6::R6Class( resource }, - pipeline_instances.list = function(filters = NULL, + keep_services.list = function(filters = NULL, where = NULL, order = NULL, select = NULL, distinct = NULL, limit = "100", offset = "0", - count = "exact") + count = "exact", cluster_id = NULL, bypass_federation = NULL) { - endPoint <- stringr::str_interp("pipeline_instances") + endPoint <- stringr::str_interp("keep_services") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation) body <- NULL @@ -4615,11 +2908,11 @@ Arvados <- R6::R6Class( resource }, - repositories.get = function(uuid) + links.get = function(uuid) { - endPoint <- stringr::str_interp("repositories/${uuid}") + endPoint <- stringr::str_interp("links/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -4635,16 +2928,18 @@ Arvados <- R6::R6Class( resource }, - repositories.create = function(repository, ensure_unique_name = "false") + links.create = function(link, ensure_unique_name = "false", + cluster_id = NULL) { - endPoint <- stringr::str_interp("repositories") + endPoint <- stringr::str_interp("links") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - if(length(repository) > 0) - body <- jsonlite::toJSON(list(repository = repository), + if(length(link) > 0) + body <- jsonlite::toJSON(list(link = link), auto_unbox = TRUE) else body <- NULL @@ -4659,16 +2954,16 @@ Arvados <- R6::R6Class( resource }, - repositories.update = function(repository, uuid) + links.update = function(link, uuid) { - endPoint <- stringr::str_interp("repositories/${uuid}") + endPoint <- stringr::str_interp("links/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - if(length(repository) > 0) - body <- jsonlite::toJSON(list(repository = repository), + if(length(link) > 0) + body <- jsonlite::toJSON(list(link = link), auto_unbox = TRUE) else body <- NULL @@ -4683,11 +2978,11 @@ Arvados <- R6::R6Class( resource }, - repositories.delete = function(uuid) + links.delete = function(uuid) { - endPoint <- stringr::str_interp("repositories/${uuid}") + endPoint <- stringr::str_interp("links/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -4703,13 +2998,19 @@ Arvados <- R6::R6Class( resource }, - repositories.get_all_permissions = function() + links.list = function(filters = NULL, where = NULL, + order = NULL, select = NULL, distinct = NULL, + limit = "100", offset = "0", count = "exact", + cluster_id = NULL, bypass_federation = NULL) { - endPoint <- stringr::str_interp("repositories/get_all_permissions") + endPoint <- stringr::str_interp("links") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- NULL + queryArgs <- list(filters = filters, where = where, + order = order, select = select, distinct = distinct, + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation) body <- NULL @@ -4723,18 +3024,13 @@ Arvados <- R6::R6Class( resource }, - repositories.list = function(filters = NULL, - where = NULL, order = NULL, select = NULL, - distinct = NULL, limit = "100", offset = "0", - count = "exact") + links.get_permissions = function(uuid) { - endPoint <- stringr::str_interp("repositories") + endPoint <- stringr::str_interp("permissions/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + queryArgs <- NULL body <- NULL @@ -4748,11 +3044,11 @@ Arvados <- R6::R6Class( resource }, - specimens.get = function(uuid) + logs.get = function(uuid) { - endPoint <- stringr::str_interp("specimens/${uuid}") + endPoint <- stringr::str_interp("logs/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -4768,16 +3064,18 @@ Arvados <- R6::R6Class( resource }, - specimens.create = function(specimen, ensure_unique_name = "false") + logs.create = function(log, ensure_unique_name = "false", + cluster_id = NULL) { - endPoint <- stringr::str_interp("specimens") + endPoint <- stringr::str_interp("logs") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - if(length(specimen) > 0) - body <- jsonlite::toJSON(list(specimen = specimen), + if(length(log) > 0) + body <- jsonlite::toJSON(list(log = log), auto_unbox = TRUE) else body <- NULL @@ -4792,16 +3090,16 @@ Arvados <- R6::R6Class( resource }, - specimens.update = function(specimen, uuid) + logs.update = function(log, uuid) { - endPoint <- stringr::str_interp("specimens/${uuid}") + endPoint <- stringr::str_interp("logs/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - if(length(specimen) > 0) - body <- jsonlite::toJSON(list(specimen = specimen), + if(length(log) > 0) + body <- jsonlite::toJSON(list(log = log), auto_unbox = TRUE) else body <- NULL @@ -4816,11 +3114,11 @@ Arvados <- R6::R6Class( resource }, - specimens.delete = function(uuid) + logs.delete = function(uuid) { - endPoint <- stringr::str_interp("specimens/${uuid}") + endPoint <- stringr::str_interp("logs/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -4836,18 +3134,19 @@ Arvados <- R6::R6Class( resource }, - specimens.list = function(filters = NULL, - where = NULL, order = NULL, select = NULL, - distinct = NULL, limit = "100", offset = "0", - count = "exact") + logs.list = function(filters = NULL, where = NULL, + order = NULL, select = NULL, distinct = NULL, + limit = "100", offset = "0", count = "exact", + cluster_id = NULL, bypass_federation = NULL) { - endPoint <- stringr::str_interp("specimens") + endPoint <- stringr::str_interp("logs") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation) body <- NULL @@ -4861,11 +3160,11 @@ Arvados <- R6::R6Class( resource }, - logs.get = function(uuid) + users.get = function(uuid) { - endPoint <- stringr::str_interp("logs/${uuid}") + endPoint <- stringr::str_interp("users/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -4881,16 +3180,18 @@ Arvados <- R6::R6Class( resource }, - logs.create = function(log, ensure_unique_name = "false") + users.create = function(user, ensure_unique_name = "false", + cluster_id = NULL) { - endPoint <- stringr::str_interp("logs") + endPoint <- stringr::str_interp("users") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - if(length(log) > 0) - body <- jsonlite::toJSON(list(log = log), + if(length(user) > 0) + body <- jsonlite::toJSON(list(user = user), auto_unbox = TRUE) else body <- NULL @@ -4905,21 +3206,41 @@ Arvados <- R6::R6Class( resource }, - logs.update = function(log, uuid) + users.update = function(user, uuid, bypass_federation = NULL) { - endPoint <- stringr::str_interp("logs/${uuid}") + endPoint <- stringr::str_interp("users/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- NULL + queryArgs <- list(bypass_federation = bypass_federation) - if(length(log) > 0) - body <- jsonlite::toJSON(list(log = log), + if(length(user) > 0) + body <- jsonlite::toJSON(list(user = user), auto_unbox = TRUE) else body <- NULL - response <- private$REST$http$exec("PUT", url, headers, body, + response <- private$REST$http$exec("PUT", url, headers, body, + queryArgs, private$numRetries) + resource <- private$REST$httpParser$parseJSONResponse(response) + + if(!is.null(resource$errors)) + stop(resource$errors) + + resource + }, + + users.delete = function(uuid) + { + endPoint <- stringr::str_interp("users/${uuid}") + url <- paste0(private$host, endPoint) + headers <- list(Authorization = paste("Bearer", private$token), + "Content-Type" = "application/json") + queryArgs <- NULL + + body <- NULL + + response <- private$REST$http$exec("DELETE", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -4929,17 +3250,17 @@ Arvados <- R6::R6Class( resource }, - logs.delete = function(uuid) + users.current = function() { - endPoint <- stringr::str_interp("logs/${uuid}") + endPoint <- stringr::str_interp("users/current") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("DELETE", url, headers, body, + response <- private$REST$http$exec("GET", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -4949,17 +3270,13 @@ Arvados <- R6::R6Class( resource }, - logs.list = function(filters = NULL, where = NULL, - order = NULL, select = NULL, distinct = NULL, - limit = "100", offset = "0", count = "exact") + users.system = function() { - endPoint <- stringr::str_interp("logs") + endPoint <- stringr::str_interp("users/system") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + queryArgs <- NULL body <- NULL @@ -4973,17 +3290,17 @@ Arvados <- R6::R6Class( resource }, - traits.get = function(uuid) + users.activate = function(uuid) { - endPoint <- stringr::str_interp("traits/${uuid}") + endPoint <- stringr::str_interp("users/${uuid}/activate") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("GET", url, headers, body, + response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -4993,19 +3310,18 @@ Arvados <- R6::R6Class( resource }, - traits.create = function(trait, ensure_unique_name = "false") + users.setup = function(uuid = NULL, user = NULL, + repo_name = NULL, vm_uuid = NULL, send_notification_email = "false") { - endPoint <- stringr::str_interp("traits") + endPoint <- stringr::str_interp("users/setup") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(uuid = uuid, user = user, + repo_name = repo_name, vm_uuid = vm_uuid, + send_notification_email = send_notification_email) - if(length(trait) > 0) - body <- jsonlite::toJSON(list(trait = trait), - auto_unbox = TRUE) - else - body <- NULL + body <- NULL response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) @@ -5017,21 +3333,17 @@ Arvados <- R6::R6Class( resource }, - traits.update = function(trait, uuid) + users.unsetup = function(uuid) { - endPoint <- stringr::str_interp("traits/${uuid}") + endPoint <- stringr::str_interp("users/${uuid}/unsetup") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - if(length(trait) > 0) - body <- jsonlite::toJSON(list(trait = trait), - auto_unbox = TRUE) - else - body <- NULL + body <- NULL - response <- private$REST$http$exec("PUT", url, headers, body, + response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5041,17 +3353,17 @@ Arvados <- R6::R6Class( resource }, - traits.delete = function(uuid) + users.update_uuid = function(uuid, new_uuid) { - endPoint <- stringr::str_interp("traits/${uuid}") + endPoint <- stringr::str_interp("users/${uuid}/update_uuid") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- NULL + queryArgs <- list(new_uuid = new_uuid) body <- NULL - response <- private$REST$http$exec("DELETE", url, headers, body, + response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5061,21 +3373,21 @@ Arvados <- R6::R6Class( resource }, - traits.list = function(filters = NULL, where = NULL, - order = NULL, select = NULL, distinct = NULL, - limit = "100", offset = "0", count = "exact") + users.merge = function(new_owner_uuid, new_user_token = NULL, + redirect_to_new_user = NULL, old_user_uuid = NULL, + new_user_uuid = NULL) { - endPoint <- stringr::str_interp("traits") + endPoint <- stringr::str_interp("users/merge") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + queryArgs <- list(new_owner_uuid = new_owner_uuid, + new_user_token = new_user_token, redirect_to_new_user = redirect_to_new_user, + old_user_uuid = old_user_uuid, new_user_uuid = new_user_uuid) body <- NULL - response <- private$REST$http$exec("GET", url, headers, body, + response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5085,13 +3397,19 @@ Arvados <- R6::R6Class( resource }, - virtual_machines.get = function(uuid) + users.list = function(filters = NULL, where = NULL, + order = NULL, select = NULL, distinct = NULL, + limit = "100", offset = "0", count = "exact", + cluster_id = NULL, bypass_federation = NULL) { - endPoint <- stringr::str_interp("virtual_machines/${uuid}") + endPoint <- stringr::str_interp("users") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- NULL + queryArgs <- list(filters = filters, where = where, + order = order, select = select, distinct = distinct, + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation) body <- NULL @@ -5105,22 +3423,17 @@ Arvados <- R6::R6Class( resource }, - virtual_machines.create = function(virtualmachine, - ensure_unique_name = "false") + repositories.get = function(uuid) { - endPoint <- stringr::str_interp("virtual_machines") + endPoint <- stringr::str_interp("repositories/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- NULL - if(length(virtualmachine) > 0) - body <- jsonlite::toJSON(list(virtualmachine = virtualmachine), - auto_unbox = TRUE) - else - body <- NULL + body <- NULL - response <- private$REST$http$exec("POST", url, headers, body, + response <- private$REST$http$exec("GET", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5130,21 +3443,23 @@ Arvados <- R6::R6Class( resource }, - virtual_machines.update = function(virtualmachine, uuid) + repositories.create = function(repository, + ensure_unique_name = "false", cluster_id = NULL) { - endPoint <- stringr::str_interp("virtual_machines/${uuid}") + endPoint <- stringr::str_interp("repositories") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- NULL + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - if(length(virtualmachine) > 0) - body <- jsonlite::toJSON(list(virtualmachine = virtualmachine), + if(length(repository) > 0) + body <- jsonlite::toJSON(list(repository = repository), auto_unbox = TRUE) else body <- NULL - response <- private$REST$http$exec("PUT", url, headers, body, + response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5154,17 +3469,21 @@ Arvados <- R6::R6Class( resource }, - virtual_machines.delete = function(uuid) + repositories.update = function(repository, uuid) { - endPoint <- stringr::str_interp("virtual_machines/${uuid}") + endPoint <- stringr::str_interp("repositories/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - body <- NULL + if(length(repository) > 0) + body <- jsonlite::toJSON(list(repository = repository), + auto_unbox = TRUE) + else + body <- NULL - response <- private$REST$http$exec("DELETE", url, headers, body, + response <- private$REST$http$exec("PUT", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5174,17 +3493,17 @@ Arvados <- R6::R6Class( resource }, - virtual_machines.logins = function(uuid) + repositories.delete = function(uuid) { - endPoint <- stringr::str_interp("virtual_machines/${uuid}/logins") + endPoint <- stringr::str_interp("repositories/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("GET", url, headers, body, + response <- private$REST$http$exec("DELETE", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5194,11 +3513,11 @@ Arvados <- R6::R6Class( resource }, - virtual_machines.get_all_logins = function() + repositories.get_all_permissions = function() { - endPoint <- stringr::str_interp("virtual_machines/get_all_logins") + endPoint <- stringr::str_interp("repositories/get_all_permissions") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -5214,18 +3533,19 @@ Arvados <- R6::R6Class( resource }, - virtual_machines.list = function(filters = NULL, + repositories.list = function(filters = NULL, where = NULL, order = NULL, select = NULL, distinct = NULL, limit = "100", offset = "0", - count = "exact") + count = "exact", cluster_id = NULL, bypass_federation = NULL) { - endPoint <- stringr::str_interp("virtual_machines") + endPoint <- stringr::str_interp("repositories") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation) body <- NULL @@ -5239,11 +3559,11 @@ Arvados <- R6::R6Class( resource }, - workflows.get = function(uuid) + virtual_machines.get = function(uuid) { - endPoint <- stringr::str_interp("workflows/${uuid}") + endPoint <- stringr::str_interp("virtual_machines/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -5259,16 +3579,18 @@ Arvados <- R6::R6Class( resource }, - workflows.create = function(workflow, ensure_unique_name = "false") + virtual_machines.create = function(virtualmachine, + ensure_unique_name = "false", cluster_id = NULL) { - endPoint <- stringr::str_interp("workflows") + endPoint <- stringr::str_interp("virtual_machines") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - if(length(workflow) > 0) - body <- jsonlite::toJSON(list(workflow = workflow), + if(length(virtualmachine) > 0) + body <- jsonlite::toJSON(list(virtualmachine = virtualmachine), auto_unbox = TRUE) else body <- NULL @@ -5283,16 +3605,16 @@ Arvados <- R6::R6Class( resource }, - workflows.update = function(workflow, uuid) + virtual_machines.update = function(virtualmachine, uuid) { - endPoint <- stringr::str_interp("workflows/${uuid}") + endPoint <- stringr::str_interp("virtual_machines/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - if(length(workflow) > 0) - body <- jsonlite::toJSON(list(workflow = workflow), + if(length(virtualmachine) > 0) + body <- jsonlite::toJSON(list(virtualmachine = virtualmachine), auto_unbox = TRUE) else body <- NULL @@ -5307,11 +3629,11 @@ Arvados <- R6::R6Class( resource }, - workflows.delete = function(uuid) + virtual_machines.delete = function(uuid) { - endPoint <- stringr::str_interp("workflows/${uuid}") + endPoint <- stringr::str_interp("virtual_machines/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -5327,18 +3649,13 @@ Arvados <- R6::R6Class( resource }, - workflows.list = function(filters = NULL, - where = NULL, order = NULL, select = NULL, - distinct = NULL, limit = "100", offset = "0", - count = "exact") + virtual_machines.logins = function(uuid) { - endPoint <- stringr::str_interp("workflows") + endPoint <- stringr::str_interp("virtual_machines/${uuid}/logins") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + queryArgs <- NULL body <- NULL @@ -5352,11 +3669,11 @@ Arvados <- R6::R6Class( resource }, - groups.get = function(uuid) + virtual_machines.get_all_logins = function() { - endPoint <- stringr::str_interp("groups/${uuid}") + endPoint <- stringr::str_interp("virtual_machines/get_all_logins") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -5372,45 +3689,23 @@ Arvados <- R6::R6Class( resource }, - groups.create = function(group, ensure_unique_name = "false") - { - endPoint <- stringr::str_interp("groups") - url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), - "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) - - if(length(group) > 0) - body <- jsonlite::toJSON(list(group = group), - auto_unbox = TRUE) - else - body <- NULL - - response <- private$REST$http$exec("POST", url, headers, body, - queryArgs, private$numRetries) - resource <- private$REST$httpParser$parseJSONResponse(response) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - groups.update = function(group, uuid) + virtual_machines.list = function(filters = NULL, + where = NULL, order = NULL, select = NULL, + distinct = NULL, limit = "100", offset = "0", + count = "exact", cluster_id = NULL, bypass_federation = NULL) { - endPoint <- stringr::str_interp("groups/${uuid}") + endPoint <- stringr::str_interp("virtual_machines") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- NULL + queryArgs <- list(filters = filters, where = where, + order = order, select = select, distinct = distinct, + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation) - if(length(group) > 0) - body <- jsonlite::toJSON(list(group = group), - auto_unbox = TRUE) - else - body <- NULL + body <- NULL - response <- private$REST$http$exec("PUT", url, headers, body, + response <- private$REST$http$exec("GET", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5420,17 +3715,17 @@ Arvados <- R6::R6Class( resource }, - groups.delete = function(uuid) + workflows.get = function(uuid) { - endPoint <- stringr::str_interp("groups/${uuid}") + endPoint <- stringr::str_interp("workflows/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("DELETE", url, headers, body, + response <- private$REST$http$exec("GET", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5440,23 +3735,23 @@ Arvados <- R6::R6Class( resource }, - groups.contents = function(filters = NULL, - where = NULL, order = NULL, distinct = NULL, - limit = "100", offset = "0", count = "exact", - include_trash = NULL, uuid = NULL, recursive = NULL) + workflows.create = function(workflow, ensure_unique_name = "false", + cluster_id = NULL) { - endPoint <- stringr::str_interp("groups/contents") + endPoint <- stringr::str_interp("workflows") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(filters = filters, where = where, - order = order, distinct = distinct, limit = limit, - offset = offset, count = count, include_trash = include_trash, - uuid = uuid, recursive = recursive) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) - body <- NULL + if(length(workflow) > 0) + body <- jsonlite::toJSON(list(workflow = workflow), + auto_unbox = TRUE) + else + body <- NULL - response <- private$REST$http$exec("GET", url, headers, body, + response <- private$REST$http$exec("POST", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5466,17 +3761,21 @@ Arvados <- R6::R6Class( resource }, - groups.trash = function(uuid) + workflows.update = function(workflow, uuid) { - endPoint <- stringr::str_interp("groups/${uuid}/trash") + endPoint <- stringr::str_interp("workflows/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL - body <- NULL + if(length(workflow) > 0) + body <- jsonlite::toJSON(list(workflow = workflow), + auto_unbox = TRUE) + else + body <- NULL - response <- private$REST$http$exec("POST", url, headers, body, + response <- private$REST$http$exec("PUT", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5486,17 +3785,17 @@ Arvados <- R6::R6Class( resource }, - groups.untrash = function(uuid) + workflows.delete = function(uuid) { - endPoint <- stringr::str_interp("groups/${uuid}/untrash") + endPoint <- stringr::str_interp("workflows/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL body <- NULL - response <- private$REST$http$exec("POST", url, headers, body, + response <- private$REST$http$exec("DELETE", url, headers, body, queryArgs, private$numRetries) resource <- private$REST$httpParser$parseJSONResponse(response) @@ -5506,19 +3805,19 @@ Arvados <- R6::R6Class( resource }, - groups.list = function(filters = NULL, where = NULL, - order = NULL, select = NULL, distinct = NULL, - limit = "100", offset = "0", count = "exact", - include_trash = NULL) + workflows.list = function(filters = NULL, + where = NULL, order = NULL, select = NULL, + distinct = NULL, limit = "100", offset = "0", + count = "exact", cluster_id = NULL, bypass_federation = NULL) { - endPoint <- stringr::str_interp("groups") + endPoint <- stringr::str_interp("workflows") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, limit = limit, offset = offset, count = count, - include_trash = include_trash) + cluster_id = cluster_id, bypass_federation = bypass_federation) body <- NULL @@ -5536,7 +3835,7 @@ Arvados <- R6::R6Class( { endPoint <- stringr::str_interp("user_agreements/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -5553,13 +3852,14 @@ Arvados <- R6::R6Class( }, user_agreements.create = function(useragreement, - ensure_unique_name = "false") + ensure_unique_name = "false", cluster_id = NULL) { endPoint <- stringr::str_interp("user_agreements") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") - queryArgs <- list(ensure_unique_name = ensure_unique_name) + queryArgs <- list(ensure_unique_name = ensure_unique_name, + cluster_id = cluster_id) if(length(useragreement) > 0) body <- jsonlite::toJSON(list(useragreement = useragreement), @@ -5581,7 +3881,7 @@ Arvados <- R6::R6Class( { endPoint <- stringr::str_interp("user_agreements/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -5605,7 +3905,7 @@ Arvados <- R6::R6Class( { endPoint <- stringr::str_interp("user_agreements/${uuid}") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -5625,7 +3925,7 @@ Arvados <- R6::R6Class( { endPoint <- stringr::str_interp("user_agreements/signatures") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -5645,7 +3945,7 @@ Arvados <- R6::R6Class( { endPoint <- stringr::str_interp("user_agreements/sign") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL @@ -5664,15 +3964,16 @@ Arvados <- R6::R6Class( user_agreements.list = function(filters = NULL, where = NULL, order = NULL, select = NULL, distinct = NULL, limit = "100", offset = "0", - count = "exact") + count = "exact", cluster_id = NULL, bypass_federation = NULL) { endPoint <- stringr::str_interp("user_agreements") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- list(filters = filters, where = where, order = order, select = select, distinct = distinct, - limit = limit, offset = offset, count = count) + limit = limit, offset = offset, count = count, + cluster_id = cluster_id, bypass_federation = bypass_federation) body <- NULL @@ -5690,7 +3991,27 @@ Arvados <- R6::R6Class( { endPoint <- stringr::str_interp("user_agreements/new") url <- paste0(private$host, endPoint) - headers <- list(Authorization = paste("OAuth2", private$token), + headers <- list(Authorization = paste("Bearer", private$token), + "Content-Type" = "application/json") + queryArgs <- NULL + + body <- NULL + + response <- private$REST$http$exec("GET", url, headers, body, + queryArgs, private$numRetries) + resource <- private$REST$httpParser$parseJSONResponse(response) + + if(!is.null(resource$errors)) + stop(resource$errors) + + resource + }, + + configs.get = function() + { + endPoint <- stringr::str_interp("config") + url <- paste0(private$host, endPoint) + headers <- list(Authorization = paste("Bearer", private$token), "Content-Type" = "application/json") queryArgs <- NULL diff --git a/sdk/R/R/ArvadosFile.R b/sdk/R/R/ArvadosFile.R index 70bb4450ec..fb1d3b335c 100644 --- a/sdk/R/R/ArvadosFile.R +++ b/sdk/R/R/ArvadosFile.R @@ -2,8 +2,6 @@ # # SPDX-License-Identifier: Apache-2.0 -source("./R/util.R") - #' ArvadosFile #' #' ArvadosFile class represents a file inside Arvados collection. diff --git a/sdk/R/R/Collection.R b/sdk/R/R/Collection.R index 8869d7be67..1440836547 100644 --- a/sdk/R/R/Collection.R +++ b/sdk/R/R/Collection.R @@ -2,11 +2,6 @@ # # SPDX-License-Identifier: Apache-2.0 -source("./R/Subcollection.R") -source("./R/ArvadosFile.R") -source("./R/RESTService.R") -source("./R/util.R") - #' Collection #' #' Collection class provides interface for working with Arvados collections. diff --git a/sdk/R/R/CollectionTree.R b/sdk/R/R/CollectionTree.R index 5f7a29455a..e01e7e8de9 100644 --- a/sdk/R/R/CollectionTree.R +++ b/sdk/R/R/CollectionTree.R @@ -2,10 +2,6 @@ # # SPDX-License-Identifier: Apache-2.0 -source("./R/Subcollection.R") -source("./R/ArvadosFile.R") -source("./R/util.R") - CollectionTree <- R6::R6Class( "CollectionTree", public = list( diff --git a/sdk/R/R/HttpParser.R b/sdk/R/R/HttpParser.R index cd492166a1..60bf782827 100644 --- a/sdk/R/R/HttpParser.R +++ b/sdk/R/R/HttpParser.R @@ -31,14 +31,13 @@ HttpParser <- R6::R6Class( { text <- rawToChar(response$content) doc <- XML::xmlParse(text, asText=TRUE) - base <- paste(paste("/", strsplit(uri, "/")[[1]][-1:-3], sep="", collapse=""), "/", sep="") + base <- paste("/", strsplit(uri, "/")[[1]][4], "/", sep="") result <- unlist( XML::xpathApply(doc, "//D:response/D:href", function(node) { sub(base, "", URLdecode(XML::xmlValue(node)), fixed=TRUE) }) ) - result <- result[result != ""] - result[-1] + result[result != ""] }, getFileSizesFromResponse = function(response, uri) diff --git a/sdk/R/R/HttpRequest.R b/sdk/R/R/HttpRequest.R index 07defca90f..18b36f9689 100644 --- a/sdk/R/R/HttpRequest.R +++ b/sdk/R/R/HttpRequest.R @@ -2,8 +2,6 @@ # # SPDX-License-Identifier: Apache-2.0 -source("./R/util.R") - HttpRequest <- R6::R6Class( "HttrRequest", @@ -54,7 +52,7 @@ HttpRequest <- R6::R6Class( { query <- paste0(names(query), "=", query, collapse = "&") - return(paste0("/?", query)) + return(paste0("?", query)) } return("") diff --git a/sdk/R/R/RESTService.R b/sdk/R/R/RESTService.R index 78b2c35e32..9c65e72861 100644 --- a/sdk/R/R/RESTService.R +++ b/sdk/R/R/RESTService.R @@ -36,16 +36,13 @@ RESTService <- R6::R6Class( { if(is.null(private$webDavHostName)) { - discoveryDocumentURL <- paste0("https://", private$rawHostName, - "/discovery/v1/apis/arvados/v1/rest") + publicConfigURL <- paste0("https://", private$rawHostName, + "/arvados/v1/config") - headers <- list(Authorization = paste("OAuth2", self$token)) - - serverResponse <- self$http$exec("GET", discoveryDocumentURL, headers, - retryTimes = self$numRetries) + serverResponse <- self$http$exec("GET", publicConfigURL, retryTimes = self$numRetries) - discoveryDocument <- self$httpParser$parseJSONResponse(serverResponse) - private$webDavHostName <- discoveryDocument$keepWebServiceUrl + configDocument <- self$httpParser$parseJSONResponse(serverResponse) + private$webDavHostName <- configDocument$Services$WebDAVDownload$ExternalURL if(is.null(private$webDavHostName)) stop("Unable to find WebDAV server.") @@ -118,7 +115,7 @@ RESTService <- R6::R6Class( collectionURL <- URLencode(paste0(self$getWebDavHostName(), "c=", uuid)) - headers <- list("Authorization" = paste("OAuth2", self$token)) + headers <- list("Authorization" = paste("Bearer", self$token)) response <- self$http$exec("PROPFIND", collectionURL, headers, retryTimes = self$numRetries) diff --git a/sdk/R/R/Subcollection.R b/sdk/R/R/Subcollection.R index 17a9ef3ee3..981bd687a2 100644 --- a/sdk/R/R/Subcollection.R +++ b/sdk/R/R/Subcollection.R @@ -2,8 +2,6 @@ # # SPDX-License-Identifier: Apache-2.0 -source("./R/util.R") - #' Subcollection #' #' Subcollection class represents a folder inside Arvados collection. diff --git a/sdk/R/R/autoGenAPI.R b/sdk/R/R/autoGenAPI.R index 1aef20b6cb..c86684f8b0 100644 --- a/sdk/R/R/autoGenAPI.R +++ b/sdk/R/R/autoGenAPI.R @@ -3,7 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 getAPIDocument <- function(){ - url <- "https://4xphq.arvadosapi.com/discovery/v1/apis/arvados/v1/rest" + url <- "https://jutro.arvadosapi.com/discovery/v1/apis/arvados/v1/rest" serverResponse <- httr::RETRY("GET", url = url) httr::content(serverResponse, as = "parsed", type = "application/json") @@ -17,6 +17,10 @@ generateAPI <- function() discoveryDocument <- getAPIDocument() methodResources <- discoveryDocument$resources + + # Don't emit deprecated APIs + methodResources <- methodResources[!(names(methodResources) %in% c("jobs", "job_tasks", "pipeline_templates", "pipeline_instances", + "keep_disks", "nodes", "humans", "traits", "specimens"))] resourceNames <- names(methodResources) methodDoc <- genMethodsDoc(methodResources, resourceNames) @@ -34,6 +38,10 @@ generateAPI <- function() arvadosAPIFooter) fileConn <- file("./R/Arvados.R", "w") + writeLines(c( + "# Copyright (C) The Arvados Authors. All rights reserved.", + "#", + "# SPDX-License-Identifier: Apache-2.0", ""), fileConn) writeLines(unlist(arvadosClass), fileConn) close(fileConn) NULL @@ -252,7 +260,7 @@ getRequestURL <- function(methodMetaData) getRequestHeaders <- function() { - c("headers <- list(Authorization = paste(\"OAuth2\", private$token), ", + c("headers <- list(Authorization = paste(\"Bearer\", private$token), ", " \"Content-Type\" = \"application/json\")") } diff --git a/sdk/R/README.Rmd b/sdk/R/README.Rmd index c1d6c7cf4f..63bf55373d 100644 --- a/sdk/R/README.Rmd +++ b/sdk/R/README.Rmd @@ -14,7 +14,7 @@ knitr::opts_chunk$set(eval=FALSE) ``` ```{r} -install.packages("ArvadosR", repos=c("http://r.arvados.org", getOption("repos")["CRAN"]), dependencies=TRUE) +install.packages("ArvadosR", repos=c("https://r.arvados.org", getOption("repos")["CRAN"]), dependencies=TRUE) ``` Note: on Linux, you may have to install supporting packages. diff --git a/sdk/R/tests/testthat/test-ArvadosFile.R b/sdk/R/tests/testthat/test-ArvadosFile.R index e3457c993f..da7d52c67d 100644 --- a/sdk/R/tests/testthat/test-ArvadosFile.R +++ b/sdk/R/tests/testthat/test-ArvadosFile.R @@ -23,7 +23,7 @@ test_that("get always returns NULL", { dog <- ArvadosFile$new("dog") responseIsNull <- is.null(dog$get("something")) - expect_that(responseIsNull, is_true()) + expect_true(responseIsNull) }) test_that("getFirst always returns NULL", { @@ -31,7 +31,7 @@ test_that("getFirst always returns NULL", { dog <- ArvadosFile$new("dog") responseIsNull <- is.null(dog$getFirst()) - expect_that(responseIsNull, is_true()) + expect_true(responseIsNull) }) test_that(paste("getSizeInBytes returns zero if arvadosFile", @@ -266,8 +266,8 @@ test_that("move moves arvados file inside collection tree", { dogIsNullOnOldLocation <- is.null(collection$get("animal/dog")) dogExistsOnNewLocation <- !is.null(collection$get("dog")) - expect_that(dogIsNullOnOldLocation, is_true()) - expect_that(dogExistsOnNewLocation, is_true()) + expect_true(dogIsNullOnOldLocation) + expect_true(dogExistsOnNewLocation) }) test_that(paste("copy raises exception if arvados file", @@ -339,8 +339,8 @@ test_that("copy copies arvados file inside collection tree", { dogExistsOnOldLocation <- !is.null(collection$get("animal/dog")) dogExistsOnNewLocation <- !is.null(collection$get("dog")) - expect_that(dogExistsOnOldLocation, is_true()) - expect_that(dogExistsOnNewLocation, is_true()) + expect_true(dogExistsOnOldLocation) + expect_true(dogExistsOnNewLocation) }) test_that("duplicate performs deep cloning of Arvados file", { diff --git a/sdk/R/tests/testthat/test-Collection.R b/sdk/R/tests/testthat/test-Collection.R index 636359ae21..20a2ecf05b 100644 --- a/sdk/R/tests/testthat/test-Collection.R +++ b/sdk/R/tests/testthat/test-Collection.R @@ -86,7 +86,7 @@ test_that(paste("add adds ArvadosFile or Subcollection", dog <- collection$get("animal/dog") dogExistsInCollection <- !is.null(dog) && dog$getName() == "dog" - expect_that(dogExistsInCollection, is_true()) + expect_true(dogExistsInCollection) expect_that(fakeREST$createCallCount, equals(1)) }) @@ -119,8 +119,8 @@ test_that(paste("create adds files specified by fileNames", dogExistsInCollection <- !is.null(dog) && dog$getName() == "dog" catExistsInCollection <- !is.null(cat) && cat$getName() == "cat" - expect_that(dogExistsInCollection, is_true()) - expect_that(catExistsInCollection, is_true()) + expect_true(dogExistsInCollection) + expect_true(catExistsInCollection) expect_that(fakeREST$createCallCount, equals(2)) }) @@ -168,8 +168,8 @@ test_that(paste("remove removes files specified by paths", dogExistsInCollection <- !is.null(dog) && dog$getName() == "dog" catExistsInCollection <- !is.null(cat) && cat$getName() == "cat" - expect_that(dogExistsInCollection, is_false()) - expect_that(catExistsInCollection, is_false()) + expect_false(dogExistsInCollection) + expect_false(catExistsInCollection) expect_that(fakeREST$deleteCallCount, equals(2)) }) @@ -188,8 +188,8 @@ test_that(paste("move moves content to a new location inside file tree", dogIsNullOnOldLocation <- is.null(collection$get("animal/dog")) dogExistsOnNewLocation <- !is.null(collection$get("dog")) - expect_that(dogIsNullOnOldLocation, is_true()) - expect_that(dogExistsOnNewLocation, is_true()) + expect_true(dogIsNullOnOldLocation) + expect_true(dogExistsOnNewLocation) expect_that(fakeREST$moveCallCount, equals(1)) }) @@ -219,7 +219,7 @@ test_that("getFileListing returns sorted collection content received from REST s contentMatchExpected <- all(collection$getFileListing() == c("animal", "animal/fish", "ball")) - expect_that(contentMatchExpected, is_true()) + expect_true(contentMatchExpected) #2 calls because Collection$new calls getFileListing once expect_that(fakeREST$getCollectionContentCallCount, equals(2)) @@ -237,7 +237,7 @@ test_that("get returns arvados file or subcollection from internal tree structur fish <- collection$get("animal/fish") fishIsNotNull <- !is.null(fish) - expect_that(fishIsNotNull, is_true()) + expect_true(fishIsNotNull) expect_that(fish$getName(), equals("fish")) }) @@ -256,8 +256,8 @@ test_that(paste("copy copies content to a new location inside file tree", dogExistsOnOldLocation <- !is.null(collection$get("animal/dog")) dogExistsOnNewLocation <- !is.null(collection$get("dog")) - expect_that(dogExistsOnOldLocation, is_true()) - expect_that(dogExistsOnNewLocation, is_true()) + expect_true(dogExistsOnOldLocation) + expect_true(dogExistsOnNewLocation) expect_that(fakeREST$copyCallCount, equals(1)) }) diff --git a/sdk/R/tests/testthat/test-CollectionTree.R b/sdk/R/tests/testthat/test-CollectionTree.R index 1a3aefecd0..c4bf9a1da7 100644 --- a/sdk/R/tests/testthat/test-CollectionTree.R +++ b/sdk/R/tests/testthat/test-CollectionTree.R @@ -34,16 +34,16 @@ test_that("constructor creates file tree from character array properly", { boat$getCollection() == "myCollection" expect_that(root$getName(), equals("")) - expect_that(rootIsOfTypeSubcollection, is_true()) - expect_that(rootHasNoParent, is_true()) - expect_that(animalIsOfTypeSubcollection, is_true()) - expect_that(animalsParentIsRoot, is_true()) - expect_that(animalContainsDog, is_true()) - expect_that(dogIsOfTypeArvadosFile, is_true()) - expect_that(dogsParentIsAnimal, is_true()) - expect_that(boatIsOfTypeArvadosFile, is_true()) - expect_that(boatsParentIsRoot, is_true()) - expect_that(allElementsBelongToSameCollection, is_true()) + expect_true(rootIsOfTypeSubcollection) + expect_true(rootHasNoParent) + expect_true(animalIsOfTypeSubcollection) + expect_true(animalsParentIsRoot) + expect_true(animalContainsDog) + expect_true(dogIsOfTypeArvadosFile) + expect_true(dogsParentIsAnimal) + expect_true(boatIsOfTypeArvadosFile) + expect_true(boatsParentIsRoot) + expect_true(allElementsBelongToSameCollection) }) test_that("getElement returns element from tree if element exists on specified path", { @@ -72,7 +72,7 @@ test_that("getElement returns NULL from tree if element doesn't exists on specif fish <- collectionTree$getElement("animal/fish") fishIsNULL <- is.null(fish) - expect_that(fishIsNULL, is_true()) + expect_true(fishIsNULL) }) test_that("getElement trims ./ from start of relativePath", { diff --git a/sdk/R/tests/testthat/test-HttpParser.R b/sdk/R/tests/testthat/test-HttpParser.R index 82c0fb0dd2..fb9f379b36 100644 --- a/sdk/R/tests/testthat/test-HttpParser.R +++ b/sdk/R/tests/testthat/test-HttpParser.R @@ -18,7 +18,7 @@ test_that("parseJSONResponse generates and returns JSON object from server respo result <- parser$parseJSONResponse(serverResponse) barExists <- !is.null(result$bar) - expect_that(barExists, is_true()) + expect_true(barExists) expect_that(unlist(result$bar$foo), equals(10)) }) @@ -40,7 +40,7 @@ test_that(paste("parseResponse generates and returns character vector", webDAVResponseSample = paste0("/c=aaaaa-bbbbb-ccccccccccccccc/c=aaaaa-bbbbb-ccccccccccccccc/Fri, 11 Jan 2018 1", "1:11:11 GMT argparse.ArgumentParser action="store_false", default=True, help=argparse.SUPPRESS) + parser.add_argument("--disable-color", dest="enable_color", + action="store_false", default=True, + help=argparse.SUPPRESS) + parser.add_argument("--disable-js-validation", action="store_true", default=False, help=argparse.SUPPRESS) diff --git a/sdk/cwl/arvados_cwl/arvcontainer.py b/sdk/cwl/arvados_cwl/arvcontainer.py index fb23c2ccf7..99d82f3398 100644 --- a/sdk/cwl/arvados_cwl/arvcontainer.py +++ b/sdk/cwl/arvados_cwl/arvcontainer.py @@ -325,8 +325,8 @@ class ArvadosContainer(JobBase): logger.info("%s reused container %s", self.arvrunner.label(self), response["container_uuid"]) else: logger.info("%s %s state is %s", self.arvrunner.label(self), response["uuid"], response["state"]) - except Exception: - logger.exception("%s got an error", self.arvrunner.label(self)) + except Exception as e: + logger.exception("%s error submitting container\n%s", self.arvrunner.label(self), e) logger.debug("Container request was %s", container_request) self.output_callback({}, "permanentFail") @@ -475,6 +475,7 @@ class RunnerContainer(Runner): "--api=containers", "--no-log-timestamps", "--disable-validate", + "--disable-color", "--eval-timeout=%s" % self.arvrunner.eval_timeout, "--thread-count=%s" % self.arvrunner.thread_count, "--enable-reuse" if self.enable_reuse else "--disable-reuse", diff --git a/sdk/cwl/arvados_cwl/executor.py b/sdk/cwl/arvados_cwl/executor.py index 9ba798ec64..68141586de 100644 --- a/sdk/cwl/arvados_cwl/executor.py +++ b/sdk/cwl/arvados_cwl/executor.py @@ -524,6 +524,8 @@ The 'jobs' API is no longer supported. def arv_executor(self, updated_tool, job_order, runtimeContext, logger=None): self.debug = runtimeContext.debug + logger.info("Using cluster %s (%s)", self.api.config()["ClusterID"], self.api.config()["Services"]["Controller"]["ExternalURL"]) + updated_tool.visit(self.check_features) self.project_uuid = runtimeContext.project_uuid diff --git a/sdk/cwl/tests/test_submit.py b/sdk/cwl/tests/test_submit.py index 4da545bf36..d2dd6e8162 100644 --- a/sdk/cwl/tests/test_submit.py +++ b/sdk/cwl/tests/test_submit.py @@ -302,7 +302,7 @@ def stubs(func): 'secret_mounts': {}, 'state': 'Committed', 'command': ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--enable-reuse', "--collection-cache-size=256", '--debug', '--on-error=continue', '/var/lib/cwl/workflow.json#main', '/var/lib/cwl/cwl.input.json'], @@ -412,7 +412,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["command"] = [ 'arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--disable-reuse', "--collection-cache-size=256", '--debug', '--on-error=continue', @@ -436,7 +436,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["command"] = [ 'arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--disable-reuse', "--collection-cache-size=256", '--debug', '--on-error=continue', '/var/lib/cwl/workflow.json#main', '/var/lib/cwl/cwl.input.json'] @@ -468,7 +468,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["command"] = ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--enable-reuse', "--collection-cache-size=256", '--debug', '--on-error=stop', @@ -491,7 +491,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["command"] = ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--enable-reuse', "--collection-cache-size=256", "--output-name="+output_name, '--debug', '--on-error=continue', @@ -513,7 +513,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["command"] = ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--enable-reuse', "--collection-cache-size=256", "--debug", "--storage-classes=foo", '--on-error=continue', @@ -576,7 +576,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["command"] = ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--enable-reuse', "--collection-cache-size=256", '--debug', '--on-error=continue', @@ -599,7 +599,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["command"] = ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--enable-reuse', "--collection-cache-size=256", '--debug', '--on-error=continue', @@ -623,7 +623,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["command"] = ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--enable-reuse', "--collection-cache-size=256", "--output-tags="+output_tags, '--debug', '--on-error=continue', @@ -700,7 +700,7 @@ class TestSubmit(unittest.TestCase): 'name': 'expect_arvworkflow.cwl#main', 'container_image': '999999999999999999999999999999d3+99', 'command': ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--enable-reuse', "--collection-cache-size=256", '--debug', '--on-error=continue', '/var/lib/cwl/workflow/expect_arvworkflow.cwl#main', '/var/lib/cwl/cwl.input.json'], @@ -795,7 +795,7 @@ class TestSubmit(unittest.TestCase): 'name': 'a test workflow', 'container_image': "999999999999999999999999999999d3+99", 'command': ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--enable-reuse', "--collection-cache-size=256", '--debug', '--on-error=continue', '/var/lib/cwl/workflow.json#main', '/var/lib/cwl/cwl.input.json'], @@ -859,7 +859,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["owner_uuid"] = project_uuid expect_container["command"] = ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', "--eval-timeout=20", "--thread-count=1", '--enable-reuse', "--collection-cache-size=256", '--debug', '--on-error=continue', @@ -881,7 +881,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["command"] = ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=60.0', '--thread-count=1', '--enable-reuse', "--collection-cache-size=256", '--debug', '--on-error=continue', @@ -902,7 +902,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["command"] = ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--enable-reuse', "--collection-cache-size=500", '--debug', '--on-error=continue', @@ -924,7 +924,7 @@ class TestSubmit(unittest.TestCase): expect_container = copy.deepcopy(stubs.expect_container_spec) expect_container["command"] = ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=20', '--enable-reuse', "--collection-cache-size=256", '--debug', '--on-error=continue', @@ -994,7 +994,7 @@ class TestSubmit(unittest.TestCase): "arv": "http://arvados.org/cwl#", } expect_container['command'] = ['arvados-cwl-runner', '--local', '--api=containers', - '--no-log-timestamps', '--disable-validate', + '--no-log-timestamps', '--disable-validate', '--disable-color', '--eval-timeout=20', '--thread-count=1', '--enable-reuse', "--collection-cache-size=512", '--debug', '--on-error=continue', '/var/lib/cwl/workflow.json#main', '/var/lib/cwl/cwl.input.json'] @@ -1059,6 +1059,7 @@ class TestSubmit(unittest.TestCase): "--api=containers", "--no-log-timestamps", "--disable-validate", + "--disable-color", "--eval-timeout=20", '--thread-count=1', "--enable-reuse", diff --git a/sdk/dev-jobs.dockerfile b/sdk/dev-jobs.dockerfile index dd067e9778..f7719dbc43 100644 --- a/sdk/dev-jobs.dockerfile +++ b/sdk/dev-jobs.dockerfile @@ -14,12 +14,12 @@ # of the docker build root.) FROM debian:9 -MAINTAINER Ward Vandewege +MAINTAINER Peter Amstutz ENV DEBIAN_FRONTEND noninteractive -ARG pythoncmd=python -ARG pipcmd=pip +ARG pythoncmd=python3 +ARG pipcmd=pip3 RUN apt-get update -q && apt-get install -qy --no-install-recommends \ git ${pythoncmd}-pip ${pythoncmd}-virtualenv ${pythoncmd}-dev libcurl4-gnutls-dev \ diff --git a/sdk/go/arvados/config.go b/sdk/go/arvados/config.go index 394e30a737..00438bf340 100644 --- a/sdk/go/arvados/config.go +++ b/sdk/go/arvados/config.go @@ -219,6 +219,7 @@ type Cluster struct { UserNotifierEmailFrom string UserProfileNotificationAddress string PreferDomainForUsername string + UserSetupMailText string } Volumes map[string]Volume Workbench struct { diff --git a/sdk/go/arvados/fs_base.go b/sdk/go/arvados/fs_base.go index 5e57fed3be..aa75fee7c4 100644 --- a/sdk/go/arvados/fs_base.go +++ b/sdk/go/arvados/fs_base.go @@ -598,9 +598,8 @@ func (fs *fileSystem) remove(name string, recursive bool) error { func (fs *fileSystem) Sync() error { if syncer, ok := fs.root.(syncer); ok { return syncer.Sync() - } else { - return ErrInvalidOperation } + return ErrInvalidOperation } func (fs *fileSystem) Flush(string, bool) error { diff --git a/sdk/go/arvados/fs_collection.go b/sdk/go/arvados/fs_collection.go index 060b57b493..d4429f5d72 100644 --- a/sdk/go/arvados/fs_collection.go +++ b/sdk/go/arvados/fs_collection.go @@ -109,16 +109,15 @@ func (fs *collectionFileSystem) newNode(name string, perm os.FileMode, modTime t inodes: make(map[string]inode), }, }, nil - } else { - return &filenode{ - fs: fs, - fileinfo: fileinfo{ - name: name, - mode: perm & ^os.ModeDir, - modTime: modTime, - }, - }, nil } + return &filenode{ + fs: fs, + fileinfo: fileinfo{ + name: name, + mode: perm & ^os.ModeDir, + modTime: modTime, + }, + }, nil } func (fs *collectionFileSystem) Child(name string, replace func(inode) (inode, error)) (inode, error) { @@ -802,9 +801,8 @@ func (dn *dirnode) commitBlock(ctx context.Context, refs []fnSegmentRef, bufsize }() if sync { return <-errs - } else { - return nil } + return nil } type flushOpts struct { diff --git a/sdk/go/auth/salt.go b/sdk/go/auth/salt.go index 667a30f5ef..2140215986 100644 --- a/sdk/go/auth/salt.go +++ b/sdk/go/auth/salt.go @@ -26,9 +26,8 @@ func SaltToken(token, remote string) (string, error) { if len(parts) < 3 || parts[0] != "v2" { if reObsoleteToken.MatchString(token) { return "", ErrObsoleteToken - } else { - return "", ErrTokenFormat } + return "", ErrTokenFormat } uuid := parts[1] secret := parts[2] diff --git a/sdk/go/health/handler_test.go b/sdk/go/health/handler_test.go index c9f6a0b675..097e292d38 100644 --- a/sdk/go/health/handler_test.go +++ b/sdk/go/health/handler_test.go @@ -81,9 +81,8 @@ func (s *Suite) TestPingOverride(c *check.C) { ok = !ok if ok { return nil - } else { - return errors.New("good error") } + return errors.New("good error") }, }, } diff --git a/sdk/go/httpserver/logger.go b/sdk/go/httpserver/logger.go index 59981e3e55..5336488df0 100644 --- a/sdk/go/httpserver/logger.go +++ b/sdk/go/httpserver/logger.go @@ -64,9 +64,8 @@ func rewrapResponseWriter(w http.ResponseWriter, wrapped http.ResponseWriter) ht http.ResponseWriter http.Hijacker }{w, hijacker} - } else { - return w } + return w } func Logger(req *http.Request) logrus.FieldLogger { diff --git a/sdk/go/keepclient/keepclient.go b/sdk/go/keepclient/keepclient.go index b18d7e0464..13f8f95771 100644 --- a/sdk/go/keepclient/keepclient.go +++ b/sdk/go/keepclient/keepclient.go @@ -290,10 +290,9 @@ func (kc *KeepClient) getOrHead(method string, locator string, header http.Heade Hash: md5.New(), Check: locator[0:32], }, expectLength, url, resp.Header, nil - } else { - resp.Body.Close() - return nil, expectLength, url, resp.Header, nil } + resp.Body.Close() + return nil, expectLength, url, resp.Header, nil } serversToTry = retryList } diff --git a/sdk/python/arvados/commands/run.py b/sdk/python/arvados/commands/run.py index a45775470a..1e64eeb1da 100644 --- a/sdk/python/arvados/commands/run.py +++ b/sdk/python/arvados/commands/run.py @@ -236,7 +236,7 @@ def uploadfiles(files, api, dry_run=False, num_retries=0, # empty collection pdh = collection.portable_data_hash() assert (pdh == config.EMPTY_BLOCK_LOCATOR), "Empty collection portable_data_hash did not have expected locator, was %s" % pdh - logger.info("Using empty collection %s", pdh) + logger.debug("Using empty collection %s", pdh) for c in files: c.keepref = "%s/%s" % (pdh, c.fn) diff --git a/services/api/app/controllers/arvados/v1/collections_controller.rb b/services/api/app/controllers/arvados/v1/collections_controller.rb index 81b9ca9e5b..656bd37ae6 100644 --- a/services/api/app/controllers/arvados/v1/collections_controller.rb +++ b/services/api/app/controllers/arvados/v1/collections_controller.rb @@ -56,11 +56,19 @@ class Arvados::V1::CollectionsController < ApplicationController end def find_object_by_uuid - @include_old_versions = true + if params[:include_old_versions].nil? + @include_old_versions = true + else + @include_old_versions = params[:include_old_versions] + end if loc = Keep::Locator.parse(params[:id]) loc.strip_hints! + opts = {} + opts.update({include_trash: true}) if params[:include_trash] + opts.update({include_old_versions: @include_old_versions}) + # It matters which Collection object we pick because we use it to get signed_manifest_text, # the value of which is affected by the value of trash_at. # @@ -72,14 +80,13 @@ class Arvados::V1::CollectionsController < ApplicationController # it will select the Collection object with the longest # available lifetime. - if c = Collection.readable_by(*@read_users).where({ portable_data_hash: loc.to_s }).order("trash_at desc").limit(1).first + if c = Collection.readable_by(*@read_users, opts).where({ portable_data_hash: loc.to_s }).order("trash_at desc").limit(1).first @object = { uuid: c.portable_data_hash, portable_data_hash: c.portable_data_hash, manifest_text: c.signed_manifest_text, } end - true else super end diff --git a/services/api/app/controllers/arvados/v1/users_controller.rb b/services/api/app/controllers/arvados/v1/users_controller.rb index cd23706d08..76e8da0c72 100644 --- a/services/api/app/controllers/arvados/v1/users_controller.rb +++ b/services/api/app/controllers/arvados/v1/users_controller.rb @@ -135,7 +135,7 @@ class Arvados::V1::UsersController < ApplicationController vm_uuid: params[:vm_uuid]) # setup succeeded. send email to user - if params[:send_notification_email] + if params[:send_notification_email] && !Rails.configuration.Users.UserSetupMailText.empty? begin UserNotifier.account_is_setup(@object).deliver_now rescue => e diff --git a/services/api/app/models/arvados_model.rb b/services/api/app/models/arvados_model.rb index 709b4b4d1c..3966b7c393 100644 --- a/services/api/app/models/arvados_model.rb +++ b/services/api/app/models/arvados_model.rb @@ -627,7 +627,12 @@ class ArvadosModel < ApplicationRecord end def permission_to_destroy - permission_to_update + if [system_user_uuid, system_group_uuid, anonymous_group_uuid, + anonymous_user_uuid, public_project_uuid].include? uuid + false + else + permission_to_update + end end def maybe_update_modified_by_fields diff --git a/services/api/app/models/database_seeds.rb b/services/api/app/models/database_seeds.rb index d7c5e04dfd..67bd3d10d7 100644 --- a/services/api/app/models/database_seeds.rb +++ b/services/api/app/models/database_seeds.rb @@ -7,15 +7,18 @@ require 'update_permissions' class DatabaseSeeds extend CurrentApiClient def self.install - system_user - system_group - all_users_group - anonymous_group - anonymous_group_read_permission - anonymous_user - system_root_token_api_client - empty_collection - refresh_permissions + batch_update_permissions do + system_user + system_group + all_users_group + anonymous_group + anonymous_group_read_permission + anonymous_user + system_root_token_api_client + public_project_group + public_project_read_permission + empty_collection + end refresh_trashed end end diff --git a/services/api/app/views/user_notifier/account_is_setup.text.erb b/services/api/app/views/user_notifier/account_is_setup.text.erb index 50d164bfa1..352ee7754e 100644 --- a/services/api/app/views/user_notifier/account_is_setup.text.erb +++ b/services/api/app/views/user_notifier/account_is_setup.text.erb @@ -2,17 +2,4 @@ SPDX-License-Identifier: AGPL-3.0 %> -<% if not @user.full_name.empty? -%> -<%= @user.full_name %>, -<% else -%> -Hi there, -<% end -%> - -Your Arvados shell account has been set up. Please visit the virtual machines page <% if Rails.configuration.Services.Workbench1.ExternalURL %>at - - <%= Rails.configuration.Services.Workbench1.ExternalURL %><%= "/" if !Rails.configuration.Services.Workbench1.ExternalURL.to_s.end_with?("/") %>users/<%= @user.uuid%>/virtual_machines <% else %><% end %> - -for connection instructions. - -Thanks, -The Arvados team. +<%= ERB.new(Rails.configuration.Users.UserSetupMailText, 0, "-").result(binding) %> diff --git a/services/api/db/migrate/20200914203202_public_favorites_project.rb b/services/api/db/migrate/20200914203202_public_favorites_project.rb new file mode 100644 index 0000000000..ef139aa704 --- /dev/null +++ b/services/api/db/migrate/20200914203202_public_favorites_project.rb @@ -0,0 +1,23 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + +class PublicFavoritesProject < ActiveRecord::Migration[5.2] + include CurrentApiClient + def up + act_as_system_user do + public_project_group + public_project_read_permission + Link.where(link_class: "star", + owner_uuid: system_user_uuid, + tail_uuid: all_users_group_uuid).each do |ln| + ln.owner_uuid = public_project_uuid + ln.tail_uuid = public_project_uuid + ln.save! + end + end + end + + def down + end +end diff --git a/services/api/db/structure.sql b/services/api/db/structure.sql index 83987d0518..a5740834c7 100644 --- a/services/api/db/structure.sql +++ b/services/api/db/structure.sql @@ -3197,6 +3197,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20190809135453'), ('20190905151603'), ('20200501150153'), -('20200602141328'); +('20200602141328'), +('20200914203202'); diff --git a/services/api/lib/current_api_client.rb b/services/api/lib/current_api_client.rb index cfdae0bdde..dc40f158ee 100644 --- a/services/api/lib/current_api_client.rb +++ b/services/api/lib/current_api_client.rb @@ -9,6 +9,8 @@ $anonymous_user = nil $anonymous_group = nil $anonymous_group_read_permission = nil $empty_collection = nil +$public_project_group = nil +$public_project_group_read_permission = nil module CurrentApiClient def current_user @@ -65,6 +67,12 @@ module CurrentApiClient 'anonymouspublic'].join('-') end + def public_project_uuid + [Rails.configuration.ClusterID, + Group.uuid_prefix, + 'publicfavorites'].join('-') + end + def system_user $system_user = check_cache $system_user do real_current_user = Thread.current[:user] @@ -189,6 +197,31 @@ module CurrentApiClient end end + def public_project_group + $public_project_group = check_cache $public_project_group do + act_as_system_user do + ActiveRecord::Base.transaction do + Group.where(uuid: public_project_uuid). + first_or_create!(group_class: "project", + name: "Public favorites", + description: "Public favorites") + end + end + end + end + + def public_project_read_permission + $public_project_group_read_permission = + check_cache $public_project_group_read_permission do + act_as_system_user do + Link.where(tail_uuid: anonymous_group.uuid, + head_uuid: public_project_group.uuid, + link_class: "permission", + name: "can_read").first_or_create! + end + end + end + def system_root_token_api_client $system_root_token_api_client = check_cache $system_root_token_api_client do act_as_system_user do diff --git a/services/api/test/fixtures/groups.yml b/services/api/test/fixtures/groups.yml index ee0d786bbe..31a72f1720 100644 --- a/services/api/test/fixtures/groups.yml +++ b/services/api/test/fixtures/groups.yml @@ -56,6 +56,13 @@ system_group: description: System-owned Group group_class: role +public_favorites_project: + uuid: zzzzz-j7d0g-publicfavorites + owner_uuid: zzzzz-tpzed-000000000000000 + name: Public favorites + description: Public favorites + group_class: project + empty_lonely_group: uuid: zzzzz-j7d0g-jtp06ulmvsezgyu owner_uuid: zzzzz-tpzed-000000000000000 diff --git a/services/api/test/fixtures/links.yml b/services/api/test/fixtures/links.yml index ee5dcd3421..b7f1aaa1fa 100644 --- a/services/api/test/fixtures/links.yml +++ b/services/api/test/fixtures/links.yml @@ -1125,3 +1125,17 @@ active_manages_viewing_group: name: can_manage head_uuid: zzzzz-j7d0g-futrprojviewgrp properties: {} + +public_favorites_permission_link: + uuid: zzzzz-o0j2j-testpublicfavor + owner_uuid: zzzzz-tpzed-000000000000000 + created_at: 2014-01-24 20:42:26 -0800 + modified_by_client_uuid: zzzzz-ozdt8-brczlopd8u8d0jr + modified_by_user_uuid: zzzzz-tpzed-000000000000000 + modified_at: 2014-01-24 20:42:26 -0800 + updated_at: 2014-01-24 20:42:26 -0800 + tail_uuid: zzzzz-j7d0g-anonymouspublic + link_class: permission + name: can_read + head_uuid: zzzzz-j7d0g-publicfavorites + properties: {} diff --git a/services/api/test/fixtures/logs.yml b/services/api/test/fixtures/logs.yml index 0785c12a50..25f1efff62 100644 --- a/services/api/test/fixtures/logs.yml +++ b/services/api/test/fixtures/logs.yml @@ -4,51 +4,56 @@ noop: # nothing happened ...to the 'spectator' user id: 1 - uuid: zzzzz-xxxxx-pshmckwoma9plh7 + uuid: zzzzz-57u5n-pshmckwoma9plh7 owner_uuid: zzzzz-tpzed-000000000000000 object_uuid: zzzzz-tpzed-l1s2piq4t4mps8r object_owner_uuid: zzzzz-tpzed-000000000000000 event_at: <%= 1.minute.ago.to_s(:db) %> + created_at: <%= 1.minute.ago.to_s(:db) %> admin_changes_repository2: # admin changes repository2, which is owned by active user id: 2 - uuid: zzzzz-xxxxx-pshmckwoma00002 + uuid: zzzzz-57u5n-pshmckwoma00002 owner_uuid: zzzzz-tpzed-d9tiejq69daie8f # admin user object_uuid: zzzzz-2x53u-382brsig8rp3667 # repository foo object_owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz # active user + created_at: <%= 2.minute.ago.to_s(:db) %> event_at: <%= 2.minute.ago.to_s(:db) %> event_type: update admin_changes_specimen: # admin changes specimen owned_by_spectator id: 3 - uuid: zzzzz-xxxxx-pshmckwoma00003 + uuid: zzzzz-57u5n-pshmckwoma00003 owner_uuid: zzzzz-tpzed-d9tiejq69daie8f # admin user object_uuid: zzzzz-2x53u-3b0xxwzlbzxq5yr # specimen owned_by_spectator object_owner_uuid: zzzzz-tpzed-l1s2piq4t4mps8r # spectator user + created_at: <%= 3.minute.ago.to_s(:db) %> event_at: <%= 3.minute.ago.to_s(:db) %> event_type: update system_adds_foo_file: # foo collection added, readable by active through link id: 4 - uuid: zzzzz-xxxxx-pshmckwoma00004 + uuid: zzzzz-57u5n-pshmckwoma00004 owner_uuid: zzzzz-tpzed-000000000000000 # system user object_uuid: zzzzz-4zz18-znfnqtbbv4spc3w # foo file object_owner_uuid: zzzzz-tpzed-000000000000000 # system user + created_at: <%= 4.minute.ago.to_s(:db) %> event_at: <%= 4.minute.ago.to_s(:db) %> event_type: create system_adds_baz: # baz collection added, readable by active and spectator through group 'all users' group membership id: 5 - uuid: zzzzz-xxxxx-pshmckwoma00005 + uuid: zzzzz-57u5n-pshmckwoma00005 owner_uuid: zzzzz-tpzed-000000000000000 # system user object_uuid: zzzzz-4zz18-y9vne9npefyxh8g # baz file object_owner_uuid: zzzzz-tpzed-000000000000000 # system user + created_at: <%= 5.minute.ago.to_s(:db) %> event_at: <%= 5.minute.ago.to_s(:db) %> event_type: create log_owned_by_active: id: 6 - uuid: zzzzz-xxxxx-pshmckwoma12345 + uuid: zzzzz-57u5n-pshmckwoma12345 owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz # active user object_uuid: zzzzz-2x53u-382brsig8rp3667 # repository foo object_owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz # active user diff --git a/services/api/test/functional/arvados/v1/collections_controller_test.rb b/services/api/test/functional/arvados/v1/collections_controller_test.rb index d8017881d5..c025394bc1 100644 --- a/services/api/test/functional/arvados/v1/collections_controller_test.rb +++ b/services/api/test/functional/arvados/v1/collections_controller_test.rb @@ -1388,6 +1388,16 @@ EOS json_response['name'] end + test 'can get old version collection by PDH' do + authorize_with :active + get :show, params: { + id: collections(:collection_owned_by_active_past_version_1).portable_data_hash, + } + assert_response :success + assert_equal collections(:collection_owned_by_active_past_version_1).portable_data_hash, + json_response['portable_data_hash'] + end + test 'version and current_version_uuid are ignored at creation time' do permit_unsigned_manifests authorize_with :active diff --git a/services/api/test/functional/arvados/v1/users_controller_test.rb b/services/api/test/functional/arvados/v1/users_controller_test.rb index ea5d5b1436..e0f7b8970d 100644 --- a/services/api/test/functional/arvados/v1/users_controller_test.rb +++ b/services/api/test/functional/arvados/v1/users_controller_test.rb @@ -609,6 +609,23 @@ class Arvados::V1::UsersControllerTest < ActionController::TestCase test "setup user with send notification param true and verify email" do authorize_with :admin + Rails.configuration.Users.UserSetupMailText = %{ +<% if not @user.full_name.empty? -%> +<%= @user.full_name %>, +<% else -%> +Hi there, +<% end -%> + +Your Arvados shell account has been set up. Please visit the virtual machines page <% if Rails.configuration.Services.Workbench1.ExternalURL %>at + +<%= Rails.configuration.Services.Workbench1.ExternalURL %><%= "/" if !Rails.configuration.Services.Workbench1.ExternalURL.to_s.end_with?("/") %>users/<%= @user.uuid%>/virtual_machines <% else %><% end %> + +for connection instructions. + +Thanks, +The Arvados team. +} + post :setup, params: { send_notification_email: 'true', user: { diff --git a/services/api/test/unit/log_test.rb b/services/api/test/unit/log_test.rb index 58f0cddb70..76d78f9eaa 100644 --- a/services/api/test/unit/log_test.rb +++ b/services/api/test/unit/log_test.rb @@ -319,6 +319,7 @@ class LogTest < ActiveSupport::TestCase def assert_no_logs_deleted logs_before = Log.unscoped.all.count + assert logs_before > 0 yield assert_equal logs_before, Log.unscoped.all.count end @@ -350,34 +351,34 @@ class LogTest < ActiveSupport::TestCase # but 3 minutes suits our test data better (and is test-worthy in # that it's expected to work correctly in production). test 'delete old audit logs with production settings' do - initial_log_count = Log.unscoped.all.count + initial_log_count = remaining_audit_logs.count + assert initial_log_count > 0 AuditLogs.delete_old(max_age: 180, max_batch: 100000) assert_operator remaining_audit_logs.count, :<, initial_log_count end test 'delete all audit logs in multiple batches' do + assert remaining_audit_logs.count > 2 AuditLogs.delete_old(max_age: 0.00001, max_batch: 2) assert_equal [], remaining_audit_logs.collect(&:uuid) end test 'delete old audit logs in thread' do - begin - Rails.configuration.AuditLogs.MaxAge = 20 - Rails.configuration.AuditLogs.MaxDeleteBatch = 100000 - Rails.cache.delete 'AuditLogs' - initial_log_count = Log.unscoped.all.count + 1 - act_as_system_user do - Log.create!() - initial_log_count += 1 - end - deadline = Time.now + 10 - while remaining_audit_logs.count == initial_log_count - if Time.now > deadline - raise "timed out" - end - sleep 0.1 + Rails.configuration.AuditLogs.MaxAge = 20 + Rails.configuration.AuditLogs.MaxDeleteBatch = 100000 + Rails.cache.delete 'AuditLogs' + initial_audit_log_count = remaining_audit_logs.count + assert initial_audit_log_count > 0 + act_as_system_user do + Log.create!() + end + deadline = Time.now + 10 + while remaining_audit_logs.count == initial_audit_log_count + if Time.now > deadline + raise "timed out" end - assert_operator remaining_audit_logs.count, :<, initial_log_count + sleep 0.1 end + assert_operator remaining_audit_logs.count, :<, initial_audit_log_count end end diff --git a/services/api/test/unit/permission_test.rb b/services/api/test/unit/permission_test.rb index 10664474c6..123031b35f 100644 --- a/services/api/test/unit/permission_test.rb +++ b/services/api/test/unit/permission_test.rb @@ -579,4 +579,24 @@ class PermissionTest < ActiveSupport::TestCase assert users(:active).can?(write: prj.uuid) assert users(:active).can?(manage: prj.uuid) end + + [system_user_uuid, anonymous_user_uuid].each do |u| + test "cannot delete system user #{u}" do + act_as_system_user do + assert_raises ArvadosModel::PermissionDeniedError do + User.find_by_uuid(u).destroy + end + end + end + end + + [system_group_uuid, anonymous_group_uuid, public_project_uuid].each do |g| + test "cannot delete system group #{g}" do + act_as_system_user do + assert_raises ArvadosModel::PermissionDeniedError do + Group.find_by_uuid(g).destroy + end + end + end + end end diff --git a/services/api/test/unit/user_notifier_test.rb b/services/api/test/unit/user_notifier_test.rb index da6c7fdb88..c288786c13 100644 --- a/services/api/test/unit/user_notifier_test.rb +++ b/services/api/test/unit/user_notifier_test.rb @@ -9,6 +9,24 @@ class UserNotifierTest < ActionMailer::TestCase # Send the email, then test that it got queued test "account is setup" do user = users :active + + Rails.configuration.Users.UserSetupMailText = %{ +<% if not @user.full_name.empty? -%> +<%= @user.full_name %>, +<% else -%> +Hi there, +<% end -%> + +Your Arvados shell account has been set up. Please visit the virtual machines page <% if Rails.configuration.Services.Workbench1.ExternalURL %>at + +<%= Rails.configuration.Services.Workbench1.ExternalURL %><%= "/" if !Rails.configuration.Services.Workbench1.ExternalURL.to_s.end_with?("/") %>users/<%= @user.uuid%>/virtual_machines <% else %><% end %> + +for connection instructions. + +Thanks, +The Arvados team. +} + email = UserNotifier.account_is_setup user assert_not_nil email diff --git a/services/crunch-dispatch-slurm/squeue.go b/services/crunch-dispatch-slurm/squeue.go index 5aee7e087b..eae21e62b6 100644 --- a/services/crunch-dispatch-slurm/squeue.go +++ b/services/crunch-dispatch-slurm/squeue.go @@ -23,8 +23,8 @@ type slurmJob struct { hitNiceLimit bool } -// Squeue implements asynchronous polling monitor of the SLURM queue using the -// command 'squeue'. +// SqueueChecker implements asynchronous polling monitor of the SLURM queue +// using the command 'squeue'. type SqueueChecker struct { Logger logger Period time.Duration @@ -102,13 +102,12 @@ func (sqc *SqueueChecker) reniceAll() { sort.Slice(jobs, func(i, j int) bool { if jobs[i].wantPriority != jobs[j].wantPriority { return jobs[i].wantPriority > jobs[j].wantPriority - } else { - // break ties with container uuid -- - // otherwise, the ordering would change from - // one interval to the next, and we'd do many - // pointless slurm queue rearrangements. - return jobs[i].uuid > jobs[j].uuid } + // break ties with container uuid -- + // otherwise, the ordering would change from + // one interval to the next, and we'd do many + // pointless slurm queue rearrangements. + return jobs[i].uuid > jobs[j].uuid }) renice := wantNice(jobs, sqc.PrioritySpread) for i, job := range jobs { diff --git a/services/keep-web/s3.go b/services/keep-web/s3.go index 52cfede466..7cd1b1a896 100644 --- a/services/keep-web/s3.go +++ b/services/keep-web/s3.go @@ -363,6 +363,8 @@ func (h *handler) s3list(w http.ResponseWriter, r *http.Request, fs arvados.Cust // github.com/aws/aws-sdk-net never terminates its // paging loop). NextMarker string `xml:"NextMarker,omitempty"` + // ListObjectsV2 has a KeyCount response field. + KeyCount int } resp := listResp{ ListResp: s3.ListResp{ @@ -459,6 +461,7 @@ func (h *handler) s3list(w http.ResponseWriter, r *http.Request, fs arvados.Cust } sort.Slice(resp.CommonPrefixes, func(i, j int) bool { return resp.CommonPrefixes[i].Prefix < resp.CommonPrefixes[j].Prefix }) } + resp.KeyCount = len(resp.Contents) w.Header().Set("Content-Type", "application/xml") io.WriteString(w, xml.Header) if err := xml.NewEncoder(w).Encode(resp); err != nil { diff --git a/services/keep-web/s3_test.go b/services/keep-web/s3_test.go index 66f046b13f..33e978c3b7 100644 --- a/services/keep-web/s3_test.go +++ b/services/keep-web/s3_test.go @@ -432,6 +432,22 @@ func (s *IntegrationSuite) TestS3ListNoNextMarker(c *check.C) { } } +// List response should include KeyCount field. +func (s *IntegrationSuite) TestS3ListKeyCount(c *check.C) { + stage := s.s3setup(c) + defer stage.teardown(c) + + req, err := http.NewRequest("GET", stage.collbucket.URL("/"), nil) + c.Assert(err, check.IsNil) + req.Header.Set("Authorization", "AWS "+arvadostest.ActiveTokenV2+":none") + req.URL.RawQuery = "prefix=&delimiter=/" + resp, err := http.DefaultClient.Do(req) + c.Assert(err, check.IsNil) + buf, err := ioutil.ReadAll(resp.Body) + c.Assert(err, check.IsNil) + c.Check(string(buf), check.Matches, `(?ms).*2.*`) +} + func (s *IntegrationSuite) TestS3CollectionList(c *check.C) { stage := s.s3setup(c) defer stage.teardown(c) diff --git a/services/keepstore/pull_worker.go b/services/keepstore/pull_worker.go index b4ccd98282..670fa1a414 100644 --- a/services/keepstore/pull_worker.go +++ b/services/keepstore/pull_worker.go @@ -80,7 +80,7 @@ func (h *handler) pullItemAndProcess(pullRequest PullRequest) error { return writePulledBlock(h.volmgr, vol, readContent, pullRequest.Locator) } -// Fetch the content for the given locator using keepclient. +// GetContent fetches the content for the given locator using keepclient. var GetContent = func(signedLocator string, keepClient *keepclient.KeepClient) (io.ReadCloser, int64, string, error) { return keepClient.Get(signedLocator) } @@ -88,8 +88,7 @@ var GetContent = func(signedLocator string, keepClient *keepclient.KeepClient) ( var writePulledBlock = func(volmgr *RRVolumeManager, volume Volume, data []byte, locator string) error { if volume != nil { return volume.Put(context.Background(), locator, data) - } else { - _, err := PutBlock(context.Background(), volmgr, data, locator) - return err } + _, err := PutBlock(context.Background(), volmgr, data, locator) + return err } diff --git a/services/keepstore/s3aws_volume.go b/services/keepstore/s3aws_volume.go index d07d23c3c2..8d999e7472 100644 --- a/services/keepstore/s3aws_volume.go +++ b/services/keepstore/s3aws_volume.go @@ -33,7 +33,7 @@ import ( "github.com/sirupsen/logrus" ) -// S3Volume implements Volume using an S3 bucket. +// S3AWSVolume implements Volume using an S3 bucket. type S3AWSVolume struct { arvados.S3VolumeDriverParameters AuthToken string // populated automatically when IAMRole is used @@ -69,10 +69,9 @@ func chooseS3VolumeDriver(cluster *arvados.Cluster, volume arvados.Volume, logge if v.UseAWSS3v2Driver { logger.Debugln("Using AWS S3 v2 driver") return newS3AWSVolume(cluster, volume, logger, metrics) - } else { - logger.Debugln("Using goamz S3 driver") - return newS3Volume(cluster, volume, logger, metrics) } + logger.Debugln("Using goamz S3 driver") + return newS3Volume(cluster, volume, logger, metrics) } const (