Skip to content

Commit

Permalink
Add list and list_private_ips rmb calls (#2206)
Browse files Browse the repository at this point in the history
* Add get all and private ips handler

* Rename rmb calls

* Remove middleware logic

* Change to gridtypes.Name and simplify handler

* Revert back to make()
  • Loading branch information
AbdelrahmanElawady authored Feb 26, 2024
1 parent 931cb64 commit 29412f5
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 0 deletions.
23 changes: 23 additions & 0 deletions client/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,14 @@ func (n *NodeClient) DeploymentGet(ctx context.Context, contractID uint64) (dl g
return dl, nil
}

// DeploymentList gets all deployments for a twin
func (n *NodeClient) DeploymentList(ctx context.Context) (dls []gridtypes.Deployment, err error) {
const cmd = "zos.deployment.list"

err = n.bus.Call(ctx, n.nodeTwin, cmd, nil, &dls)
return
}

// DeploymentGet gets a deployment via contract ID
func (n *NodeClient) DeploymentChanges(ctx context.Context, contractID uint64) (changes []gridtypes.Workload, err error) {
const cmd = "zos.deployment.changes"
Expand Down Expand Up @@ -290,6 +298,21 @@ func (n *NodeClient) NetworkListPublicIPs(ctx context.Context) ([]string, error)
return result, nil
}

// NetworkListPrivateIPs list private ips reserved for a network
func (n *NodeClient) NetworkListPrivateIPs(ctx context.Context, networkName string) ([]string, error) {
const cmd = "zos.network.list_private_ips"
var result []string
in := args{
"network_name": networkName,
}

if err := n.bus.Call(ctx, n.nodeTwin, cmd, in, &result); err != nil {
return nil, err
}

return result, nil
}

// NetworkGetPublicConfig returns the current public node network configuration. A node with a
// public config can be used as an access node for wireguard.
func (n *NodeClient) NetworkGetPublicConfig(ctx context.Context) (cfg pkg.PublicConfig, err error) {
Expand Down
42 changes: 42 additions & 0 deletions pkg/provision/mbus/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package mbus

import (
"context"
"encoding/json"
"fmt"

"github.com/pkg/errors"
Expand Down Expand Up @@ -35,10 +36,12 @@ func (d *Deployments) setup(router rmb.Router) {
sub.WithHandler("update", d.updateHandler)
sub.WithHandler("delete", d.deleteHandler)
sub.WithHandler("get", d.getHandler)
sub.WithHandler("list", d.listHandler)
sub.WithHandler("changes", d.changesHandler)

net := router.Subroute("network")
net.WithHandler("list_public_ips", d.listPublicIps)
net.WithHandler("list_private_ips", d.listPrivateIps)
}

func (n *Deployments) listPublicIps(ctx context.Context, _ []byte) (interface{}, error) {
Expand Down Expand Up @@ -85,6 +88,41 @@ func (n *Deployments) listPublicIps(ctx context.Context, _ []byte) (interface{},
return ips, nil
}

type listPrivateIpsArgs struct {
NetworkName gridtypes.Name `json:"network_name"`
}

func (d *Deployments) listPrivateIps(ctx context.Context, payload []byte) (interface{}, error) {
var args listPrivateIpsArgs
if err := json.Unmarshal(payload, &args); err != nil {
return nil, err
}
deployments, err := d.list(ctx, payload)
if err != nil {
return nil, err
}
ips := make([]string, 0)
for _, deployment := range deployments {
vms := deployment.ByType(zos.ZMachineType)
for _, vm := range vms {
if vm.Result.State.IsAny(gridtypes.StateDeleted, gridtypes.StateError) {
continue
}
data, err := vm.WorkloadData()
if err != nil {
return nil, err
}
zmachine := data.(*zos.ZMachine)
for _, inf := range zmachine.Network.Interfaces {
if inf.Network == args.NetworkName {
ips = append(ips, inf.IP.String())
}
}
}
}
return ips, nil
}

func (d *Deployments) updateHandler(ctx context.Context, payload []byte) (interface{}, error) {
data, err := d.createOrUpdate(ctx, payload, true)
if err != nil {
Expand Down Expand Up @@ -128,3 +166,7 @@ func (d *Deployments) changesHandler(ctx context.Context, payload []byte) (inter
}
return data, nil
}

func (d *Deployments) listHandler(ctx context.Context, payload []byte) (interface{}, error) {
return d.list(ctx, payload)
}
19 changes: 19 additions & 0 deletions pkg/provision/mbus/reservation.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,25 @@ func (d *Deployments) get(ctx context.Context, payload []byte) (interface{}, mw.
return deployment, nil
}

func (d *Deployments) list(ctx context.Context, payload []byte) ([]gridtypes.Deployment, error) {
deploymentIDs, err := d.engine.Storage().ByTwin(rmb.GetTwinID(ctx))
if err != nil {
return nil, err
}
deployments := make([]gridtypes.Deployment, 0)
for _, id := range deploymentIDs {
deployment, err := d.engine.Storage().Get(rmb.GetTwinID(ctx), id)
if err != nil {
return nil, err
}
if !deployment.IsActive() {
continue
}
deployments = append(deployments, deployment)
}
return deployments, nil
}

func (d *Deployments) changes(ctx context.Context, payload []byte) (interface{}, mw.Response) {
var args idArgs
err := json.Unmarshal(payload, &args)
Expand Down

0 comments on commit 29412f5

Please sign in to comment.