Russell Seymour
Russell Seymour

Reputation: 1423

How do you set the deployment configuration when using the Google API for Deployment Manager?

I am trying to use the Ruby Google API Client to create a deployment on the Google Compute Platform (GCP).

I have a YAML file for the configuation:

resources:

- name: my-vm
  type: compute.v1.instance
  properties:
    zone: europe-west1-b
    machineType: zones/europe-west1-b/machineTypes/f1-micro
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: global/images/myvm-1487178154
    networkInterfaces:
    - network: $(ref.my-subnet.selfLink)
      networkIP: 172.31.54.11

# Create the network for the machines
- name: my-subnet
  type: compute.v1.network
  properties:
    IPv4Range: 172.31.54.0/24

I have tested that this works using the gcloud command line tool.

I now want to do this in Ruby using the API. I have the following code:

require 'google/apis/deploymentmanager_v2'
require 'googleauth'
require 'googleauth/stores/file_token_store'

SCOPE = Google::Apis::DeploymentmanagerV2::AUTH_CLOUD_PLATFORM
PROJECT_ID = "my-project"

ENV['GOOGLE_APPLICATION_CREDENTIALS'] = "./service_account.json"

deployment_manager = Google::Apis::DeploymentmanagerV2::DeploymentManagerService.new
deployment_manager.authorization = Google::Auth.get_application_default([SCOPE])

All of this is working in that I am authenticated and I have a deployment_manager object I can work with.

I want to use the insert_deployment method which has the following signature:

#insert_deployment(project, deployment_object = nil, preview: nil, fields: nil, quota_user: nil, user_ip: nil, options: nil) {|result, err| ... } ⇒ Google::Apis::DeploymentmanagerV2::Operation

The deployment_object type is 'Google::Apis::DeploymentmanagerV2::Deployment'. I can create this object but then I am do not know how to import the YAML file I have into this to be able to programtically perform the deployment.

There is another class called ConfigFile which seems akin to the command line option of specifying the --config but again I do not know how to load the file into this nor then turn it into the correct object for the insert_deployment.

Upvotes: 0

Views: 110

Answers (1)

Russell Seymour
Russell Seymour

Reputation: 1423

I have worked this out.

Different classes need to be nested so that the configuration is picked up. For example:

require 'google/apis/deploymentmanager_v2'
require 'googleauth'

SCOPE = Google::Apis::DeploymentmanagerV2::AUTH_CLOUD_PLATFORM
PROJECT_ID = "my-project"

ENV['GOOGLE_APPLICATION_CREDENTIALS'] = "./service_account.json"

# Create a target configuration
target_configuration = Google::Apis::DeploymentmanagerV2::TargetConfiguration.new(config: {content: File.read('gcp.yaml')})

# Now create a deployment object
deployment = Google::Apis::DeploymentmanagerV2::Deployment.new(target: target_configuration, name: 'ruby-api-deployment')

# Attempt the deployment
response = deployment_manager.insert_deployment(PROJECT_ID, deployment)

Hope this helps someone

Upvotes: 1

Related Questions