Git Product home page Git Product logo

texano00 / urunner Goto Github PK

View Code? Open in Web Editor NEW
33.0 2.0 6.0 647 KB

URunner is a lightweight Kubernetes utility in order to auto restart pods on image tag digest change. This is very useful on environments where it is commonly used the latest tag which frequently changes over time. Urunner auto detects the container image tag digest (for example the digest of tag latest) and automatically restart pods.

Dockerfile 3.62% Python 85.85% Smarty 10.53%
containers docker helm kubernetes

urunner's Issues

GitLab container registry support

Hello @texano00!

I'm trying to use urunner to auto-restart a pod that uses an image hosted in GitLab Container registry, and it seems that the harbor/DockerV2 API doesn't work for those โ€”ย I get "ERROR:root:Error status code: 401" in urunner logs. Can you please look into implementing support for GitLab registries as well?

Add support for arm64

I was unable to run urunner on my all ARM64 cluster (https://raymii.org/s/tutorials/My_First_Kubernetes_k3s_cluster_on_3_Orange_Pi_Zero_3s_including_k8s_dashboard_hello-node_and_failover.html)

Here is a recent pull request from canary checker that added arm64 support as an example: https://github.com/flanksource/canary-checker/pull/1956/files#diff-2e71f9191e45345b53b343fdd7b8e2622685599e60237e81e8f0859a8cc03fc7

When adding an x86 node and forcing Helm to use that node, urunner works just fine:

helm upgrade --install urunner oci://ghcr.io/texano00/urunner/helm/urunner --version 0.1.0 --values values.yaml -n urunner  --set nodeSelector."kubernetes\.io/arch"=amd64

Unable requesting repository if I use another region

This line
client = boto3.client("ecr", region_name="us-east-2")
leads to unable requesting repository if I use another region (not "us-east-2").
As I seen you have real region in lines above.
Please fix if you will have time

Getting Error 404

content-type;host;x-amz-date;x-amz-security-token;x-amz-target
5efdcf9933a1b8e6785835ed31e0558e5e386ff29bf3e4a452889df2645301d5
DEBUG:botocore.auth:StringToSign:
AWS4-HMAC-SHA256
20240622T154009Z
20240622/ap-south-1/ecr/aws4_request
6c913fd50038b75cea426d03acaf1531eef21e05ef35808e1671a70fd1083bbb
DEBUG:botocore.auth:Signature:
c3069629445e41fe144903cb6087f8465b0be47b2f8668330b644f59ee55a590
DEBUG:botocore.hooks:Event request-created.ecr.GetAuthorizationToken: calling handler <function add_retry_headers at 0x7fbb535544c0>
DEBUG:botocore.endpoint:Sending http request: <AWSPreparedRequest stream_output=False, method=POST, url=https://api.ecr.ap-south-1.amazonaws.com/, headers={'X-Amz-Target': b'AmazonEC2ContainerRegistry_V20150921.GetAuthorizationToken', 'Content-Type': b'application/x-amz-json-1.1', 'User-Agent': b'Boto3/1.26.87 Python/3.10.14 Linux/5.4.242-156.349.amzn2.x86_64 Botocore/1.29.165', 'X-Amz-Date': b'20240622T154009Z', 'X-Amz-Security-Token': b'IQoJb3JpZ2luX2VjEM///////////wEaCmFwLXNvdXRoLTEiSDBGAiEAiw6Irv7+PQF+srRBspUiRL5y/j0c3PqRXYEvm4WCucQCIQDUmlZzDd+PzS4A816rDK7SJIZtijc9gJmj7BbSLixxdyq9BQh4EAMaDDA2MTkzMzk3NTQyMyIMmI+5EjBTNsKl6fjeKpoFFegmi/O/pj1WMJ4gr59UWmDZrX3VYJiylNzAUlJNuBdX076b7zEl3JpfRHW0xtxWoJe17zcruCJsVw4M1L6eYZ48XWbTBICfFy69kiKZIE3n2/NngKgi/KMQF4xm9WRZ7q87bsjEHSlW6017Cf38vXWdPRRCNkOQwnC+Am4Iggo2CVZC4n9Ucwc6qTPKhGceWusZy8tP45Fkn04m8KiJBOUT9VOo12/lyig8zZJWnwu96D4YpPl3D/UQUAgz1XJ57niCCSVqVPGZCCf8lze0wM6VCWQ1UmsId3FD7yYcFhBeELbqw+tRhCUJxWmgcDaU8pBFTXyJ9q20oVFN3WH7J2BYSSIB3QecaWjlRBg+9StAeYBRFOExRD3wmf5rLosIdAc4ivRRp9d/343n0UzPHfo2OukyNHj712jLrLdqZJqn6c2+5e/N65SD4w9+FB4J4bjlcyY36mEsPEt8w4b9BfOI6rMWRPAoq9pBNAbBZPbQqgBTIE3F0bj33TPpNk520d590goFVWN3yTCNnSM5jVOEn74uCTB2tZge8iy9VJHzWf3oJrHlDnVaoL/6J4881YmmNGReXL0rs191X55IYQXHvqHGhjhDKB56eTOIAj8NhgQzz+XPyg9LJn2zTLWeZCOPDtOr0qij11Q7PwPyZYCgSydYD6EOh7ZhTi0x5RwQl6Llb4DIDsvDOWxgQ593RdsFk0sU3V7Pfpoz4nwan6jFFjIbTM2YPtc17LBNaVeNgIrI7XwhH7k14jiKwdTkonLEER+JO0DZy5OvDcTAgTPs2KbgCbHM9H4cCZZbsOYo8g2UXUqEqFV/9MPEw4XFvJrlzc4JeKzX/dBv+aBTusDj62Ouxai0/ea1xtcNxQX8tEWHwNJbSsTAMKHP27MGOrABKAQPU3YWMbozYqx22qN7DoSvUlefb9gL/xe9z4eIgSNCJfHGH3RYrCVVnuIgr4Yb5RtcLzaeG7PxkaebHqulfXssNDnGmmF05yvbVDicXw2jgNzl1zzeccupZBboGJT2zQ4XiRJTt1mXnU8HJwLrA3W6PwbFSXmxiSHYtK9XWLvfDBCcFQkXMn7znXov/3UkGopg30VlO6BM255VWfaZgaa74XPVLzaDGBkkglnXbtI=', 'Authorization': b'AWS4-HMAC-SHA256 Credential=ASIAQ424NO573GTZCSPR/20240622/ap-south-1/ecr/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz-security-token;x-amz-target, Signature=c3069629445e41fe144903cb6087f8465b0be47b2f8668330b644f59ee55a590', 'amz-sdk-invocation-id': b'0a80c553-e201-42f5-8af1-c3964d72ec18', 'amz-sdk-request': b'attempt=1', 'Content-Length': '33'}>
DEBUG:botocore.httpsession:Certificate path: /usr/lib/python3.10/site-packages/certifi/cacert.pem
DEBUG:botocore.parsers:Response headers: {'x-amzn-RequestId': '3649f68e-f8fc-4ca3-8458-fa8edb3669a2', 'Date': 'Sat, 22 Jun 2024 15:40:09 GMT', 'Content-Type': 'application/x-amz-json-1.1', 'Content-Length': '4318', 'connection': 'keep-alive'}
DEBUG:botocore.parsers:Response body:
b'{"authorizationData":[{"authorizationToken":"QVdTOmV5SndZWGxzYjJGa0lqb2lMM0ZJY1daeVRISlllVGxEZEd0VmRWaFJhRXRsYXpGVk5WUkNZMGhaYVU5dmNIRTBaekZIVFRWQ1RVMUlTa1U0VG5KMFpFa3ZjR3RRTjI5UWNHVkRVa2d3VERWRFNIUndVVzlYVXk5WmJYQkJVek51VlRGTVdWTjVhM296YVRaelMzWmpXRGh4TldoeVlrTllXbU5XTkZWcWJVbENPRTVyVjJ0emJ5OU9ZelJuVTA1c1ltVkNRVEJrZUdvclZsaEtSMEphZEVwRVozSm1ZU3RTVVV0T2FVMVVXRTl5U2tSS05FZ3dibVZKVkUxTVlTdFJlRkZCYVV0RlJFUlZhRFJYWmpWdFUxb3liV2g2WjBoMmNuRlhjWEZvUzNnck1ITTBiVEpDUjBodFYwTnJSRVJ1VkhGdWEwVXdiVTVrWnpoWVQzQk9WVE54TjBka1YyVjRRaXMwZWs0dlZrczJjaXQ1YlVSdGVtUjFPVTlKUjNaTE9FaFBhMmxqUW01M1NVSndWakoxU0VwM01tdE5NbVZFZGxKblZrZHZkbHB4YkdOd1puQllTMjE1YmtwaGQxaGhkV2xuWVdZMlpUQnVRVVpTTW5aVVNGVXhXbFpGYzJ3NVlqSm9SR3M1TDJWaVQzVmhSbTV6WWswclRreHRPRUYwVldRME9HcEdSblJRTWpselJVWnNhWFZ6UlVWc05sUllRV3MyT1ZGck1pOXNhV0pRWkZrNGJ5dDRZWE5GYzNSbWEyZ3hlR04zYWpobFozWnNZakF3WjJWR1NUSXZNekpLZFRFM1JGVjJWVXh1UlVwcWMxZ3hlbUUxWkVKdGFEQXJZbGRrYlhoNlJsQlFTRmhhYm5sS2NuVmxiM0JUU2xZclRuUmhVeTlqU1VnNE1WY3dUbGs1VEZoc1JsSnFUMHRVVUhSb1Uzb3paemxXWjFkeFEzaHFZVGxvYjNaS2FuUjViRkpKTW5nNVJtUlNiVlpKYjJWUGEyRmtaamx1UTFaMkszTllVazEyZVROeFlXWnlSRTkzVERNMEt6Rklia1l2VDNCcmFHaG1aMlZXVG5VNVNIQmFVMnhoTkZOM2NrMUtTMXBRYW1acmJqUkNaRGMxVFVWblZVRm9kamRyTDBGQmJsb3JUM0J1VjJkeWIzZDJXRFpITWtkWFp5dFJTV00wU2xoNVVsaHFTMk5VZVdWMVZsSm5VWFJQVlZCU2JtZEVURGQwU3pGMlVGUlpRM05wYnpGSmRHZ3hVRVZMUlVwQlpsVmhNVFZVZVRONlRtb3JZVGh1VG1sdlZuQkxRbVJNVm5reVRtVTRVR1k0TkZkc1JIRlhjRWN6VXpWTGJrbGFUVUZoYTFad1ozaFJlWFJvWW5WR2JtTTNPQ3R6YlRrMlpVTnZiVXRLUkRkTmMxVXZZblpIZW1zNVZqVlZhRlUxTjNKaU5HVndlVVpyY1VseVJISm9la1JwYTJwVGQzVjJTVzByTTA1bVowdENiR1owWTJ4WGJtaDFieXR0UXlzMVNVMUtSVzVNUkhoV1JYbERNbUphVkZVM2NucHhWbmx6T0hWdGRtaHpVSFUwTlhGdGRGZFpjems1TUhGYVdpOTRSa0pOUjBGSVFqbGtOVzV1VTB4dE1FbGFSWFJJU1hWSWFtOVNTa3cwUWtGSGQwNW9hRGx1VUV0Q1YxbG9TVEZUWlhvclluaG1UekZJWm5adlFtRnBUeXQ0YlhFdlZVRm9TbWR1U2xwYVpuVlhObFJyWWtaTVRWUkJXSGhYU2l0TmNsaEpVQ3RtZEVKSGQyTnZOSGxLUnpadWRFTkVWbmxQYUhsalptcENOVGRRWjJwalduaHlVM0ZMVTAxVFRrbE9TakJEUTI5cmRsVXlVakZ4YzJWbE16Um1OVGd5TUhadlpGQldiRzlDWVhaMlFYY3ZkMEpaWldOTE0yVm9VRTVvZGxwNVdHWkRVRzE2YjJoeksyeFVhMGgwWlZaalVXMVpXbVJIT1VKb1dVTTVTRnB2U205blVYbE1aMVYzVWpoSWFHNHlNako0Vm14T1JtdGhWaXMzYkhSMWNHaFJaVWR0VVVWb00xaHZORU41VDNJeGFXOHpLekUyT0ZsRmVqVktZbVZtY2pWVllXUm9NMHAwU0V0eWFuZGxlREJYTkV0SmFrOXZZazVGZEVKMWVVUXZUazV5YlRSb1VqWnpVRzFVVnpJdk1XdDBSMVZ4ZUhjM2VUQmFZMjB6YzI5clFUZENXRE12T0ZsSmEzSjJLMnR1VVZOU1N6bHRaSE5YVTBGelluY3pXblZOTlM5ck1VWjNWRFF2UkdOR1UycHFSV2x3VDJOd04zbFRiR1JJTlRNMU5TdDRibW95YjNkRlREZHRNMkZQYTJOdFdHMVpWa1paWW1KQ1luaEdiRUpZYTIxVVNXcEtiMHc1TVhGdFEySlNhMjAxUkd0aVdYVkZMMWRIY1UxR1VrOVRhMFUyTWtsSk1tOUxNV1ZWWWxkUFQxQlFVVEZ2VVc5NWFFMTFkM0E1T0c4NWFucFhLM2hhUWxwQmFXMHhaVUkwTm1rcmJHMTFhRk42UldwRlVWaFlkazlSUm5aTFJrNVhjVzVQUnpsdFMyRmhjRXR5Y2paM1ZuaHVibEZ3TlU5M1Ewd3lSM1JrVTAxMVpUYzRXbWxpYUVseWVpOUtabFJTY2tZMVVWZ3dSelkxVGxOR09IVmxWR3BKZWpBMFRFUnhWemR1U2tvMFlteEJVVmxhYzJGNWQzZEJVV2xvTDJ4UWVVSjJOalpEUlU1eVZVaEZXbGRWT1hwRVNFczVhRzk0UjNOMVpFazVSa3RtTW1sNFRrWk9WSFl5U3pJNVZUWXpXWEI1YmtSbFNVd3pWMDF1TUVNeVdtUllkM0pPWnpSdVZVSlRhVzl5TVhCeWEybE9hV1V6UnpkSmNEVnJTR0o0V25sdGExRlVWV0kyY21SWVRqTnFMMUowTm5nNFZ6SnFlREl2T1VaeVRIQnpOSEpxUjNWdlMwVlJWMWh0V1hobGVEZHdVR1pMTDI1MU9ETndWVzh2WTI1bmRsaEJObUY0SzA1M2JIcEplVFUwUVVWa056ZzJkakU0UVRkMGRURklXbkJrWkZkeFp6VlRSMWQzYVZCR1UyYzNVVzF0WXpsSVNUQnhORlZLUVdVMFdVTjFTVEZyVjJ4WE5URkRUa2xXTlZGclEzcEdUV3hDVjFOd1kzWnlMM3AyTm5velpVeDZSM0ZxWlZNMlVXdGFTbXBqZW1GUkx6bDZNbXh5Y25GUmIzVkRhRWRCYmxOM0wwTm9VakE0YVZSQ1ZEQlpjVEpMTW01alNpODFhM3BQV214UU1rWllhbGhCT1dzNGEwcHFNamRKZVVsUmFYVkljVkJWT1VKSE1XNTRiU3RaZVRsR2VHdFBhRlJuUVRGTU1rWldZWEZzTHpKMUsyRXdjemR2TjJaT05GUllTSGRDTjFCS1YwUXlPVmx2ZFROV2VVOXZaVXd3S3prNVdXdEVaVWxZWkZsR2IzZERTekJRTTFkVFJFUnRWRFZyY0dod09VeFBhMHN5VkZCd2RteE5QU0lzSW1SaGRHRnJaWGtpT2lKQlVVbENRVWhwU0ZkaFdWUnVVbFZYUTJKdWVpczNUSFpOUnl0QlVIWlVTSHBJYkVKVlVUbEdjVVZ0VmpJMlFtUjNkMGRITUVjd1JGZGpaRTVhU25KclpEQnFaMDR2SzBsQlFVRkJabXBDT0VKbmEzRm9hMmxIT1hjd1FrSjNZV2RpZWtKMFFXZEZRVTFIWjBkRFUzRkhVMGxpTTBSUlJVaEJWRUZsUW1kc1oyaHJaMEphVVUxRlFWTTBkMFZSVVUxM1VYUlFjMFJWU0V4RFNWQXZjelJzUVdkRlVXZEVkWGt4UlhCamFqYzVkWFZYTVRSVmVHcGpNbG93WVVWRVFuZEdValpUUVZsTFFYbHNRM0Z3WTFjMGJFVlpiSEZ0YTJ4UVNFdDNha3R4U0VwWFZVY3dSa2R5VEdWcVpXSmxabGhWU1c1SFFtYzlQU0lzSW5abGNuTnBiMjRpT2lJeUlpd2lkSGx3WlNJNklrUkJWRUZmUzBWWklpd2laWGh3YVhKaGRHbHZiaUk2TVRjeE9URXhOREF3T1gwPQ==","expiresAt":1.719114009405E9,"proxyEndpoint":"https:/xxxxx.dkr.ecr.ap-south-1.amazonaws.com"}]}'
DEBUG:botocore.hooks:Event needs-retry.ecr.GetAuthorizationToken: calling handler <botocore.retryhandler.RetryHandler object at 0x7fbb52e88d30>
DEBUG:botocore.retryhandler:No retry needed.
DEBUG:root:('xxxxx', 'xxxxx-xxxxx')
DEBUG:root:library/xxxxxx
DEBUG:root:<Response [404]>
ERROR:root:Error status code: 404
DEBUG:root:<Response [404]>

cannot validate aws region

ERR

Traceback (most recent call last): File "/app/app.py", line 51, in <module> schedule.run_pending() File "/usr/lib/python3.10/site-packages/schedule/__init__.py", line 780, in run_pending default_scheduler.run_pending() File "/usr/lib/python3.10/site-packages/schedule/__init__.py", line 100, in run_pending self._run_job(job) File "/usr/lib/python3.10/site-packages/schedule/__init__.py", line 172, in _run_job ret = job.run() File "/usr/lib/python3.10/site-packages/schedule/__init__.py", line 661, in run ret = self.job_func() File "/app/app.py", line 39, in job general.process_resource(db_ref=db_ref, kubernetes=kubernetes, image=image) File "/app/utils/general.py", line 77, in process_resource auth = docker_api_auth_mapper[container_registry_type](image) File "/app/utils/dockerapi.py", line 41, in get_aws_auth client = boto3.client("ecr", region_name=config.get_urunner_secr_aws_region) File "/usr/lib/python3.10/site-packages/boto3/__init__.py", line 92, in client return _get_default_session().client(*args, **kwargs) File "/usr/lib/python3.10/site-packages/boto3/session.py", line 299, in client return self._session.create_client( File "/usr/lib/python3.10/site-packages/botocore/session.py", line 918, in create_client region_name = self._resolve_region_name(region_name, config) File "/usr/lib/python3.10/site-packages/botocore/session.py", line 1002, in _resolve_region_name validate_region_name(region_name) File "/usr/lib/python3.10/site-packages/botocore/utils.py", line 1307, in validate_region_name valid = valid_host_label.match(region_name) TypeError: expected string or bytes-like object

Even if URUNNER_SECR_AWS_REGION=us-east-1 was set

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.