resourceManager .projects() .getIamPolicy(cloudProject.projectId(), new GetIamPolicyRequest()) .execute(); List<Binding> bindings = Lists.newArrayList(existingPolicy.getBindings()); policyRequest.setPolicy(newPolicy); resourceManager.projects().setIamPolicy(cloudProject.projectId(), policyRequest).execute();
/** * Returns the project number or throws an error if the project does not exist or has other * access errors. */ private static long getProjectNumber( String projectId, CloudResourceManager crmClient, BackOff backoff, Sleeper sleeper) throws IOException { CloudResourceManager.Projects.Get getProject = crmClient.projects().get(projectId); try { Project project = ResilientOperation.retry( ResilientOperation.getGoogleRequestCallable(getProject), backoff, RetryDeterminer.SOCKET_ERRORS, IOException.class, sleeper); return project.getProjectNumber(); } catch (Exception e) { throw new IOException("Unable to get project number", e); } }
/** * Mocks the {@link ListProjectsResponse} returned by the {@link #mockCloudResourceManager}. * * @param projects the list of {@link Project Projects} to return as part of the {@link * ListProjectsResponse} */ private void mockListProjectsResponse(List<Project> projects) { when(mockCloudResourceManager.projects()).thenReturn(mockProjects); try { when(mockProjects.list()).thenReturn(mockList); when(mockList.setPageSize(any())).thenReturn(mockList); when(mockList.setPageToken(any())).thenReturn(mockList); ListProjectsResponse response = new ListProjectsResponse(); response.setProjects(projects); response.setNextPageToken(""); when(mockList.execute()).thenReturn(response); } catch (IOException e) { // Should not happen when setting up these mocks. throw new AssertionError(e); } }
@Test public void testMatchingAgainstClient() throws Exception { GcsOptions options = PipelineOptionsFactory.as(GcsOptions.class); options.setGcpCredential(new TestCredential()); options.setGoogleApiTrace( new GoogleApiTracer() .addTraceFor(Transport.newStorageClient(options).build(), "TraceDestination")); Storage.Objects.Get getRequest = Transport.newStorageClient(options).build().objects().get("testBucketId", "testObjectId"); assertEquals("TraceDestination", getRequest.get("$trace")); Delete deleteRequest = GcpOptions.GcpTempLocationFactory.newCloudResourceManagerClient( options.as(CloudResourceManagerOptions.class)) .build() .projects() .delete("testProjectId"); assertNull(deleteRequest.get("$trace")); }
void cacheResources() throws IOException { final CloudResourceManager.Projects.List request = cloudResourceManager.projects().list(); ListProjectsResponse response; do { response = request.execute(); if (response.getProjects() == null) { continue; } for (Project project : response.getProjects()) { final boolean access = resolveProject(project); logger.info("Resolved project: {}, access={}", project.getProjectId(), access); } request.setPageToken(response.getNextPageToken()); } while (response.getNextPageToken() != null); logger.info("Resource cache loaded"); }
private boolean resolveProjectAccess(String projectId) throws IOException { final GetAncestryResponse ancestry; try { ancestry = cloudResourceManager.projects().getAncestry(projectId, new GetAncestryRequest()).execute(); } catch (GoogleJsonResponseException e) { if (e.getStatusCode() == 404) { logger.debug("Project {} doesn't exist", projectId, e); return false; } // TODO: handle 403 quota exhausted? logger.info("Cannot get project with id {}", projectId, e); return false; } return resolveAccess(ancestry.getAncestor()); }
private Optional<com.google.api.services.cloudresourcemanager.model.Policy> getProjectPolicy(String projectId) { try { return retry(() -> Optional.of(crm.projects() .getIamPolicy(projectId, new GetIamPolicyRequest()) .execute())); } catch (ExecutionException e) { final Throwable cause = e.getCause(); if (cause instanceof GoogleJsonResponseException && ((GoogleJsonResponseException) cause).getStatusCode() == 404) { return Optional.empty(); } throw new RuntimeException(e); } catch (RetryException e) { throw new RuntimeException(e); } }
@Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); options = PipelineOptionsFactory.create(); options.as(GcsOptions.class).setGcsUtil(mockGcsUtil); options.as(GcpOptions.class).setProject("foo"); options.as(GcpOptions.class).setZone("us-north1-a"); when(mockCrmClient.projects()).thenReturn(mockProjects); when(mockProjects.get(any(String.class))).thenReturn(mockGet); fakeProject = new Project().setProjectNumber(1L); }
private void setupMockResourceManagerClient() throws IOException { when(resourceManager.projects()).thenReturn(resourceManagerProjects); when(resourceManagerProjects.getIamPolicy(anyString(), any())).thenReturn(getIamPolicy); when(getIamPolicy.execute()).thenReturn(policy); when(resourceManagerProjects.setIamPolicy(anyString(), any())).thenReturn(setIamPolicy); }
final Operation operation; try { operation = resourceManager.projects().create(project).execute(); } catch (IOException ex) { throw translate(ex);
@Override public Project get(String projectId, Map<Option, ?> options) { try { return resourceManager .projects() .get(projectId) .setFields(Option.FIELDS.getString(options)) .execute(); } catch (IOException ex) { ResourceManagerException translated = translate(ex); if (translated.getCode() == HTTP_FORBIDDEN || translated.getCode() == HTTP_NOT_FOUND) { // Service can return either 403 or 404 to signify that the project doesn't exist. return null; } else { throw translated; } } }
@Override public Tuple<String, Iterable<Project>> list(Map<Option, ?> options) { try { ListProjectsResponse response = resourceManager .projects() .list() .setFields(Option.FIELDS.getString(options)) .setFilter(Option.FILTER.getString(options)) .setPageSize(Option.PAGE_SIZE.getInt(options)) .setPageToken(Option.PAGE_TOKEN.getString(options)) .execute(); return Tuple.<String, Iterable<Project>>of( response.getNextPageToken(), response.getProjects()); } catch (IOException ex) { throw translate(ex); } }
@Override public Policy getPolicy(String projectId) throws ResourceManagerException { try { return resourceManager .projects() .getIamPolicy(projectId, new GetIamPolicyRequest()) .execute(); } catch (IOException ex) { ResourceManagerException translated = translate(ex); if (translated.getCode() == HTTP_FORBIDDEN) { // Service returns permission denied if policy doesn't exist. return null; } else { throw translated; } } }
@Override public Policy replacePolicy(String projectId, Policy newPolicy) throws ResourceManagerException { try { return resourceManager .projects() .setIamPolicy(projectId, new SetIamPolicyRequest().setPolicy(newPolicy)) .execute(); } catch (IOException ex) { throw translate(ex); } }
@Override public void delete(String projectId) { try { resourceManager.projects().delete(projectId).execute(); } catch (IOException ex) { throw translate(ex); } }