jenkinsci / hetzner-cloud-plugin

Hetzner cloud integration for Jenkins
https://plugins.jenkins.io/hetzner-cloud/
Apache License 2.0
24 stars 8 forks source link

Hetzner API complains about "invalid label_selector: expected comma at pos 75" #75

Closed Lochnair closed 11 months ago

Lochnair commented 11 months ago

Jenkins and plugins versions report

Environment ```text Jenkins: 2.414.2 OS: Linux - 6.4.15-200.fc38.x86_64 Java: 11.0.20.1 - Eclipse Adoptium (OpenJDK 64-Bit Server VM) --- ant:497.v94e7d9fffa_b_9 antisamy-markup-formatter:162.v0e6ec0fcfcf6 apache-httpcomponents-client-4-api:4.5.14-208.v438351942757 bootstrap5-api:5.3.2-1 bouncycastle-api:2.29 branch-api:2.1128.v717130d4f816 build-timeout:1.31 caffeine-api:3.1.8-133.v17b_1ff2e0599 checks-api:2.0.2 cloud-stats:320.v96b_65297a_4b_b_ cloudbees-folder:6.848.ve3b_fd7839a_81 commons-lang3-api:3.13.0-62.v7d18e55f51e2 commons-text-api:1.10.0-78.v3e7b_ea_d5a_fe1 credentials:1271.v54b_1c2c6388a_ credentials-binding:636.v55f1275c7b_27 display-url-api:2.3.9 durable-task:523.va_a_22cf15d5e0 echarts-api:5.4.0-6 email-ext:2.101 font-awesome-api:6.4.2-1 git:5.2.0 git-client:4.5.0 github:1.37.3 github-api:1.314-431.v78d72a_3fe4c3 github-branch-source:1741.va_3028eb_9fd21 gradle:2.8.2 hetzner-cloud:83.vbe404e0fd59a instance-identity:173.va_37c494ec4e5 ionicons-api:56.v1b_1c8c49374e jackson2-api:2.15.2-350.v0c2f3f8fc595 jakarta-activation-api:2.0.1-3 jakarta-mail-api:2.0.1-3 javax-activation-api:1.2.0-6 javax-mail-api:1.6.2-9 jaxb:2.3.8-1 jjwt-api:0.11.5-77.v646c772fddb_0 jquery3-api:3.7.1-1 junit:1240.vf9529b_881428 ldap:701.vf8619de9160a_ mailer:463.vedf8358e006b_ matrix-auth:3.2.1 matrix-project:808.v5a_b_5f56d6966 mina-sshd-api-common:2.10.0-69.v28e3e36d18eb_ mina-sshd-api-core:2.10.0-69.v28e3e36d18eb_ okhttp-api:4.11.0-157.v6852a_a_fa_ec11 pam-auth:1.10 pipeline-build-step:505.v5f0844d8d126 pipeline-github-lib:42.v0739460cda_c4 pipeline-graph-analysis:202.va_d268e64deb_3 pipeline-groovy-lib:689.veec561a_dee13 pipeline-input-step:477.v339683a_8d55e pipeline-milestone-step:111.v449306f708b_7 pipeline-model-api:2.2144.v077a_d1928a_40 pipeline-model-definition:2.2144.v077a_d1928a_40 pipeline-model-extensions:2.2144.v077a_d1928a_40 pipeline-rest-api:2.33 pipeline-stage-step:305.ve96d0205c1c6 pipeline-stage-tags-metadata:2.2144.v077a_d1928a_40 pipeline-stage-view:2.33 plain-credentials:143.v1b_df8b_d3b_e48 plugin-util-api:3.3.0 resource-disposer:0.23 scm-api:676.v886669a_199a_a_ script-security:1275.v23895f409fb_d snakeyaml-api:2.2-111.vc6598e30cc65 ssh-credentials:308.ve4497b_ccd8f4 ssh-slaves:2.916.vd17b_43357ce4 structs:325.vcb_307d2a_2782 timestamper:1.26 token-macro:384.vf35b_f26814ec trilead-api:2.84.v72119de229b_7 variant:60.v7290fc0eb_b_cd workflow-aggregator:596.v8c21c963d92d workflow-api:1281.vca_5fddb_3fceb_ workflow-basic-steps:1042.ve7b_140c4a_e0c workflow-cps:3791.va_c0338ea_b_59c workflow-durable-task-step:1289.v4d3e7b_01546b_ workflow-job:1346.v180a_63f40267 workflow-multibranch:756.v891d88f2cd46 workflow-scm-step:415.v434365564324 workflow-step-api:639.v6eca_cd8c04a_a_ workflow-support:865.v43e78cc44e0d ws-cleanup:0.45 ```

What Operating System are you using (both controller, and any agents involved in the problem)?

Production environment: Debian 12 Reproduction: using Docker image: jenkins/jenkins:lts-jdk11, running in Podman on Fedora 38

Reproduction steps

  1. docker run --rm -d --name=jenkins -P jenkins/jenkins:lts-jdk11
  2. Go through initial setup (used suggested plugins)
  3. Install Hetzner Cloud plugin
  4. Configure new cloud Screenshot from 2023-09-25 18-33-19
  5. Disable built-in node
  6. Configure log recorder for logger cloud.dnation.hetznerclient
  7. Create test job (using hello world example)
  8. Start new build
Logs from plugin ``` Sep 25, 2023 4:39:12 PM FINEST okhttp3.logging.HttpLoggingInterceptor intercept --> GET https://api.hetzner.cloud/v1/servers?label_selector=jenkins.io%2Fmanaged-by%3Dhetzner-jenkins-plugin%2Cjenkins.io%2Fcloud-name%3DHetzner%20Cloud&page=1&per_page=50 Sep 25, 2023 4:39:12 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader Authorization: ██ Sep 25, 2023 4:39:12 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader User-Agent: Jenkins Hetzner Plugin Sep 25, 2023 4:39:12 PM FINEST okhttp3.logging.HttpLoggingInterceptor intercept --> END GET Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor intercept <-- 422 https://api.hetzner.cloud/v1/servers?label_selector=jenkins.io%2Fmanaged-by%3Dhetzner-jenkins-plugin%2Cjenkins.io%2Fcloud-name%3DHetzner%20Cloud&page=1&per_page=50 (281ms) Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader date: Mon, 25 Sep 2023 16:39:13 GMT Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader content-type: application/json Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader content-length: 137 Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader ratelimit-limit: 3600 Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader ratelimit-remaining: 3599 Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader ratelimit-reset: 1695659954 Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader x-correlation-id: aa06786660c9b2dd Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader strict-transport-security: max-age=15724800; includeSubDomains Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader access-control-allow-origin: * Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor logHeader access-control-allow-credentials: true Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor intercept Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor intercept { "error": { "message": "invalid label_selector: expected comma at pos 75", "code": "invalid_input", "details": null } } Sep 25, 2023 4:39:13 PM FINEST okhttp3.logging.HttpLoggingInterceptor intercept <-- END HTTP (137-byte body) ```
### Expected Results For a node to be created at Hetzner and the build to complete ### Actual Results No server is created at Hetzner and job gets stuck waiting for an agent ### Anything else? _No response_
rkosegi commented 11 months ago

Hi @Lochnair, thank you for bug report!

This is certainly not a limitation or bug in plugin itself, but the fact that your Name is not a valid "label value", which is used for communication with Hetzner API. More specifically this:

Valid label values must be a string of 63 characters or less and must be empty or begin and end with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), dots (.), and alphanumerics between.

I have to admit that validation of Name doesn't account for that.

There is no way around it, just make Name to adhere to these rules and you should be fine. I will add some sort of validation for Name to make it clear.

Lochnair commented 11 months ago

Aha, many thanks @rkosegi! That was indeed the issue. I did have feeling it could be some configuration issue on my end, but couldn't quite catch where I'd gone wrong. As is often the case it's the little things that trips you up :)

I didn't get any relevant results when I was searching for it, so a validation rule for the Name to make sure it adheres to their label restrictions would definitely be helpful so no one else makes the same mistake I did. I'll leave this open for now then until that validation is added.

Thanks again! :)

rkosegi commented 11 months ago

So with latest changes, it will display error when non-compliant value is provided: image

Also there is more useful help message.