blob: 5a3f7b486e902c0f27f95b3f03b8b2efcd2fab44 [file] [log] [blame]
/**
* 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.pulsar.admin.cli;
import com.beust.jcommander.DynamicParameter;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.Parameters;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Supplier;
import org.apache.pulsar.client.admin.Packages;
import org.apache.pulsar.client.admin.PulsarAdmin;
import org.apache.pulsar.packages.management.core.common.PackageMetadata;
/**
* Commands for administering packages.
*/
@Parameters(commandDescription = "Operations about packages")
class CmdPackages extends CmdBase {
private Packages packages;
public CmdPackages(Supplier<PulsarAdmin> admin) {
super("packages", admin);
jcommander.addCommand("get-metadata", new GetMetadataCmd());
jcommander.addCommand("update-metadata", new UpdateMetadataCmd());
jcommander.addCommand("upload", new UploadCmd());
jcommander.addCommand("download", new DownloadCmd());
jcommander.addCommand("list", new ListPackagesCmd());
jcommander.addCommand("list-versions", new ListPackageVersionsCmd());
jcommander.addCommand("delete", new DeletePackageCmd());
}
private Packages getPackages() {
if (packages == null) {
packages = getAdmin().packages();
}
return packages;
}
@Parameters(commandDescription = "Get a package metadata information.")
private class GetMetadataCmd extends CliCommand {
@Parameter(description = "type://tenant/namespace/packageName@version", required = true)
private String packageName;
@Override
void run() throws Exception {
print(getPackages().getMetadata(packageName));
}
}
@Parameters(commandDescription = "Update a package metadata information.")
private class UpdateMetadataCmd extends CliCommand {
@Parameter(description = "type://tenant/namespace/packageName@version", required = true)
private String packageName;
@Parameter(names = "--description", description = "descriptions of a package", required = true)
private String description;
@Parameter(names = "--contact", description = "contact info of a package")
private String contact;
@DynamicParameter(names = {"--properties", "-P"}, description = "external information of a package")
private Map<String, String> properties = new HashMap<>();
@Override
void run() throws Exception {
getPackages().updateMetadata(packageName, PackageMetadata.builder()
.description(description).contact(contact).properties(properties).build());
print(String.format("The metadata of the package '%s' updated successfully", packageName));
}
}
@Parameters(commandDescription = "Upload a package")
private class UploadCmd extends CliCommand {
@Parameter(description = "type://tenant/namespace/packageName@version", required = true)
private String packageName;
@Parameter(names = "--description", description = "descriptions of a package", required = true)
private String description;
@Parameter(names = "--contact", description = "contact information of a package")
private String contact;
@DynamicParameter(names = {"--properties", "-P"}, description = "external infromations of a package")
private Map<String, String> properties = new HashMap<>();
@Parameter(names = "--path", description = "file path of the package", required = true)
private String path;
@Override
void run() throws Exception {
PackageMetadata metadata = PackageMetadata.builder()
.description(description)
.contact(contact)
.properties(properties).build();
getPackages().upload(metadata, packageName, path);
print(String.format("The package '%s' uploaded from path '%s' successfully", packageName, path));
}
}
@Parameters(commandDescription = "Download a package")
private class DownloadCmd extends CliCommand {
@Parameter(description = "type://tenant/namespace/packageName@version", required = true)
private String packageName;
@Parameter(names = "--path", description = "download destiny path of the package", required = true)
private String path;
@Override
void run() throws Exception {
getPackages().download(packageName, path);
print(String.format("The package '%s' downloaded to path '%s' successfully", packageName, path));
}
}
@Parameters(commandDescription = "List all versions of the given package")
private class ListPackageVersionsCmd extends CliCommand {
@Parameter(description = "the package name you want to query, don't need to specify the package version. "
+ "type://tenant/namespace/packageName", required = true)
private String packageName;
@Override
void run() throws Exception {
print(getPackages().listPackageVersions(packageName));
}
}
@Parameters(commandDescription = "List all packages with given type in the specified namespace")
private class ListPackagesCmd extends CliCommand {
@Parameter(names = "--type", description = "type of the package", required = true)
private String type;
@Parameter(description = "namespace of the package", required = true)
private String namespace;
@Override
void run() throws Exception {
print(getPackages().listPackages(type, namespace));
}
}
@Parameters(commandDescription = "Delete a package")
private class DeletePackageCmd extends CliCommand{
@Parameter(description = "type://tenant/namespace/packageName@version", required = true)
private String packageName;
@Override
void run() throws Exception {
getPackages().delete(packageName);
print(String.format("The package '%s' deleted successfully", packageName));
}
}
}