[
https://issues.apache.org/jira/browse/CLOUDSTACK-9299?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15268219#comment-15268219
]
ASF GitHub Bot commented on CLOUDSTACK-9299:
--------------------------------------------
Github user rhtyd commented on a diff in the pull request:
https://github.com/apache/cloudstack/pull/1502#discussion_r61843281
--- Diff:
api/src/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
---
@@ -0,0 +1,128 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.outofbandmanagement;
+
+import com.cloud.event.EventTypes;
+import com.cloud.exception.ConcurrentOperationException;
+import com.cloud.exception.InsufficientCapacityException;
+import com.cloud.exception.NetworkRuleConflictException;
+import com.cloud.exception.ResourceAllocationException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.host.Host;
+import com.google.common.base.Strings;
+import org.apache.cloudstack.acl.RoleType;
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiCommandJobType;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseAsyncCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.response.HostResponse;
+import org.apache.cloudstack.api.response.OutOfBandManagementResponse;
+import org.apache.cloudstack.context.CallContext;
+import
org.apache.cloudstack.outofbandmanagement.OutOfBandManagement.PowerOperation;
+import
org.apache.cloudstack.outofbandmanagement.OutOfBandManagementService;
+
+import javax.inject.Inject;
+
+@APICommand(name = "issueOutOfBandManagementPowerAction", description =
"Initiates the specified power action to the host's out-of-band management
interface",
+ responseObject = OutOfBandManagementResponse.class,
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, authorized =
{RoleType.Admin})
+public class IssueOutOfBandManagementPowerActionCmd extends BaseAsyncCmd {
+ @Inject
+ private OutOfBandManagementService outOfBandManagementService;
+
+ /////////////////////////////////////////////////////
+ //////////////// API parameters /////////////////////
+ /////////////////////////////////////////////////////
+
+ @Parameter(name = ApiConstants.HOST_ID, type = CommandType.UUID,
entityType = HostResponse.class, required = true, description = "the ID of the
host")
+ private Long hostId;
+
+ @Parameter(name = ApiConstants.TIMEOUT, type = CommandType.LONG,
description = "optional operation timeout in seconds that overrides the global
or cluster-level out-of-band management timeout setting")
+ private Long actionTimeout;
+
+ @Parameter(name = ApiConstants.ACTION, type = CommandType.STRING,
required = true, description = "out-of-band management power actions, valid
actions are: ON, OFF, CYCLE, RESET, SOFT, STATUS")
+ private String outOfBandManagementPowerOperation;
+
+ /////////////////////////////////////////////////////
+ /////////////// API Implementation///////////////////
+ /////////////////////////////////////////////////////
+
+ @Override
+ public String getCommandName() {
+ return "issueoutofbandmanagementpoweractionresponse";
+ }
+
+ private void validateParams() {
+ if (getHostId() == null || getHostId() < 1L) {
+ throw new ServerApiException(ApiErrorCode.PARAM_ERROR,
"Invalid host ID: " + getHostId());
+ }
+ if (Strings.isNullOrEmpty(getOutOfBandManagementPowerOperation()))
{
+ throw new ServerApiException(ApiErrorCode.PARAM_ERROR,
"Invalid out-of-band management power action: " +
getOutOfBandManagementPowerOperation());
+ }
+ }
+
+ @Override
+ public void execute() throws ResourceUnavailableException,
InsufficientCapacityException, ServerApiException,
ConcurrentOperationException, ResourceAllocationException,
NetworkRuleConflictException {
+ validateParams();
+ Host host = _resourceService.getHost(getHostId());
+ if (host == null) {
+ throw new ServerApiException(ApiErrorCode.PARAM_ERROR, "Unable
to find host by ID: " + getHostId());
+ }
+ PowerOperation powerOperation =
PowerOperation.valueOf(getOutOfBandManagementPowerOperation());
--- End diff --
We're doing Enums.getIfPresent in validateParams therefore a
case-insensitive check is not needed here, if validate does not fail
PowerOperation.valueOf will always return an valid enum.
> Out-of-band Management for CloudStack
> -------------------------------------
>
> Key: CLOUDSTACK-9299
> URL: https://issues.apache.org/jira/browse/CLOUDSTACK-9299
> Project: CloudStack
> Issue Type: New Feature
> Security Level: Public(Anyone can view this level - this is the
> default.)
> Reporter: Rohit Yadav
> Assignee: Rohit Yadav
> Fix For: 4.9.0, Future
>
>
> Support access to a host’s out-of-band management interface (e.g. IPMI, iLO,
> DRAC, etc.) to manage host power operations (on/off etc.) and querying
> current power state.
> FS:
> https://cwiki.apache.org/confluence/display/CLOUDSTACK/Out-of-band+Management+for+CloudStack
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)