# google-cloud-compute
Haskell idiomatic client for [Google Cloud Platform](https://cloud.google.com/) Compute service.
Full docs are available at https://github.com/tusharad/google-cloud-haskell
## Installation
- Cabal: add to your `.cabal`
- `build-depends: google-cloud-compute == 1.1.0.0`
- Stack: add to your `package.yaml`
- `dependencies: - google-cloud-compute == 1.1.0.0`
This package depends on `google-cloud-common` for auth and HTTP helpers.
## Authentication
Authentication is handled by `google-cloud-common` and follows this order:
1. Use `GOOGLE_APPLICATION_CREDENTIALS` to load a Service Account JSON and
exchange a signed JWT for an access token.
2. Otherwise, use the Compute metadata server (suitable for GCE/GKE).
## Examples
Below are minimal examples. See `examples/` in the repo for more.
```haskell
{-# LANGUAGE OverloadedStrings #-}
import Google.Cloud.Compute.Instance
-- List instances
listInstancesExample :: IO ()
listInstancesExample = do
let projectId = "my-gcp-project"
zone = "us-central1-a"
query = defaultListInstancesQuery
result <- listInstances projectId zone (Just query)
case result of
Left err -> putStrLn ("Error: " <> err)
Right instances -> print instances
-- Create an instance
createInstanceExample :: IO ()
createInstanceExample = do
let projectId = "my-gcp-project"
zone = "us-central1-a"
instanceName = "my-instance"
machineType = "e2-medium"
ops = defaultInsertInstanceOps projectId zone instanceName machineType
res <- insertInstance projectId zone ops (Just (InsertInstanceQuery (Just "req-123") Nothing))
case res of
Left err -> putStrLn ("Create error: " <> err)
Right _ -> putStrLn "Create initiated"
-- Start/Stop an instance
startStopExample :: IO ()
startStopExample = do
let projectId = "my-gcp-project"
zone = "us-central1-a"
name = "my-instance"
reqId = defaultRequestIdQuery "req-456"
_ <- startInstance projectId zone name (Just reqId)
_ <- stopInstance projectId zone name (Just reqId)
putStrLn "Start/Stop submitted"
```
Additional modules:
- `Google.Cloud.Compute.Disk`
- `Google.Cloud.Compute.Firewall`
- `Google.Cloud.Compute.Network`
## License
MIT © Contributors