Added Pipeline controller to Orborus for testing
This commit is contained in:
@@ -750,7 +750,6 @@ func deployWorker(image string, identifier string, env []string, executionReques
|
|||||||
}
|
}
|
||||||
|
|
||||||
hostConfig.NetworkMode = container.NetworkMode(fmt.Sprintf("container:%s", containerId))
|
hostConfig.NetworkMode = container.NetworkMode(fmt.Sprintf("container:%s", containerId))
|
||||||
|
|
||||||
if strings.ToLower(cleanupEnv) != "false" {
|
if strings.ToLower(cleanupEnv) != "false" {
|
||||||
hostConfig.AutoRemove = true
|
hostConfig.AutoRemove = true
|
||||||
}
|
}
|
||||||
@@ -835,7 +834,7 @@ func deployWorker(image string, identifier string, env []string, executionReques
|
|||||||
log.Printf("[ERROR] Failed to start worker container in environment %s: %s", environment, err)
|
log.Printf("[ERROR] Failed to start worker container in environment %s: %s", environment, err)
|
||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
log.Printf("[INFO][%s] Worker Container created. Environment %s: docker logs %s", executionRequest.ExecutionId, environment, cont.ID)
|
log.Printf("[INFO][%s] Worker Container created (2). Environment %s: docker logs %s", executionRequest.ExecutionId, environment, cont.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
//stats, err := cli.ContainerInspect(context.Background(), containerName)
|
//stats, err := cli.ContainerInspect(context.Background(), containerName)
|
||||||
@@ -1568,7 +1567,7 @@ func main() {
|
|||||||
|
|
||||||
// FIXME - add check for StatusCode
|
// FIXME - add check for StatusCode
|
||||||
if newresp.StatusCode != 200 {
|
if newresp.StatusCode != 200 {
|
||||||
log.Printf("[ERROR] Backend connection failed, or is missing (%d): %s", newresp.StatusCode, string(body))
|
log.Printf("[ERROR] Backend connection failed for url '%s', or is missing (%d): %s", fullUrl, newresp.StatusCode, string(body))
|
||||||
} else {
|
} else {
|
||||||
if !hasStarted {
|
if !hasStarted {
|
||||||
log.Printf("[DEBUG] Starting iteration on environment %#v (default = Shuffle). Got statuscode %d from backend on first request", environment, newresp.StatusCode)
|
log.Printf("[DEBUG] Starting iteration on environment %#v (default = Shuffle). Got statuscode %d from backend on first request", environment, newresp.StatusCode)
|
||||||
@@ -1604,7 +1603,15 @@ func main() {
|
|||||||
newrequests := []shuffle.ExecutionRequest{}
|
newrequests := []shuffle.ExecutionRequest{}
|
||||||
for _, incRequest := range executionRequests.Data {
|
for _, incRequest := range executionRequests.Data {
|
||||||
// Looking for specific jobs
|
// Looking for specific jobs
|
||||||
if incRequest.Type == "DOCKER_IMAGE_DOWNLOAD" {
|
if incRequest.Type == "PIPELINE_CREATE" || incRequest.Type == "PIPELINE_UPDATE" || incRequest.Type == "PIPELINE_DELETE" {
|
||||||
|
|
||||||
|
err := handlePipeline(incRequest)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERROR] Failed handling pipeline: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
toBeRemoved.Data = append(toBeRemoved.Data, incRequest)
|
||||||
|
} else if incRequest.Type == "DOCKER_IMAGE_DOWNLOAD" {
|
||||||
log.Printf("[INFO] Should delete -> download new image %#v", incRequest.ExecutionArgument)
|
log.Printf("[INFO] Should delete -> download new image %#v", incRequest.ExecutionArgument)
|
||||||
|
|
||||||
if len(incRequest.ExecutionArgument) > 0 {
|
if len(incRequest.ExecutionArgument) > 0 {
|
||||||
@@ -1788,7 +1795,154 @@ func main() {
|
|||||||
|
|
||||||
time.Sleep(time.Duration(sleepTime) * time.Second)
|
time.Sleep(time.Duration(sleepTime) * time.Second)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func deployPipeline(image, identifier, command string) error {
|
||||||
|
if isKubernetes == "true" {
|
||||||
|
return errors.New("Kubernetes not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx := context.Background()
|
||||||
|
hostConfig := &container.HostConfig{
|
||||||
|
LogConfig: container.LogConfig{
|
||||||
|
Type: "json-file",
|
||||||
|
Config: map[string]string{
|
||||||
|
"max-size": "10m",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Resources: container.Resources{},
|
||||||
|
}
|
||||||
|
|
||||||
|
hostConfig.NetworkMode = container.NetworkMode(fmt.Sprintf("container:%s", containerId))
|
||||||
|
if strings.ToLower(cleanupEnv) != "false" {
|
||||||
|
hostConfig.AutoRemove = true
|
||||||
|
}
|
||||||
|
|
||||||
|
envVariables := []string{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
config := &container.Config{
|
||||||
|
Image: image,
|
||||||
|
Env: envVariables,
|
||||||
|
Cmd: []string{command},
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add label to container in case of zombies
|
||||||
|
config.Labels = map[string]string{
|
||||||
|
"shuffle": "shuffle",
|
||||||
|
}
|
||||||
|
|
||||||
|
cont, err := dockercli.ContainerCreate(
|
||||||
|
ctx,
|
||||||
|
config,
|
||||||
|
hostConfig,
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
identifier,
|
||||||
|
)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if strings.Contains(fmt.Sprintf("%s", err), "Conflict. The container name ") {
|
||||||
|
log.Printf("[DEBUG] Pipeline Container %s already exists, removing it", identifier)
|
||||||
|
} else {
|
||||||
|
log.Printf("[ERROR] Failed to create pipeline container %s: %s", identifier, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
containerStartOptions := types.ContainerStartOptions{}
|
||||||
|
err = dockercli.ContainerStart(
|
||||||
|
ctx,
|
||||||
|
cont.ID,
|
||||||
|
containerStartOptions,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
if strings.Contains(fmt.Sprintf("%s", err), "cannot join network") || strings.Contains(fmt.Sprintf("%s", err), "No such container") {
|
||||||
|
hostConfig.NetworkMode = ""
|
||||||
|
cont, err = dockercli.ContainerCreate(
|
||||||
|
ctx,
|
||||||
|
config,
|
||||||
|
hostConfig,
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
identifier+"-2",
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERROR] Failed to CREATE pipeline container (2): %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = dockercli.ContainerStart(
|
||||||
|
ctx,
|
||||||
|
cont.ID,
|
||||||
|
containerStartOptions,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERROR] Failed to start pipeline container (2): %s", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Printf("[ERROR] Failed initial pipeline container start. Quitting as this is NOT a simple network issue. Err: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERROR] Failed to start pipeline container in environment %s: %s", environment, err)
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
log.Printf("[INFO] Pipeline Container created (1). Environment %s: docker logs %s", environment, cont.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
stats, err := dockercli.ContainerInspect(ctx, cont.ID)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERROR] Failed checking pipeline with containername '%s'", cont.ID)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
containerStatus := stats.ContainerJSONBase.State.Status
|
||||||
|
log.Printf("[DEBUG] Status of pipeline '%s' is %s. Should be running. Will reset", containerName, containerStatus)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tenzir command samples
|
||||||
|
// docker pull ghcr.io/dominiklohmann/tenzir-arm64:latest
|
||||||
|
// docker tag ghcr.io/dominiklohmann/tenzir-arm64:latest tenzir/tenzir:latest
|
||||||
|
|
||||||
|
// Read from Cache and send it to a webhook
|
||||||
|
// docker run tenzir/tenzir:latest 'from http://192.168.86.44:5002/api/v1/orgs/7e9b9007-5df2-4b47-bca5-c4d267ef2943/cache/CIDR%20ranges?type=text&authorization=cec9d01f-09b2-4419-8a0a-76c6046e3fef read lines | to http://192.168.86.44:5002/api/v1/hooks/webhook_665ace5f-f27b-496a-a365-6e07eb61078c write lines'
|
||||||
|
func handlePipeline(incRequest shuffle.ExecutionRequest) error {
|
||||||
|
if len(incRequest.ExecutionArgument) == 0 {
|
||||||
|
log.Printf("[ERROR] No execution argument found for pipeline create. Skipping")
|
||||||
|
|
||||||
|
return errors.New("No execution argument found for pipeline create. Skipping")
|
||||||
|
}
|
||||||
|
|
||||||
|
image := "tenzir/tenzir:latest"
|
||||||
|
identifier := strings.ToLower(strings.ReplaceAll(incRequest.ExecutionSource, " ", "-"))
|
||||||
|
command := incRequest.ExecutionArgument
|
||||||
|
|
||||||
|
if incRequest.Type == "PIPELINE_CREATE" {
|
||||||
|
log.Printf("[INFO] Should delete -> recreate new pipeline %#v. Name: %#v", incRequest.ExecutionArgument, identifier)
|
||||||
|
err := deployPipeline(image, identifier, command)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("[ERROR] Failed to deploy pipeline: %s", err)
|
||||||
|
return err
|
||||||
|
} else {
|
||||||
|
log.Printf("[INFO] Pipeline deployed successfully")
|
||||||
|
}
|
||||||
|
} else if incRequest.Type == "PIPELINE_DELETE" {
|
||||||
|
log.Printf("[INFO] Should delete pipeline %#v", incRequest.ExecutionArgument)
|
||||||
|
} else if incRequest.Type == "PIPELINE_UPDATE" {
|
||||||
|
log.Printf("[INFO] Should update pipeline %#v", incRequest.ExecutionArgument)
|
||||||
|
} else {
|
||||||
|
log.Printf("[ERROR] Unknown type for pipeline: %s", incRequest.Type)
|
||||||
|
return errors.New("Unknown type for pipeline")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Is this ok to do with Docker? idk :)
|
// Is this ok to do with Docker? idk :)
|
||||||
|
|||||||
Reference in New Issue
Block a user