diff --git a/compute/cmdline/ComputeEngineSample.launch b/compute/cmdline/ComputeEngineSample.launch deleted file mode 100644 index cee07bc5266..00000000000 --- a/compute/cmdline/ComputeEngineSample.launch +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/compute/cmdline/README.md b/compute/cmdline/README.md deleted file mode 100644 index bb703ba57db..00000000000 --- a/compute/cmdline/README.md +++ /dev/null @@ -1,125 +0,0 @@ -# Compute Engine - Getting started with Java - - -Open in Cloud Shell - -This sample command line application demonstrates how to access the Google -Compute Engine API using the Google Java API Client Library. - -When the sample is setup and run as instructed below, it will list all the -VM instances in a Google Cloud Platform project for a specific -[zone](https://cloud.google.com/compute/docs/zones). -The sample also checks for the existence of a VM instance named -"my-sample-instance". If the VM instance doesn't exist, the sample -will create a new VM instance named "my-sample-instance". If the VM instance -does exist, running the sample will delete the instance. The instance create -and delete actions are implemented as -"[zone specific operations](https://cloud.google.com/compute/docs/reference/latest/zoneOperations#resource)". -The sample demonstrates how to poll the status of these operations to -determine when and if they successfully complete. - -## Products -- [Compute Engine][1] - -## Language -- [Java][2] - -## APIs -- [Google Compute Engine][3] - -## Setup Instructions -1. Create or select a project in the Google Cloud Console: - 1. Visit the [Cloud Console][4] - 1. If this is your first time then click "Create Project," otherwise you can -reuse an existing project by clicking on it. - 1. Note: You will need to enable billing for the project to use Compute - Engine. - 1. Click "Overview" in the left-side navigation menu and copy your Project ID - for use in step 3.3 below. - -1. Authentication instructions to run the sample (on your local machine or on a Compute Engine VM): - * Running the sample locally on your development machine: - 1. Install [Google Cloud SDK](https://cloud.google.com/sdk/) - 1. Run the following command to authorize the Cloud SDK and configure your project: -
gcloud init
- * Running the sample on a Google Compute Engine VM using Default Application - Credentials: - 1. Create a Compute Engine VM Instance. - 1. In the [Cloud Console](https://console.cloud.google.com/project) - go to the Compute > Compute Engine section. - 1. Click the "Create instance" button. - 1. For the 'Boot Disk' select a Linux machine image like Debian or Ubuntu. - 1. Click the "Management, disk, networking, access & security options" - section to expand it. - 1. Select the "Access and Security" subsection and then select the - "Compute" drop-down menu to set its scope. - * Set the "Compute" access scope to be "Read/Write". - 1. Click the "Create" button. - 1. Once the VM is created click the VM instance's "SSH" button to ssh - in to the newly created VM instance. - -1. Code checkout instructions: - 1. Prerequisites: install [Java 8 JDK][2], [Git][7], and [Maven][8]. -You may need to set your `JAVA_HOME` environment variable as well. - * To install these prerequisites on a Linux (Debian or Ubuntu) based Compute Engine VM - instance, run these commands: -
-    sudo apt-get update
-    sudo apt-get install git maven openjdk-7-jdk -y
-    
- 1. Download the sample code by running the following commands: -
mkdir some_directory
-  cd some_directory
-  git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
-  cd java-docs-samples/compute/cmdline
- In a text editor open the `ComputeEngineSample.java` file. For example, to edit the file with nano: -
nano src/main/java/ComputeEngineSample.java
- - 1. In your text editor update the `YOUR_PROJECT_ID` value in - [`src/main/java/ComputeEngineSample.java`][5] -so that the following line is updated. Not performing this step will result -in an error; specifically, "Parameter 'project' must conform to the pattern...". -For more information see setting your [Project ID][6]. -
private static final String projectId = "YOUR_PROJECT_ID"
- 1. Specify an 'Application Name' for your app by updating the following line of code: -
private static final String APPLICATION_NAME = "";
- 1. Save the changes to the file and exit the text editor. - -1. Compile and run the sample: - 1. Compile the sample code using Maven by running the following command: -
mvn compile
- 1. Execute the sample code using Maven by running the following command: -
mvn -q exec:java
- 1. Running the sample will list all Google Compute Engine VM instances found in - the zone you specified. The sample will also check for the existence of a VM instance - named "my-sample-instance". If the "my-sample-instance" VM does not exist, running the - sample will create it. If the "my-sample-instance" VM does already exist then running the - sample will delete it. - - You can verify the list of VM instances by running the command - `gcloud compute instances list`. VM instances can be deleted with the 'gcloud compute instance delete' - command. For example, this command will delete the 'my-sample-instance' VM instance - in the zone 'us-central1-f': - - `gcloud compute instances delete my-sample-instance --zone us-central1-f` - -1. Importing the code into Eclipse and running it from there: - 1. Prerequisites: install [Eclipse][9] and the [Maven plugin for Eclipse][10]. - 1. Download code as specified above. - 1. File -> Import -> Maven -> Existing Maven Projects -> Next. - 1. Select your project directory as your "Root Directory," and click "Finish." - 1. Right-click on project compute-engine-cmdline-sample. - 1. Run As > Java Application. - 1. If asked, type or select "ComputeEngineSample" and click OK. - 1. Application output will display in the Eclipse Console. - -[1]: https://cloud.google.com/compute/ -[2]: http://java.com/en/download/faq/develop.xml -[3]: https://cloud.google.com/compute/ -[4]: https://console.cloud.google.com/project -[5]: https://github.com/GoogleCloudPlatform/java-docs-samples/blob/main/compute/cmdline/src/main/java/ComputeEngineSample.java#L54 -[6]: https://support.google.com/cloud/answer/6158840 -[7]: http://git-scm.com/downloads -[8]: http://maven.apache.org/download.html -[9]: http://www.eclipse.org/downloads/ -[10]: http://download.eclipse.org/technology/m2e/releases/ diff --git a/compute/cmdline/logging.properties b/compute/cmdline/logging.properties deleted file mode 100644 index 40072d61c26..00000000000 --- a/compute/cmdline/logging.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Properties file which configures the operation of the JDK logging facility. -# The system will look for this config file to be specified as a system property: -# -Djava.util.logging.config.file=${project_loc:compute-engine-cmdline-sample}/logging.properties - -# Set up the console handler (uncomment "level" to show more fine-grained messages) -handlers = java.util.logging.ConsoleHandler -#java.util.logging.ConsoleHandler.level = CONFIG - -# Set up logging of HTTP requests and responses (uncomment "level" to show) -#com.google.api.client.http.level = CONFIG diff --git a/compute/cmdline/pom.xml b/compute/cmdline/pom.xml deleted file mode 100644 index 51b45edbdd6..00000000000 --- a/compute/cmdline/pom.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - 4.0.0 - com.example.compute - compute-cmdline - 1 - - - - com.google.cloud.samples - shared-configuration - 1.2.0 - - - - 1.8 - 1.8 - v1-rev20240130-2.0.0 - UTF-8 - - - - - - libraries-bom - com.google.cloud - import - pom - 26.32.0 - - - - - - - com.google.auth - google-auth-library-oauth2-http - - - com.google.apis - google-api-services-compute - ${project.compute.version} - - - - - - - - org.codehaus.mojo - exec-maven-plugin - 3.1.1 - - - - java - - - - - ComputeEngineSample - - - java.util.logging.config.file - logging.properties - - - - - - - ${project.artifactId}-${project.version} - - - diff --git a/compute/cmdline/src/main/java/ComputeEngineSample.java b/compute/cmdline/src/main/java/ComputeEngineSample.java deleted file mode 100644 index e28dba410c3..00000000000 --- a/compute/cmdline/src/main/java/ComputeEngineSample.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - * Copyright 2015 Google Inc. - * - * Licensed 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. - */ - -import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; -import com.google.api.client.http.HttpRequestInitializer; -import com.google.api.client.http.HttpTransport; -import com.google.api.client.json.JsonFactory; -import com.google.api.client.json.gson.GsonFactory; -import com.google.api.services.compute.Compute; -import com.google.api.services.compute.ComputeScopes; -import com.google.api.services.compute.model.AccessConfig; -import com.google.api.services.compute.model.AttachedDisk; -import com.google.api.services.compute.model.AttachedDiskInitializeParams; -import com.google.api.services.compute.model.Instance; -import com.google.api.services.compute.model.InstanceList; -import com.google.api.services.compute.model.Metadata; -import com.google.api.services.compute.model.NetworkInterface; -import com.google.api.services.compute.model.Operation; -import com.google.api.services.compute.model.ServiceAccount; -import com.google.auth.http.HttpCredentialsAdapter; -import com.google.auth.oauth2.GoogleCredentials; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * Command-line sample to demo listing Google Compute Engine instances using Java and the Google - * Compute Engine API. - * - * @author Jonathan Simon - */ -public class ComputeEngineSample { - - /** - * Be sure to specify the name of your application. If the application name is {@code null} or - * blank, the application will log a warning. Suggested format is "MyCompany-ProductName/1.0". - */ - private static final String APPLICATION_NAME = ""; - - /** Set PROJECT_ID to your Project ID from the Overview pane in the Developers console. */ - private static final String PROJECT_ID = "YOUR_PROJECT_ID"; - - /** Set Compute Engine zone. */ - private static final String ZONE_NAME = "us-central1-f"; - - /** Set the name of the sample VM instance to be created. */ - private static final String SAMPLE_INSTANCE_NAME = "my-sample-instance"; - - /** Set the path of the OS image for the sample VM instance to be created. */ - private static final String SOURCE_IMAGE_PREFIX = - "https://www.googleapis.com/compute/v1/projects/"; - - private static final String SOURCE_IMAGE_PATH = - "ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20200529"; - - /** Set the Network configuration values of the sample VM instance to be created. */ - private static final String NETWORK_INTERFACE_CONFIG = "ONE_TO_ONE_NAT"; - - private static final String NETWORK_ACCESS_CONFIG = "External NAT"; - - /** Set the time out limit for operation calls to the Compute Engine API. */ - private static final long OPERATION_TIMEOUT_MILLIS = 60 * 1000; - - /** Global instance of the HTTP transport. */ - private static HttpTransport httpTransport; - - /** Global instance of the JSON factory. */ - private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance(); - - public static void main(String[] args) { - try { - httpTransport = GoogleNetHttpTransport.newTrustedTransport(); - - // Authenticate using Google Application Default Credentials. - GoogleCredentials credential = GoogleCredentials.getApplicationDefault(); - if (credential.createScopedRequired()) { - List scopes = new ArrayList<>(); - // Set Google Cloud Storage scope to Full Control. - scopes.add(ComputeScopes.DEVSTORAGE_FULL_CONTROL); - // Set Google Compute Engine scope to Read-write. - scopes.add(ComputeScopes.COMPUTE); - credential = credential.createScoped(scopes); - } - HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credential); - // Create Compute Engine object for listing instances. - Compute compute = - new Compute.Builder(httpTransport, JSON_FACTORY, requestInitializer) - .setApplicationName(APPLICATION_NAME) - .build(); - - // List out instances, looking for the one created by this sample app. - boolean foundOurInstance = printInstances(compute); - - Operation op; - if (foundOurInstance) { - op = deleteInstance(compute, SAMPLE_INSTANCE_NAME); - } else { - op = startInstance(compute, SAMPLE_INSTANCE_NAME); - } - - // Call Compute Engine API operation and poll for operation completion status - System.out.println("Waiting for operation completion..."); - Operation.Error error = blockUntilComplete(compute, op, OPERATION_TIMEOUT_MILLIS); - if (error == null) { - System.out.println("Success!"); - } else { - System.out.println(error.toPrettyString()); - } - } catch (IOException e) { - System.err.println(e.getMessage()); - } catch (Throwable t) { - t.printStackTrace(); - } - System.exit(1); - } - - /** - * Print available machine instances. - * - * @param compute The main API access point - * @return {@code true} if the instance created by this sample app is in the list - */ - public static boolean printInstances(Compute compute) throws IOException { - System.out.println("================== Listing Compute Engine Instances =================="); - Compute.Instances.List instances = compute.instances().list(PROJECT_ID, ZONE_NAME); - InstanceList list = instances.execute(); - boolean found = false; - if (list.getItems() == null) { - System.out.println( - "No instances found. Sign in to the Google Developers Console and create " - + "an instance at: https://console.developers.google.com/"); - } else { - for (Instance instance : list.getItems()) { - System.out.println(instance.toPrettyString()); - if (instance.getName().equals(SAMPLE_INSTANCE_NAME)) { - found = true; - } - } - } - return found; - } - - // [START compute_create_instance] - public static Operation startInstance(Compute compute, String instanceName) throws IOException { - System.out.println("================== Starting New Instance =================="); - - // Create VM Instance object with the required properties. - Instance instance = new Instance(); - instance.setName(instanceName); - instance.setMachineType( - String.format( - "https://www.googleapis.com/compute/v1/projects/%s/zones/%s/machineTypes/e2-standard-1", - PROJECT_ID, ZONE_NAME)); - // Add Network Interface to be used by VM Instance. - NetworkInterface ifc = new NetworkInterface(); - ifc.setNetwork( - String.format( - "https://www.googleapis.com/compute/v1/projects/%s/global/networks/default", - PROJECT_ID)); - List configs = new ArrayList<>(); - AccessConfig config = new AccessConfig(); - config.setType(NETWORK_INTERFACE_CONFIG); - config.setName(NETWORK_ACCESS_CONFIG); - configs.add(config); - ifc.setAccessConfigs(configs); - instance.setNetworkInterfaces(Collections.singletonList(ifc)); - - // Add attached Persistent Disk to be used by VM Instance. - AttachedDisk disk = new AttachedDisk(); - disk.setBoot(true); - disk.setAutoDelete(true); - disk.setType("PERSISTENT"); - AttachedDiskInitializeParams params = new AttachedDiskInitializeParams(); - // Assign the Persistent Disk the same name as the VM Instance. - params.setDiskName(instanceName); - // Specify the source operating system machine image to be used by the VM Instance. - params.setSourceImage(SOURCE_IMAGE_PREFIX + SOURCE_IMAGE_PATH); - // Specify the disk type as Standard Persistent Disk - params.setDiskType( - String.format( - "https://www.googleapis.com/compute/v1/projects/%s/zones/%s/diskTypes/pd-standard", - PROJECT_ID, ZONE_NAME)); - disk.setInitializeParams(params); - instance.setDisks(Collections.singletonList(disk)); - - // Initialize the service account to be used by the VM Instance and set the API access scopes. - ServiceAccount account = new ServiceAccount(); - account.setEmail("default"); - List scopes = new ArrayList<>(); - scopes.add("https://www.googleapis.com/auth/devstorage.full_control"); - scopes.add("https://www.googleapis.com/auth/compute"); - account.setScopes(scopes); - instance.setServiceAccounts(Collections.singletonList(account)); - - // Optional - Add a startup script to be used by the VM Instance. - Metadata meta = new Metadata(); - Metadata.Items item = new Metadata.Items(); - item.setKey("startup-script-url"); - // If you put a script called "vm-startup.sh" in this Google Cloud Storage - // bucket, it will execute on VM startup. This assumes you've created a - // bucket named the same as your PROJECT_ID. - // For info on creating buckets see: - // https://cloud.google.com/storage/docs/cloud-console#_creatingbuckets - item.setValue(String.format("gs://%s/vm-startup.sh", PROJECT_ID)); - meta.setItems(Collections.singletonList(item)); - instance.setMetadata(meta); - - System.out.println(instance.toPrettyString()); - Compute.Instances.Insert insert = compute.instances().insert(PROJECT_ID, ZONE_NAME, instance); - return insert.execute(); - } - - // [END compute_create_instance] - - private static Operation deleteInstance(Compute compute, String instanceName) throws Exception { - System.out.println( - "================== Deleting Instance " + instanceName + " =================="); - Compute.Instances.Delete delete = - compute.instances().delete(PROJECT_ID, ZONE_NAME, instanceName); - return delete.execute(); - } - - public static String getLastWordFromUrl(String url) { - if (url != null) { - String[] bits = url.split("/"); - url = bits[bits.length - 1]; - } - return url; - } - - // [START compute_wait_for_operation] - /** - * Wait until {@code operation} is completed. - * - * @param compute the {@code Compute} object - * @param operation the operation returned by the original request - * @param timeout the timeout, in millis - * @return the error, if any, else {@code null} if there was no error - * @throws InterruptedException if we timed out waiting for the operation to complete - * @throws IOException if we had trouble connecting - */ - public static Operation.Error blockUntilComplete( - Compute compute, Operation operation, long timeout) throws Exception { - long start = System.currentTimeMillis(); - final long pollInterval = 5 * 1000; - String zone = getLastWordFromUrl(operation.getZone()); // null for global/regional operations - String region = getLastWordFromUrl(operation.getRegion()); - String status = operation.getStatus(); - String opId = operation.getName(); - while (operation != null && !status.equals("DONE")) { - Thread.sleep(pollInterval); - long elapsed = System.currentTimeMillis() - start; - if (elapsed >= timeout) { - throw new InterruptedException("Timed out waiting for operation to complete"); - } - System.out.println("waiting..."); - if (zone != null) { - Compute.ZoneOperations.Get get = compute.zoneOperations().get(PROJECT_ID, zone, opId); - operation = get.execute(); - } else if (region != null) { - Compute.RegionOperations.Get get = compute.regionOperations().get(PROJECT_ID, region, opId); - operation = get.execute(); - } else { - Compute.GlobalOperations.Get get = compute.globalOperations().get(PROJECT_ID, opId); - operation = get.execute(); - } - if (operation != null) { - status = operation.getStatus(); - } - } - return operation == null ? null : operation.getError(); - } - // [END compute_wait_for_operation] -}