+
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 69 additions & 7 deletions cli/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,54 @@
package cli

import (
"os"

"github.com/fatih/color"
"github.com/spf13/cobra"
"github.com/ultravioletrs/cocos/manager"
"google.golang.org/protobuf/types/known/emptypb"
)

const (
serverURL = "server-url"
serverCA = "server-ca"
clientKey = "client-key"
clientCrt = "client-crt"
logLevel = "log-level"
)

var (
agentCVMServerUrl string
agentCVMServerCA string
agentCVMClientKey string
agentCVMClientCrt string
agentLogLevel string
)

func (c *CLI) NewCreateVMCmd() *cobra.Command {
return &cobra.Command{
cmd := &cobra.Command{

Check warning on line 30 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L30

Added line #L30 was not covered by tests
Use: "create-vm",
Short: "Create a new virtual machine",
Example: `create-vm`,
Args: cobra.ExactArgs(0),
Run: func(cmd *cobra.Command, args []string) {
if err := c.InitializeManagerClient(cmd); err == nil {
defer c.Close()
if err := c.InitializeManagerClient(cmd); err != nil {
printError(cmd, "Failed to connect to manager: %v ❌ ", c.connectErr)
return

Check warning on line 38 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L36-L38

Added lines #L36 - L38 were not covered by tests
}
defer c.Close()

Check warning on line 40 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L40

Added line #L40 was not covered by tests

if c.connectErr != nil {
printError(cmd, "Failed to connect to manager: %v ❌ ", c.connectErr)
createReq, err := loadCerts()
if err != nil {
printError(cmd, "Error loading certs: %v ❌ ", err)

Check warning on line 44 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L42-L44

Added lines #L42 - L44 were not covered by tests
return
}

createReq.AgentCvmServerUrl = agentCVMServerUrl
createReq.AgentLogLevel = agentLogLevel

Check warning on line 50 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L48-L50

Added lines #L48 - L50 were not covered by tests
cmd.Println("🔗 Creating a new virtual machine")

res, err := c.managerClient.CreateVm(cmd.Context(), &emptypb.Empty{})
res, err := c.managerClient.CreateVm(cmd.Context(), createReq)

Check warning on line 53 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L53

Added line #L53 was not covered by tests
if err != nil {
printError(cmd, "Error creating virtual machine: %v ❌ ", err)
return
Expand All @@ -36,6 +59,14 @@
cmd.Println(color.New(color.FgGreen).Sprintf("✅ Virtual machine created successfully with id %s and port %s", res.SvmId, res.ForwardedPort))
},
}

cmd.Flags().StringVar(&agentCVMServerUrl, serverURL, "", "CVM server URL")
cmd.Flags().StringVar(&agentCVMServerCA, serverCA, "", "CVM server CA")
cmd.Flags().StringVar(&agentCVMClientKey, clientKey, "", "CVM client key")
cmd.Flags().StringVar(&agentCVMClientCrt, clientCrt, "", "CVM client crt")
cmd.Flags().StringVar(&agentLogLevel, logLevel, "", "Agent Log level")

return cmd

Check warning on line 69 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L63-L69

Added lines #L63 - L69 were not covered by tests
}

func (c *CLI) NewRemoveVMCmd() *cobra.Command {
Expand Down Expand Up @@ -66,3 +97,34 @@
},
}
}

func fileReader(path string) ([]byte, error) {
if path == "" {
return nil, nil
}

Check warning on line 104 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L101-L104

Added lines #L101 - L104 were not covered by tests

return os.ReadFile(path)

Check warning on line 106 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L106

Added line #L106 was not covered by tests
}

func loadCerts() (*manager.CreateReq, error) {
clientKey, err := fileReader(agentCVMClientKey)
if err != nil {
return nil, err
}

Check warning on line 113 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L109-L113

Added lines #L109 - L113 were not covered by tests

clientCrt, err := fileReader(agentCVMClientCrt)
if err != nil {
return nil, err
}

Check warning on line 118 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L115-L118

Added lines #L115 - L118 were not covered by tests

serverCA, err := fileReader(agentCVMServerCA)
if err != nil {
return nil, err
}

Check warning on line 123 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L120-L123

Added lines #L120 - L123 were not covered by tests

return &manager.CreateReq{
AgentCvmServerCaCert: serverCA,
AgentCvmClientKey: clientKey,
AgentCvmClientCert: clientCrt,
}, nil

Check warning on line 129 in cli/manager.go

View check run for this annotation

Codecov / codecov/patch

cli/manager.go#L125-L129

Added lines #L125 - L129 were not covered by tests
}
6 changes: 6 additions & 0 deletions hal/linux/board/cocos/linux.config
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,9 @@ CONFIG_PREEMPT_DYNAMIC=n
CONFIG_DEBUG_PREEMPT=n
CONFIG_CGROUP_MISC=y
CONFIG_X86_CPUID=y

CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_9P_FS=y
CONFIG_9P_FS_POSIX_ACL=y
CONFIG_9P_FS_SECURITY=y
19 changes: 18 additions & 1 deletion hal/linux/board/cocos/post-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,23 @@ set -e
# Add a console on tty1
if [ -e ${TARGET_DIR}/etc/inittab ]; then
grep -qE '^tty1::' ${TARGET_DIR}/etc/inittab || \
sed -i '/GENERIC_SERIAL/a\
sed -i '/GENERIC_SERIAL/a\
tty1::respawn:/sbin/getty -L tty1 0 vt100 # QEMU graphical window' ${TARGET_DIR}/etc/inittab
fi

# Create the mount points
# Create the mount points
mkdir -p ${TARGET_DIR}/etc/certs
mkdir -p ${TARGET_DIR}/etc/cocos

# Ensure /etc/fstab exists
if [ ! -f "${TARGET_DIR}/etc/fstab" ]; then
touch "${TARGET_DIR}/etc/fstab"
fi

# Add the 9p entries to /etc/fstab
grep -q "certs_share /etc/certs" ${TARGET_DIR}/etc/fstab || \
echo "certs_share /etc/certs 9p trans=virtio,version=9p2000.L,cache=mmap 0 0" >> "${TARGET_DIR}/etc/fstab"

grep -q "env_share /etc/cocos" ${TARGET_DIR}/etc/fstab || \
echo "env_share /etc/cocos 9p trans=virtio,version=9p2000.L,cache=mmap 0 0" >> "${TARGET_DIR}/etc/fstab"
2 changes: 2 additions & 0 deletions hal/linux/configs/cocos_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ BR2_SYSTEM_BIN_SH_BASH=y
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_CPIO_FULL=y
BR2_TARGET_ROOTFS_CPIO_GZIP=y
BR2_TARGET_ROOTFS_OVERLAY="overlay"
BR2_PACKAGE_9PFS=y

# Image
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_COCOS_PATH)/board/cocos/post-build.sh"
Expand Down
3 changes: 1 addition & 2 deletions init/systemd/cocos-agent.service
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ WorkingDirectory=/cocos
StandardOutput=file:/var/log/cocos/agent.stdout
StandardError=file:/var/log/cocos/agent.stderr

Environment=AGENT_GRPC_PORT=7002
Environment=AGENT_LOG_LEVEL=info
EnvironmentFile=/etc/cocos/environment

ExecStartPre=/cocos_init/agent_setup.sh
ExecStart=/cocos_init/agent_start_script.sh
Expand Down
4 changes: 2 additions & 2 deletions manager/api/grpc/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
}
}

func (s *grpcServer) CreateVm(ctx context.Context, _ *emptypb.Empty) (*manager.CreateRes, error) {
port, id, err := s.svc.CreateVM(ctx)
func (s *grpcServer) CreateVm(ctx context.Context, req *manager.CreateReq) (*manager.CreateRes, error) {
port, id, err := s.svc.CreateVM(ctx, req)

Check warning on line 31 in manager/api/grpc/server.go

View check run for this annotation

Codecov / codecov/patch

manager/api/grpc/server.go#L30-L31

Added lines #L30 - L31 were not covered by tests
if err != nil {
return nil, err
}
Expand Down
4 changes: 2 additions & 2 deletions manager/api/logging.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func LoggingMiddleware(svc manager.Service, logger *slog.Logger) manager.Service
return &loggingMiddleware{logger, svc}
}

func (lm *loggingMiddleware) CreateVM(ctx context.Context) (agentAddr string, id string, err error) {
func (lm *loggingMiddleware) CreateVM(ctx context.Context, req *manager.CreateReq) (agentAddr string, id string, err error) {
defer func(begin time.Time) {
message := fmt.Sprintf("Method CreateVM for id %s on port %s took %s to complete", id, agentAddr, time.Since(begin))
if err != nil {
Expand All @@ -37,7 +37,7 @@ func (lm *loggingMiddleware) CreateVM(ctx context.Context) (agentAddr string, id
lm.logger.Info(message)
}(time.Now())

return lm.svc.CreateVM(ctx)
return lm.svc.CreateVM(ctx, req)
}

func (lm *loggingMiddleware) RemoveVM(ctx context.Context, id string) (err error) {
Expand Down
4 changes: 2 additions & 2 deletions manager/api/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ func MetricsMiddleware(svc manager.Service, counter metrics.Counter, latency met
}
}

func (ms *metricsMiddleware) CreateVM(ctx context.Context) (string, string, error) {
func (ms *metricsMiddleware) CreateVM(ctx context.Context, req *manager.CreateReq) (string, string, error) {
defer func(begin time.Time) {
ms.counter.With("method", "Run").Add(1)
ms.latency.With("method", "Run").Observe(time.Since(begin).Seconds())
}(time.Now())

return ms.svc.CreateVM(ctx)
return ms.svc.CreateVM(ctx, req)
}

func (ms *metricsMiddleware) RemoveVM(ctx context.Context, computationID string) error {
Expand Down
Loading
Loading
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载