skrawczyk
06/09/2023, 8:00 PMUpdate Work Pool
PATCH function, but the docs themselves don't give much information about how to use the command or any example of it being used
https://app.prefect.cloud/api/docs#tag/Work-Pools/operation/update_work_pool_api_accounts_[…]t_id__workspaces__workspace_id__work_pools__name__patchNate
06/09/2023, 8:04 PMskrawczyk
06/09/2023, 8:10 PM:latest
tag as our org doesn't allow for them in production. That was our initial and tested plan in lab, but will not work in production.
we can't add layers either as it it a package of our own code and utility functions. When the code changes the image layer needs to be rebuiltNate
06/09/2023, 8:56 PMskrawczyk
06/09/2023, 9:06 PMNate
06/09/2023, 9:12 PMskrawczyk
06/09/2023, 9:20 PMNate
06/09/2023, 9:44 PMIn [1]: from prefect.workers.utilities import get_default_base_job_template_for_infrastructure_type
In [2]: from prefect import get_client
In [3]: from prefect.client.schemas.actions import WorkPoolUpdate
In [4]: tmpl = await get_default_base_job_template_for_infrastructure_type("kubernetes")
...:
...: tmpl["variables"]["properties"]["image"] = "foo"
...:
...: async with get_client() as client:
...: await client.update_work_pool(
...: work_pool_name="k8s",
...: work_pool=WorkPoolUpdate(
...: base_job_template=tmpl
...: )
...: )
...:
where the whole template looks like this, which you can find in the UI: work pool > edit > base job template > advanced
{
"variables": {
"type": "object",
"properties": {
"env": {
"type": "object",
"title": "Environment Variables",
"description": "Environment variables to set when starting a flow run.",
"additionalProperties": {
"type": "string"
}
},
"name": {
"type": "string",
"title": "Name",
"description": "Name given to infrastructure created by a worker."
},
"image": "foo",
"labels": {
"type": "object",
"title": "Labels",
"description": "Labels applied to infrastructure created by a worker.",
"additionalProperties": {
"type": "string"
}
},
"command": {
"type": "string",
"title": "Command",
"description": "The command to use when starting a flow run. In most cases, this should be left blank and the command will be automatically generated by the worker."
},
"namespace": {
"type": "string",
"title": "Namespace",
"default": "default",
"description": "The Kubernetes namespace to create jobs within."
},
"stream_output": {
"type": "boolean",
"title": "Stream Output",
"default": true,
"description": "If set, output will be streamed from the job to local standard output."
},
"cluster_config": {
"allOf": [
{
"$ref": "#/definitions/KubernetesClusterConfig"
}
],
"title": "Cluster Config",
"description": "The Kubernetes cluster config to use for job creation."
},
"finished_job_ttl": {
"type": "integer",
"title": "Finished Job TTL",
"description": "The number of seconds to retain jobs after completion. If set, finished jobs will be cleaned up by Kubernetes after the given delay. If not set, jobs will be retained indefinitely."
},
"image_pull_policy": {
"enum": [
"IfNotPresent",
"Always",
"Never"
],
"type": "string",
"title": "Image Pull Policy",
"default": "IfNotPresent",
"description": "The Kubernetes image pull policy to use for job containers."
},
"service_account_name": {
"type": "string",
"title": "Service Account Name",
"description": "The Kubernetes service account to use for job creation."
},
"job_watch_timeout_seconds": {
"type": "integer",
"title": "Job Watch Timeout Seconds",
"description": "Number of seconds to wait for each event emitted by a job before timing out. If not set, the worker will wait for each event indefinitely."
},
"pod_watch_timeout_seconds": {
"type": "integer",
"title": "Pod Watch Timeout Seconds",
"default": 60,
"description": "Number of seconds to watch for pod creation before timing out."
}
},
"definitions": {
"KubernetesClusterConfig": {
"type": "object",
"title": "KubernetesClusterConfig",
"required": [
"config",
"context_name"
],
"properties": {
"config": {
"type": "object",
"title": "Config",
"description": "The entire contents of a kubectl config file."
},
"context_name": {
"type": "string",
"title": "Context Name",
"description": "The name of the kubectl context to use."
}
},
"description": "Stores configuration for interaction with Kubernetes clusters.\n\nSee `from_file` for creation.",
"secret_fields": [],
"block_type_slug": "kubernetes-cluster-config",
"block_schema_references": {}
}
},
"description": "Default variables for the Kubernetes worker.\n\nThe schema for this class is used to populate the `variables` section of the default\nbase job template."
},
"job_configuration": {
"env": "{{ env }}",
"name": "{{ name }}",
"labels": "{{ labels }}",
"command": "{{ command }}",
"namespace": "{{ namespace }}",
"job_manifest": {
"kind": "Job",
"spec": {
"template": {
"spec": {
"containers": [
{
"env": "{{ env }}",
"args": "{{ command }}",
"name": "prefect-job",
"image": "{{ image }}",
"imagePullPolicy": "{{ image_pull_policy }}"
}
],
"completions": 1,
"parallelism": 1,
"restartPolicy": "Never",
"serviceAccountName": "{{ service_account_name }}"
}
},
"ttlSecondsAfterFinished": "{{ finished_job_ttl }}"
},
"metadata": {
"labels": "{{ labels }}",
"namespace": "{{ namespace }}",
"generateName": "{{ name }}-"
},
"apiVersion": "batch/v1"
},
"stream_output": "{{ stream_output }}",
"cluster_config": "{{ cluster_config }}",
"job_watch_timeout_seconds": "{{ job_watch_timeout_seconds }}",
"pod_watch_timeout_seconds": "{{ pod_watch_timeout_seconds }}"
}
}
Nate
06/09/2023, 9:45 PMskrawczyk
06/11/2023, 6:13 PMfrom prefect.workers.utilities import get_default_base_job_template_for_infrastructure_type
-- prefect.workers
only has base
and process
subfolders
from prefect.client.schemas.actions import WorkPoolUpdate
-- prefect.client.schemas
doesn't have any sub packagesNate
06/11/2023, 6:13 PMskrawczyk
06/11/2023, 6:14 PMPrefect 2.10.13
installed via pip. Is there a difference package I should Installskrawczyk
06/11/2023, 6:14 PMNate
06/11/2023, 6:18 PMskrawczyk
06/11/2023, 6:30 PM3.8.16
and 3.8.12
3.8.12
recognizes the packages but 3.8.16
doesn't . Interestingskrawczyk
06/11/2023, 6:32 PMNate
06/11/2023, 6:34 PM