use of graphql.execution.DataFetcherResult in project teamcity-rest by JetBrains.
the class Mutation method unauthorizeAgent.
@Used("graphql")
@NotNull
public DataFetcherResult<UnauthorizeAgentPayload> unauthorizeAgent(@NotNull UnauthorizeAgentInput input, @NotNull DataFetchingEnvironment dfe) {
return runWithAgent(input.getAgentRawId(), agent -> {
DataFetcherResult.Builder<UnauthorizeAgentPayload> result = DataFetcherResult.newResult();
GraphQLContext context = dfe.getContext();
String authReason = input.getReason() == null ? "" : input.getReason();
try {
agent.setAuthorized(false, context.getUser(), authReason);
} catch (LicenseNotGrantedException e) {
return result.error(new OperationFailedGraphQLError(e.getMessage())).build();
}
Agent agentModel = new Agent(agent);
return result.data(new UnauthorizeAgentPayload(agentModel)).build();
});
}
use of graphql.execution.DataFetcherResult in project teamcity-rest by JetBrains.
the class AgentPoolMutation method bulkAssignProjectWithAgentPool.
@Used("graphql")
@NotNull
public DataFetcherResult<BulkAssignProjectWithAgentPoolPayload> bulkAssignProjectWithAgentPool(@NotNull BulkAssignProjectWithAgentPoolInput input) {
DataFetcherResult.Builder<BulkAssignProjectWithAgentPoolPayload> result = DataFetcherResult.newResult();
if (!myAgentPoolActionsAccessChecker.canManageProjectsInPool(input.getAgentPoolRawId())) {
return result.error(new OperationFailedGraphQLError("Can't assign projects, not enough permissions to manage projects in target pool.")).build();
}
Set<String> projectIds = myProjectManager.findProjectsByExternalIds(input.getProjectRawIds()).stream().map(p -> p.getProjectId()).collect(Collectors.toSet());
try {
myAgentPoolManager.associateProjectsWithPool(input.getAgentPoolRawId(), projectIds);
} catch (NoSuchAgentPoolException e) {
return result.error(new EntityNotFoundGraphQLError("Agent pool with given id does not exist.")).build();
}
if (input.getExclusively()) {
myAgentPoolManager.dissociateProjectsFromOtherPools(input.getAgentPoolRawId(), projectIds);
}
AgentPool agentPool = myAgentPoolManager.findAgentPoolById(input.getAgentPoolRawId());
if (agentPool == null) {
LOG.warn(String.format("Agent pool with id=%d is missing after bulk association request", input.getAgentPoolRawId()));
return result.error(new UnexpectedServerGraphQLError("Agent pool with given id could not be found after operation.")).build();
}
return result.data(new BulkAssignProjectWithAgentPoolPayload(new jetbrains.buildServer.server.graphql.model.agentPool.AgentPool(agentPool))).build();
}
use of graphql.execution.DataFetcherResult in project teamcity-rest by JetBrains.
the class AgentPoolMutation method updateAgentPool.
@Used("graphql")
@NotNull
public DataFetcherResult<UpdateAgentPoolPayload> updateAgentPool(@NotNull UpdateAgentPoolInput input) {
DataFetcherResult.Builder<UpdateAgentPoolPayload> result = DataFetcherResult.newResult();
int poolId = input.getRawId();
AgentPool poolOfInterest = myAgentPoolManager.findAgentPoolById(poolId);
if (poolOfInterest == null) {
return result.error(new EntityNotFoundGraphQLError("Pool with given id does not exist.")).build();
}
int maxAgents = input.getMaxAgentsNumber() == null ? poolOfInterest.getMaxAgents() : input.getMaxAgentsNumber();
String name = input.getName() == null ? poolOfInterest.getName() : input.getName();
try {
myAgentPoolManager.updateAgentPool(poolId, name, new AgentPoolLimitsImpl(AgentPoolLimits.DEFAULT.getMinAgents(), maxAgents));
} catch (AgentPoolCannotBeRenamedException e) {
LOG.debug(e);
return result.data(new UpdateAgentPoolPayload(new jetbrains.buildServer.server.graphql.model.agentPool.AgentPool(poolOfInterest))).error(new OperationFailedGraphQLError(e.getMessage())).build();
} catch (NoSuchAgentPoolException e) {
return result.error(new EntityNotFoundGraphQLError("Pool with given id does not exist.")).build();
}
AgentPool updatedPool = myAgentPoolManager.findAgentPoolById(poolId);
if (updatedPool == null) {
LOG.warn(String.format("Agent pool with id=%d is missing right after update operation.", poolId));
return result.error(new UnexpectedServerGraphQLError("Pool is missing after update.")).build();
}
result.data(new UpdateAgentPoolPayload(new jetbrains.buildServer.server.graphql.model.agentPool.AgentPool(updatedPool)));
return result.build();
}
use of graphql.execution.DataFetcherResult in project teamcity-rest by JetBrains.
the class AgentPoolMutation method removeAgentPool.
@Used("graphql")
@NotNull
public DataFetcherResult<RemoveAgentPoolPayload> removeAgentPool(@NotNull RemoveAgentPoolInput input) {
DataFetcherResult.Builder<RemoveAgentPoolPayload> result = DataFetcherResult.newResult();
int poolId = input.getAgentPoolRawId();
try {
AgentPool removedPool = myAgentPoolManager.deleteAgentPool(poolId);
return result.data(new RemoveAgentPoolPayload(new ShallowAgentPool(poolId, removedPool.getName()))).build();
} catch (NoSuchAgentPoolException e) {
return result.error(new EntityNotFoundGraphQLError("Pool with given id does not exist.")).build();
} catch (AgentPoolCannotBeDeletedException e) {
LOG.debug(e.getMessage());
return result.error(new OperationFailedGraphQLError(e.getMessage())).build();
}
}
use of graphql.execution.DataFetcherResult in project teamcity-rest by JetBrains.
the class AgentPoolMutation method moveCloudImageToAgentPool.
@Used("graphql")
@NotNull
public DataFetcherResult<MoveCloudImageToAgentPoolPayload> moveCloudImageToAgentPool(@NotNull MoveCloudImageToAgentPoolInput input) {
DataFetcherResult.Builder<MoveCloudImageToAgentPoolPayload> result = DataFetcherResult.newResult();
final int targetPoolId = input.getTargetAgentPoolRawId();
SAgentType agentType = myAgentTypeFinder.findAgentType(input.getAgentTypeRawId());
if (agentType == null) {
return result.error(new EntityNotFoundGraphQLError(String.format("Cloud image with agent type=%d does not exist.", input.getAgentTypeRawId()))).build();
}
final int sourcePoolId = agentType.getAgentPoolId();
if (!agentType.isCloud()) {
return result.error(new OperationFailedGraphQLError(String.format("Agent type=%d does not correspond to a cloud agent.", input.getAgentTypeRawId()))).build();
}
final AgentTypeKey typeKey = agentType.getAgentTypeKey();
CloudProfile profile = myCloudManager.findProfileGloballyById(typeKey.getProfileId());
if (profile == null) {
return result.error(new UnexpectedServerGraphQLError(String.format("Cloud profile with id=%s does not exist.", typeKey.getProfileId()))).build();
}
CloudClientEx client = myCloudManager.getClient(profile.getProjectId(), profile.getProfileId());
try {
myAgentPoolManager.moveAgentTypesToPool(targetPoolId, Collections.singleton(agentType.getAgentTypeId()));
} catch (NoSuchAgentPoolException e) {
return result.error(new EntityNotFoundGraphQLError(String.format("Agent pool with id=%d is not found.", targetPoolId))).build();
} catch (AgentTypeCannotBeMovedException e) {
LOG.debug(e.getMessage());
return result.error(new OperationFailedGraphQLError("Image can't be moved.")).build();
} catch (PoolQuotaExceededException e) {
LOG.debug(e.getMessage());
return result.error(new OperationFailedGraphQLError("Image can't be moved, target agent pool is full.")).build();
}
AgentPool sourcePool = myAgentPoolManager.findAgentPoolById(sourcePoolId);
AgentPool targetPool = myAgentPoolManager.findAgentPoolById(targetPoolId);
jetbrains.buildServer.clouds.CloudImage image = client.findImageById(typeKey.getTypeId());
return result.data(new MoveCloudImageToAgentPoolPayload(new CloudImage(image, profile), new jetbrains.buildServer.server.graphql.model.agentPool.AgentPool(sourcePool), new jetbrains.buildServer.server.graphql.model.agentPool.AgentPool(targetPool))).build();
}
Aggregations