* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
package org.opendaylight.netconf.console.commands;
import static java.util.Objects.requireNonNull;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Strings;
-import java.util.Arrays;
+import com.google.common.collect.ImmutableSet;
import org.apache.karaf.shell.api.action.Action;
import org.apache.karaf.shell.api.action.Command;
import org.apache.karaf.shell.api.action.Option;
+import org.apache.karaf.shell.api.action.lifecycle.Reference;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
import org.opendaylight.netconf.console.api.NetconfCommands;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Host;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.Protocol.Name;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.ProtocolBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.protocol.specification.TlsCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.protocol.specification.TlsCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.parameters.protocol.specification.tls._case.TlsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.Credentials;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.credentials.credentials.LoginPasswordBuilder;
-
-@Command(name = "netconf:connect-device", scope = "netconf", description = "Connect to a netconf device.")
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.parameters.Protocol.Name;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.parameters.ProtocolBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.parameters.protocol.specification.TlsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.parameters.protocol.specification.TlsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.connection.parameters.protocol.specification.tls._case.TlsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev221225.credentials.credentials.LoginPasswordBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.NetconfNodeBuilder;
+import org.opendaylight.yangtools.yang.common.Uint16;
+
+@Service
+@Command(name = "connect-device", scope = "netconf", description = "Connect to a netconf device.")
public class NetconfConnectDeviceCommand implements Action {
- protected final NetconfCommands service;
+ @Reference
+ private NetconfCommands service;
+
+ public NetconfConnectDeviceCommand() {
- public NetconfConnectDeviceCommand(final NetconfCommands service) {
- this.service = service;
}
@VisibleForTesting
- NetconfConnectDeviceCommand(final NetconfCommands service, final String deviceIp, final String devicePort) {
+ NetconfConnectDeviceCommand(final NetconfCommands service) {
this.service = service;
- this.deviceIp = deviceIp;
- this.devicePort = devicePort;
}
@VisibleForTesting
aliases = { "--username" },
description = "Username for netconf connection",
required = false,
+ censor = true,
multiValued = false)
private String username;
aliases = { "--password" },
description = "Password for netconf connection",
required = false,
+ censor = true,
multiValued = false)
private String password;
final NetconfNodeBuilder netconfNodeBuilder = new NetconfNodeBuilder();
netconfNodeBuilder.setHost(new Host(new IpAddress(new Ipv4Address(deviceIp))))
- .setPort(new PortNumber(Integer.decode(devicePort)))
+ .setPort(new PortNumber(Uint16.valueOf(Integer.decode(devicePort))))
.setTcpOnly(isTcpOnly)
.setSchemaless(isSchemaless);
return "Empty Username:" + username + " or Password:" + password
+ ". In TCP or SSH mode, you must provide valid username and password.";
}
- final Credentials credentials =
- new LoginPasswordBuilder().setPassword(password).setUsername(username).build();
- netconfNodeBuilder.setCredentials(credentials);
+ netconfNodeBuilder.setCredentials(new LoginPasswordBuilder()
+ .setUsername(username)
+ .setPassword(password)
+ .build());
if (!isTcpOnly) {
netconfNodeBuilder.setProtocol(new ProtocolBuilder().setName(Name.SSH).build());
}
if (!Strings.isNullOrEmpty(excludedTlsVersions)) {
tlsCase = new TlsCaseBuilder()
.setTls(new TlsBuilder()
- .setExcludedVersions(Arrays.asList(excludedTlsVersions.split(","))).build())
+ .setExcludedVersions(ImmutableSet.copyOf(excludedTlsVersions.split(","))).build())
.build();
}
netconfNodeBuilder.setProtocol(new ProtocolBuilder()