Go examples

Generated from eve-iac OpenAPI/semantics. Do not edit manually.

Task-oriented examples using the current public SDK. These snippets are generated with the API reference.

Import versus from_eve

  • Import (importProject / import_project / ImportProject) clones an existing EVE source lab into a new IaC project and a managed working copy. It must not mutate source_lab.
  • from_eve is reconcileProject with direction: "from_eve". It updates files in an existing project from that project's managed lab. It is not Import.

Create a client

client, err := eveiac.NewClient(eveiac.Config{
    URL:       "https://eve.example:8787",
    Token:     "",
    CAPEM:     caPEM,
    TimeoutMs: 15000,
})

Authenticate / login

anon, err := eveiac.NewClient(eveiac.Config{URL: url, CAPEM: caPEM})
session, err := anon.Login(ctx, eveiac.LoginRequest{Username: "admin", Password: "secret"})
token := ""
if session != nil && session.Token != nil {
    token = *session.Token
}
client, err := eveiac.NewClient(eveiac.Config{URL: url, Token: token, CAPEM: caPEM})

Get session

session, err := client.GetSession(ctx)

List templates

templates, err := client.ListTemplates(ctx, nil)
listed, err := client.ListTemplates(ctx, &eveiac.ListTemplatesQuery{Provisioned: eveiac.Ptr("true")})

Import an existing EVE-NG lab

imported, err := client.ImportProject(ctx, eveiac.ImportProjectRequest{
    Lab:      "/IaC/example.unl",
    Manifest: eveiac.Ptr(manifest),
    YAML:     eveiac.Ptr(yaml),
    Files:    files,
})
// Import clones source_lab. It is not reconcile from_eve.

Validate

result, err := client.ValidateProject(ctx, eveiac.ValidateProjectRequest{Lab: eveiac.Ptr(lab), Manifest: eveiac.Ptr(manifest), YAML: eveiac.Ptr(yaml), Files: files})

Plan

plan, err := client.PlanProject(ctx, eveiac.PlanProjectRequest{Lab: eveiac.Ptr(lab), Manifest: eveiac.Ptr(manifest), YAML: eveiac.Ptr(yaml), Files: files})

Deploy

deployed, err := client.DeployProject(ctx, eveiac.DeployProjectRequest{Lab: eveiac.Ptr(lab), Manifest: eveiac.Ptr(manifest), YAML: eveiac.Ptr(yaml), Files: files})

Reconcile to_eve

applied, err := client.ReconcileProject(ctx, eveiac.ReconcileProjectRequest{
    Lab: eveiac.Ptr(lab), Manifest: eveiac.Ptr(manifest), YAML: eveiac.Ptr(yaml), Files: files, Direction: eveiac.Ptr("to_eve"),
})

Reconcile from_eve

pulled, err := client.ReconcileProject(ctx, eveiac.ReconcileProjectRequest{
    Lab: eveiac.Ptr(lab), Manifest: eveiac.Ptr(manifest), YAML: eveiac.Ptr(yaml), Files: files, Direction: eveiac.Ptr("from_eve"),
})

Status

status, err := client.GetProjectStatus(ctx, eveiac.GetProjectStatusRequest{Lab: eveiac.Ptr(lab), Manifest: eveiac.Ptr(manifest), YAML: eveiac.Ptr(yaml), Files: files})

Inspect

observed, err := client.InspectProject(ctx, eveiac.InspectProjectRequest{Lab: eveiac.Ptr(lab), Manifest: eveiac.Ptr(manifest), YAML: eveiac.Ptr(yaml), Files: files})

Start nodes

result, err := client.ExecProject(ctx, eveiac.ExecProjectRequest{Lab: eveiac.Ptr(lab), Manifest: eveiac.Ptr(manifest), YAML: eveiac.Ptr(yaml), Files: files, Action: "start"})

Stop nodes

result, err := client.ExecProject(ctx, eveiac.ExecProjectRequest{Lab: eveiac.Ptr(lab), Manifest: eveiac.Ptr(manifest), YAML: eveiac.Ptr(yaml), Files: files, Action: "stop"})

Wipe nodes

result, err := client.ExecProject(ctx, eveiac.ExecProjectRequest{Lab: eveiac.Ptr(lab), Manifest: eveiac.Ptr(manifest), YAML: eveiac.Ptr(yaml), Files: files, Action: "wipe"})

List consoles

consoles, err := client.ListProjectConsoles(ctx, eveiac.ListProjectConsolesRequest{Lab: eveiac.Ptr(lab), Manifest: eveiac.Ptr(manifest), YAML: eveiac.Ptr(yaml), Files: files})

Execute a console command

data, err := client.ExecConsole(ctx, eveiac.ExecConsoleRequest{Lab: eveiac.Ptr(lab), Node: eveiac.Ptr("n_1"), Command: eveiac.Ptr("show version")})

Stream console

attached, err := client.AttachConsole(ctx, eveiac.AttachConsoleRequest{Lab: eveiac.Ptr(lab), Node: eveiac.Ptr("n_1")})
ticket := ""
if attached != nil && attached.Stream != nil {
    ticket = eveiac.ConsoleStreamTicket(*attached.Stream)
}
conn, err := client.StreamConsole(ctx, ticket)

Error handling

session, err := client.GetSession(ctx)
if err != nil {
    if eveiac.IsAuthError(err) {
        return err
    }
    return err
}
_ = session