* Refactor and update dependencies in the project - Updated go.sum to replace `github.com/absmach/magistrala` with `github.com/absmach/supermq` across various modules. - Removed VSock configuration from environment variables and QEMU arguments. - Updated QEMU configuration and related tests to remove references to guest CID and VSock. - Added new HTTP transport layer for API endpoints in the manager. - Introduced Prometheus monitoring configuration with alert rules and Alertmanager setup. - Updated service and VM interfaces to remove unused methods and references. - Refactored tests to align with the new structure and dependencies. Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Add MaxVMs configuration and enforce limit on VM creation Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Add comprehensive tests for HTTP transport handlers and endpoints Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Add test case for exceeding maximum number of VMs in TestRun Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Improve error handling in TestHandlerWithCustomRouter to ensure response writing is checked Signed-off-by: Sammy Oina <sammyoina@gmail.com> * Update dependencies to latest versions - Upgrade cel.dev/expr from v0.23.0 to v0.24.0 - Upgrade github.com/absmach/supermq from v0.16.0 to v0.17.0 - Upgrade github.com/cenkalti/backoff from v4.3.0 to v5.0.2 - Upgrade github.com/cncf/xds/go to v0.0.0-20250501225837-2ac532fd4443 - Upgrade github.com/go-chi/chi/v5 from v5.2.1 to v5.2.2 - Upgrade github.com/go-jose/go-jose/v3 from v3.0.3 to v3.0.4 - Upgrade github.com/gofrs/uuid/v5 from v5.3.0 to v5.3.2 - Upgrade github.com/prometheus/client_golang from v1.22.0 to v1.23.0 - Upgrade github.com/prometheus/client_model from v0.6.1 to v0.6.2 - Upgrade github.com/prometheus/common from v0.62.0 to v0.65.0 - Upgrade github.com/prometheus/procfs from v0.15.1 to v0.16.1 - Upgrade go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from v0.60.0 to v0.62.0 - Upgrade go.opentelemetry.io/otel/exporters/otlp/otlptrace from v1.36.0 to v1.37.0 - Upgrade golang.org/x/crypto from v0.39.0 to v0.40.0 - Upgrade golang.org/x/sys from v0.33.0 to v0.34.0 - Upgrade golang.org/x/text from v0.26.0 to v0.27.0 - Upgrade golang.org/x/time from v0.11.0 to v0.12.0 - Upgrade google.golang.org/grpc from v1.73.0 to v1.74.2 Signed-off-by: Sammy Oina <sammyoina@gmail.com> --------- Signed-off-by: Sammy Oina <sammyoina@gmail.com>
Agent Cloud Init Setup
Overview
The hal/cloud directory contains essential files required for setting up a virtual machine (VM) with cloud-init. This setup ensures the automated installation of dependencies, configuration of the environment, and deployment of the Cocos agent as a systemd service.
Directory Contents
config.yaml: This YAML file provides configuration instructions for the cloud image.meta-data: Contains VM metadata, such as instance-specific details and identifiers.qemu.sh: A Bash script for downloading and configuring a cloud image, running QEMU to simulate a VM with the cloud-init configuration..env: Contains environment variables for starting the VM in different modes, configuring disk space, memory allocation, and other parameters.
Configuration
Preparing the Cloud-Config File
The config.yaml file defines system configurations, including user creation, package installations, file management, and command execution.
Ensure that the cloud-config file is set up with the following configurations:
- User Credentials: Specify the default username and password.
- Certificates and Keys: Certificate files for agent for secure communication.
- Environment Variables: Configuration parameters required by the system.
The config.yaml file is divided into multiple sections, each addressing a specific aspect of the setup process.
1. User Configuration
This section creates a default user with specific permissions and configurations:
- Creates a user named
cocos_user. - Adds
cocos_userto thesudoanddockergroups. - Sets a default password (should be changed for production use).
- Configures the user’s shell as
/bin/bash.
2. Package Installation
Installs essential system packages required for various operations:
curl: For downloading files from the web.make: A utility for building software.git: Version control system for managing code repositories.python3andpython3-dev: Required for running Python-based tools.net-tools: Provides networking utilities such asifconfigandroute.
3. File Management (write_files)
Creates and configures critical files required for the setup:
- Certificates: Cert files (
cert.pem,ca.pem,key.pem) located at/etc/cocos/certs/. - Environment Variables: An env file stored at
/etc/cocos/environment. - Systemd Service File: Cocos agent service configuration file at
/etc/systemd/system/cocos-agent.servicefor managing the Cocos agent. - Agent Scripts:
agent_setup.sh: Configures network interfaces and resizes the root filesystem.agent_start_script.sh: Sets up Docker and starts the Cocos agent.
4. Execution of Commands (runcmd)
A sequence of commands is executed to finalize the setup:
- Creates necessary directories:
/cocos,/cocos_init,/var/log/cocos,/etc/cocos. - Downloads and installs the Cocos agent binary.
- Installs Wasmtime and configures its environment variables.
- Installs Docker and adds
cocos_userto the Docker group. - Reloads systemd and enables the Cocos agent service.
Running the Agent
To test the cloud-init configuration, execute the qemu.sh script to bring up a VM using QEMU:
sudo ./qemu.sh
Important: The script must be executed as root.
Once the QEMU boots the VM, the Cocos agent will run as a systemd service. The service is configured to start automatically on boot and restart in case of failure.
Debugging and Monitoring
For troubleshooting and monitoring the Cocos agent service, use the following commands within the VM:
Manually Start the Service
To manually start the agent service, execute:
sudo systemctl start cocos-agent.service
Verify Service Status
To check if the service is running properly, use:
sudo systemctl status cocos-agent.service
View Service Logs
To inspect logs generated by the agent service, execute:
journalctl -u cocos-agent.service
Check Standard Output and Error Logs
To check logs stored in the system, use:
cat /var/log/cocos/agent.stdout.log
cat /var/log/cocos/agent.stderr.log