mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-8607 - Adding update_host_passwd.sh script
- Modifying the LibvirtUpdateHostPasswordCommandWrapper in order to execute the script on the host - Adding the script path to LibvirtComputingResource - Adding the host IP address as an instance variable on UpdateHostPasswordCommand - Improving the Unit Test (LibvirtComputingResourceTest) to get it covering the new code
This commit is contained in:
parent
a74971df06
commit
47c7a1083f
@ -22,17 +22,26 @@ package com.cloud.agent.api;
|
|||||||
import com.cloud.agent.api.LogLevel.Log4jLevel;
|
import com.cloud.agent.api.LogLevel.Log4jLevel;
|
||||||
|
|
||||||
public class UpdateHostPasswordCommand extends Command {
|
public class UpdateHostPasswordCommand extends Command {
|
||||||
|
|
||||||
@LogLevel(Log4jLevel.Off)
|
@LogLevel(Log4jLevel.Off)
|
||||||
protected String username;
|
protected String username;
|
||||||
@LogLevel(Log4jLevel.Off)
|
@LogLevel(Log4jLevel.Off)
|
||||||
protected String newPassword;
|
protected String newPassword;
|
||||||
|
@LogLevel(Log4jLevel.Off)
|
||||||
|
protected String hostIp;
|
||||||
|
|
||||||
|
|
||||||
protected UpdateHostPasswordCommand() {
|
protected UpdateHostPasswordCommand() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public UpdateHostPasswordCommand(String username, String newPassword) {
|
public UpdateHostPasswordCommand(final String username, final String newPassword) {
|
||||||
|
this(username, newPassword, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public UpdateHostPasswordCommand(final String username, final String newPassword, final String hostIp) {
|
||||||
this.username = username;
|
this.username = username;
|
||||||
this.newPassword = newPassword;
|
this.newPassword = newPassword;
|
||||||
|
this.hostIp = hostIp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getNewPassword() {
|
public String getNewPassword() {
|
||||||
@ -43,6 +52,10 @@ public class UpdateHostPasswordCommand extends Command {
|
|||||||
return username;
|
return username;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getHostIp() {
|
||||||
|
return hostIp;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean executeInSequence() {
|
public boolean executeInSequence() {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -257,6 +257,8 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||||||
|
|
||||||
private String _pingTestPath;
|
private String _pingTestPath;
|
||||||
|
|
||||||
|
private String _updateHostPasswdPath;
|
||||||
|
|
||||||
private int _dom0MinMem;
|
private int _dom0MinMem;
|
||||||
|
|
||||||
protected boolean _disconnected = true;
|
protected boolean _disconnected = true;
|
||||||
@ -372,6 +374,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||||||
return _pingTestPath;
|
return _pingTestPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getUpdateHostPasswdPath() {
|
||||||
|
return _updateHostPasswdPath;
|
||||||
|
}
|
||||||
|
|
||||||
public int getTimeout() {
|
public int getTimeout() {
|
||||||
return _timeout;
|
return _timeout;
|
||||||
}
|
}
|
||||||
@ -516,6 +522,10 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||||||
return "scripts/storage/qcow2";
|
return "scripts/storage/qcow2";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String getDefaultHypervisorScriptsDir() {
|
||||||
|
return "scripts/vm/hypervisor";
|
||||||
|
}
|
||||||
|
|
||||||
protected String getDefaultKvmScriptsDir() {
|
protected String getDefaultKvmScriptsDir() {
|
||||||
return "scripts/vm/hypervisor/kvm";
|
return "scripts/vm/hypervisor/kvm";
|
||||||
}
|
}
|
||||||
@ -547,6 +557,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||||||
domrScriptsDir = getDefaultDomrScriptsDir();
|
domrScriptsDir = getDefaultDomrScriptsDir();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final String hypervisorScriptsDir = (String)params.get("hypervisor.scripts.dir");
|
||||||
|
if (hypervisorScriptsDir == null) {
|
||||||
|
getDefaultHypervisorScriptsDir();
|
||||||
|
}
|
||||||
|
|
||||||
String kvmScriptsDir = (String)params.get("kvm.scripts.dir");
|
String kvmScriptsDir = (String)params.get("kvm.scripts.dir");
|
||||||
if (kvmScriptsDir == null) {
|
if (kvmScriptsDir == null) {
|
||||||
kvmScriptsDir = getDefaultKvmScriptsDir();
|
kvmScriptsDir = getDefaultKvmScriptsDir();
|
||||||
@ -595,6 +610,11 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
|
|||||||
|
|
||||||
_clusterId = (String)params.get("cluster");
|
_clusterId = (String)params.get("cluster");
|
||||||
|
|
||||||
|
_updateHostPasswdPath = Script.findScript(hypervisorScriptsDir, "update_host_passwd.sh");
|
||||||
|
if (_updateHostPasswdPath == null) {
|
||||||
|
throw new ConfigurationException("Unable to find update_host_passwd.sh");
|
||||||
|
}
|
||||||
|
|
||||||
_modifyVlanPath = Script.findScript(networkScriptsDir, "modifyvlan.sh");
|
_modifyVlanPath = Script.findScript(networkScriptsDir, "modifyvlan.sh");
|
||||||
if (_modifyVlanPath == null) {
|
if (_modifyVlanPath == null) {
|
||||||
throw new ConfigurationException("Unable to find modifyvlan.sh");
|
throw new ConfigurationException("Unable to find modifyvlan.sh");
|
||||||
|
|||||||
@ -19,17 +19,34 @@
|
|||||||
|
|
||||||
package com.cloud.hypervisor.kvm.resource.wrapper;
|
package com.cloud.hypervisor.kvm.resource.wrapper;
|
||||||
|
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
import com.cloud.agent.api.Answer;
|
import com.cloud.agent.api.Answer;
|
||||||
import com.cloud.agent.api.UpdateHostPasswordCommand;
|
import com.cloud.agent.api.UpdateHostPasswordCommand;
|
||||||
import com.cloud.hypervisor.kvm.resource.LibvirtComputingResource;
|
import com.cloud.hypervisor.kvm.resource.LibvirtComputingResource;
|
||||||
import com.cloud.resource.CommandWrapper;
|
import com.cloud.resource.CommandWrapper;
|
||||||
import com.cloud.resource.ResourceWrapper;
|
import com.cloud.resource.ResourceWrapper;
|
||||||
|
import com.cloud.utils.script.Script;
|
||||||
|
|
||||||
@ResourceWrapper(handles = UpdateHostPasswordCommand.class)
|
@ResourceWrapper(handles = UpdateHostPasswordCommand.class)
|
||||||
public final class LibvirtUpdateHostPasswordCommandWrapper extends CommandWrapper<UpdateHostPasswordCommand, Answer, LibvirtComputingResource> {
|
public final class LibvirtUpdateHostPasswordCommandWrapper extends CommandWrapper<UpdateHostPasswordCommand, Answer, LibvirtComputingResource> {
|
||||||
|
|
||||||
|
private static final Logger s_logger = Logger.getLogger(LibvirtUpdateHostPasswordCommandWrapper.class);
|
||||||
|
private static final int TIMEOUT = 10000;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Answer execute(final UpdateHostPasswordCommand command, final LibvirtComputingResource libvirtComputingResource) {
|
public Answer execute(final UpdateHostPasswordCommand command, final LibvirtComputingResource libvirtComputingResource) {
|
||||||
return new Answer(command, true, null);
|
final String hostIp = command.getHostIp();
|
||||||
|
final String username = command.getUsername();
|
||||||
|
final String newPassword = command.getNewPassword();
|
||||||
|
|
||||||
|
final Script script = new Script(libvirtComputingResource.getUpdateHostPasswdPath(), TIMEOUT, s_logger);
|
||||||
|
script.add(hostIp, username, newPassword);
|
||||||
|
final String result = script.execute();
|
||||||
|
|
||||||
|
if (result != null) {
|
||||||
|
return new Answer(command, false, result);
|
||||||
|
}
|
||||||
|
return new Answer(command);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5076,15 +5076,18 @@ public class LibvirtComputingResourceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateHostPasswordCommand() {
|
public void testUpdateHostPasswordCommand() {
|
||||||
|
final String hostIp = "127.0.0.1";
|
||||||
final String username = "root";
|
final String username = "root";
|
||||||
final String newPassword = "password";
|
final String newPassword = "password";
|
||||||
final UpdateHostPasswordCommand command = new UpdateHostPasswordCommand(username, newPassword);
|
final UpdateHostPasswordCommand command = new UpdateHostPasswordCommand(username, newPassword, hostIp);
|
||||||
|
|
||||||
|
when(libvirtComputingResource.getUpdateHostPasswdPath()).thenReturn("/tmp");
|
||||||
|
|
||||||
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
|
||||||
assertNotNull(wrapper);
|
assertNotNull(wrapper);
|
||||||
|
|
||||||
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
final Answer answer = wrapper.execute(command, libvirtComputingResource);
|
||||||
|
|
||||||
assertTrue(answer.getResult());
|
assertFalse(answer.getResult());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
25
scripts/vm/hypervisor/update_host_passwd.sh
Executable file
25
scripts/vm/hypervisor/update_host_passwd.sh
Executable file
@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
hostIp=$1
|
||||||
|
username=$2
|
||||||
|
new_passwd=$3
|
||||||
|
|
||||||
|
ssh -o StrictHostKeyChecking=no -p 3922 -i /root/.ssh/id_rsa.cloud root@$hostIp "echo -e "$new_passwd\n$new_passwd" | passwd --stdin $username"
|
||||||
|
|
||||||
|
return $?;
|
||||||
@ -2233,7 +2233,12 @@ public class ResourceManagerImpl extends ManagerBase implements ResourceManager,
|
|||||||
final String username = nv.getValue();
|
final String username = nv.getValue();
|
||||||
nv = _hostDetailsDao.findDetail(hostId, ApiConstants.PASSWORD);
|
nv = _hostDetailsDao.findDetail(hostId, ApiConstants.PASSWORD);
|
||||||
final String password = nv.getValue();
|
final String password = nv.getValue();
|
||||||
final UpdateHostPasswordCommand cmd = new UpdateHostPasswordCommand(username, password);
|
|
||||||
|
|
||||||
|
final HostVO host = _hostDao.findById(hostId);
|
||||||
|
final String hostIpAddress = host.getPrivateIpAddress();
|
||||||
|
|
||||||
|
final UpdateHostPasswordCommand cmd = new UpdateHostPasswordCommand(username, password, hostIpAddress);
|
||||||
final Answer answer = _agentMgr.easySend(hostId, cmd);
|
final Answer answer = _agentMgr.easySend(hostId, cmd);
|
||||||
return answer.getResult();
|
return answer.getResult();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user