From 5659b783f36265f3c1110364bc8fb7fb773abc74 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 11 Nov 2021 13:14:33 +0000 Subject: [PATCH 01/72] new --- .../templates/jaeger-all-in-one-service.yaml | 4 + .../templates/otel-agent-deployment.yaml | 2 +- helm-otel/templates/otel-agent-service.yaml | 10 + .../templates/otel-collector-deployment.yaml | 2 +- .../templates/otel-collector-service.yaml | 7 + helm-otel/templates/postgresdb-service.yaml | 2 + helm-otel/templates/prometheus-service.yaml | 2 + .../templates/reference-project-service.yaml | 2 + .../templates/zipkin-all-in-one-service.yaml | 2 + .../victoriametrics-deployment.yaml | 0 .../victoriametrics-service.yaml | 2 + .../vmagent-deployment.yaml | 0 .../templates => helm}/vmagent-service.yaml | 2 + pom.xml | 614 +++++++++--------- src/main/resources/application.properties | 3 + .../service/v1/ProductRestServiceTest.java | 100 --- 16 files changed, 357 insertions(+), 397 deletions(-) rename {helm-otel/templates => helm}/victoriametrics-deployment.yaml (100%) rename {helm-otel/templates => helm}/victoriametrics-service.yaml (95%) rename {helm-otel/templates => helm}/vmagent-deployment.yaml (100%) rename {helm-otel/templates => helm}/vmagent-service.yaml (89%) delete mode 100644 src/test/java/com/devonfw/demoquarkus/service/v1/ProductRestServiceTest.java diff --git a/helm-otel/templates/jaeger-all-in-one-service.yaml b/helm-otel/templates/jaeger-all-in-one-service.yaml index 73843832..91862d52 100644 --- a/helm-otel/templates/jaeger-all-in-one-service.yaml +++ b/helm-otel/templates/jaeger-all-in-one-service.yaml @@ -13,14 +13,18 @@ spec: ports: - name: "16686" port: 16686 + protocol: TCP targetPort: 16686 - name: "14268" port: 14268 + protocol: TCP targetPort: 14268 - name: "14250" port: 14250 + protocol: TCP targetPort: 14250 selector: io.kompose.service: jaeger-all-in-one + type: LoadBalancer #ClusterIP status: loadBalancer: {} diff --git a/helm-otel/templates/otel-agent-deployment.yaml b/helm-otel/templates/otel-agent-deployment.yaml index a5b82171..7ad0efb6 100644 --- a/helm-otel/templates/otel-agent-deployment.yaml +++ b/helm-otel/templates/otel-agent-deployment.yaml @@ -30,7 +30,7 @@ spec: - args: - --config=/conf/agent.yaml - --log-level=DEBUG - image: otel/opentelemetry-collector-dev:latest + image: otel/opentelemetry-collector:latest imagePullPolicy: "" name: otel-agent ports: diff --git a/helm-otel/templates/otel-agent-service.yaml b/helm-otel/templates/otel-agent-service.yaml index 0d03d6c6..a18a0260 100644 --- a/helm-otel/templates/otel-agent-service.yaml +++ b/helm-otel/templates/otel-agent-service.yaml @@ -13,32 +13,42 @@ spec: ports: - name: "8887" port: 8887 + protocol: TCP targetPort: 8888 - name: "14250" port: 14250 + protocol: TCP targetPort: 14250 - name: "14268" port: 14268 + protocol: TCP targetPort: 14268 - name: "55678" port: 55678 + protocol: TCP targetPort: 55678 - name: "4317" port: 4317 + protocol: TCP targetPort: 4317 - name: "9411" port: 9411 + protocol: TCP targetPort: 9411 - name: "1777" port: 1777 + protocol: TCP targetPort: 1777 - name: "55679" port: 55679 + protocol: TCP targetPort: 55679 - name: "13133" port: 13133 + protocol: TCP targetPort: 13133 selector: io.kompose.service: otel-agent + type: LoadBalancer #ClusterIP status: loadBalancer: {} diff --git a/helm-otel/templates/otel-collector-deployment.yaml b/helm-otel/templates/otel-collector-deployment.yaml index 28d3e64e..b150acdf 100644 --- a/helm-otel/templates/otel-collector-deployment.yaml +++ b/helm-otel/templates/otel-collector-deployment.yaml @@ -30,7 +30,7 @@ spec: - args: - --config=/conf/collector.yaml - --log-level=DEBUG - image: otel/opentelemetry-collector-dev:latest + image: otel/opentelemetry-collector:latest imagePullPolicy: "" name: otel-collector ports: diff --git a/helm-otel/templates/otel-collector-service.yaml b/helm-otel/templates/otel-collector-service.yaml index 212ffea9..b35b23a2 100644 --- a/helm-otel/templates/otel-collector-service.yaml +++ b/helm-otel/templates/otel-collector-service.yaml @@ -13,23 +13,30 @@ spec: ports: - name: "1888" port: 1888 + protocol: TCP targetPort: 1888 - name: "8888" port: 8888 + protocol: TCP targetPort: 8888 - name: "8889" port: 8889 + protocol: TCP targetPort: 8889 - name: "13133" port: 13133 + protocol: TCP targetPort: 13133 - name: "4317" port: 4317 + protocol: TCP targetPort: 4317 - name: "55670" port: 55670 + protocol: TCP targetPort: 55679 selector: io.kompose.service: otel-collector + type: LoadBalancer #ClusterIP status: loadBalancer: {} diff --git a/helm-otel/templates/postgresdb-service.yaml b/helm-otel/templates/postgresdb-service.yaml index f2cb0769..08a662a6 100644 --- a/helm-otel/templates/postgresdb-service.yaml +++ b/helm-otel/templates/postgresdb-service.yaml @@ -13,8 +13,10 @@ spec: ports: - name: "5432" port: 5432 + protocol: TCP targetPort: 5432 selector: io.kompose.service: postgresdb + type: LoadBalancer #ClusterIP status: loadBalancer: {} diff --git a/helm-otel/templates/prometheus-service.yaml b/helm-otel/templates/prometheus-service.yaml index 9f120e5a..ceef1238 100644 --- a/helm-otel/templates/prometheus-service.yaml +++ b/helm-otel/templates/prometheus-service.yaml @@ -13,8 +13,10 @@ spec: ports: - name: "9090" port: 9090 + protocol: TCP targetPort: 9090 selector: io.kompose.service: prometheus + type: LoadBalancer #ClusterIP status: loadBalancer: {} diff --git a/helm-otel/templates/reference-project-service.yaml b/helm-otel/templates/reference-project-service.yaml index a2697bdd..26276f5f 100644 --- a/helm-otel/templates/reference-project-service.yaml +++ b/helm-otel/templates/reference-project-service.yaml @@ -13,8 +13,10 @@ spec: ports: - name: "8080" port: 8080 + protocol: TCP targetPort: 8080 selector: io.kompose.service: reference-project + type: LoadBalancer #ClusterIP status: loadBalancer: {} diff --git a/helm-otel/templates/zipkin-all-in-one-service.yaml b/helm-otel/templates/zipkin-all-in-one-service.yaml index cb329036..4fbf2f3f 100644 --- a/helm-otel/templates/zipkin-all-in-one-service.yaml +++ b/helm-otel/templates/zipkin-all-in-one-service.yaml @@ -13,8 +13,10 @@ spec: ports: - name: "9411" port: 9411 + protocol: TCP targetPort: 9411 selector: io.kompose.service: zipkin-all-in-one + type: LoadBalancer status: loadBalancer: {} diff --git a/helm-otel/templates/victoriametrics-deployment.yaml b/helm/victoriametrics-deployment.yaml similarity index 100% rename from helm-otel/templates/victoriametrics-deployment.yaml rename to helm/victoriametrics-deployment.yaml diff --git a/helm-otel/templates/victoriametrics-service.yaml b/helm/victoriametrics-service.yaml similarity index 95% rename from helm-otel/templates/victoriametrics-service.yaml rename to helm/victoriametrics-service.yaml index 2df8b51a..86e03f47 100644 --- a/helm-otel/templates/victoriametrics-service.yaml +++ b/helm/victoriametrics-service.yaml @@ -13,9 +13,11 @@ spec: ports: - name: "8428" port: 8428 + protocol: TCP targetPort: 8428 - name: "8089" port: 8089 + protocol: TCP targetPort: 8089 - name: 8089-udp port: 8089 diff --git a/helm-otel/templates/vmagent-deployment.yaml b/helm/vmagent-deployment.yaml similarity index 100% rename from helm-otel/templates/vmagent-deployment.yaml rename to helm/vmagent-deployment.yaml diff --git a/helm-otel/templates/vmagent-service.yaml b/helm/vmagent-service.yaml similarity index 89% rename from helm-otel/templates/vmagent-service.yaml rename to helm/vmagent-service.yaml index 97697fca..41802f3e 100644 --- a/helm-otel/templates/vmagent-service.yaml +++ b/helm/vmagent-service.yaml @@ -13,8 +13,10 @@ spec: ports: - name: "8429" port: 8429 + protocol: TCP targetPort: 8429 selector: io.kompose.service: vmagent + type: LoadBalancer #ClusterIP status: loadBalancer: {} diff --git a/pom.xml b/pom.xml index cc5049eb..f538e2dd 100644 --- a/pom.xml +++ b/pom.xml @@ -1,299 +1,323 @@ - - - 4.0.0 - com.devonfw - demo-quarkus - 1.0.0-SNAPSHOT - - 3.8.1 - true - 11 - 11 - UTF-8 - UTF-8 - 2.0.1.Final - quarkus-universe-bom - io.quarkus - 2.0.1.Final - 3.0.0-M5 - 1.4.2.Final - - - - - ${quarkus.platform.group-id} - ${quarkus.platform.artifact-id} - ${quarkus.platform.version} - pom - import - - - - + - - io.quarkus - quarkus-arc - - - - - io.quarkus - quarkus-resteasy-jackson - - - - - io.quarkus - quarkus-hibernate-orm - - - - - io.quarkus - quarkus-jdbc-postgresql - - - - - io.quarkus - quarkus-flyway - - - - - io.quarkus - quarkus-smallrye-openapi - - - - + + io.quarkus + quarkus-resteasy-jackson + + + + io.quarkus + quarkus-hibernate-orm + + + + io.quarkus + quarkus-jdbc-postgresql + + + + io.quarkus + quarkus-flyway + + + + io.quarkus + quarkus-smallrye-openapi + + + - - io.quarkus - quarkus-opentelemetry - - - io.quarkus - quarkus-opentelemetry-exporter-jaeger - - - io.opentelemetry - opentelemetry-extension-annotations - 1.0.0 - - - io.quarkus - quarkus-smallrye-health - - - io.quarkus - quarkus-micrometer-registry-prometheus - - - io.quarkus - quarkus-smallrye-fault-tolerance - - - - org.hibernate - hibernate-jpamodelgen - - - io.quarkus - quarkus-spring-data-jpa - - - - com.querydsl - querydsl-jpa - 4.3.1 - - - com.querydsl - querydsl-apt - provided - 4.3.1 - - - - - - - - - - org.projectlombok - lombok - 1.18.18 - provided - - - - - org.mapstruct - mapstruct-processor - ${mapstruct.version} - provided - - - org.mapstruct - mapstruct - ${mapstruct.version} - provided - - - - org.projectlombok - lombok-mapstruct-binding - 0.2.0 - provided - - - - - org.tkit.quarkus - tkit-quarkus-rest - 2.4.0 - - - - org.tkit.quarkus - tkit-quarkus-log-cdi - 1.4.5 - - - - org.tkit.quarkus - tkit-quarkus-log-rs - 1.4.5 - - - - org.tkit.quarkus - tkit-quarkus-log-json - 1.4.5 - - - - - org.tkit.quarkus - tkit-quarkus-test - 1.12.0 - test - - - - - io.quarkus - quarkus-junit5 - test - - - - io.rest-assured - rest-assured - test - - - - - - io.quarkus - quarkus-maven-plugin - ${quarkus-plugin.version} - true - - - - build - generate-code - generate-code-tests - - - - - - maven-compiler-plugin - ${compiler-plugin.version} - - true - - - -Amapstruct.defaultComponentModel=cdi - -Amapstruct.defaultInjectionStrategy=CONSTRUCTOR - - - - - maven-surefire-plugin - ${surefire-plugin.version} - - - org.jboss.logmanager.LogManager - ${maven.home} - - - - - - - com.mysema.maven - apt-maven-plugin - 1.1.3 - - - generate-sources - - process - - - target/generated-sources/annotations - com.querydsl.apt.jpa.JPAAnnotationProcessor - - - - - - - - - - native - - - native - - - - - - maven-failsafe-plugin - ${surefire-plugin.version} - - - - integration-test - verify - - - - ${project.build.directory}/${project.build.finalName}-runner - org.jboss.logmanager.LogManager - ${maven.home} - - - - - - - - - native - - - + --> + + io.quarkus + quarkus-opentelemetry + + + io.quarkus + quarkus-opentelemetry-exporter-jaeger + + + io.opentelemetry + opentelemetry-extension-annotations + 1.0.0 + + + io.quarkus + quarkus-smallrye-health + + + io.quarkus + quarkus-micrometer-registry-prometheus + + + io.quarkus + quarkus-smallrye-fault-tolerance + + + org.hibernate + hibernate-jpamodelgen + + + io.quarkus + quarkus-spring-data-jpa + + + com.querydsl + querydsl-jpa + 4.3.1 + + + com.querydsl + querydsl-apt + provided + 4.3.1 + + + + + + + + + org.projectlombok + lombok + 1.18.18 + provided + + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + provided + + + org.mapstruct + mapstruct + ${mapstruct.version} + provided + + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0 + provided + + + + org.tkit.quarkus + tkit-quarkus-rest + 2.4.0 + + + + org.tkit.quarkus + tkit-quarkus-log-cdi + 1.4.5 + + + + org.tkit.quarkus + tkit-quarkus-log-rs + 1.4.5 + + + + org.tkit.quarkus + tkit-quarkus-log-json + 1.4.5 + + + + org.tkit.quarkus + tkit-quarkus-test + 1.12.0 + test + + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + + + + io.quarkus + quarkus-maven-plugin + ${quarkus-plugin.version} + true + + + + build + generate-code + generate-code-tests + + + + + + maven-compiler-plugin + ${compiler-plugin.version} + + true + + + -Amapstruct.defaultComponentModel=cdi + -Amapstruct.defaultInjectionStrategy=CONSTRUCTOR + + + + + maven-surefire-plugin + ${surefire-plugin.version} + + + org.jboss.logmanager.LogManager + ${maven.home} + + + + + com.microsoft.azure + azure-webapp-maven-plugin + 2.1.0 + + v2 + 38f51217-7342-4f22-b591-b19d85f1504d + demo-quarkus-1636631398107-rg + demo-quarkus-1636631398107 + P1v2 + westeurope + + Linux + Java 8 + Java SE + + + + PORT + 8080 + + + WEBSITES_PORT + 8080 + + + WEBSITES_CONTAINER_START_TIME_LIMIT + 600 + + + + + + ${project.basedir}/target + + *.jar + + + + + + + + com.mysema.maven + apt-maven-plugin + 1.1.3 + + + generate-sources + + process + + + target/generated-sources/annotations + com.querydsl.apt.jpa.JPAAnnotationProcessor + + + + + + + + + native + + + native + + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + + native + + + diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 5822b02a..497599d5 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -13,6 +13,9 @@ quarkus.flyway.migrate-at-start=true quarkus.flyway.baseline-on-migrate=true quarkus.flyway.baseline-version=0 +#create uber jar file +quarkus.package.uber-jar=true + # logging configuration # which packages should be automatically logged by tkit cdi logger quarkus.tkit.log.packages=org.tkit,com.devonfw diff --git a/src/test/java/com/devonfw/demoquarkus/service/v1/ProductRestServiceTest.java b/src/test/java/com/devonfw/demoquarkus/service/v1/ProductRestServiceTest.java deleted file mode 100644 index a67186c9..00000000 --- a/src/test/java/com/devonfw/demoquarkus/service/v1/ProductRestServiceTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.devonfw.demoquarkus.service.v1; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.notNullValue; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import java.math.BigDecimal; - -import javax.ws.rs.core.MediaType; - -import org.junit.jupiter.api.Test; -import org.tkit.quarkus.rs.models.PageResultDTO; -import org.tkit.quarkus.test.WithDBData; -import org.tkit.quarkus.test.docker.DockerComposeTestResource; - -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; - -import io.quarkus.test.common.QuarkusTestResource; -import io.quarkus.test.junit.QuarkusTest; -import io.restassured.common.mapper.TypeRef; -import io.restassured.response.Response; - -//Before you run this test, tkit-test extension starts docker containers from resources/docker-compose.yaml -//we get a real postgresdb for our tests which will be stopped after tests. No manual test setup is needed. -@QuarkusTest -@QuarkusTestResource(DockerComposeTestResource.class) -class ProductRestServiceTest {// extends AbstractTest { - - @Test - // we also started a micro container, that can populated DB with data from excel - // annotating class or method with @WithDBData allows us to scope data for each test even if we use the same DB - @WithDBData(value = "data/product.xls", deleteBeforeInsert = true) - void getAll() { - - Response response = given().when().contentType(MediaType.APPLICATION_JSON).get("/products").then().statusCode(200) - .extract().response(); - - PageResultDTO productsReturned = response.as(new TypeRef>() { - }); - - // we import data from /import.sql - ergo expect 1 result - assertEquals(2, productsReturned.getTotalElements()); - } - - @Test - void getNonExistingTest() { - - Response response = given().when().contentType(MediaType.APPLICATION_JSON).get("/products/doesnoexist").then().log() - .all().statusCode(404).extract().response(); - } - - @Test - @WithDBData(value = "data/empty.xls", deleteBeforeInsert = true) - void createNewProduct() { - - ProductDto product = new ProductDto(); - product.setTitle("HP Notebook"); - product.setDescription("ZBook"); - product.setPrice(BigDecimal.valueOf(1)); - - Response response = given().when().body(product).contentType(MediaType.APPLICATION_JSON).post("/products").then() - .log().all().statusCode(201).header("Location", notNullValue()).extract().response(); - - assertEquals(201, response.statusCode()); - - response = given().when().contentType(MediaType.APPLICATION_JSON).get("/products").then().log().all() - .statusCode(200).extract().response(); - - PageResultDTO productsReturned = response.as(new TypeRef<>() { - }); - assertEquals(1, productsReturned.getTotalElements()); - ProductDto created = productsReturned.getStream().get(0); - assertNotNull(created); - assertEquals(product.getTitle(), created.getTitle()); - } - - @Test - @WithDBData(value = "data/product.xls", deleteBeforeInsert = true) - public void testGetById() { - - given().when().log().all().contentType(MediaType.APPLICATION_JSON).get("/products/1").then().statusCode(200) - .body("description", equalTo("Apple Notebook")); - } - - @Test - @WithDBData(value = "data/product.xls", deleteBeforeInsert = true) - public void deleteById() { - - // delete - given().when().log().all().contentType(MediaType.APPLICATION_JSON).delete("/products/1").then().statusCode(200) - .body("title", equalTo("MacBook Pro")); - - // after deletion it should be deleted - given().when().log().all().contentType(MediaType.APPLICATION_JSON).get("/products/1").then().statusCode(404); - - } - -} \ No newline at end of file From 725d2bd780dd22c1160755e03e233c9ef0ff42b1 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 16 Nov 2021 09:03:50 +0000 Subject: [PATCH 02/72] commit --- docker-compose.yaml | 6 +- duplicate-chart/Chart.yaml | 24 ++++ duplicate-chart/main.tf | 47 +++++++ duplicate-chart/templates/deployment.yaml | 119 ++++++++++++++++++ duplicate-chart/templates/ingress.yaml | 20 +++ .../templates/postgres-deployment.yaml | 79 ++++++++++++ .../templates/postgres-service.yaml | 15 +++ duplicate-chart/templates/secrets.yaml | 14 +++ duplicate-chart/templates/service.yaml | 17 +++ helm-charts | 1 + helm-otel/templates/configmap.yaml | 34 +++-- helm-otel/templates/demo-networkpolicy.yaml | 54 ++++++-- helm-otel/templates/ingress.yaml | 40 ------ .../templates/prometheus-deployment.yaml | 12 +- .../victoriametrics-deployment.yaml | 0 .../templates}/victoriametrics-service.yaml | 2 - .../templates}/vmagent-deployment.yaml | 0 .../templates}/vmagent-service.yaml | 2 - helm-otel/values.yaml | 24 ++++ helm/secrets.yaml | 30 +++++ helm/templates/deployment.yaml | 12 +- helm/templates/postgres-deployment.yaml | 79 ++++++++++++ helm/templates/postgres-service.yaml | 15 +++ helm/templates/secrets.yaml | 14 +++ helm/templates/service.yaml | 2 +- helm/values.yaml | 13 +- k8s/deployment.yaml | 3 +- k8s/dev.yaml | 10 -- k8s/ingress.yaml | 4 +- k8s/postgres-service.yaml | 2 +- k8s/service.yaml | 2 +- otel-charts/Chart.yaml | 24 ++++ otel-charts/helm/Chart.yaml | 9 ++ otel-charts/helm/templates/configmap.yaml | 98 +++++++++++++++ .../helm/templates/grafana-deployment.yaml | 43 +++++++ otel-charts/helm/templates/ingress.yaml | 46 +++++++ .../jaeger-all-in-one-deployment.yaml | 55 ++++++++ .../helm/templates/otel-agent-deployment.yaml | 98 +++++++++++++++ .../templates/otel-collector-deployment.yaml | 83 ++++++++++++ .../helm/templates/prometheus-deployment.yaml | 55 ++++++++ .../templates/victoriametrics-deployment.yaml | 77 ++++++++++++ .../helm/templates/vmagent-deployment.yaml | 53 ++++++++ .../zipkin-all-in-one-deployment.yaml | 45 +++++++ otel-charts/helm/values.yaml | 26 ++++ otel-charts/templates/configmap.yaml | 98 +++++++++++++++ otel-charts/templates/demo-networkpolicy.yaml | 14 +++ otel-charts/templates/ingress.yaml | 61 +++++++++ .../jaeger-all-in-one-deployment.yaml | 27 ++-- .../templates/jaeger-all-in-one-service.yaml | 30 +++++ .../templates/otel-agent-deployment.yaml | 58 +++++++++ otel-charts/templates/otel-agent-service.yaml | 54 ++++++++ .../templates/otel-collector-deployment.yaml | 56 +++++++++ .../templates/otel-collector-service.yaml | 42 +++++++ .../templates/prometheus-deployment.yaml | 39 ++++++ .../templates/prometheus-service.yaml | 12 +- .../zipkin-all-in-one-deployment.yaml | 39 ++++++ .../templates/zipkin-all-in-one-service.yaml | 22 ++++ otel-charts/terraform-helm-deploy | 1 + otel-charts/values.yaml | 82 ++++++++++++ pom.xml | 6 +- src/main/docker/Dockerfile.jvm | 3 +- src/main/docker/Dockerfile.native | 5 +- 62 files changed, 1944 insertions(+), 113 deletions(-) create mode 100644 duplicate-chart/Chart.yaml create mode 100644 duplicate-chart/main.tf create mode 100644 duplicate-chart/templates/deployment.yaml create mode 100644 duplicate-chart/templates/ingress.yaml create mode 100644 duplicate-chart/templates/postgres-deployment.yaml create mode 100644 duplicate-chart/templates/postgres-service.yaml create mode 100644 duplicate-chart/templates/secrets.yaml create mode 100644 duplicate-chart/templates/service.yaml create mode 160000 helm-charts delete mode 100644 helm-otel/templates/ingress.yaml rename {helm => helm-otel/templates}/victoriametrics-deployment.yaml (100%) rename {helm => helm-otel/templates}/victoriametrics-service.yaml (95%) rename {helm => helm-otel/templates}/vmagent-deployment.yaml (100%) rename {helm => helm-otel/templates}/vmagent-service.yaml (89%) create mode 100644 helm-otel/values.yaml create mode 100644 helm/secrets.yaml create mode 100644 helm/templates/postgres-deployment.yaml create mode 100644 helm/templates/postgres-service.yaml create mode 100644 helm/templates/secrets.yaml delete mode 100644 k8s/dev.yaml create mode 100644 otel-charts/Chart.yaml create mode 100644 otel-charts/helm/Chart.yaml create mode 100644 otel-charts/helm/templates/configmap.yaml create mode 100644 otel-charts/helm/templates/grafana-deployment.yaml create mode 100644 otel-charts/helm/templates/ingress.yaml create mode 100644 otel-charts/helm/templates/jaeger-all-in-one-deployment.yaml create mode 100644 otel-charts/helm/templates/otel-agent-deployment.yaml create mode 100644 otel-charts/helm/templates/otel-collector-deployment.yaml create mode 100644 otel-charts/helm/templates/prometheus-deployment.yaml create mode 100644 otel-charts/helm/templates/victoriametrics-deployment.yaml create mode 100644 otel-charts/helm/templates/vmagent-deployment.yaml create mode 100644 otel-charts/helm/templates/zipkin-all-in-one-deployment.yaml create mode 100644 otel-charts/helm/values.yaml create mode 100644 otel-charts/templates/configmap.yaml create mode 100644 otel-charts/templates/demo-networkpolicy.yaml create mode 100644 otel-charts/templates/ingress.yaml rename helm-otel/templates/postgresdb-deployment.yaml => otel-charts/templates/jaeger-all-in-one-deployment.yaml (60%) create mode 100644 otel-charts/templates/jaeger-all-in-one-service.yaml create mode 100644 otel-charts/templates/otel-agent-deployment.yaml create mode 100644 otel-charts/templates/otel-agent-service.yaml create mode 100644 otel-charts/templates/otel-collector-deployment.yaml create mode 100644 otel-charts/templates/otel-collector-service.yaml create mode 100644 otel-charts/templates/prometheus-deployment.yaml rename helm-otel/templates/postgresdb-service.yaml => otel-charts/templates/prometheus-service.yaml (70%) create mode 100644 otel-charts/templates/zipkin-all-in-one-deployment.yaml create mode 100644 otel-charts/templates/zipkin-all-in-one-service.yaml create mode 160000 otel-charts/terraform-helm-deploy create mode 100644 otel-charts/values.yaml diff --git a/docker-compose.yaml b/docker-compose.yaml index c980df7f..b01aee3b 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -17,7 +17,7 @@ services: # Collector otel-collector: - image: otel/opentelemetry-collector-dev:latest + image: otel/opentelemetry-collector:latest command: ["--config=/conf/otel-collector-config.yaml", "--log-level=DEBUG"] volumes: - ./otel-collector-config.yaml:/conf/otel-collector-config.yaml @@ -52,7 +52,7 @@ services: - demo otel-agent: - image: otel/opentelemetry-collector-dev:latest + image: otel/opentelemetry-collector:latest command: ["--config=/etc/otel-agent-config.yaml", "--log-level=DEBUG"] volumes: - ./otel-agent-config.yaml:/etc/otel-agent-config.yaml @@ -114,4 +114,4 @@ services: - demo networks: - demo: \ No newline at end of file + demo: diff --git a/duplicate-chart/Chart.yaml b/duplicate-chart/Chart.yaml new file mode 100644 index 00000000..9cc1ed5c --- /dev/null +++ b/duplicate-chart/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: helm-app +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: v1 #"1.16.0" diff --git a/duplicate-chart/main.tf b/duplicate-chart/main.tf new file mode 100644 index 00000000..6b44c997 --- /dev/null +++ b/duplicate-chart/main.tf @@ -0,0 +1,47 @@ +provider "helm" { + kubernetes { + config_path = "/root/.kube/config" + } +} + +provider "kubernetes" { + config_path = "/root/.kube/config" +} + + +resource "kubernetes_namespace" "test-namespace" { + metadata { + name = "test" + } +} + +resource "helm_release" "otel" { + name = "otel" + namespace = "test" + + + #repository = "https://charts.bitnami.com/bitnami" + chart = "/root/monitoring-kube-metrics-prometheus-grafana-terraform/otel" + + set { + name = "service.type" + value = "LoadBalancer" + } +} + +resource "helm_release" "quarkas-demo" { + name = "quarkas-demo" + namespace = "test" + + + #repository = "https://charts.bitnami.com/bitnami" + chart = "/root/monitoring-kube-metrics-prometheus-grafana-terraform/quarkas-demo" + + set { + name = "service.type" + value = "LoadBalancer" + } +} + + + diff --git a/duplicate-chart/templates/deployment.yaml b/duplicate-chart/templates/deployment.yaml new file mode 100644 index 00000000..74e79e8f --- /dev/null +++ b/duplicate-chart/templates/deployment.yaml @@ -0,0 +1,119 @@ +apiVersion: apps/v1 +kind: Deployment +# deployment v1 +metadata: + # metadata labels - tags under which this resources can be found in k8s api + labels: + app: demo-quarkus + app.kubernetes.io/name: demo-quarkus + name: demo-quarkus + namespace: default +spec: + # scale to 2 instances + replicas: 2 + selector: + #how are the pods linked together + matchLabels: + app: demo-quarkus + template: + metadata: + labels: + app: demo-quarkus + spec: + # pod spec, we want a single container in our pods + containers: + - name: demo-quarkus + # where should the image come from + image: 'acrimage101.azurecr.io/acrimage101/demo-quarkus:latest' + #command: ["java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes="service.name=quarkus-demo"] + #command: ["/deployments/run-java.sh"] + # always perform pull when creating pod + imagePullPolicy: Always + #env Secrets to pull image from regidtry + #envFrom: + #- secretRef: + # name: credentials + # command: ["/deployments/run-java.sh", "&&", "java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes='service.name=quarkus-demo'"] + # env vars so we can connect to DB + env: + - name: QUARKUS_DATASOURCE_JDBC_URL + value: jdbc:postgresql://postgresql:5432/demo + - name: QUARKUS_DATASOURCE_USERNAME + value: demo + - name: QUARKUS_DATASOURCE_PASSWORD + value: demo + - name: QUARKUS.OPENTELEMETRY.ENABLED + value: "true" + - name: QUARKUS.OPENTELEMETRY.TRACER.EXPORTER.OTLP.ENDPOINT + value: http://otel-collector:4317 + - name: QUARKUS.APPLICATION.NAME + value: demo-quarkus + # live & ready probes, using our healthcheck endpoints + livenessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/live + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + ports: + - containerPort: 8080 + readinessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/ready + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + # we can define init containers, single run jobs that run before our main container does + # we use them to init database and check that its ready + initContainers: + - command: + - /bin/bash + - '-c' + - >- + psql -tc "SELECT 1 FROM pg_database WHERE datname = + 'demo'" | grep -q 1 | psql -c "CREATE USER + demo WITH ENCRYPTED PASSWORD 'demo';" -c + "CREATE DATABASE demo;" -c "GRANT ALL PRIVILEGES + ON DATABASE demo TO demo;" + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: null + - name: PGUSER + value: postgres + - name: PGPASSWORD + value: postgres + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: create-db + - command: + - /bin/bash + - '-c' + - until pg_isready; do echo waiting for database; sleep 2; done; + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: demo + - name: PGUSER + value: demo + - name: PGPASSWORD + value: demo + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: check-db diff --git a/duplicate-chart/templates/ingress.yaml b/duplicate-chart/templates/ingress.yaml new file mode 100644 index 00000000..8d3a9a1a --- /dev/null +++ b/duplicate-chart/templates/ingress.yaml @@ -0,0 +1,20 @@ +# a simple ingress for our service +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: demo-quarkus + annotations: + ingress.kubernetes.io/ssl-redirect: "false" +spec: + rules: + - http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: demo-quarkus + port: + number: 8080 + # #this will work if you have dnsmasq(tkit env guide) + host: demo-quarkus.localhost diff --git a/duplicate-chart/templates/postgres-deployment.yaml b/duplicate-chart/templates/postgres-deployment.yaml new file mode 100644 index 00000000..2b2b9f02 --- /dev/null +++ b/duplicate-chart/templates/postgres-deployment.yaml @@ -0,0 +1,79 @@ +apiVersion: apps/v1 +kind: Deployment +# deployment v1 +metadata: + name: postgresql +spec: + replicas: 1 + selector: + #how are the pods linked together + matchLabels: + app: postgresql + template: + metadata: + labels: + app: postgresql + spec: + containers: + - name: postgresql + image: 'docker.io/bitnami/postgresql:12.2.0' + ports: + - name: tcp-postgresql + containerPort: 5432 + protocol: TCP + env: + - name: POSTGRESQL_PORT_NUMBER + value: '5432' + - name: POSTGRESQL_VOLUME_DIR + value: /bitnami/postgresql + - name: PGDATA + value: /bitnami/postgresql/data + - name: POSTGRES_USER + value: postgres + #dont even try this in production + - name: POSTGRES_PASSWORD + value: postgres + - name: POSTGRES_DB + value: kubernetes + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + - name: POSTGRESQL_ENABLE_LDAP + value: 'no' + resources: + requests: + cpu: 250m + memory: 256Mi + livenessProbe: + exec: + command: + - /bin/sh + - '-c' + - >- + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + initialDelaySeconds: 30 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + readinessProbe: + exec: + command: + - /bin/sh + - '-c' + - '-e' + - > + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + + [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f + /bitnami/postgresql/.initialized ] + initialDelaySeconds: 5 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + imagePullPolicy: IfNotPresent +# we run database without any persistent data volume - not a good idea, but sufficient for demo diff --git a/duplicate-chart/templates/postgres-service.yaml b/duplicate-chart/templates/postgres-service.yaml new file mode 100644 index 00000000..6d19ee33 --- /dev/null +++ b/duplicate-chart/templates/postgres-service.yaml @@ -0,0 +1,15 @@ +kind: Service +apiVersion: v1 +metadata: + name: postgresql + labels: + app: postgresql +spec: + ports: + - name: tcp-postgresql + protocol: TCP + port: 5432 + targetPort: tcp-postgresql + selector: + app: postgresql + type: LoadBalancer #ClusterIP diff --git a/duplicate-chart/templates/secrets.yaml b/duplicate-chart/templates/secrets.yaml new file mode 100644 index 00000000..374e9ce8 --- /dev/null +++ b/duplicate-chart/templates/secrets.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Secret +metadata: + name: credentials + #labels: + # app: app + # chart: '{{ .Chart.Name }}-{{ .Chart.Version }}' + # release: '{{ .Release.Name }}' + # heritage: '{{ .Release.Service }}' +type: Opaque +data: + server: acrimage101.azurecr.io + username: acrimage101 + password: vEKxjkTwSjsjcA8L6i=haKZF1ii14BiT diff --git a/duplicate-chart/templates/service.yaml b/duplicate-chart/templates/service.yaml new file mode 100644 index 00000000..af2219f0 --- /dev/null +++ b/duplicate-chart/templates/service.yaml @@ -0,0 +1,17 @@ +kind: Service +apiVersion: v1 +metadata: + name: demo-quarkus + labels: + app: demo-quarkus +spec: + # we expose port 8080 which load balances traffic to the pods and their internal port 8080 + ports: + - name: http-port + protocol: TCP + port: 8080 + targetPort: 8080 +# how to find the pods we are load balancing + selector: + app: demo-quarkus + type: LoadBalancer #ClusterIP diff --git a/helm-charts b/helm-charts new file mode 160000 index 00000000..61ae4e7e --- /dev/null +++ b/helm-charts @@ -0,0 +1 @@ +Subproject commit 61ae4e7e81dc5296b9f7ccfd0a79d897b44db0b2 diff --git a/helm-otel/templates/configmap.yaml b/helm-otel/templates/configmap.yaml index c1f106fc..1e267bfa 100644 --- a/helm-otel/templates/configmap.yaml +++ b/helm-otel/templates/configmap.yaml @@ -14,11 +14,12 @@ data: - https://* exporters: + logging: prometheus: endpoint: "0.0.0.0:8889" - namespace: promexample - const_labels: - label1: value1 + # namespace: promexample + #const_labels: + # label1: value1 zipkin: endpoint: "http://zipkin-all-in-one:9411/api/v2/spans" @@ -89,10 +90,29 @@ data: vMetrics.yaml: | scrape_configs: #- job_name: 'otel-collector' - - job_name: 'demo_quarkus' + - job_name: '{{ .Values.application.metrics.jobname }}' scrape_interval: 10s - metrics_path: '/q/metrics' + metrics_path: '{{ .Values.application.metrics.url }}' static_configs: - - targets: ['reference-project:8080'] + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] #- targets: ['otel-collector:8889'] - #- targets: ['otel-collector:8888'] \ No newline at end of file + + #- targets: ['otel-collector:8888'] + # + # + # + # +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: prometheus +data: + prometheus-config: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] diff --git a/helm-otel/templates/demo-networkpolicy.yaml b/helm-otel/templates/demo-networkpolicy.yaml index 8b57ef91..266697f5 100644 --- a/helm-otel/templates/demo-networkpolicy.yaml +++ b/helm-otel/templates/demo-networkpolicy.yaml @@ -1,14 +1,48 @@ apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy +kind: ingress metadata: creationTimestamp: null - name: demo + name: ingress spec: - ingress: - - from: - - podSelector: - matchLabels: - io.kompose.network/demo: "true" - podSelector: - matchLabels: - io.kompose.network/demo: "true" + rules: + - host: {{ .Values.ingress.application.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: {{ .Values.application.service.name }} + port: + number: {{ .Values.ingress.application.port }} + - host: {{ .Values.ingress.jaeger.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: jaeger-all-in-one + port: + number: {{ .Values.ingress.jaeger.port }} + - host: {{ .Values.ingress.zipkin.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: zipkin-all-in-one + port: + number: {{ .Values.ingress.zipkin.port }} + + - host: {{ .Values.ingress.grafana.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: grafana + port: + number: {{ .Values.ingress.grafana.port }} diff --git a/helm-otel/templates/ingress.yaml b/helm-otel/templates/ingress.yaml deleted file mode 100644 index b9487531..00000000 --- a/helm-otel/templates/ingress.yaml +++ /dev/null @@ -1,40 +0,0 @@ -# a simple ingress for our service: exposed ingress according to https://k3d.io/usage/guides/exposing_services/ -# access via host:8081 - change hosts in hosts-file -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: reference-project - annotations: - ingress.kubernetes.io/ssl-redirect: "false" -spec: - rules: - - host: app.localhost - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: reference-project - port: - number: 8080 - - host: jaeger.localhost - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: jaeger-all-in-one - port: - number: 16686 - - host: zipkin.localhost - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: zipkin-all-in-one - port: - number: 9411 \ No newline at end of file diff --git a/helm-otel/templates/prometheus-deployment.yaml b/helm-otel/templates/prometheus-deployment.yaml index ef7999ea..5f9888ef 100644 --- a/helm-otel/templates/prometheus-deployment.yaml +++ b/helm-otel/templates/prometheus-deployment.yaml @@ -35,5 +35,15 @@ spec: resources: {} restartPolicy: Always serviceAccountName: "" - volumes: null + volumeMounts: + - mountPath: /etc/prometheus/ + name: prometheus-config-volume + restartPolicy: Always + volumes: + - name: prometheus-config-volume + configMap: + name: prometheus + items: + - key: prometheus-config + path: prometheus.yml status: {} diff --git a/helm/victoriametrics-deployment.yaml b/helm-otel/templates/victoriametrics-deployment.yaml similarity index 100% rename from helm/victoriametrics-deployment.yaml rename to helm-otel/templates/victoriametrics-deployment.yaml diff --git a/helm/victoriametrics-service.yaml b/helm-otel/templates/victoriametrics-service.yaml similarity index 95% rename from helm/victoriametrics-service.yaml rename to helm-otel/templates/victoriametrics-service.yaml index 86e03f47..2df8b51a 100644 --- a/helm/victoriametrics-service.yaml +++ b/helm-otel/templates/victoriametrics-service.yaml @@ -13,11 +13,9 @@ spec: ports: - name: "8428" port: 8428 - protocol: TCP targetPort: 8428 - name: "8089" port: 8089 - protocol: TCP targetPort: 8089 - name: 8089-udp port: 8089 diff --git a/helm/vmagent-deployment.yaml b/helm-otel/templates/vmagent-deployment.yaml similarity index 100% rename from helm/vmagent-deployment.yaml rename to helm-otel/templates/vmagent-deployment.yaml diff --git a/helm/vmagent-service.yaml b/helm-otel/templates/vmagent-service.yaml similarity index 89% rename from helm/vmagent-service.yaml rename to helm-otel/templates/vmagent-service.yaml index 41802f3e..97697fca 100644 --- a/helm/vmagent-service.yaml +++ b/helm-otel/templates/vmagent-service.yaml @@ -13,10 +13,8 @@ spec: ports: - name: "8429" port: 8429 - protocol: TCP targetPort: 8429 selector: io.kompose.service: vmagent - type: LoadBalancer #ClusterIP status: loadBalancer: {} diff --git a/helm-otel/values.yaml b/helm-otel/values.yaml new file mode 100644 index 00000000..81ec35b2 --- /dev/null +++ b/helm-otel/values.yaml @@ -0,0 +1,24 @@ +pplication configuration +application: + # Configuration to get the metrics information + metrics: + jobname: "metrics-jobname" + url: "metrics-url" + # Configuration of the application service + service: + name: "application-service-name" + name: "application-service-port" + # Ingress configuration + ingress: + application: + host: "application.localhost" + port: 8080 + jaeger: + host: "jaeger.localhost" + port: 16686 + zipkin: + host: "zipkin.localhost" + port: 9411 + grafana: + host: "grafana.localhost" + port: 3000 diff --git a/helm/secrets.yaml b/helm/secrets.yaml new file mode 100644 index 00000000..f49ff397 --- /dev/null +++ b/helm/secrets.yaml @@ -0,0 +1,30 @@ +#ACR secrets +server: ENC[AES256_GCM,data:H6zUjd8okORKe+AF0/3zDTkmp+ASKTnh/dlan7XNuBk=,iv:L1lQmKLREKOwuEdZZNag7pz6H1q5055uoazyBWGGKzg=,tag:B/KT9jem1/c1re1nLC3zIA==,type:str] +username: ENC[AES256_GCM,data:6PXxSZpeDeXBj6oCHH2oHg==,iv:3pJduRctieUJkUOuUN6ArtLKLqojPmDm2B1Y2uKMeLY=,tag:ptafJDYRUUbgq/2q8vxP3Q==,type:str] +password: ENC[AES256_GCM,data:06UPZJ+j47QujPKQljzjJlQOf71o8rWAN0s78Lwhehip6NEzVPj/Ihl63Xo=,iv:4KXvFwp5N9cmvVmDHOt5u2kgLvD9MK4BIxn/E5CaRXM=,tag:g3gfQcCQusMxQN9CpBLnZQ==,type:str] +sops: + attention: This section contains key material that should only be modified with + extra care. See `sops -h`. + version: '1.18' + unencrypted_suffix: _unencrypted + pgp: + - fp: D7FA66E670AE6F41C99CFA70068655072F71EE17 + enc: | + -----BEGIN PGP MESSAGE----- + + hQGMA4in/RHYxChuAQv8DWegA6iWYOvqcEohQgSaJ/Y9y5gcvNaM6Icb17eLnduL + /bdLCGFr8+m4rJpceeOiXalwzps+qe71R8DUOTchKjSO0id0fKIsrDaHvYblIqoe + i0yA3ACGzZQOnfiNQLxawhyztjAqhMxdFw/wMLauQdbMAnwCYtQnbBSKBMD0B8Sw + dapq4SF4mfAlivS2UJ4pIZOKU5odMgMFDxYvegGk1vM/qVUEr08gbKKhA9SK5M6H + 2ypCHkotS8eNRnYSyMs+6ONqhtfM38PI1S2cvTBJT/MyXNEzcA61GM7n/FxhTPrm + 93X5VqliqUke/k//UgmGeiOMGnC//a1+W7I8z+qwaDBtpsNEotTMBGg6nAXOuAlg + UACKQTOIVrAELqcne+7i4DVlDtqWF6OykO88AO/Aqbj105Os2KpyPNoXlbue44iQ + CmHZXuKN+YsU7YYvTanMM5W+eSyttntir3sBvM/GPmBLA9mD0noGCgMTzL1uNMMq + XNzj4re48IyVqCgFfSDH0l4Byqc4oC4+G4XzGwKHmyE0Q2ivSzVBupcLU8Afvnjv + yg31F0Qqm8dj2Sn2a7ioTyToDB9Xt3xEp+OYtusOBKCRfCViFpLyf/dkzwcYRjyq + D54PXEcbKxEQVvD6xHtz + =TbxD + -----END PGP MESSAGE----- + created_at: '2021-11-13T06:46:34Z' + lastmodified: '2021-11-13T06:50:22Z' + mac: ENC[AES256_GCM,data:iykjblBR8AW+kyBhpjwlHvKBH17/BkstHNr4N6JypjATk2IuT8Ro48AQM5c8IJLNrNKkVIAhOXLcGI4pFb9iTI1C2w9GoIlXCp/xNOcQx6q0acIjfxpfKW7N/pjxh5UNp3BJeSf7JXBob6hh/0NX/8t6OtSi6VKuSszAlgzWswY=,iv:Mg1TcBYRG2q+RdFRMTdqchh+2luaJdsfFTIU5HVQpk8=,tag:RD6cY4oidKcWq0Qe6QQkYg==,type:str] diff --git a/helm/templates/deployment.yaml b/helm/templates/deployment.yaml index b9488131..9c98d98c 100644 --- a/helm/templates/deployment.yaml +++ b/helm/templates/deployment.yaml @@ -26,6 +26,10 @@ spec: image: {{ .Values.image.registry }}/{{ .Values.image.repository }}:{{ .Values.image.tag }} # always perform pull when creating pod imagePullPolicy: Always + envFrom: + - secretRef: + name: credentials + # env vars so we can connect to DB env: - name: QUARKUS_DATASOURCE_JDBC_URL @@ -34,6 +38,12 @@ spec: value: demo - name: QUARKUS_DATASOURCE_PASSWORD value: demo + - name: quarkus.opentelemetry.enabled + value: "true" + - name: quarkus.opentelemetry.tracer.exporter.otlp.endpoint + value: http://otel-agent:4317 + - name: quarkus.application.name + value: demo-quarkus # live & ready probes, using our healthcheck endpoints livenessProbe: failureThreshold: 5 @@ -101,5 +111,5 @@ spec: value: demo - name: DISABLE_WELCOME_MESSAGE value: 'true' - image: 'docker.io/bitnami/postgresql:12.2.0' + image: {{ .Values.postgres.image }}:{{ .Values.postgres.imageTag }} name: check-db diff --git a/helm/templates/postgres-deployment.yaml b/helm/templates/postgres-deployment.yaml new file mode 100644 index 00000000..e4aa9b11 --- /dev/null +++ b/helm/templates/postgres-deployment.yaml @@ -0,0 +1,79 @@ +apiVersion: apps/v1 +kind: Deployment +# deployment v1 +metadata: + name: postgresql +spec: + replicas: 1 + selector: + #how are the pods linked together + matchLabels: + app: postgresql + template: + metadata: + labels: + app: postgresql + spec: + containers: + - name: postgresql + image: '{{ .Values.postgres.image }}:{{ .Values.postgres.imageTag }}' + ports: + - name: tcp-postgresql + containerPort: {{ .Values.postgres.service.port }} + protocol: TCP + env: + - name: POSTGRESQL_PORT_NUMBER + value: '5432' + - name: POSTGRESQL_VOLUME_DIR + value: /bitnami/postgresql + - name: PGDATA + value: /bitnami/postgresql/data + - name: POSTGRES_USER + value: postgres + #dont even try this in production + - name: POSTGRES_PASSWORD + value: postgres + - name: POSTGRES_DB + value: kubernetes + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + - name: POSTGRESQL_ENABLE_LDAP + value: 'no' + resources: + requests: + cpu: 250m + memory: 256Mi + livenessProbe: + exec: + command: + - /bin/sh + - '-c' + - >- + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + initialDelaySeconds: 30 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + readinessProbe: + exec: + command: + - /bin/sh + - '-c' + - '-e' + - > + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + + [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f + /bitnami/postgresql/.initialized ] + initialDelaySeconds: 5 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + imagePullPolicy: IfNotPresent +# we run database without any persistent data volume - not a good idea, but sufficient for demo diff --git a/helm/templates/postgres-service.yaml b/helm/templates/postgres-service.yaml new file mode 100644 index 00000000..ef592323 --- /dev/null +++ b/helm/templates/postgres-service.yaml @@ -0,0 +1,15 @@ +kind: Service +apiVersion: v1 +metadata: + name: postgresql + labels: + app: postgresql +spec: + ports: + - name: tcp-postgresql + protocol: TCP + port: {{ .Values.postgres.service.port }} + targetPort: tcp-postgresql + selector: + app: postgresql + type: LoadBalancer #ClusterIP diff --git a/helm/templates/secrets.yaml b/helm/templates/secrets.yaml new file mode 100644 index 00000000..2dc4607a --- /dev/null +++ b/helm/templates/secrets.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Secret +metadata: + name: credentials + #labels: + # app: app + # chart: '{{ .Chart.Name }}-{{ .Chart.Version }}' + # release: '{{ .Release.Name }}' + # heritage: '{{ .Release.Service }}' +type: Opaque +data: + server: {{ .Values.server | b64enc | quote }} + username: {{ .Values.username | b64enc | quote }} + password: {{ .Values.password | b64enc | quote }} diff --git a/helm/templates/service.yaml b/helm/templates/service.yaml index 5b7298be..90e6797e 100644 --- a/helm/templates/service.yaml +++ b/helm/templates/service.yaml @@ -14,4 +14,4 @@ spec: # how to find the pods we are load balancing selector: app: demo-quarkus - type: ClusterIP + type: LoadBalancer #ClusterIP diff --git a/helm/values.yaml b/helm/values.yaml index 01e70f7a..ef3e5568 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -2,9 +2,9 @@ # Application image image: # Docker registry - registry: "k3d-registry:5000" + #registry: dockerregistry101 #"k3d-registry:5000" # Docker repository (application name) - repository: "demo-quarkus" + repository: acrimage101.azurecr.io/acrimage101/demo-quarkus #"demo-quarkus" # Docker image tag (application version) tag: "latest" @@ -26,7 +26,14 @@ pod: # Service configuration service: port: 8080 - + + # Database configuration +postgres: + image: "docker.io/bitnami/postgresql" + imageTag: "12.2.0" + + service: + port: 5432 # Ingress configuration ingress: host: "demo-quarkus.localhost" diff --git a/k8s/deployment.yaml b/k8s/deployment.yaml index a961bcd0..53d89931 100644 --- a/k8s/deployment.yaml +++ b/k8s/deployment.yaml @@ -24,7 +24,8 @@ spec: containers: - name: demo-quarkus # where should the image come from - image: 'k3d-registry:5000/demo-quarkus:latest' + image: 'acrimage101.azurecr.io/acrimage101/demo-quarkus:latest' + # always perform pull when creating pod imagePullPolicy: Always # env vars so we can connect to DB diff --git a/k8s/dev.yaml b/k8s/dev.yaml deleted file mode 100644 index b02526f3..00000000 --- a/k8s/dev.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: k3d.io/v1alpha2 -kind: Simple -name: dev -servers: 1 -ports: - - port: 80:80 - nodeFilters: - - loadbalancer -registries: - use: k3d-registry:5000 diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml index e26e2d70..8d3a9a1a 100644 --- a/k8s/ingress.yaml +++ b/k8s/ingress.yaml @@ -16,5 +16,5 @@ spec: name: demo-quarkus port: number: 8080 - # this will work if you have dnsmasq(tkit env guide) - host: demo-quarkus.localhost \ No newline at end of file + # #this will work if you have dnsmasq(tkit env guide) + host: demo-quarkus.localhost diff --git a/k8s/postgres-service.yaml b/k8s/postgres-service.yaml index 58a1d43b..6d19ee33 100644 --- a/k8s/postgres-service.yaml +++ b/k8s/postgres-service.yaml @@ -12,4 +12,4 @@ spec: targetPort: tcp-postgresql selector: app: postgresql - type: ClusterIP + type: LoadBalancer #ClusterIP diff --git a/k8s/service.yaml b/k8s/service.yaml index 2b3ebca8..af2219f0 100644 --- a/k8s/service.yaml +++ b/k8s/service.yaml @@ -14,4 +14,4 @@ spec: # how to find the pods we are load balancing selector: app: demo-quarkus - type: ClusterIP + type: LoadBalancer #ClusterIP diff --git a/otel-charts/Chart.yaml b/otel-charts/Chart.yaml new file mode 100644 index 00000000..f0182ccc --- /dev/null +++ b/otel-charts/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: otel-charts +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" diff --git a/otel-charts/helm/Chart.yaml b/otel-charts/helm/Chart.yaml new file mode 100644 index 00000000..9f02c0a0 --- /dev/null +++ b/otel-charts/helm/Chart.yaml @@ -0,0 +1,9 @@ +apiVersion: v3 +name: OpenTelemetry Helm template +version: 1.0.0 +description: Helm chart template for an OpenTelemetry Kubernetes deployment +appVersion: 1.0.0 +keywords: + - template +maintainers: + - name: devon4j Developer diff --git a/otel-charts/helm/templates/configmap.yaml b/otel-charts/helm/templates/configmap.yaml new file mode 100644 index 00000000..87ed63d2 --- /dev/null +++ b/otel-charts/helm/templates/configmap.yaml @@ -0,0 +1,98 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-agent +data: + otel-agent-config: | + receivers: + otlp: + protocols: + grpc: + + processors: + batch: + + exporters: + otlp: + endpoint: "otel-collector.default.svc.cluster.local:4317" + insecure: true + + service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [otlp] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [otlp] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector +data: + otel-collector-config: | + receivers: + otlp: + protocols: + grpc: + http: + cors_allowed_origins: + - http://* + - https://* + + processors: + batch: + + exporters: + logging: + zipkin: + endpoint: "http://zipkin-all-in-one.default.svc.cluster.local:9411/api/v2/spans" + format: proto + jaeger: + endpoint: jaeger-all-in-one.default.svc.cluster.local:14250 + insecure: true + prometheus: + endpoint: "0.0.0.0:8889" + + service: + pipelines: + traces: + receivers: [otlp] + exporters: [zipkin, jaeger] + processors: [batch] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [prometheus] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vmetrics-config +data: + vMetrics.yaml: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: prometheus +data: + prometheus-config: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] \ No newline at end of file diff --git a/otel-charts/helm/templates/grafana-deployment.yaml b/otel-charts/helm/templates/grafana-deployment.yaml new file mode 100644 index 00000000..a1b2db33 --- /dev/null +++ b/otel-charts/helm/templates/grafana-deployment.yaml @@ -0,0 +1,43 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: grafana + name: grafana +spec: + replicas: 1 + selector: + matchLabels: + component: grafana + template: + metadata: + labels: + component: grafana + spec: + containers: + - image: grafana/grafana + name: grafana + ports: + - containerPort: 3000 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: grafana + name: grafana +spec: + ports: + - name: "3000" + port: 3000 + protocol: TCP + targetPort: 3000 + selector: + component: grafana + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/otel-charts/helm/templates/ingress.yaml b/otel-charts/helm/templates/ingress.yaml new file mode 100644 index 00000000..efa4bca9 --- /dev/null +++ b/otel-charts/helm/templates/ingress.yaml @@ -0,0 +1,46 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress +spec: + rules: + - host: {{ .Values.ingress.application.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: {{ .Values.application.service.name }} + port: + number: {{ .Values.ingress.application.port }} + - host: {{ .Values.ingress.jaeger.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: jaeger-all-in-one + port: + number: {{ .Values.ingress.jaeger.port }} + - host: {{ .Values.ingress.zipkin.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: zipkin-all-in-one + port: + number: {{ .Values.ingress.zipkin.port }} + - host: {{ .Values.ingress.grafana.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: grafana + port: + number: {{ .Values.ingress.grafana.port }} \ No newline at end of file diff --git a/otel-charts/helm/templates/jaeger-all-in-one-deployment.yaml b/otel-charts/helm/templates/jaeger-all-in-one-deployment.yaml new file mode 100644 index 00000000..0c37f108 --- /dev/null +++ b/otel-charts/helm/templates/jaeger-all-in-one-deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + replicas: 1 + selector: + matchLabels: + component: jaeger-all-in-one + strategy: {} + template: + metadata: + labels: + component: jaeger-all-in-one + spec: + containers: + - image: jaegertracing/all-in-one:latest + name: jaeger-all-in-one + ports: + - containerPort: 16686 + - containerPort: 14268 + - containerPort: 14250 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + ports: + - name: "16686" + port: 16686 + protocol: TCP + targetPort: 16686 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + selector: + component: jaeger-all-in-one + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} + diff --git a/otel-charts/helm/templates/otel-agent-deployment.yaml b/otel-charts/helm/templates/otel-agent-deployment.yaml new file mode 100644 index 00000000..bf2c591c --- /dev/null +++ b/otel-charts/helm/templates/otel-agent-deployment.yaml @@ -0,0 +1,98 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + replicas: 1 + selector: + matchLabels: + component: otel-agent + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-agent + spec: + containers: + - args: + - /otelcol + - --config=/conf/otel-agent-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-agent + ports: + - containerPort: 8888 + - containerPort: 14250 + - containerPort: 14268 + - containerPort: 55678 + - containerPort: 4317 + - containerPort: 9411 + - containerPort: 1777 + - containerPort: 13133 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-agent-config-volume + volumes: + - name: otel-agent-config-volume + configMap: + name: otel-agent + items: + - key: otel-agent-config + path: otel-agent-config.yaml + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + ports: + - name: "8887" + port: 8887 + + targetPort: 8888 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "55678" + port: 55678 + protocol: TCP + targetPort: 55678 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "9411" + port: 9411 + protocol: TCP + targetPort: 9411 + - name: "1777" + port: 1777 + protocol: TCP + targetPort: 1777 + - name: "55679" + port: 55679 + protocol: TCP + targetPort: 55679 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + selector: + component: otel-agent + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/otel-charts/helm/templates/otel-collector-deployment.yaml b/otel-charts/helm/templates/otel-collector-deployment.yaml new file mode 100644 index 00000000..57669258 --- /dev/null +++ b/otel-charts/helm/templates/otel-collector-deployment.yaml @@ -0,0 +1,83 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + replicas: 1 + selector: + matchLabels: + component: otel-collector + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-collector + spec: + containers: + - args: + - --config=/conf/otel-collector-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-collector + ports: + - containerPort: 1888 + - containerPort: 8888 + - containerPort: 8889 + - containerPort: 13133 + - containerPort: 4317 + - containerPort: 55679 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-collector-config-volume + restartPolicy: Always + volumes: + - name: otel-collector-config-volume + configMap: + name: otel-collector + items: + - key: otel-collector-config + path: otel-collector-config.yaml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + ports: + - name: "1888" + port: 1888 + protocol: TCP + targetPort: 1888 + - name: "8888" + port: 8888 + protocol: TCP + targetPort: 8888 + - name: "8889" + port: 8889 + protocol: TCP + targetPort: 8889 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "55670" + port: 55670 + protocol: TCP + targetPort: 55679 + selector: + component: otel-collector + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/otel-charts/helm/templates/prometheus-deployment.yaml b/otel-charts/helm/templates/prometheus-deployment.yaml new file mode 100644 index 00000000..ab3ef30d --- /dev/null +++ b/otel-charts/helm/templates/prometheus-deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: prometheus + name: prometheus +spec: + replicas: 1 + selector: + matchLabels: + component: prometheus + strategy: + type: Recreate + template: + metadata: + labels: + component: prometheus + spec: + containers: + - image: prom/prometheus:latest + name: prometheus + ports: + - containerPort: 9090 + resources: {} + volumeMounts: + - mountPath: /etc/prometheus/ + name: prometheus-config-volume + restartPolicy: Always + volumes: + - name: prometheus-config-volume + configMap: + name: prometheus + items: + - key: prometheus-config + path: prometheus.yml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: prometheus + name: prometheus +spec: + ports: + - name: "9090" + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + component: prometheus + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/otel-charts/helm/templates/victoriametrics-deployment.yaml b/otel-charts/helm/templates/victoriametrics-deployment.yaml new file mode 100644 index 00000000..271ae96d --- /dev/null +++ b/otel-charts/helm/templates/victoriametrics-deployment.yaml @@ -0,0 +1,77 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: victoriametrics + name: victoriametrics +spec: + replicas: 1 + selector: + matchLabels: + component: victoriametrics + strategy: + type: Recreate + template: + metadata: + labels: + component: victoriametrics + spec: + containers: + - args: + - --promscrape.config=/conf/vMetrics.yaml + image: victoriametrics/victoria-metrics + name: victoriametrics + ports: + - containerPort: 8428 + - containerPort: 8089 + - containerPort: 8089 + protocol: UDP + - containerPort: 2003 + - containerPort: 2003 + protocol: UDP + - containerPort: 4242 + resources: {} + volumeMounts: + - mountPath: /conf + name: vmetrics-config + restartPolicy: Always + volumes: + - configMap: + items: + - key: vMetrics.yaml + path: vMetrics.yaml + name: vmetrics-config + name: vmetrics-config + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: victoriametrics + name: victoriametrics +spec: + ports: + - name: "8428" + port: 8428 + targetPort: 8428 + - name: "8089" + port: 8089 + targetPort: 8089 + - name: 8089-udp + port: 8089 + protocol: UDP + targetPort: 8089 + - name: "2003" + port: 2003 + targetPort: 2003 + - name: 2003-udp + port: 2003 + protocol: UDP + targetPort: 2003 + - name: "4242" + port: 4242 + targetPort: 4242 + selector: + component: victoriametrics diff --git a/otel-charts/helm/templates/vmagent-deployment.yaml b/otel-charts/helm/templates/vmagent-deployment.yaml new file mode 100644 index 00000000..7560d9c1 --- /dev/null +++ b/otel-charts/helm/templates/vmagent-deployment.yaml @@ -0,0 +1,53 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: vmagent + name: vmagent +spec: + replicas: 1 + selector: + matchLabels: + component: vmagent + strategy: + type: Recreate + template: + metadata: + labels: + component: vmagent + spec: + containers: + - args: + - --promscrape.config=/conf/vMetrics.yaml + - --remoteWrite.url=http://victoriametrics:8428/api/v1/write + image: victoriametrics/vmagent + name: vmagent + ports: + - containerPort: 8429 + volumeMounts: + - mountPath: /conf + name: vmetrics-config + restartPolicy: Always + volumes: + - configMap: + items: + - key: vMetrics.yaml + path: vMetrics.yaml + name: vmetrics-config + name: vmetrics-config + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: vmagent + name: vmagent +spec: + ports: + - name: "8429" + port: 8429 + targetPort: 8429 + selector: + component: vmagent diff --git a/otel-charts/helm/templates/zipkin-all-in-one-deployment.yaml b/otel-charts/helm/templates/zipkin-all-in-one-deployment.yaml new file mode 100644 index 00000000..9bd061a2 --- /dev/null +++ b/otel-charts/helm/templates/zipkin-all-in-one-deployment.yaml @@ -0,0 +1,45 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: zipkin-all-in-one + labels: + component: zipkin-all-in-one +spec: + selector: + matchLabels: + component: zipkin-all-in-one + minReadySeconds: 5 + progressDeadlineSeconds: 120 + replicas: 1 + template: + metadata: + labels: + component: zipkin-all-in-one + spec: + containers: + - name: zipkin-all-in-one + image: openzipkin/zipkin:latest + ports: + - containerPort: 9411 + +--- + +apiVersion: v1 +kind: Service +metadata: + name: zipkin-all-in-one + labels: + component: zipkin-all-in-one +spec: + selector: + component: zipkin-all-in-one + ports: + - name: zipkin + protocol: TCP + port: 9411 + targetPort: 9411 + selector: + component: jaeger-all-in-one + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/otel-charts/helm/values.yaml b/otel-charts/helm/values.yaml new file mode 100644 index 00000000..86c885a8 --- /dev/null +++ b/otel-charts/helm/values.yaml @@ -0,0 +1,26 @@ +# Application configuration +application: + # Configuration to get the metrics information + metrics: + jobname: "demo-quarkus" + url: "/q/metrics" + + # Configuration of the application service + service: + name: "demo-quarkus" + port: 8080 + +# Ingress configuration +ingress: + application: + host: "application.localhost" + port: 8080 + jaeger: + host: "jaeger.localhost" + port: 16686 + zipkin: + host: "zipkin.localhost" + port: 9411 + grafana: + host: "grafana.localhost" + port: 3000 diff --git a/otel-charts/templates/configmap.yaml b/otel-charts/templates/configmap.yaml new file mode 100644 index 00000000..c1f106fc --- /dev/null +++ b/otel-charts/templates/configmap.yaml @@ -0,0 +1,98 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: collector-config +data: + collector.yaml: | + receivers: + otlp: + protocols: + grpc: + http: + cors_allowed_origins: + - http://* + - https://* + + exporters: + prometheus: + endpoint: "0.0.0.0:8889" + namespace: promexample + const_labels: + label1: value1 + + zipkin: + endpoint: "http://zipkin-all-in-one:9411/api/v2/spans" + format: proto + + jaeger: + endpoint: jaeger-all-in-one:14250 + insecure: true + + processors: + batch: + + service: + pipelines: + traces: + receivers: [otlp] + exporters: [zipkin, jaeger] + processors: [batch] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [prometheus] +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: agent-config +data: + agent.yaml: | + receivers: + otlp: + protocols: + grpc: + http: + opencensus: + jaeger: + protocols: + grpc: + thrift_http: + zipkin: + + exporters: + otlp: + endpoint: "otel-collector:4317" + insecure: true + logging: + loglevel: debug + + processors: + batch: + + service: + pipelines: + traces: + receivers: [otlp, zipkin, jaeger] + processors: [batch] + exporters: [otlp] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [otlp] +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: vmetrics-config +data: + vMetrics.yaml: | + scrape_configs: + #- job_name: 'otel-collector' + - job_name: 'demo_quarkus' + scrape_interval: 10s + metrics_path: '/q/metrics' + static_configs: + - targets: ['reference-project:8080'] + #- targets: ['otel-collector:8889'] + #- targets: ['otel-collector:8888'] \ No newline at end of file diff --git a/otel-charts/templates/demo-networkpolicy.yaml b/otel-charts/templates/demo-networkpolicy.yaml new file mode 100644 index 00000000..8b57ef91 --- /dev/null +++ b/otel-charts/templates/demo-networkpolicy.yaml @@ -0,0 +1,14 @@ +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + creationTimestamp: null + name: demo +spec: + ingress: + - from: + - podSelector: + matchLabels: + io.kompose.network/demo: "true" + podSelector: + matchLabels: + io.kompose.network/demo: "true" diff --git a/otel-charts/templates/ingress.yaml b/otel-charts/templates/ingress.yaml new file mode 100644 index 00000000..226f9740 --- /dev/null +++ b/otel-charts/templates/ingress.yaml @@ -0,0 +1,61 @@ +{{- if .Values.ingress.enabled -}} +{{- $fullName := include "otel-charts.fullname" . -}} +{{- $svcPort := .Values.service.port -}} +{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} + {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} + {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} + {{- end }} +{{- end }} +{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1 +{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} +apiVersion: networking.k8s.io/v1beta1 +{{- else -}} +apiVersion: extensions/v1beta1 +{{- end }} +kind: Ingress +metadata: + name: {{ $fullName }} + labels: + {{- include "otel-charts.labels" . | nindent 4 }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} + ingressClassName: {{ .Values.ingress.className }} + {{- end }} + {{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} + {{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} + pathType: {{ .pathType }} + {{- end }} + backend: + {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} + service: + name: {{ $fullName }} + port: + number: {{ $svcPort }} + {{- else }} + serviceName: {{ $fullName }} + servicePort: {{ $svcPort }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} diff --git a/helm-otel/templates/postgresdb-deployment.yaml b/otel-charts/templates/jaeger-all-in-one-deployment.yaml similarity index 60% rename from helm-otel/templates/postgresdb-deployment.yaml rename to otel-charts/templates/jaeger-all-in-one-deployment.yaml index 21278090..0b87db57 100644 --- a/helm-otel/templates/postgresdb-deployment.yaml +++ b/otel-charts/templates/jaeger-all-in-one-deployment.yaml @@ -7,13 +7,13 @@ metadata: kompose.version: 1.21.0 (992df58d8) creationTimestamp: null labels: - io.kompose.service: postgresdb - name: postgresdb + io.kompose.service: jaeger-all-in-one + name: jaeger-all-in-one spec: replicas: 1 selector: matchLabels: - io.kompose.service: postgresdb + io.kompose.service: jaeger-all-in-one strategy: {} template: metadata: @@ -24,25 +24,16 @@ spec: creationTimestamp: null labels: io.kompose.network/demo: "true" - io.kompose.service: postgresdb + io.kompose.service: jaeger-all-in-one spec: containers: - - args: - - -cmax_prepared_transactions=100 - env: - - name: POSTGRES_DB - value: demo - - name: POSTGRES_HOST_AUTH_METHOD - value: trust - - name: POSTGRES_PASSWORD - value: demo - - name: POSTGRES_USER - value: demo - image: postgres:11.5 + - image: jaegertracing/all-in-one:latest imagePullPolicy: "" - name: postgresdb + name: jaeger-all-in-one ports: - - containerPort: 5432 + - containerPort: 16686 + - containerPort: 14268 + - containerPort: 14250 resources: {} restartPolicy: Always serviceAccountName: "" diff --git a/otel-charts/templates/jaeger-all-in-one-service.yaml b/otel-charts/templates/jaeger-all-in-one-service.yaml new file mode 100644 index 00000000..91862d52 --- /dev/null +++ b/otel-charts/templates/jaeger-all-in-one-service.yaml @@ -0,0 +1,30 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.service: jaeger-all-in-one + name: jaeger-all-in-one +spec: + ports: + - name: "16686" + port: 16686 + protocol: TCP + targetPort: 16686 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + selector: + io.kompose.service: jaeger-all-in-one + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/otel-charts/templates/otel-agent-deployment.yaml b/otel-charts/templates/otel-agent-deployment.yaml new file mode 100644 index 00000000..7ad0efb6 --- /dev/null +++ b/otel-charts/templates/otel-agent-deployment.yaml @@ -0,0 +1,58 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.service: otel-agent + name: otel-agent +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: otel-agent + strategy: {} + template: + metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.network/demo: "true" + io.kompose.service: otel-agent + spec: + containers: + - args: + - --config=/conf/agent.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + imagePullPolicy: "" + name: otel-agent + ports: + - containerPort: 8888 + - containerPort: 14250 + - containerPort: 14268 + - containerPort: 55678 + - containerPort: 4317 + - containerPort: 9411 + - containerPort: 1777 + - containerPort: 13133 + resources: {} + volumeMounts: + - mountPath: /conf + name: agent-config + volumes: + - configMap: + items: + - key: agent.yaml + path: agent.yaml + name: agent-config + name: agent-config + restartPolicy: Always + serviceAccountName: "" +status: {} diff --git a/otel-charts/templates/otel-agent-service.yaml b/otel-charts/templates/otel-agent-service.yaml new file mode 100644 index 00000000..a18a0260 --- /dev/null +++ b/otel-charts/templates/otel-agent-service.yaml @@ -0,0 +1,54 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.service: otel-agent + name: otel-agent +spec: + ports: + - name: "8887" + port: 8887 + protocol: TCP + targetPort: 8888 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "55678" + port: 55678 + protocol: TCP + targetPort: 55678 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "9411" + port: 9411 + protocol: TCP + targetPort: 9411 + - name: "1777" + port: 1777 + protocol: TCP + targetPort: 1777 + - name: "55679" + port: 55679 + protocol: TCP + targetPort: 55679 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + selector: + io.kompose.service: otel-agent + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/otel-charts/templates/otel-collector-deployment.yaml b/otel-charts/templates/otel-collector-deployment.yaml new file mode 100644 index 00000000..b150acdf --- /dev/null +++ b/otel-charts/templates/otel-collector-deployment.yaml @@ -0,0 +1,56 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.service: otel-collector + name: otel-collector +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: otel-collector + strategy: {} + template: + metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.network/demo: "true" + io.kompose.service: otel-collector + spec: + containers: + - args: + - --config=/conf/collector.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + imagePullPolicy: "" + name: otel-collector + ports: + - containerPort: 1888 + - containerPort: 8888 + - containerPort: 8889 + - containerPort: 13133 + - containerPort: 4317 + - containerPort: 55679 + resources: {} + volumeMounts: + - mountPath: /conf + name: collector-config + volumes: + - configMap: + items: + - key: collector.yaml + path: collector.yaml + name: collector-config + name: collector-config + restartPolicy: Always + serviceAccountName: "" +status: {} diff --git a/otel-charts/templates/otel-collector-service.yaml b/otel-charts/templates/otel-collector-service.yaml new file mode 100644 index 00000000..b35b23a2 --- /dev/null +++ b/otel-charts/templates/otel-collector-service.yaml @@ -0,0 +1,42 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.service: otel-collector + name: otel-collector +spec: + ports: + - name: "1888" + port: 1888 + protocol: TCP + targetPort: 1888 + - name: "8888" + port: 8888 + protocol: TCP + targetPort: 8888 + - name: "8889" + port: 8889 + protocol: TCP + targetPort: 8889 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "55670" + port: 55670 + protocol: TCP + targetPort: 55679 + selector: + io.kompose.service: otel-collector + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/otel-charts/templates/prometheus-deployment.yaml b/otel-charts/templates/prometheus-deployment.yaml new file mode 100644 index 00000000..ef7999ea --- /dev/null +++ b/otel-charts/templates/prometheus-deployment.yaml @@ -0,0 +1,39 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.service: prometheus + name: prometheus +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: prometheus + strategy: {} + template: + metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.network/demo: "true" + io.kompose.service: prometheus + spec: + containers: + - image: prom/prometheus:latest + imagePullPolicy: "" + name: prometheus + ports: + - containerPort: 9090 + resources: {} + restartPolicy: Always + serviceAccountName: "" + volumes: null +status: {} diff --git a/helm-otel/templates/postgresdb-service.yaml b/otel-charts/templates/prometheus-service.yaml similarity index 70% rename from helm-otel/templates/postgresdb-service.yaml rename to otel-charts/templates/prometheus-service.yaml index 08a662a6..ceef1238 100644 --- a/helm-otel/templates/postgresdb-service.yaml +++ b/otel-charts/templates/prometheus-service.yaml @@ -7,16 +7,16 @@ metadata: kompose.version: 1.21.0 (992df58d8) creationTimestamp: null labels: - io.kompose.service: postgresdb - name: postgresdb + io.kompose.service: prometheus + name: prometheus spec: ports: - - name: "5432" - port: 5432 + - name: "9090" + port: 9090 protocol: TCP - targetPort: 5432 + targetPort: 9090 selector: - io.kompose.service: postgresdb + io.kompose.service: prometheus type: LoadBalancer #ClusterIP status: loadBalancer: {} diff --git a/otel-charts/templates/zipkin-all-in-one-deployment.yaml b/otel-charts/templates/zipkin-all-in-one-deployment.yaml new file mode 100644 index 00000000..77bfe8fd --- /dev/null +++ b/otel-charts/templates/zipkin-all-in-one-deployment.yaml @@ -0,0 +1,39 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.service: zipkin-all-in-one + name: zipkin-all-in-one +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: zipkin-all-in-one + strategy: {} + template: + metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.network/demo: "true" + io.kompose.service: zipkin-all-in-one + spec: + containers: + - image: openzipkin/zipkin:latest + imagePullPolicy: "" + name: zipkin-all-in-one + ports: + - containerPort: 9411 + resources: {} + restartPolicy: Always + serviceAccountName: "" + volumes: null +status: {} diff --git a/otel-charts/templates/zipkin-all-in-one-service.yaml b/otel-charts/templates/zipkin-all-in-one-service.yaml new file mode 100644 index 00000000..4fbf2f3f --- /dev/null +++ b/otel-charts/templates/zipkin-all-in-one-service.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe + convert -c + kompose.version: 1.21.0 (992df58d8) + creationTimestamp: null + labels: + io.kompose.service: zipkin-all-in-one + name: zipkin-all-in-one +spec: + ports: + - name: "9411" + port: 9411 + protocol: TCP + targetPort: 9411 + selector: + io.kompose.service: zipkin-all-in-one + type: LoadBalancer +status: + loadBalancer: {} diff --git a/otel-charts/terraform-helm-deploy b/otel-charts/terraform-helm-deploy new file mode 160000 index 00000000..e3eafd7e --- /dev/null +++ b/otel-charts/terraform-helm-deploy @@ -0,0 +1 @@ +Subproject commit e3eafd7e3bbd9893908985ea938376a0da9e65cb diff --git a/otel-charts/values.yaml b/otel-charts/values.yaml new file mode 100644 index 00000000..1b5ac5cc --- /dev/null +++ b/otel-charts/values.yaml @@ -0,0 +1,82 @@ +# Default values for otel-charts. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: nginx + pullPolicy: IfNotPresent + # Overrides the image tag whose default is the chart appVersion. + tag: "" + +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "" + +podAnnotations: {} + +podSecurityContext: {} + # fsGroup: 2000 + +securityContext: {} + # capabilities: + # drop: + # - ALL + # readOnlyRootFilesystem: true + # runAsNonRoot: true + # runAsUser: 1000 + +service: + type: ClusterIP + port: 80 + +ingress: + enabled: false + className: "" + annotations: {} + # kubernetes.io/ingress.class: nginx + # kubernetes.io/tls-acme: "true" + hosts: + - host: chart-example.local + paths: + - path: / + pathType: ImplementationSpecific + tls: [] + # - secretName: chart-example-tls + # hosts: + # - chart-example.local + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 100 + targetCPUUtilizationPercentage: 80 + # targetMemoryUtilizationPercentage: 80 + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/pom.xml b/pom.xml index f538e2dd..92bbd1e1 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,10 @@ io.quarkus quarkus-opentelemetry + + io.quarkus + quarkus-opentelemetry-exporter-otlp + io.quarkus quarkus-opentelemetry-exporter-jaeger @@ -236,7 +240,7 @@ westeurope Linux - Java 8 + Java 11 Java SE diff --git a/src/main/docker/Dockerfile.jvm b/src/main/docker/Dockerfile.jvm index 7e1eab14..085695a4 100644 --- a/src/main/docker/Dockerfile.jvm +++ b/src/main/docker/Dockerfile.jvm @@ -47,8 +47,9 @@ COPY --chown=1001 target/quarkus-app/lib/ /deployments/lib/ COPY --chown=1001 target/quarkus-app/*.jar /deployments/ COPY --chown=1001 target/quarkus-app/app/ /deployments/app/ COPY --chown=1001 target/quarkus-app/quarkus/ /deployments/quarkus/ - +COPY --chown=1001 agent/opentelemetry-javaagent-all.jar /deployments/agent/ EXPOSE 8080 USER 1001 +#CMD [ "/deployments/run-java.sh" ] ENTRYPOINT [ "/deployments/run-java.sh" ] diff --git a/src/main/docker/Dockerfile.native b/src/main/docker/Dockerfile.native index 9c192020..9f2fb390 100644 --- a/src/main/docker/Dockerfile.native +++ b/src/main/docker/Dockerfile.native @@ -19,9 +19,10 @@ WORKDIR /work/ RUN chown 1001 /work \ && chmod "g+rwX" /work \ && chown 1001:root /work -COPY --chown=1001:root target/*-runner /work/application +COPY --chown=1001:root target/*-runner.jar /work/application EXPOSE 8080 USER 1001 -CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] +#CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] +ENTRYPOINT ["java","-jar","./application/demo-quarkus-1.0.0-SNAPSHOT-runner.jar"] From 733dadb4af4df07ca85efe46a65ce157fcdbe582 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 16 Nov 2021 09:07:52 +0000 Subject: [PATCH 03/72] commit --- charts/helm/Chart.yaml | 9 ++ charts/helm/templates/configmap.yaml | 98 +++++++++++++++ charts/helm/templates/grafana-deployment.yaml | 43 +++++++ charts/helm/templates/ingress.yaml | 46 +++++++ .../jaeger-all-in-one-deployment.yaml | 55 ++++++++ .../helm/templates/otel-agent-deployment.yaml | 98 +++++++++++++++ .../templates/otel-collector-deployment.yaml | 83 ++++++++++++ .../helm/templates/prometheus-deployment.yaml | 55 ++++++++ .../templates/victoriametrics-deployment.yaml | 77 ++++++++++++ charts/helm/templates/vmagent-deployment.yaml | 53 ++++++++ .../zipkin-all-in-one-deployment.yaml | 45 +++++++ charts/helm/values.yaml | 26 ++++ charts/quarkus-app/Chart.yaml | 24 ++++ charts/quarkus-app/main.tf | 47 +++++++ charts/quarkus-app/templates/deployment.yaml | 119 ++++++++++++++++++ charts/quarkus-app/templates/ingress.yaml | 20 +++ .../templates/postgres-deployment.yaml | 79 ++++++++++++ .../templates/postgres-service.yaml | 15 +++ charts/quarkus-app/templates/secrets.yaml | 14 +++ charts/quarkus-app/templates/service.yaml | 17 +++ 20 files changed, 1023 insertions(+) create mode 100644 charts/helm/Chart.yaml create mode 100644 charts/helm/templates/configmap.yaml create mode 100644 charts/helm/templates/grafana-deployment.yaml create mode 100644 charts/helm/templates/ingress.yaml create mode 100644 charts/helm/templates/jaeger-all-in-one-deployment.yaml create mode 100644 charts/helm/templates/otel-agent-deployment.yaml create mode 100644 charts/helm/templates/otel-collector-deployment.yaml create mode 100644 charts/helm/templates/prometheus-deployment.yaml create mode 100644 charts/helm/templates/victoriametrics-deployment.yaml create mode 100644 charts/helm/templates/vmagent-deployment.yaml create mode 100644 charts/helm/templates/zipkin-all-in-one-deployment.yaml create mode 100644 charts/helm/values.yaml create mode 100644 charts/quarkus-app/Chart.yaml create mode 100644 charts/quarkus-app/main.tf create mode 100644 charts/quarkus-app/templates/deployment.yaml create mode 100644 charts/quarkus-app/templates/ingress.yaml create mode 100644 charts/quarkus-app/templates/postgres-deployment.yaml create mode 100644 charts/quarkus-app/templates/postgres-service.yaml create mode 100644 charts/quarkus-app/templates/secrets.yaml create mode 100644 charts/quarkus-app/templates/service.yaml diff --git a/charts/helm/Chart.yaml b/charts/helm/Chart.yaml new file mode 100644 index 00000000..9f02c0a0 --- /dev/null +++ b/charts/helm/Chart.yaml @@ -0,0 +1,9 @@ +apiVersion: v3 +name: OpenTelemetry Helm template +version: 1.0.0 +description: Helm chart template for an OpenTelemetry Kubernetes deployment +appVersion: 1.0.0 +keywords: + - template +maintainers: + - name: devon4j Developer diff --git a/charts/helm/templates/configmap.yaml b/charts/helm/templates/configmap.yaml new file mode 100644 index 00000000..87ed63d2 --- /dev/null +++ b/charts/helm/templates/configmap.yaml @@ -0,0 +1,98 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-agent +data: + otel-agent-config: | + receivers: + otlp: + protocols: + grpc: + + processors: + batch: + + exporters: + otlp: + endpoint: "otel-collector.default.svc.cluster.local:4317" + insecure: true + + service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [otlp] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [otlp] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector +data: + otel-collector-config: | + receivers: + otlp: + protocols: + grpc: + http: + cors_allowed_origins: + - http://* + - https://* + + processors: + batch: + + exporters: + logging: + zipkin: + endpoint: "http://zipkin-all-in-one.default.svc.cluster.local:9411/api/v2/spans" + format: proto + jaeger: + endpoint: jaeger-all-in-one.default.svc.cluster.local:14250 + insecure: true + prometheus: + endpoint: "0.0.0.0:8889" + + service: + pipelines: + traces: + receivers: [otlp] + exporters: [zipkin, jaeger] + processors: [batch] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [prometheus] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vmetrics-config +data: + vMetrics.yaml: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: prometheus +data: + prometheus-config: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] \ No newline at end of file diff --git a/charts/helm/templates/grafana-deployment.yaml b/charts/helm/templates/grafana-deployment.yaml new file mode 100644 index 00000000..a1b2db33 --- /dev/null +++ b/charts/helm/templates/grafana-deployment.yaml @@ -0,0 +1,43 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: grafana + name: grafana +spec: + replicas: 1 + selector: + matchLabels: + component: grafana + template: + metadata: + labels: + component: grafana + spec: + containers: + - image: grafana/grafana + name: grafana + ports: + - containerPort: 3000 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: grafana + name: grafana +spec: + ports: + - name: "3000" + port: 3000 + protocol: TCP + targetPort: 3000 + selector: + component: grafana + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/charts/helm/templates/ingress.yaml b/charts/helm/templates/ingress.yaml new file mode 100644 index 00000000..efa4bca9 --- /dev/null +++ b/charts/helm/templates/ingress.yaml @@ -0,0 +1,46 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress +spec: + rules: + - host: {{ .Values.ingress.application.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: {{ .Values.application.service.name }} + port: + number: {{ .Values.ingress.application.port }} + - host: {{ .Values.ingress.jaeger.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: jaeger-all-in-one + port: + number: {{ .Values.ingress.jaeger.port }} + - host: {{ .Values.ingress.zipkin.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: zipkin-all-in-one + port: + number: {{ .Values.ingress.zipkin.port }} + - host: {{ .Values.ingress.grafana.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: grafana + port: + number: {{ .Values.ingress.grafana.port }} \ No newline at end of file diff --git a/charts/helm/templates/jaeger-all-in-one-deployment.yaml b/charts/helm/templates/jaeger-all-in-one-deployment.yaml new file mode 100644 index 00000000..0c37f108 --- /dev/null +++ b/charts/helm/templates/jaeger-all-in-one-deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + replicas: 1 + selector: + matchLabels: + component: jaeger-all-in-one + strategy: {} + template: + metadata: + labels: + component: jaeger-all-in-one + spec: + containers: + - image: jaegertracing/all-in-one:latest + name: jaeger-all-in-one + ports: + - containerPort: 16686 + - containerPort: 14268 + - containerPort: 14250 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + ports: + - name: "16686" + port: 16686 + protocol: TCP + targetPort: 16686 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + selector: + component: jaeger-all-in-one + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} + diff --git a/charts/helm/templates/otel-agent-deployment.yaml b/charts/helm/templates/otel-agent-deployment.yaml new file mode 100644 index 00000000..bf2c591c --- /dev/null +++ b/charts/helm/templates/otel-agent-deployment.yaml @@ -0,0 +1,98 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + replicas: 1 + selector: + matchLabels: + component: otel-agent + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-agent + spec: + containers: + - args: + - /otelcol + - --config=/conf/otel-agent-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-agent + ports: + - containerPort: 8888 + - containerPort: 14250 + - containerPort: 14268 + - containerPort: 55678 + - containerPort: 4317 + - containerPort: 9411 + - containerPort: 1777 + - containerPort: 13133 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-agent-config-volume + volumes: + - name: otel-agent-config-volume + configMap: + name: otel-agent + items: + - key: otel-agent-config + path: otel-agent-config.yaml + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + ports: + - name: "8887" + port: 8887 + + targetPort: 8888 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "55678" + port: 55678 + protocol: TCP + targetPort: 55678 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "9411" + port: 9411 + protocol: TCP + targetPort: 9411 + - name: "1777" + port: 1777 + protocol: TCP + targetPort: 1777 + - name: "55679" + port: 55679 + protocol: TCP + targetPort: 55679 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + selector: + component: otel-agent + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/charts/helm/templates/otel-collector-deployment.yaml b/charts/helm/templates/otel-collector-deployment.yaml new file mode 100644 index 00000000..57669258 --- /dev/null +++ b/charts/helm/templates/otel-collector-deployment.yaml @@ -0,0 +1,83 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + replicas: 1 + selector: + matchLabels: + component: otel-collector + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-collector + spec: + containers: + - args: + - --config=/conf/otel-collector-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-collector + ports: + - containerPort: 1888 + - containerPort: 8888 + - containerPort: 8889 + - containerPort: 13133 + - containerPort: 4317 + - containerPort: 55679 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-collector-config-volume + restartPolicy: Always + volumes: + - name: otel-collector-config-volume + configMap: + name: otel-collector + items: + - key: otel-collector-config + path: otel-collector-config.yaml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + ports: + - name: "1888" + port: 1888 + protocol: TCP + targetPort: 1888 + - name: "8888" + port: 8888 + protocol: TCP + targetPort: 8888 + - name: "8889" + port: 8889 + protocol: TCP + targetPort: 8889 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "55670" + port: 55670 + protocol: TCP + targetPort: 55679 + selector: + component: otel-collector + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/charts/helm/templates/prometheus-deployment.yaml b/charts/helm/templates/prometheus-deployment.yaml new file mode 100644 index 00000000..ab3ef30d --- /dev/null +++ b/charts/helm/templates/prometheus-deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: prometheus + name: prometheus +spec: + replicas: 1 + selector: + matchLabels: + component: prometheus + strategy: + type: Recreate + template: + metadata: + labels: + component: prometheus + spec: + containers: + - image: prom/prometheus:latest + name: prometheus + ports: + - containerPort: 9090 + resources: {} + volumeMounts: + - mountPath: /etc/prometheus/ + name: prometheus-config-volume + restartPolicy: Always + volumes: + - name: prometheus-config-volume + configMap: + name: prometheus + items: + - key: prometheus-config + path: prometheus.yml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: prometheus + name: prometheus +spec: + ports: + - name: "9090" + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + component: prometheus + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/charts/helm/templates/victoriametrics-deployment.yaml b/charts/helm/templates/victoriametrics-deployment.yaml new file mode 100644 index 00000000..271ae96d --- /dev/null +++ b/charts/helm/templates/victoriametrics-deployment.yaml @@ -0,0 +1,77 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: victoriametrics + name: victoriametrics +spec: + replicas: 1 + selector: + matchLabels: + component: victoriametrics + strategy: + type: Recreate + template: + metadata: + labels: + component: victoriametrics + spec: + containers: + - args: + - --promscrape.config=/conf/vMetrics.yaml + image: victoriametrics/victoria-metrics + name: victoriametrics + ports: + - containerPort: 8428 + - containerPort: 8089 + - containerPort: 8089 + protocol: UDP + - containerPort: 2003 + - containerPort: 2003 + protocol: UDP + - containerPort: 4242 + resources: {} + volumeMounts: + - mountPath: /conf + name: vmetrics-config + restartPolicy: Always + volumes: + - configMap: + items: + - key: vMetrics.yaml + path: vMetrics.yaml + name: vmetrics-config + name: vmetrics-config + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: victoriametrics + name: victoriametrics +spec: + ports: + - name: "8428" + port: 8428 + targetPort: 8428 + - name: "8089" + port: 8089 + targetPort: 8089 + - name: 8089-udp + port: 8089 + protocol: UDP + targetPort: 8089 + - name: "2003" + port: 2003 + targetPort: 2003 + - name: 2003-udp + port: 2003 + protocol: UDP + targetPort: 2003 + - name: "4242" + port: 4242 + targetPort: 4242 + selector: + component: victoriametrics diff --git a/charts/helm/templates/vmagent-deployment.yaml b/charts/helm/templates/vmagent-deployment.yaml new file mode 100644 index 00000000..7560d9c1 --- /dev/null +++ b/charts/helm/templates/vmagent-deployment.yaml @@ -0,0 +1,53 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: vmagent + name: vmagent +spec: + replicas: 1 + selector: + matchLabels: + component: vmagent + strategy: + type: Recreate + template: + metadata: + labels: + component: vmagent + spec: + containers: + - args: + - --promscrape.config=/conf/vMetrics.yaml + - --remoteWrite.url=http://victoriametrics:8428/api/v1/write + image: victoriametrics/vmagent + name: vmagent + ports: + - containerPort: 8429 + volumeMounts: + - mountPath: /conf + name: vmetrics-config + restartPolicy: Always + volumes: + - configMap: + items: + - key: vMetrics.yaml + path: vMetrics.yaml + name: vmetrics-config + name: vmetrics-config + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: vmagent + name: vmagent +spec: + ports: + - name: "8429" + port: 8429 + targetPort: 8429 + selector: + component: vmagent diff --git a/charts/helm/templates/zipkin-all-in-one-deployment.yaml b/charts/helm/templates/zipkin-all-in-one-deployment.yaml new file mode 100644 index 00000000..9bd061a2 --- /dev/null +++ b/charts/helm/templates/zipkin-all-in-one-deployment.yaml @@ -0,0 +1,45 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: zipkin-all-in-one + labels: + component: zipkin-all-in-one +spec: + selector: + matchLabels: + component: zipkin-all-in-one + minReadySeconds: 5 + progressDeadlineSeconds: 120 + replicas: 1 + template: + metadata: + labels: + component: zipkin-all-in-one + spec: + containers: + - name: zipkin-all-in-one + image: openzipkin/zipkin:latest + ports: + - containerPort: 9411 + +--- + +apiVersion: v1 +kind: Service +metadata: + name: zipkin-all-in-one + labels: + component: zipkin-all-in-one +spec: + selector: + component: zipkin-all-in-one + ports: + - name: zipkin + protocol: TCP + port: 9411 + targetPort: 9411 + selector: + component: jaeger-all-in-one + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/charts/helm/values.yaml b/charts/helm/values.yaml new file mode 100644 index 00000000..86c885a8 --- /dev/null +++ b/charts/helm/values.yaml @@ -0,0 +1,26 @@ +# Application configuration +application: + # Configuration to get the metrics information + metrics: + jobname: "demo-quarkus" + url: "/q/metrics" + + # Configuration of the application service + service: + name: "demo-quarkus" + port: 8080 + +# Ingress configuration +ingress: + application: + host: "application.localhost" + port: 8080 + jaeger: + host: "jaeger.localhost" + port: 16686 + zipkin: + host: "zipkin.localhost" + port: 9411 + grafana: + host: "grafana.localhost" + port: 3000 diff --git a/charts/quarkus-app/Chart.yaml b/charts/quarkus-app/Chart.yaml new file mode 100644 index 00000000..9cc1ed5c --- /dev/null +++ b/charts/quarkus-app/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: helm-app +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: v1 #"1.16.0" diff --git a/charts/quarkus-app/main.tf b/charts/quarkus-app/main.tf new file mode 100644 index 00000000..6b44c997 --- /dev/null +++ b/charts/quarkus-app/main.tf @@ -0,0 +1,47 @@ +provider "helm" { + kubernetes { + config_path = "/root/.kube/config" + } +} + +provider "kubernetes" { + config_path = "/root/.kube/config" +} + + +resource "kubernetes_namespace" "test-namespace" { + metadata { + name = "test" + } +} + +resource "helm_release" "otel" { + name = "otel" + namespace = "test" + + + #repository = "https://charts.bitnami.com/bitnami" + chart = "/root/monitoring-kube-metrics-prometheus-grafana-terraform/otel" + + set { + name = "service.type" + value = "LoadBalancer" + } +} + +resource "helm_release" "quarkas-demo" { + name = "quarkas-demo" + namespace = "test" + + + #repository = "https://charts.bitnami.com/bitnami" + chart = "/root/monitoring-kube-metrics-prometheus-grafana-terraform/quarkas-demo" + + set { + name = "service.type" + value = "LoadBalancer" + } +} + + + diff --git a/charts/quarkus-app/templates/deployment.yaml b/charts/quarkus-app/templates/deployment.yaml new file mode 100644 index 00000000..74e79e8f --- /dev/null +++ b/charts/quarkus-app/templates/deployment.yaml @@ -0,0 +1,119 @@ +apiVersion: apps/v1 +kind: Deployment +# deployment v1 +metadata: + # metadata labels - tags under which this resources can be found in k8s api + labels: + app: demo-quarkus + app.kubernetes.io/name: demo-quarkus + name: demo-quarkus + namespace: default +spec: + # scale to 2 instances + replicas: 2 + selector: + #how are the pods linked together + matchLabels: + app: demo-quarkus + template: + metadata: + labels: + app: demo-quarkus + spec: + # pod spec, we want a single container in our pods + containers: + - name: demo-quarkus + # where should the image come from + image: 'acrimage101.azurecr.io/acrimage101/demo-quarkus:latest' + #command: ["java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes="service.name=quarkus-demo"] + #command: ["/deployments/run-java.sh"] + # always perform pull when creating pod + imagePullPolicy: Always + #env Secrets to pull image from regidtry + #envFrom: + #- secretRef: + # name: credentials + # command: ["/deployments/run-java.sh", "&&", "java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes='service.name=quarkus-demo'"] + # env vars so we can connect to DB + env: + - name: QUARKUS_DATASOURCE_JDBC_URL + value: jdbc:postgresql://postgresql:5432/demo + - name: QUARKUS_DATASOURCE_USERNAME + value: demo + - name: QUARKUS_DATASOURCE_PASSWORD + value: demo + - name: QUARKUS.OPENTELEMETRY.ENABLED + value: "true" + - name: QUARKUS.OPENTELEMETRY.TRACER.EXPORTER.OTLP.ENDPOINT + value: http://otel-collector:4317 + - name: QUARKUS.APPLICATION.NAME + value: demo-quarkus + # live & ready probes, using our healthcheck endpoints + livenessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/live + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + ports: + - containerPort: 8080 + readinessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/ready + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + # we can define init containers, single run jobs that run before our main container does + # we use them to init database and check that its ready + initContainers: + - command: + - /bin/bash + - '-c' + - >- + psql -tc "SELECT 1 FROM pg_database WHERE datname = + 'demo'" | grep -q 1 | psql -c "CREATE USER + demo WITH ENCRYPTED PASSWORD 'demo';" -c + "CREATE DATABASE demo;" -c "GRANT ALL PRIVILEGES + ON DATABASE demo TO demo;" + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: null + - name: PGUSER + value: postgres + - name: PGPASSWORD + value: postgres + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: create-db + - command: + - /bin/bash + - '-c' + - until pg_isready; do echo waiting for database; sleep 2; done; + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: demo + - name: PGUSER + value: demo + - name: PGPASSWORD + value: demo + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: check-db diff --git a/charts/quarkus-app/templates/ingress.yaml b/charts/quarkus-app/templates/ingress.yaml new file mode 100644 index 00000000..8d3a9a1a --- /dev/null +++ b/charts/quarkus-app/templates/ingress.yaml @@ -0,0 +1,20 @@ +# a simple ingress for our service +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: demo-quarkus + annotations: + ingress.kubernetes.io/ssl-redirect: "false" +spec: + rules: + - http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: demo-quarkus + port: + number: 8080 + # #this will work if you have dnsmasq(tkit env guide) + host: demo-quarkus.localhost diff --git a/charts/quarkus-app/templates/postgres-deployment.yaml b/charts/quarkus-app/templates/postgres-deployment.yaml new file mode 100644 index 00000000..2b2b9f02 --- /dev/null +++ b/charts/quarkus-app/templates/postgres-deployment.yaml @@ -0,0 +1,79 @@ +apiVersion: apps/v1 +kind: Deployment +# deployment v1 +metadata: + name: postgresql +spec: + replicas: 1 + selector: + #how are the pods linked together + matchLabels: + app: postgresql + template: + metadata: + labels: + app: postgresql + spec: + containers: + - name: postgresql + image: 'docker.io/bitnami/postgresql:12.2.0' + ports: + - name: tcp-postgresql + containerPort: 5432 + protocol: TCP + env: + - name: POSTGRESQL_PORT_NUMBER + value: '5432' + - name: POSTGRESQL_VOLUME_DIR + value: /bitnami/postgresql + - name: PGDATA + value: /bitnami/postgresql/data + - name: POSTGRES_USER + value: postgres + #dont even try this in production + - name: POSTGRES_PASSWORD + value: postgres + - name: POSTGRES_DB + value: kubernetes + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + - name: POSTGRESQL_ENABLE_LDAP + value: 'no' + resources: + requests: + cpu: 250m + memory: 256Mi + livenessProbe: + exec: + command: + - /bin/sh + - '-c' + - >- + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + initialDelaySeconds: 30 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + readinessProbe: + exec: + command: + - /bin/sh + - '-c' + - '-e' + - > + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + + [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f + /bitnami/postgresql/.initialized ] + initialDelaySeconds: 5 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + imagePullPolicy: IfNotPresent +# we run database without any persistent data volume - not a good idea, but sufficient for demo diff --git a/charts/quarkus-app/templates/postgres-service.yaml b/charts/quarkus-app/templates/postgres-service.yaml new file mode 100644 index 00000000..6d19ee33 --- /dev/null +++ b/charts/quarkus-app/templates/postgres-service.yaml @@ -0,0 +1,15 @@ +kind: Service +apiVersion: v1 +metadata: + name: postgresql + labels: + app: postgresql +spec: + ports: + - name: tcp-postgresql + protocol: TCP + port: 5432 + targetPort: tcp-postgresql + selector: + app: postgresql + type: LoadBalancer #ClusterIP diff --git a/charts/quarkus-app/templates/secrets.yaml b/charts/quarkus-app/templates/secrets.yaml new file mode 100644 index 00000000..374e9ce8 --- /dev/null +++ b/charts/quarkus-app/templates/secrets.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: Secret +metadata: + name: credentials + #labels: + # app: app + # chart: '{{ .Chart.Name }}-{{ .Chart.Version }}' + # release: '{{ .Release.Name }}' + # heritage: '{{ .Release.Service }}' +type: Opaque +data: + server: acrimage101.azurecr.io + username: acrimage101 + password: vEKxjkTwSjsjcA8L6i=haKZF1ii14BiT diff --git a/charts/quarkus-app/templates/service.yaml b/charts/quarkus-app/templates/service.yaml new file mode 100644 index 00000000..af2219f0 --- /dev/null +++ b/charts/quarkus-app/templates/service.yaml @@ -0,0 +1,17 @@ +kind: Service +apiVersion: v1 +metadata: + name: demo-quarkus + labels: + app: demo-quarkus +spec: + # we expose port 8080 which load balances traffic to the pods and their internal port 8080 + ports: + - name: http-port + protocol: TCP + port: 8080 + targetPort: 8080 +# how to find the pods we are load balancing + selector: + app: demo-quarkus + type: LoadBalancer #ClusterIP From 988832f8ee4dce7664fa032a08c8df2701d4c8b9 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 22 Nov 2021 05:15:27 +0000 Subject: [PATCH 04/72] .. --- charts/helm/templates/configmap.yaml | 6 +- charts/quarkus-app/main.tf | 47 ------- charts/quarkus-app/templates/deployment.yaml | 9 +- charts/quarkus-app/templates/secrets.yaml | 14 --- terraform-helm-release/charts/helm/Chart.yaml | 9 ++ .../charts/helm/templates/configmap.yaml | 98 +++++++++++++++ .../helm/templates/grafana-deployment.yaml | 43 +++++++ .../charts/helm/templates/ingress.yaml | 46 +++++++ .../jaeger-all-in-one-deployment.yaml | 55 ++++++++ .../helm/templates/otel-agent-deployment.yaml | 98 +++++++++++++++ .../templates/otel-collector-deployment.yaml | 83 ++++++++++++ .../helm/templates/prometheus-deployment.yaml | 55 ++++++++ .../templates/victoriametrics-deployment.yaml | 77 ++++++++++++ .../helm/templates/vmagent-deployment.yaml | 53 ++++++++ .../zipkin-all-in-one-deployment.yaml | 45 +++++++ .../charts/helm/values.yaml | 26 ++++ .../charts/quarkus-app/Chart.yaml | 24 ++++ .../quarkus-app/templates/deployment.yaml | 118 ++++++++++++++++++ .../charts/quarkus-app/templates/ingress.yaml | 20 +++ .../templates/postgres-deployment.yaml | 79 ++++++++++++ .../templates/postgres-service.yaml | 15 +++ .../charts/quarkus-app/templates/service.yaml | 17 +++ terraform-helm-release/terraform-aks | 1 + 23 files changed, 969 insertions(+), 69 deletions(-) delete mode 100644 charts/quarkus-app/main.tf delete mode 100644 charts/quarkus-app/templates/secrets.yaml create mode 100644 terraform-helm-release/charts/helm/Chart.yaml create mode 100644 terraform-helm-release/charts/helm/templates/configmap.yaml create mode 100644 terraform-helm-release/charts/helm/templates/grafana-deployment.yaml create mode 100644 terraform-helm-release/charts/helm/templates/ingress.yaml create mode 100644 terraform-helm-release/charts/helm/templates/jaeger-all-in-one-deployment.yaml create mode 100644 terraform-helm-release/charts/helm/templates/otel-agent-deployment.yaml create mode 100644 terraform-helm-release/charts/helm/templates/otel-collector-deployment.yaml create mode 100644 terraform-helm-release/charts/helm/templates/prometheus-deployment.yaml create mode 100644 terraform-helm-release/charts/helm/templates/victoriametrics-deployment.yaml create mode 100644 terraform-helm-release/charts/helm/templates/vmagent-deployment.yaml create mode 100644 terraform-helm-release/charts/helm/templates/zipkin-all-in-one-deployment.yaml create mode 100644 terraform-helm-release/charts/helm/values.yaml create mode 100644 terraform-helm-release/charts/quarkus-app/Chart.yaml create mode 100644 terraform-helm-release/charts/quarkus-app/templates/deployment.yaml create mode 100644 terraform-helm-release/charts/quarkus-app/templates/ingress.yaml create mode 100644 terraform-helm-release/charts/quarkus-app/templates/postgres-deployment.yaml create mode 100644 terraform-helm-release/charts/quarkus-app/templates/postgres-service.yaml create mode 100644 terraform-helm-release/charts/quarkus-app/templates/service.yaml create mode 160000 terraform-helm-release/terraform-aks diff --git a/charts/helm/templates/configmap.yaml b/charts/helm/templates/configmap.yaml index 87ed63d2..ddd9c28f 100644 --- a/charts/helm/templates/configmap.yaml +++ b/charts/helm/templates/configmap.yaml @@ -14,7 +14,7 @@ data: exporters: otlp: - endpoint: "otel-collector.default.svc.cluster.local:4317" + endpoint: otel-collector:4317 #"otel-collector.default.svc.cluster.local:4317" insecure: true service: @@ -53,7 +53,7 @@ data: endpoint: "http://zipkin-all-in-one.default.svc.cluster.local:9411/api/v2/spans" format: proto jaeger: - endpoint: jaeger-all-in-one.default.svc.cluster.local:14250 + endpoint: jaeger-all-in-one:14250 #jaeger-all-in-one.default.svc.cluster.local:14250 insecure: true prometheus: endpoint: "0.0.0.0:8889" @@ -95,4 +95,4 @@ data: scrape_interval: 10s metrics_path: '{{ .Values.application.metrics.url }}' static_configs: - - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] \ No newline at end of file + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] diff --git a/charts/quarkus-app/main.tf b/charts/quarkus-app/main.tf deleted file mode 100644 index 6b44c997..00000000 --- a/charts/quarkus-app/main.tf +++ /dev/null @@ -1,47 +0,0 @@ -provider "helm" { - kubernetes { - config_path = "/root/.kube/config" - } -} - -provider "kubernetes" { - config_path = "/root/.kube/config" -} - - -resource "kubernetes_namespace" "test-namespace" { - metadata { - name = "test" - } -} - -resource "helm_release" "otel" { - name = "otel" - namespace = "test" - - - #repository = "https://charts.bitnami.com/bitnami" - chart = "/root/monitoring-kube-metrics-prometheus-grafana-terraform/otel" - - set { - name = "service.type" - value = "LoadBalancer" - } -} - -resource "helm_release" "quarkas-demo" { - name = "quarkas-demo" - namespace = "test" - - - #repository = "https://charts.bitnami.com/bitnami" - chart = "/root/monitoring-kube-metrics-prometheus-grafana-terraform/quarkas-demo" - - set { - name = "service.type" - value = "LoadBalancer" - } -} - - - diff --git a/charts/quarkus-app/templates/deployment.yaml b/charts/quarkus-app/templates/deployment.yaml index 74e79e8f..ab721835 100644 --- a/charts/quarkus-app/templates/deployment.yaml +++ b/charts/quarkus-app/templates/deployment.yaml @@ -24,15 +24,13 @@ spec: containers: - name: demo-quarkus # where should the image come from - image: 'acrimage101.azurecr.io/acrimage101/demo-quarkus:latest' + image: 'dockerimages1508/quarkas-repo:v1' #command: ["java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes="service.name=quarkus-demo"] #command: ["/deployments/run-java.sh"] # always perform pull when creating pod imagePullPolicy: Always #env Secrets to pull image from regidtry - #envFrom: - #- secretRef: - # name: credentials + # command: ["/deployments/run-java.sh", "&&", "java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes='service.name=quarkus-demo'"] # env vars so we can connect to DB env: @@ -45,9 +43,10 @@ spec: - name: QUARKUS.OPENTELEMETRY.ENABLED value: "true" - name: QUARKUS.OPENTELEMETRY.TRACER.EXPORTER.OTLP.ENDPOINT - value: http://otel-collector:4317 + value: http://otel-agent:4317 - name: QUARKUS.APPLICATION.NAME value: demo-quarkus + # live & ready probes, using our healthcheck endpoints livenessProbe: failureThreshold: 5 diff --git a/charts/quarkus-app/templates/secrets.yaml b/charts/quarkus-app/templates/secrets.yaml deleted file mode 100644 index 374e9ce8..00000000 --- a/charts/quarkus-app/templates/secrets.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: credentials - #labels: - # app: app - # chart: '{{ .Chart.Name }}-{{ .Chart.Version }}' - # release: '{{ .Release.Name }}' - # heritage: '{{ .Release.Service }}' -type: Opaque -data: - server: acrimage101.azurecr.io - username: acrimage101 - password: vEKxjkTwSjsjcA8L6i=haKZF1ii14BiT diff --git a/terraform-helm-release/charts/helm/Chart.yaml b/terraform-helm-release/charts/helm/Chart.yaml new file mode 100644 index 00000000..9f02c0a0 --- /dev/null +++ b/terraform-helm-release/charts/helm/Chart.yaml @@ -0,0 +1,9 @@ +apiVersion: v3 +name: OpenTelemetry Helm template +version: 1.0.0 +description: Helm chart template for an OpenTelemetry Kubernetes deployment +appVersion: 1.0.0 +keywords: + - template +maintainers: + - name: devon4j Developer diff --git a/terraform-helm-release/charts/helm/templates/configmap.yaml b/terraform-helm-release/charts/helm/templates/configmap.yaml new file mode 100644 index 00000000..87ed63d2 --- /dev/null +++ b/terraform-helm-release/charts/helm/templates/configmap.yaml @@ -0,0 +1,98 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-agent +data: + otel-agent-config: | + receivers: + otlp: + protocols: + grpc: + + processors: + batch: + + exporters: + otlp: + endpoint: "otel-collector.default.svc.cluster.local:4317" + insecure: true + + service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [otlp] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [otlp] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector +data: + otel-collector-config: | + receivers: + otlp: + protocols: + grpc: + http: + cors_allowed_origins: + - http://* + - https://* + + processors: + batch: + + exporters: + logging: + zipkin: + endpoint: "http://zipkin-all-in-one.default.svc.cluster.local:9411/api/v2/spans" + format: proto + jaeger: + endpoint: jaeger-all-in-one.default.svc.cluster.local:14250 + insecure: true + prometheus: + endpoint: "0.0.0.0:8889" + + service: + pipelines: + traces: + receivers: [otlp] + exporters: [zipkin, jaeger] + processors: [batch] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [prometheus] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vmetrics-config +data: + vMetrics.yaml: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: prometheus +data: + prometheus-config: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] \ No newline at end of file diff --git a/terraform-helm-release/charts/helm/templates/grafana-deployment.yaml b/terraform-helm-release/charts/helm/templates/grafana-deployment.yaml new file mode 100644 index 00000000..a1b2db33 --- /dev/null +++ b/terraform-helm-release/charts/helm/templates/grafana-deployment.yaml @@ -0,0 +1,43 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: grafana + name: grafana +spec: + replicas: 1 + selector: + matchLabels: + component: grafana + template: + metadata: + labels: + component: grafana + spec: + containers: + - image: grafana/grafana + name: grafana + ports: + - containerPort: 3000 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: grafana + name: grafana +spec: + ports: + - name: "3000" + port: 3000 + protocol: TCP + targetPort: 3000 + selector: + component: grafana + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/terraform-helm-release/charts/helm/templates/ingress.yaml b/terraform-helm-release/charts/helm/templates/ingress.yaml new file mode 100644 index 00000000..efa4bca9 --- /dev/null +++ b/terraform-helm-release/charts/helm/templates/ingress.yaml @@ -0,0 +1,46 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress +spec: + rules: + - host: {{ .Values.ingress.application.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: {{ .Values.application.service.name }} + port: + number: {{ .Values.ingress.application.port }} + - host: {{ .Values.ingress.jaeger.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: jaeger-all-in-one + port: + number: {{ .Values.ingress.jaeger.port }} + - host: {{ .Values.ingress.zipkin.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: zipkin-all-in-one + port: + number: {{ .Values.ingress.zipkin.port }} + - host: {{ .Values.ingress.grafana.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: grafana + port: + number: {{ .Values.ingress.grafana.port }} \ No newline at end of file diff --git a/terraform-helm-release/charts/helm/templates/jaeger-all-in-one-deployment.yaml b/terraform-helm-release/charts/helm/templates/jaeger-all-in-one-deployment.yaml new file mode 100644 index 00000000..0c37f108 --- /dev/null +++ b/terraform-helm-release/charts/helm/templates/jaeger-all-in-one-deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + replicas: 1 + selector: + matchLabels: + component: jaeger-all-in-one + strategy: {} + template: + metadata: + labels: + component: jaeger-all-in-one + spec: + containers: + - image: jaegertracing/all-in-one:latest + name: jaeger-all-in-one + ports: + - containerPort: 16686 + - containerPort: 14268 + - containerPort: 14250 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + ports: + - name: "16686" + port: 16686 + protocol: TCP + targetPort: 16686 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + selector: + component: jaeger-all-in-one + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} + diff --git a/terraform-helm-release/charts/helm/templates/otel-agent-deployment.yaml b/terraform-helm-release/charts/helm/templates/otel-agent-deployment.yaml new file mode 100644 index 00000000..bf2c591c --- /dev/null +++ b/terraform-helm-release/charts/helm/templates/otel-agent-deployment.yaml @@ -0,0 +1,98 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + replicas: 1 + selector: + matchLabels: + component: otel-agent + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-agent + spec: + containers: + - args: + - /otelcol + - --config=/conf/otel-agent-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-agent + ports: + - containerPort: 8888 + - containerPort: 14250 + - containerPort: 14268 + - containerPort: 55678 + - containerPort: 4317 + - containerPort: 9411 + - containerPort: 1777 + - containerPort: 13133 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-agent-config-volume + volumes: + - name: otel-agent-config-volume + configMap: + name: otel-agent + items: + - key: otel-agent-config + path: otel-agent-config.yaml + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + ports: + - name: "8887" + port: 8887 + + targetPort: 8888 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "55678" + port: 55678 + protocol: TCP + targetPort: 55678 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "9411" + port: 9411 + protocol: TCP + targetPort: 9411 + - name: "1777" + port: 1777 + protocol: TCP + targetPort: 1777 + - name: "55679" + port: 55679 + protocol: TCP + targetPort: 55679 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + selector: + component: otel-agent + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/terraform-helm-release/charts/helm/templates/otel-collector-deployment.yaml b/terraform-helm-release/charts/helm/templates/otel-collector-deployment.yaml new file mode 100644 index 00000000..57669258 --- /dev/null +++ b/terraform-helm-release/charts/helm/templates/otel-collector-deployment.yaml @@ -0,0 +1,83 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + replicas: 1 + selector: + matchLabels: + component: otel-collector + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-collector + spec: + containers: + - args: + - --config=/conf/otel-collector-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-collector + ports: + - containerPort: 1888 + - containerPort: 8888 + - containerPort: 8889 + - containerPort: 13133 + - containerPort: 4317 + - containerPort: 55679 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-collector-config-volume + restartPolicy: Always + volumes: + - name: otel-collector-config-volume + configMap: + name: otel-collector + items: + - key: otel-collector-config + path: otel-collector-config.yaml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + ports: + - name: "1888" + port: 1888 + protocol: TCP + targetPort: 1888 + - name: "8888" + port: 8888 + protocol: TCP + targetPort: 8888 + - name: "8889" + port: 8889 + protocol: TCP + targetPort: 8889 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "55670" + port: 55670 + protocol: TCP + targetPort: 55679 + selector: + component: otel-collector + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/terraform-helm-release/charts/helm/templates/prometheus-deployment.yaml b/terraform-helm-release/charts/helm/templates/prometheus-deployment.yaml new file mode 100644 index 00000000..ab3ef30d --- /dev/null +++ b/terraform-helm-release/charts/helm/templates/prometheus-deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: prometheus + name: prometheus +spec: + replicas: 1 + selector: + matchLabels: + component: prometheus + strategy: + type: Recreate + template: + metadata: + labels: + component: prometheus + spec: + containers: + - image: prom/prometheus:latest + name: prometheus + ports: + - containerPort: 9090 + resources: {} + volumeMounts: + - mountPath: /etc/prometheus/ + name: prometheus-config-volume + restartPolicy: Always + volumes: + - name: prometheus-config-volume + configMap: + name: prometheus + items: + - key: prometheus-config + path: prometheus.yml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: prometheus + name: prometheus +spec: + ports: + - name: "9090" + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + component: prometheus + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/terraform-helm-release/charts/helm/templates/victoriametrics-deployment.yaml b/terraform-helm-release/charts/helm/templates/victoriametrics-deployment.yaml new file mode 100644 index 00000000..271ae96d --- /dev/null +++ b/terraform-helm-release/charts/helm/templates/victoriametrics-deployment.yaml @@ -0,0 +1,77 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: victoriametrics + name: victoriametrics +spec: + replicas: 1 + selector: + matchLabels: + component: victoriametrics + strategy: + type: Recreate + template: + metadata: + labels: + component: victoriametrics + spec: + containers: + - args: + - --promscrape.config=/conf/vMetrics.yaml + image: victoriametrics/victoria-metrics + name: victoriametrics + ports: + - containerPort: 8428 + - containerPort: 8089 + - containerPort: 8089 + protocol: UDP + - containerPort: 2003 + - containerPort: 2003 + protocol: UDP + - containerPort: 4242 + resources: {} + volumeMounts: + - mountPath: /conf + name: vmetrics-config + restartPolicy: Always + volumes: + - configMap: + items: + - key: vMetrics.yaml + path: vMetrics.yaml + name: vmetrics-config + name: vmetrics-config + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: victoriametrics + name: victoriametrics +spec: + ports: + - name: "8428" + port: 8428 + targetPort: 8428 + - name: "8089" + port: 8089 + targetPort: 8089 + - name: 8089-udp + port: 8089 + protocol: UDP + targetPort: 8089 + - name: "2003" + port: 2003 + targetPort: 2003 + - name: 2003-udp + port: 2003 + protocol: UDP + targetPort: 2003 + - name: "4242" + port: 4242 + targetPort: 4242 + selector: + component: victoriametrics diff --git a/terraform-helm-release/charts/helm/templates/vmagent-deployment.yaml b/terraform-helm-release/charts/helm/templates/vmagent-deployment.yaml new file mode 100644 index 00000000..7560d9c1 --- /dev/null +++ b/terraform-helm-release/charts/helm/templates/vmagent-deployment.yaml @@ -0,0 +1,53 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: vmagent + name: vmagent +spec: + replicas: 1 + selector: + matchLabels: + component: vmagent + strategy: + type: Recreate + template: + metadata: + labels: + component: vmagent + spec: + containers: + - args: + - --promscrape.config=/conf/vMetrics.yaml + - --remoteWrite.url=http://victoriametrics:8428/api/v1/write + image: victoriametrics/vmagent + name: vmagent + ports: + - containerPort: 8429 + volumeMounts: + - mountPath: /conf + name: vmetrics-config + restartPolicy: Always + volumes: + - configMap: + items: + - key: vMetrics.yaml + path: vMetrics.yaml + name: vmetrics-config + name: vmetrics-config + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: vmagent + name: vmagent +spec: + ports: + - name: "8429" + port: 8429 + targetPort: 8429 + selector: + component: vmagent diff --git a/terraform-helm-release/charts/helm/templates/zipkin-all-in-one-deployment.yaml b/terraform-helm-release/charts/helm/templates/zipkin-all-in-one-deployment.yaml new file mode 100644 index 00000000..9bd061a2 --- /dev/null +++ b/terraform-helm-release/charts/helm/templates/zipkin-all-in-one-deployment.yaml @@ -0,0 +1,45 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: zipkin-all-in-one + labels: + component: zipkin-all-in-one +spec: + selector: + matchLabels: + component: zipkin-all-in-one + minReadySeconds: 5 + progressDeadlineSeconds: 120 + replicas: 1 + template: + metadata: + labels: + component: zipkin-all-in-one + spec: + containers: + - name: zipkin-all-in-one + image: openzipkin/zipkin:latest + ports: + - containerPort: 9411 + +--- + +apiVersion: v1 +kind: Service +metadata: + name: zipkin-all-in-one + labels: + component: zipkin-all-in-one +spec: + selector: + component: zipkin-all-in-one + ports: + - name: zipkin + protocol: TCP + port: 9411 + targetPort: 9411 + selector: + component: jaeger-all-in-one + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/terraform-helm-release/charts/helm/values.yaml b/terraform-helm-release/charts/helm/values.yaml new file mode 100644 index 00000000..86c885a8 --- /dev/null +++ b/terraform-helm-release/charts/helm/values.yaml @@ -0,0 +1,26 @@ +# Application configuration +application: + # Configuration to get the metrics information + metrics: + jobname: "demo-quarkus" + url: "/q/metrics" + + # Configuration of the application service + service: + name: "demo-quarkus" + port: 8080 + +# Ingress configuration +ingress: + application: + host: "application.localhost" + port: 8080 + jaeger: + host: "jaeger.localhost" + port: 16686 + zipkin: + host: "zipkin.localhost" + port: 9411 + grafana: + host: "grafana.localhost" + port: 3000 diff --git a/terraform-helm-release/charts/quarkus-app/Chart.yaml b/terraform-helm-release/charts/quarkus-app/Chart.yaml new file mode 100644 index 00000000..9cc1ed5c --- /dev/null +++ b/terraform-helm-release/charts/quarkus-app/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: helm-app +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: v1 #"1.16.0" diff --git a/terraform-helm-release/charts/quarkus-app/templates/deployment.yaml b/terraform-helm-release/charts/quarkus-app/templates/deployment.yaml new file mode 100644 index 00000000..ab721835 --- /dev/null +++ b/terraform-helm-release/charts/quarkus-app/templates/deployment.yaml @@ -0,0 +1,118 @@ +apiVersion: apps/v1 +kind: Deployment +# deployment v1 +metadata: + # metadata labels - tags under which this resources can be found in k8s api + labels: + app: demo-quarkus + app.kubernetes.io/name: demo-quarkus + name: demo-quarkus + namespace: default +spec: + # scale to 2 instances + replicas: 2 + selector: + #how are the pods linked together + matchLabels: + app: demo-quarkus + template: + metadata: + labels: + app: demo-quarkus + spec: + # pod spec, we want a single container in our pods + containers: + - name: demo-quarkus + # where should the image come from + image: 'dockerimages1508/quarkas-repo:v1' + #command: ["java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes="service.name=quarkus-demo"] + #command: ["/deployments/run-java.sh"] + # always perform pull when creating pod + imagePullPolicy: Always + #env Secrets to pull image from regidtry + + # command: ["/deployments/run-java.sh", "&&", "java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes='service.name=quarkus-demo'"] + # env vars so we can connect to DB + env: + - name: QUARKUS_DATASOURCE_JDBC_URL + value: jdbc:postgresql://postgresql:5432/demo + - name: QUARKUS_DATASOURCE_USERNAME + value: demo + - name: QUARKUS_DATASOURCE_PASSWORD + value: demo + - name: QUARKUS.OPENTELEMETRY.ENABLED + value: "true" + - name: QUARKUS.OPENTELEMETRY.TRACER.EXPORTER.OTLP.ENDPOINT + value: http://otel-agent:4317 + - name: QUARKUS.APPLICATION.NAME + value: demo-quarkus + + # live & ready probes, using our healthcheck endpoints + livenessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/live + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + ports: + - containerPort: 8080 + readinessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/ready + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + # we can define init containers, single run jobs that run before our main container does + # we use them to init database and check that its ready + initContainers: + - command: + - /bin/bash + - '-c' + - >- + psql -tc "SELECT 1 FROM pg_database WHERE datname = + 'demo'" | grep -q 1 | psql -c "CREATE USER + demo WITH ENCRYPTED PASSWORD 'demo';" -c + "CREATE DATABASE demo;" -c "GRANT ALL PRIVILEGES + ON DATABASE demo TO demo;" + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: null + - name: PGUSER + value: postgres + - name: PGPASSWORD + value: postgres + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: create-db + - command: + - /bin/bash + - '-c' + - until pg_isready; do echo waiting for database; sleep 2; done; + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: demo + - name: PGUSER + value: demo + - name: PGPASSWORD + value: demo + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: check-db diff --git a/terraform-helm-release/charts/quarkus-app/templates/ingress.yaml b/terraform-helm-release/charts/quarkus-app/templates/ingress.yaml new file mode 100644 index 00000000..8d3a9a1a --- /dev/null +++ b/terraform-helm-release/charts/quarkus-app/templates/ingress.yaml @@ -0,0 +1,20 @@ +# a simple ingress for our service +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: demo-quarkus + annotations: + ingress.kubernetes.io/ssl-redirect: "false" +spec: + rules: + - http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: demo-quarkus + port: + number: 8080 + # #this will work if you have dnsmasq(tkit env guide) + host: demo-quarkus.localhost diff --git a/terraform-helm-release/charts/quarkus-app/templates/postgres-deployment.yaml b/terraform-helm-release/charts/quarkus-app/templates/postgres-deployment.yaml new file mode 100644 index 00000000..2b2b9f02 --- /dev/null +++ b/terraform-helm-release/charts/quarkus-app/templates/postgres-deployment.yaml @@ -0,0 +1,79 @@ +apiVersion: apps/v1 +kind: Deployment +# deployment v1 +metadata: + name: postgresql +spec: + replicas: 1 + selector: + #how are the pods linked together + matchLabels: + app: postgresql + template: + metadata: + labels: + app: postgresql + spec: + containers: + - name: postgresql + image: 'docker.io/bitnami/postgresql:12.2.0' + ports: + - name: tcp-postgresql + containerPort: 5432 + protocol: TCP + env: + - name: POSTGRESQL_PORT_NUMBER + value: '5432' + - name: POSTGRESQL_VOLUME_DIR + value: /bitnami/postgresql + - name: PGDATA + value: /bitnami/postgresql/data + - name: POSTGRES_USER + value: postgres + #dont even try this in production + - name: POSTGRES_PASSWORD + value: postgres + - name: POSTGRES_DB + value: kubernetes + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + - name: POSTGRESQL_ENABLE_LDAP + value: 'no' + resources: + requests: + cpu: 250m + memory: 256Mi + livenessProbe: + exec: + command: + - /bin/sh + - '-c' + - >- + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + initialDelaySeconds: 30 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + readinessProbe: + exec: + command: + - /bin/sh + - '-c' + - '-e' + - > + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + + [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f + /bitnami/postgresql/.initialized ] + initialDelaySeconds: 5 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + imagePullPolicy: IfNotPresent +# we run database without any persistent data volume - not a good idea, but sufficient for demo diff --git a/terraform-helm-release/charts/quarkus-app/templates/postgres-service.yaml b/terraform-helm-release/charts/quarkus-app/templates/postgres-service.yaml new file mode 100644 index 00000000..6d19ee33 --- /dev/null +++ b/terraform-helm-release/charts/quarkus-app/templates/postgres-service.yaml @@ -0,0 +1,15 @@ +kind: Service +apiVersion: v1 +metadata: + name: postgresql + labels: + app: postgresql +spec: + ports: + - name: tcp-postgresql + protocol: TCP + port: 5432 + targetPort: tcp-postgresql + selector: + app: postgresql + type: LoadBalancer #ClusterIP diff --git a/terraform-helm-release/charts/quarkus-app/templates/service.yaml b/terraform-helm-release/charts/quarkus-app/templates/service.yaml new file mode 100644 index 00000000..af2219f0 --- /dev/null +++ b/terraform-helm-release/charts/quarkus-app/templates/service.yaml @@ -0,0 +1,17 @@ +kind: Service +apiVersion: v1 +metadata: + name: demo-quarkus + labels: + app: demo-quarkus +spec: + # we expose port 8080 which load balances traffic to the pods and their internal port 8080 + ports: + - name: http-port + protocol: TCP + port: 8080 + targetPort: 8080 +# how to find the pods we are load balancing + selector: + app: demo-quarkus + type: LoadBalancer #ClusterIP diff --git a/terraform-helm-release/terraform-aks b/terraform-helm-release/terraform-aks new file mode 160000 index 00000000..adcf9015 --- /dev/null +++ b/terraform-helm-release/terraform-aks @@ -0,0 +1 @@ +Subproject commit adcf9015102a85f1e86406e2edb5546cfe2491a9 From 395f2ea4cdeb0428e270c53ed7f1011aacfdfff8 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 22 Nov 2021 05:20:10 +0000 Subject: [PATCH 05/72] updated --- charts/helm/Chart.yaml | 9 -- charts/helm/templates/configmap.yaml | 98 --------------- charts/helm/templates/grafana-deployment.yaml | 43 ------- charts/helm/templates/ingress.yaml | 46 ------- .../jaeger-all-in-one-deployment.yaml | 55 -------- .../helm/templates/otel-agent-deployment.yaml | 98 --------------- .../templates/otel-collector-deployment.yaml | 83 ------------ .../helm/templates/prometheus-deployment.yaml | 55 -------- .../templates/victoriametrics-deployment.yaml | 77 ------------ charts/helm/templates/vmagent-deployment.yaml | 53 -------- .../zipkin-all-in-one-deployment.yaml | 45 ------- charts/helm/values.yaml | 26 ---- charts/quarkus-app/Chart.yaml | 24 ---- charts/quarkus-app/templates/deployment.yaml | 118 ----------------- charts/quarkus-app/templates/ingress.yaml | 20 --- .../templates/postgres-deployment.yaml | 79 ------------ .../templates/postgres-service.yaml | 15 --- charts/quarkus-app/templates/service.yaml | 17 --- duplicate-chart/Chart.yaml | 24 ---- duplicate-chart/main.tf | 47 ------- duplicate-chart/templates/deployment.yaml | 119 ------------------ duplicate-chart/templates/ingress.yaml | 20 --- .../templates/postgres-deployment.yaml | 79 ------------ .../templates/postgres-service.yaml | 15 --- duplicate-chart/templates/secrets.yaml | 14 --- duplicate-chart/templates/service.yaml | 17 --- helm-charts | 1 - helm-otel/Chart.yaml | 8 -- helm-otel/templates/configmap.yaml | 118 ----------------- helm-otel/templates/demo-networkpolicy.yaml | 48 ------- .../jaeger-all-in-one-deployment.yaml | 41 ------ .../templates/jaeger-all-in-one-service.yaml | 30 ----- .../templates/otel-agent-deployment.yaml | 58 --------- helm-otel/templates/otel-agent-service.yaml | 54 -------- .../templates/otel-collector-deployment.yaml | 56 --------- .../templates/otel-collector-service.yaml | 42 ------- .../templates/prometheus-deployment.yaml | 49 -------- helm-otel/templates/prometheus-service.yaml | 22 ---- .../reference-project-deployment.yaml | 48 ------- .../templates/reference-project-service.yaml | 22 ---- .../templates/victoriametrics-deployment.yaml | 57 --------- .../templates/victoriametrics-service.yaml | 37 ------ helm-otel/templates/vmagent-deployment.yaml | 51 -------- helm-otel/templates/vmagent-service.yaml | 20 --- .../zipkin-all-in-one-deployment.yaml | 39 ------ .../templates/zipkin-all-in-one-service.yaml | 22 ---- helm-otel/values.yaml | 24 ---- otel-charts/Chart.yaml | 24 ---- otel-charts/helm/Chart.yaml | 9 -- otel-charts/helm/templates/configmap.yaml | 98 --------------- .../helm/templates/grafana-deployment.yaml | 43 ------- otel-charts/helm/templates/ingress.yaml | 46 ------- .../jaeger-all-in-one-deployment.yaml | 55 -------- .../helm/templates/otel-agent-deployment.yaml | 98 --------------- .../templates/otel-collector-deployment.yaml | 83 ------------ .../helm/templates/prometheus-deployment.yaml | 55 -------- .../templates/victoriametrics-deployment.yaml | 77 ------------ .../helm/templates/vmagent-deployment.yaml | 53 -------- .../zipkin-all-in-one-deployment.yaml | 45 ------- otel-charts/helm/values.yaml | 26 ---- otel-charts/templates/configmap.yaml | 98 --------------- otel-charts/templates/demo-networkpolicy.yaml | 14 --- otel-charts/templates/ingress.yaml | 61 --------- .../jaeger-all-in-one-deployment.yaml | 41 ------ .../templates/jaeger-all-in-one-service.yaml | 30 ----- .../templates/otel-agent-deployment.yaml | 58 --------- otel-charts/templates/otel-agent-service.yaml | 54 -------- .../templates/otel-collector-deployment.yaml | 56 --------- .../templates/otel-collector-service.yaml | 42 ------- .../templates/prometheus-deployment.yaml | 39 ------ otel-charts/templates/prometheus-service.yaml | 22 ---- .../zipkin-all-in-one-deployment.yaml | 39 ------ .../templates/zipkin-all-in-one-service.yaml | 22 ---- otel-charts/terraform-helm-deploy | 1 - otel-charts/values.yaml | 82 ------------ 75 files changed, 3514 deletions(-) delete mode 100644 charts/helm/Chart.yaml delete mode 100644 charts/helm/templates/configmap.yaml delete mode 100644 charts/helm/templates/grafana-deployment.yaml delete mode 100644 charts/helm/templates/ingress.yaml delete mode 100644 charts/helm/templates/jaeger-all-in-one-deployment.yaml delete mode 100644 charts/helm/templates/otel-agent-deployment.yaml delete mode 100644 charts/helm/templates/otel-collector-deployment.yaml delete mode 100644 charts/helm/templates/prometheus-deployment.yaml delete mode 100644 charts/helm/templates/victoriametrics-deployment.yaml delete mode 100644 charts/helm/templates/vmagent-deployment.yaml delete mode 100644 charts/helm/templates/zipkin-all-in-one-deployment.yaml delete mode 100644 charts/helm/values.yaml delete mode 100644 charts/quarkus-app/Chart.yaml delete mode 100644 charts/quarkus-app/templates/deployment.yaml delete mode 100644 charts/quarkus-app/templates/ingress.yaml delete mode 100644 charts/quarkus-app/templates/postgres-deployment.yaml delete mode 100644 charts/quarkus-app/templates/postgres-service.yaml delete mode 100644 charts/quarkus-app/templates/service.yaml delete mode 100644 duplicate-chart/Chart.yaml delete mode 100644 duplicate-chart/main.tf delete mode 100644 duplicate-chart/templates/deployment.yaml delete mode 100644 duplicate-chart/templates/ingress.yaml delete mode 100644 duplicate-chart/templates/postgres-deployment.yaml delete mode 100644 duplicate-chart/templates/postgres-service.yaml delete mode 100644 duplicate-chart/templates/secrets.yaml delete mode 100644 duplicate-chart/templates/service.yaml delete mode 160000 helm-charts delete mode 100644 helm-otel/Chart.yaml delete mode 100644 helm-otel/templates/configmap.yaml delete mode 100644 helm-otel/templates/demo-networkpolicy.yaml delete mode 100644 helm-otel/templates/jaeger-all-in-one-deployment.yaml delete mode 100644 helm-otel/templates/jaeger-all-in-one-service.yaml delete mode 100644 helm-otel/templates/otel-agent-deployment.yaml delete mode 100644 helm-otel/templates/otel-agent-service.yaml delete mode 100644 helm-otel/templates/otel-collector-deployment.yaml delete mode 100644 helm-otel/templates/otel-collector-service.yaml delete mode 100644 helm-otel/templates/prometheus-deployment.yaml delete mode 100644 helm-otel/templates/prometheus-service.yaml delete mode 100644 helm-otel/templates/reference-project-deployment.yaml delete mode 100644 helm-otel/templates/reference-project-service.yaml delete mode 100644 helm-otel/templates/victoriametrics-deployment.yaml delete mode 100644 helm-otel/templates/victoriametrics-service.yaml delete mode 100644 helm-otel/templates/vmagent-deployment.yaml delete mode 100644 helm-otel/templates/vmagent-service.yaml delete mode 100644 helm-otel/templates/zipkin-all-in-one-deployment.yaml delete mode 100644 helm-otel/templates/zipkin-all-in-one-service.yaml delete mode 100644 helm-otel/values.yaml delete mode 100644 otel-charts/Chart.yaml delete mode 100644 otel-charts/helm/Chart.yaml delete mode 100644 otel-charts/helm/templates/configmap.yaml delete mode 100644 otel-charts/helm/templates/grafana-deployment.yaml delete mode 100644 otel-charts/helm/templates/ingress.yaml delete mode 100644 otel-charts/helm/templates/jaeger-all-in-one-deployment.yaml delete mode 100644 otel-charts/helm/templates/otel-agent-deployment.yaml delete mode 100644 otel-charts/helm/templates/otel-collector-deployment.yaml delete mode 100644 otel-charts/helm/templates/prometheus-deployment.yaml delete mode 100644 otel-charts/helm/templates/victoriametrics-deployment.yaml delete mode 100644 otel-charts/helm/templates/vmagent-deployment.yaml delete mode 100644 otel-charts/helm/templates/zipkin-all-in-one-deployment.yaml delete mode 100644 otel-charts/helm/values.yaml delete mode 100644 otel-charts/templates/configmap.yaml delete mode 100644 otel-charts/templates/demo-networkpolicy.yaml delete mode 100644 otel-charts/templates/ingress.yaml delete mode 100644 otel-charts/templates/jaeger-all-in-one-deployment.yaml delete mode 100644 otel-charts/templates/jaeger-all-in-one-service.yaml delete mode 100644 otel-charts/templates/otel-agent-deployment.yaml delete mode 100644 otel-charts/templates/otel-agent-service.yaml delete mode 100644 otel-charts/templates/otel-collector-deployment.yaml delete mode 100644 otel-charts/templates/otel-collector-service.yaml delete mode 100644 otel-charts/templates/prometheus-deployment.yaml delete mode 100644 otel-charts/templates/prometheus-service.yaml delete mode 100644 otel-charts/templates/zipkin-all-in-one-deployment.yaml delete mode 100644 otel-charts/templates/zipkin-all-in-one-service.yaml delete mode 160000 otel-charts/terraform-helm-deploy delete mode 100644 otel-charts/values.yaml diff --git a/charts/helm/Chart.yaml b/charts/helm/Chart.yaml deleted file mode 100644 index 9f02c0a0..00000000 --- a/charts/helm/Chart.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v3 -name: OpenTelemetry Helm template -version: 1.0.0 -description: Helm chart template for an OpenTelemetry Kubernetes deployment -appVersion: 1.0.0 -keywords: - - template -maintainers: - - name: devon4j Developer diff --git a/charts/helm/templates/configmap.yaml b/charts/helm/templates/configmap.yaml deleted file mode 100644 index ddd9c28f..00000000 --- a/charts/helm/templates/configmap.yaml +++ /dev/null @@ -1,98 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: otel-agent -data: - otel-agent-config: | - receivers: - otlp: - protocols: - grpc: - - processors: - batch: - - exporters: - otlp: - endpoint: otel-collector:4317 #"otel-collector.default.svc.cluster.local:4317" - insecure: true - - service: - pipelines: - traces: - receivers: [otlp] - processors: [batch] - exporters: [otlp] - metrics: - receivers: [otlp] - processors: [batch] - exporters: [otlp] ---- - -apiVersion: v1 -kind: ConfigMap -metadata: - name: otel-collector -data: - otel-collector-config: | - receivers: - otlp: - protocols: - grpc: - http: - cors_allowed_origins: - - http://* - - https://* - - processors: - batch: - - exporters: - logging: - zipkin: - endpoint: "http://zipkin-all-in-one.default.svc.cluster.local:9411/api/v2/spans" - format: proto - jaeger: - endpoint: jaeger-all-in-one:14250 #jaeger-all-in-one.default.svc.cluster.local:14250 - insecure: true - prometheus: - endpoint: "0.0.0.0:8889" - - service: - pipelines: - traces: - receivers: [otlp] - exporters: [zipkin, jaeger] - processors: [batch] - metrics: - receivers: [otlp] - processors: [batch] - exporters: [prometheus] ---- - -apiVersion: v1 -kind: ConfigMap -metadata: - name: vmetrics-config -data: - vMetrics.yaml: | - scrape_configs: - - job_name: '{{ .Values.application.metrics.jobname }}' - scrape_interval: 10s - metrics_path: '{{ .Values.application.metrics.url }}' - static_configs: - - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] ---- - -apiVersion: v1 -kind: ConfigMap -metadata: - name: prometheus -data: - prometheus-config: | - scrape_configs: - - job_name: '{{ .Values.application.metrics.jobname }}' - scrape_interval: 10s - metrics_path: '{{ .Values.application.metrics.url }}' - static_configs: - - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] diff --git a/charts/helm/templates/grafana-deployment.yaml b/charts/helm/templates/grafana-deployment.yaml deleted file mode 100644 index a1b2db33..00000000 --- a/charts/helm/templates/grafana-deployment.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: grafana - name: grafana -spec: - replicas: 1 - selector: - matchLabels: - component: grafana - template: - metadata: - labels: - component: grafana - spec: - containers: - - image: grafana/grafana - name: grafana - ports: - - containerPort: 3000 - resources: {} - restartPolicy: Always - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: grafana - name: grafana -spec: - ports: - - name: "3000" - port: 3000 - protocol: TCP - targetPort: 3000 - selector: - component: grafana - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/charts/helm/templates/ingress.yaml b/charts/helm/templates/ingress.yaml deleted file mode 100644 index efa4bca9..00000000 --- a/charts/helm/templates/ingress.yaml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: ingress -spec: - rules: - - host: {{ .Values.ingress.application.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: {{ .Values.application.service.name }} - port: - number: {{ .Values.ingress.application.port }} - - host: {{ .Values.ingress.jaeger.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: jaeger-all-in-one - port: - number: {{ .Values.ingress.jaeger.port }} - - host: {{ .Values.ingress.zipkin.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: zipkin-all-in-one - port: - number: {{ .Values.ingress.zipkin.port }} - - host: {{ .Values.ingress.grafana.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: grafana - port: - number: {{ .Values.ingress.grafana.port }} \ No newline at end of file diff --git a/charts/helm/templates/jaeger-all-in-one-deployment.yaml b/charts/helm/templates/jaeger-all-in-one-deployment.yaml deleted file mode 100644 index 0c37f108..00000000 --- a/charts/helm/templates/jaeger-all-in-one-deployment.yaml +++ /dev/null @@ -1,55 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: jaeger-all-in-one - name: jaeger-all-in-one -spec: - replicas: 1 - selector: - matchLabels: - component: jaeger-all-in-one - strategy: {} - template: - metadata: - labels: - component: jaeger-all-in-one - spec: - containers: - - image: jaegertracing/all-in-one:latest - name: jaeger-all-in-one - ports: - - containerPort: 16686 - - containerPort: 14268 - - containerPort: 14250 - resources: {} - restartPolicy: Always - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: jaeger-all-in-one - name: jaeger-all-in-one -spec: - ports: - - name: "16686" - port: 16686 - protocol: TCP - targetPort: 16686 - - name: "14268" - port: 14268 - protocol: TCP - targetPort: 14268 - - name: "14250" - port: 14250 - protocol: TCP - targetPort: 14250 - selector: - component: jaeger-all-in-one - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} - diff --git a/charts/helm/templates/otel-agent-deployment.yaml b/charts/helm/templates/otel-agent-deployment.yaml deleted file mode 100644 index bf2c591c..00000000 --- a/charts/helm/templates/otel-agent-deployment.yaml +++ /dev/null @@ -1,98 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: otel-agent - name: otel-agent -spec: - replicas: 1 - selector: - matchLabels: - component: otel-agent - strategy: - type: Recreate - template: - metadata: - labels: - component: otel-agent - spec: - containers: - - args: - - /otelcol - - --config=/conf/otel-agent-config.yaml - - --log-level=DEBUG - image: otel/opentelemetry-collector:latest - name: otel-agent - ports: - - containerPort: 8888 - - containerPort: 14250 - - containerPort: 14268 - - containerPort: 55678 - - containerPort: 4317 - - containerPort: 9411 - - containerPort: 1777 - - containerPort: 13133 - resources: {} - volumeMounts: - - mountPath: /conf - name: otel-agent-config-volume - volumes: - - name: otel-agent-config-volume - configMap: - name: otel-agent - items: - - key: otel-agent-config - path: otel-agent-config.yaml - restartPolicy: Always - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: otel-agent - name: otel-agent -spec: - ports: - - name: "8887" - port: 8887 - - targetPort: 8888 - - name: "14250" - port: 14250 - protocol: TCP - targetPort: 14250 - - name: "14268" - port: 14268 - protocol: TCP - targetPort: 14268 - - name: "55678" - port: 55678 - protocol: TCP - targetPort: 55678 - - name: "4317" - port: 4317 - protocol: TCP - targetPort: 4317 - - name: "9411" - port: 9411 - protocol: TCP - targetPort: 9411 - - name: "1777" - port: 1777 - protocol: TCP - targetPort: 1777 - - name: "55679" - port: 55679 - protocol: TCP - targetPort: 55679 - - name: "13133" - port: 13133 - protocol: TCP - targetPort: 13133 - selector: - component: otel-agent - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/charts/helm/templates/otel-collector-deployment.yaml b/charts/helm/templates/otel-collector-deployment.yaml deleted file mode 100644 index 57669258..00000000 --- a/charts/helm/templates/otel-collector-deployment.yaml +++ /dev/null @@ -1,83 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: otel-collector - name: otel-collector -spec: - replicas: 1 - selector: - matchLabels: - component: otel-collector - strategy: - type: Recreate - template: - metadata: - labels: - component: otel-collector - spec: - containers: - - args: - - --config=/conf/otel-collector-config.yaml - - --log-level=DEBUG - image: otel/opentelemetry-collector:latest - name: otel-collector - ports: - - containerPort: 1888 - - containerPort: 8888 - - containerPort: 8889 - - containerPort: 13133 - - containerPort: 4317 - - containerPort: 55679 - resources: {} - volumeMounts: - - mountPath: /conf - name: otel-collector-config-volume - restartPolicy: Always - volumes: - - name: otel-collector-config-volume - configMap: - name: otel-collector - items: - - key: otel-collector-config - path: otel-collector-config.yaml - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: otel-collector - name: otel-collector -spec: - ports: - - name: "1888" - port: 1888 - protocol: TCP - targetPort: 1888 - - name: "8888" - port: 8888 - protocol: TCP - targetPort: 8888 - - name: "8889" - port: 8889 - protocol: TCP - targetPort: 8889 - - name: "13133" - port: 13133 - protocol: TCP - targetPort: 13133 - - name: "4317" - port: 4317 - protocol: TCP - targetPort: 4317 - - name: "55670" - port: 55670 - protocol: TCP - targetPort: 55679 - selector: - component: otel-collector - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/charts/helm/templates/prometheus-deployment.yaml b/charts/helm/templates/prometheus-deployment.yaml deleted file mode 100644 index ab3ef30d..00000000 --- a/charts/helm/templates/prometheus-deployment.yaml +++ /dev/null @@ -1,55 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: prometheus - name: prometheus -spec: - replicas: 1 - selector: - matchLabels: - component: prometheus - strategy: - type: Recreate - template: - metadata: - labels: - component: prometheus - spec: - containers: - - image: prom/prometheus:latest - name: prometheus - ports: - - containerPort: 9090 - resources: {} - volumeMounts: - - mountPath: /etc/prometheus/ - name: prometheus-config-volume - restartPolicy: Always - volumes: - - name: prometheus-config-volume - configMap: - name: prometheus - items: - - key: prometheus-config - path: prometheus.yml - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: prometheus - name: prometheus -spec: - ports: - - name: "9090" - port: 9090 - protocol: TCP - targetPort: 9090 - selector: - component: prometheus - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/charts/helm/templates/victoriametrics-deployment.yaml b/charts/helm/templates/victoriametrics-deployment.yaml deleted file mode 100644 index 271ae96d..00000000 --- a/charts/helm/templates/victoriametrics-deployment.yaml +++ /dev/null @@ -1,77 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: victoriametrics - name: victoriametrics -spec: - replicas: 1 - selector: - matchLabels: - component: victoriametrics - strategy: - type: Recreate - template: - metadata: - labels: - component: victoriametrics - spec: - containers: - - args: - - --promscrape.config=/conf/vMetrics.yaml - image: victoriametrics/victoria-metrics - name: victoriametrics - ports: - - containerPort: 8428 - - containerPort: 8089 - - containerPort: 8089 - protocol: UDP - - containerPort: 2003 - - containerPort: 2003 - protocol: UDP - - containerPort: 4242 - resources: {} - volumeMounts: - - mountPath: /conf - name: vmetrics-config - restartPolicy: Always - volumes: - - configMap: - items: - - key: vMetrics.yaml - path: vMetrics.yaml - name: vmetrics-config - name: vmetrics-config - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: victoriametrics - name: victoriametrics -spec: - ports: - - name: "8428" - port: 8428 - targetPort: 8428 - - name: "8089" - port: 8089 - targetPort: 8089 - - name: 8089-udp - port: 8089 - protocol: UDP - targetPort: 8089 - - name: "2003" - port: 2003 - targetPort: 2003 - - name: 2003-udp - port: 2003 - protocol: UDP - targetPort: 2003 - - name: "4242" - port: 4242 - targetPort: 4242 - selector: - component: victoriametrics diff --git a/charts/helm/templates/vmagent-deployment.yaml b/charts/helm/templates/vmagent-deployment.yaml deleted file mode 100644 index 7560d9c1..00000000 --- a/charts/helm/templates/vmagent-deployment.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: vmagent - name: vmagent -spec: - replicas: 1 - selector: - matchLabels: - component: vmagent - strategy: - type: Recreate - template: - metadata: - labels: - component: vmagent - spec: - containers: - - args: - - --promscrape.config=/conf/vMetrics.yaml - - --remoteWrite.url=http://victoriametrics:8428/api/v1/write - image: victoriametrics/vmagent - name: vmagent - ports: - - containerPort: 8429 - volumeMounts: - - mountPath: /conf - name: vmetrics-config - restartPolicy: Always - volumes: - - configMap: - items: - - key: vMetrics.yaml - path: vMetrics.yaml - name: vmetrics-config - name: vmetrics-config - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: vmagent - name: vmagent -spec: - ports: - - name: "8429" - port: 8429 - targetPort: 8429 - selector: - component: vmagent diff --git a/charts/helm/templates/zipkin-all-in-one-deployment.yaml b/charts/helm/templates/zipkin-all-in-one-deployment.yaml deleted file mode 100644 index 9bd061a2..00000000 --- a/charts/helm/templates/zipkin-all-in-one-deployment.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: zipkin-all-in-one - labels: - component: zipkin-all-in-one -spec: - selector: - matchLabels: - component: zipkin-all-in-one - minReadySeconds: 5 - progressDeadlineSeconds: 120 - replicas: 1 - template: - metadata: - labels: - component: zipkin-all-in-one - spec: - containers: - - name: zipkin-all-in-one - image: openzipkin/zipkin:latest - ports: - - containerPort: 9411 - ---- - -apiVersion: v1 -kind: Service -metadata: - name: zipkin-all-in-one - labels: - component: zipkin-all-in-one -spec: - selector: - component: zipkin-all-in-one - ports: - - name: zipkin - protocol: TCP - port: 9411 - targetPort: 9411 - selector: - component: jaeger-all-in-one - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/charts/helm/values.yaml b/charts/helm/values.yaml deleted file mode 100644 index 86c885a8..00000000 --- a/charts/helm/values.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Application configuration -application: - # Configuration to get the metrics information - metrics: - jobname: "demo-quarkus" - url: "/q/metrics" - - # Configuration of the application service - service: - name: "demo-quarkus" - port: 8080 - -# Ingress configuration -ingress: - application: - host: "application.localhost" - port: 8080 - jaeger: - host: "jaeger.localhost" - port: 16686 - zipkin: - host: "zipkin.localhost" - port: 9411 - grafana: - host: "grafana.localhost" - port: 3000 diff --git a/charts/quarkus-app/Chart.yaml b/charts/quarkus-app/Chart.yaml deleted file mode 100644 index 9cc1ed5c..00000000 --- a/charts/quarkus-app/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: helm-app -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: v1 #"1.16.0" diff --git a/charts/quarkus-app/templates/deployment.yaml b/charts/quarkus-app/templates/deployment.yaml deleted file mode 100644 index ab721835..00000000 --- a/charts/quarkus-app/templates/deployment.yaml +++ /dev/null @@ -1,118 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -# deployment v1 -metadata: - # metadata labels - tags under which this resources can be found in k8s api - labels: - app: demo-quarkus - app.kubernetes.io/name: demo-quarkus - name: demo-quarkus - namespace: default -spec: - # scale to 2 instances - replicas: 2 - selector: - #how are the pods linked together - matchLabels: - app: demo-quarkus - template: - metadata: - labels: - app: demo-quarkus - spec: - # pod spec, we want a single container in our pods - containers: - - name: demo-quarkus - # where should the image come from - image: 'dockerimages1508/quarkas-repo:v1' - #command: ["java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes="service.name=quarkus-demo"] - #command: ["/deployments/run-java.sh"] - # always perform pull when creating pod - imagePullPolicy: Always - #env Secrets to pull image from regidtry - - # command: ["/deployments/run-java.sh", "&&", "java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes='service.name=quarkus-demo'"] - # env vars so we can connect to DB - env: - - name: QUARKUS_DATASOURCE_JDBC_URL - value: jdbc:postgresql://postgresql:5432/demo - - name: QUARKUS_DATASOURCE_USERNAME - value: demo - - name: QUARKUS_DATASOURCE_PASSWORD - value: demo - - name: QUARKUS.OPENTELEMETRY.ENABLED - value: "true" - - name: QUARKUS.OPENTELEMETRY.TRACER.EXPORTER.OTLP.ENDPOINT - value: http://otel-agent:4317 - - name: QUARKUS.APPLICATION.NAME - value: demo-quarkus - - # live & ready probes, using our healthcheck endpoints - livenessProbe: - failureThreshold: 5 - httpGet: - path: /q/health/live - port: 8080 - scheme: HTTP - initialDelaySeconds: 5 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 3 - ports: - - containerPort: 8080 - readinessProbe: - failureThreshold: 5 - httpGet: - path: /q/health/ready - port: 8080 - scheme: HTTP - initialDelaySeconds: 5 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 3 - # we can define init containers, single run jobs that run before our main container does - # we use them to init database and check that its ready - initContainers: - - command: - - /bin/bash - - '-c' - - >- - psql -tc "SELECT 1 FROM pg_database WHERE datname = - 'demo'" | grep -q 1 | psql -c "CREATE USER - demo WITH ENCRYPTED PASSWORD 'demo';" -c - "CREATE DATABASE demo;" -c "GRANT ALL PRIVILEGES - ON DATABASE demo TO demo;" - env: - - name: PGHOST - value: postgresql - - name: PGPORT - value: '5432' - - name: PGDATABASE - value: null - - name: PGUSER - value: postgres - - name: PGPASSWORD - value: postgres - - name: DISABLE_WELCOME_MESSAGE - value: 'true' - image: 'docker.io/bitnami/postgresql:12.2.0' - name: create-db - - command: - - /bin/bash - - '-c' - - until pg_isready; do echo waiting for database; sleep 2; done; - env: - - name: PGHOST - value: postgresql - - name: PGPORT - value: '5432' - - name: PGDATABASE - value: demo - - name: PGUSER - value: demo - - name: PGPASSWORD - value: demo - - name: DISABLE_WELCOME_MESSAGE - value: 'true' - image: 'docker.io/bitnami/postgresql:12.2.0' - name: check-db diff --git a/charts/quarkus-app/templates/ingress.yaml b/charts/quarkus-app/templates/ingress.yaml deleted file mode 100644 index 8d3a9a1a..00000000 --- a/charts/quarkus-app/templates/ingress.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# a simple ingress for our service -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: demo-quarkus - annotations: - ingress.kubernetes.io/ssl-redirect: "false" -spec: - rules: - - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: demo-quarkus - port: - number: 8080 - # #this will work if you have dnsmasq(tkit env guide) - host: demo-quarkus.localhost diff --git a/charts/quarkus-app/templates/postgres-deployment.yaml b/charts/quarkus-app/templates/postgres-deployment.yaml deleted file mode 100644 index 2b2b9f02..00000000 --- a/charts/quarkus-app/templates/postgres-deployment.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -# deployment v1 -metadata: - name: postgresql -spec: - replicas: 1 - selector: - #how are the pods linked together - matchLabels: - app: postgresql - template: - metadata: - labels: - app: postgresql - spec: - containers: - - name: postgresql - image: 'docker.io/bitnami/postgresql:12.2.0' - ports: - - name: tcp-postgresql - containerPort: 5432 - protocol: TCP - env: - - name: POSTGRESQL_PORT_NUMBER - value: '5432' - - name: POSTGRESQL_VOLUME_DIR - value: /bitnami/postgresql - - name: PGDATA - value: /bitnami/postgresql/data - - name: POSTGRES_USER - value: postgres - #dont even try this in production - - name: POSTGRES_PASSWORD - value: postgres - - name: POSTGRES_DB - value: kubernetes - - name: DISABLE_WELCOME_MESSAGE - value: 'true' - - name: POSTGRESQL_ENABLE_LDAP - value: 'no' - resources: - requests: - cpu: 250m - memory: 256Mi - livenessProbe: - exec: - command: - - /bin/sh - - '-c' - - >- - exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p - 5432 - initialDelaySeconds: 30 - timeoutSeconds: 5 - periodSeconds: 10 - successThreshold: 1 - failureThreshold: 6 - readinessProbe: - exec: - command: - - /bin/sh - - '-c' - - '-e' - - > - exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p - 5432 - - [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f - /bitnami/postgresql/.initialized ] - initialDelaySeconds: 5 - timeoutSeconds: 5 - periodSeconds: 10 - successThreshold: 1 - failureThreshold: 6 - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - imagePullPolicy: IfNotPresent -# we run database without any persistent data volume - not a good idea, but sufficient for demo diff --git a/charts/quarkus-app/templates/postgres-service.yaml b/charts/quarkus-app/templates/postgres-service.yaml deleted file mode 100644 index 6d19ee33..00000000 --- a/charts/quarkus-app/templates/postgres-service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: postgresql - labels: - app: postgresql -spec: - ports: - - name: tcp-postgresql - protocol: TCP - port: 5432 - targetPort: tcp-postgresql - selector: - app: postgresql - type: LoadBalancer #ClusterIP diff --git a/charts/quarkus-app/templates/service.yaml b/charts/quarkus-app/templates/service.yaml deleted file mode 100644 index af2219f0..00000000 --- a/charts/quarkus-app/templates/service.yaml +++ /dev/null @@ -1,17 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: demo-quarkus - labels: - app: demo-quarkus -spec: - # we expose port 8080 which load balances traffic to the pods and their internal port 8080 - ports: - - name: http-port - protocol: TCP - port: 8080 - targetPort: 8080 -# how to find the pods we are load balancing - selector: - app: demo-quarkus - type: LoadBalancer #ClusterIP diff --git a/duplicate-chart/Chart.yaml b/duplicate-chart/Chart.yaml deleted file mode 100644 index 9cc1ed5c..00000000 --- a/duplicate-chart/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: helm-app -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: v1 #"1.16.0" diff --git a/duplicate-chart/main.tf b/duplicate-chart/main.tf deleted file mode 100644 index 6b44c997..00000000 --- a/duplicate-chart/main.tf +++ /dev/null @@ -1,47 +0,0 @@ -provider "helm" { - kubernetes { - config_path = "/root/.kube/config" - } -} - -provider "kubernetes" { - config_path = "/root/.kube/config" -} - - -resource "kubernetes_namespace" "test-namespace" { - metadata { - name = "test" - } -} - -resource "helm_release" "otel" { - name = "otel" - namespace = "test" - - - #repository = "https://charts.bitnami.com/bitnami" - chart = "/root/monitoring-kube-metrics-prometheus-grafana-terraform/otel" - - set { - name = "service.type" - value = "LoadBalancer" - } -} - -resource "helm_release" "quarkas-demo" { - name = "quarkas-demo" - namespace = "test" - - - #repository = "https://charts.bitnami.com/bitnami" - chart = "/root/monitoring-kube-metrics-prometheus-grafana-terraform/quarkas-demo" - - set { - name = "service.type" - value = "LoadBalancer" - } -} - - - diff --git a/duplicate-chart/templates/deployment.yaml b/duplicate-chart/templates/deployment.yaml deleted file mode 100644 index 74e79e8f..00000000 --- a/duplicate-chart/templates/deployment.yaml +++ /dev/null @@ -1,119 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -# deployment v1 -metadata: - # metadata labels - tags under which this resources can be found in k8s api - labels: - app: demo-quarkus - app.kubernetes.io/name: demo-quarkus - name: demo-quarkus - namespace: default -spec: - # scale to 2 instances - replicas: 2 - selector: - #how are the pods linked together - matchLabels: - app: demo-quarkus - template: - metadata: - labels: - app: demo-quarkus - spec: - # pod spec, we want a single container in our pods - containers: - - name: demo-quarkus - # where should the image come from - image: 'acrimage101.azurecr.io/acrimage101/demo-quarkus:latest' - #command: ["java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes="service.name=quarkus-demo"] - #command: ["/deployments/run-java.sh"] - # always perform pull when creating pod - imagePullPolicy: Always - #env Secrets to pull image from regidtry - #envFrom: - #- secretRef: - # name: credentials - # command: ["/deployments/run-java.sh", "&&", "java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes='service.name=quarkus-demo'"] - # env vars so we can connect to DB - env: - - name: QUARKUS_DATASOURCE_JDBC_URL - value: jdbc:postgresql://postgresql:5432/demo - - name: QUARKUS_DATASOURCE_USERNAME - value: demo - - name: QUARKUS_DATASOURCE_PASSWORD - value: demo - - name: QUARKUS.OPENTELEMETRY.ENABLED - value: "true" - - name: QUARKUS.OPENTELEMETRY.TRACER.EXPORTER.OTLP.ENDPOINT - value: http://otel-collector:4317 - - name: QUARKUS.APPLICATION.NAME - value: demo-quarkus - # live & ready probes, using our healthcheck endpoints - livenessProbe: - failureThreshold: 5 - httpGet: - path: /q/health/live - port: 8080 - scheme: HTTP - initialDelaySeconds: 5 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 3 - ports: - - containerPort: 8080 - readinessProbe: - failureThreshold: 5 - httpGet: - path: /q/health/ready - port: 8080 - scheme: HTTP - initialDelaySeconds: 5 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 3 - # we can define init containers, single run jobs that run before our main container does - # we use them to init database and check that its ready - initContainers: - - command: - - /bin/bash - - '-c' - - >- - psql -tc "SELECT 1 FROM pg_database WHERE datname = - 'demo'" | grep -q 1 | psql -c "CREATE USER - demo WITH ENCRYPTED PASSWORD 'demo';" -c - "CREATE DATABASE demo;" -c "GRANT ALL PRIVILEGES - ON DATABASE demo TO demo;" - env: - - name: PGHOST - value: postgresql - - name: PGPORT - value: '5432' - - name: PGDATABASE - value: null - - name: PGUSER - value: postgres - - name: PGPASSWORD - value: postgres - - name: DISABLE_WELCOME_MESSAGE - value: 'true' - image: 'docker.io/bitnami/postgresql:12.2.0' - name: create-db - - command: - - /bin/bash - - '-c' - - until pg_isready; do echo waiting for database; sleep 2; done; - env: - - name: PGHOST - value: postgresql - - name: PGPORT - value: '5432' - - name: PGDATABASE - value: demo - - name: PGUSER - value: demo - - name: PGPASSWORD - value: demo - - name: DISABLE_WELCOME_MESSAGE - value: 'true' - image: 'docker.io/bitnami/postgresql:12.2.0' - name: check-db diff --git a/duplicate-chart/templates/ingress.yaml b/duplicate-chart/templates/ingress.yaml deleted file mode 100644 index 8d3a9a1a..00000000 --- a/duplicate-chart/templates/ingress.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# a simple ingress for our service -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: demo-quarkus - annotations: - ingress.kubernetes.io/ssl-redirect: "false" -spec: - rules: - - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: demo-quarkus - port: - number: 8080 - # #this will work if you have dnsmasq(tkit env guide) - host: demo-quarkus.localhost diff --git a/duplicate-chart/templates/postgres-deployment.yaml b/duplicate-chart/templates/postgres-deployment.yaml deleted file mode 100644 index 2b2b9f02..00000000 --- a/duplicate-chart/templates/postgres-deployment.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -# deployment v1 -metadata: - name: postgresql -spec: - replicas: 1 - selector: - #how are the pods linked together - matchLabels: - app: postgresql - template: - metadata: - labels: - app: postgresql - spec: - containers: - - name: postgresql - image: 'docker.io/bitnami/postgresql:12.2.0' - ports: - - name: tcp-postgresql - containerPort: 5432 - protocol: TCP - env: - - name: POSTGRESQL_PORT_NUMBER - value: '5432' - - name: POSTGRESQL_VOLUME_DIR - value: /bitnami/postgresql - - name: PGDATA - value: /bitnami/postgresql/data - - name: POSTGRES_USER - value: postgres - #dont even try this in production - - name: POSTGRES_PASSWORD - value: postgres - - name: POSTGRES_DB - value: kubernetes - - name: DISABLE_WELCOME_MESSAGE - value: 'true' - - name: POSTGRESQL_ENABLE_LDAP - value: 'no' - resources: - requests: - cpu: 250m - memory: 256Mi - livenessProbe: - exec: - command: - - /bin/sh - - '-c' - - >- - exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p - 5432 - initialDelaySeconds: 30 - timeoutSeconds: 5 - periodSeconds: 10 - successThreshold: 1 - failureThreshold: 6 - readinessProbe: - exec: - command: - - /bin/sh - - '-c' - - '-e' - - > - exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p - 5432 - - [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f - /bitnami/postgresql/.initialized ] - initialDelaySeconds: 5 - timeoutSeconds: 5 - periodSeconds: 10 - successThreshold: 1 - failureThreshold: 6 - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - imagePullPolicy: IfNotPresent -# we run database without any persistent data volume - not a good idea, but sufficient for demo diff --git a/duplicate-chart/templates/postgres-service.yaml b/duplicate-chart/templates/postgres-service.yaml deleted file mode 100644 index 6d19ee33..00000000 --- a/duplicate-chart/templates/postgres-service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: postgresql - labels: - app: postgresql -spec: - ports: - - name: tcp-postgresql - protocol: TCP - port: 5432 - targetPort: tcp-postgresql - selector: - app: postgresql - type: LoadBalancer #ClusterIP diff --git a/duplicate-chart/templates/secrets.yaml b/duplicate-chart/templates/secrets.yaml deleted file mode 100644 index 374e9ce8..00000000 --- a/duplicate-chart/templates/secrets.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: credentials - #labels: - # app: app - # chart: '{{ .Chart.Name }}-{{ .Chart.Version }}' - # release: '{{ .Release.Name }}' - # heritage: '{{ .Release.Service }}' -type: Opaque -data: - server: acrimage101.azurecr.io - username: acrimage101 - password: vEKxjkTwSjsjcA8L6i=haKZF1ii14BiT diff --git a/duplicate-chart/templates/service.yaml b/duplicate-chart/templates/service.yaml deleted file mode 100644 index af2219f0..00000000 --- a/duplicate-chart/templates/service.yaml +++ /dev/null @@ -1,17 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: demo-quarkus - labels: - app: demo-quarkus -spec: - # we expose port 8080 which load balances traffic to the pods and their internal port 8080 - ports: - - name: http-port - protocol: TCP - port: 8080 - targetPort: 8080 -# how to find the pods we are load balancing - selector: - app: demo-quarkus - type: LoadBalancer #ClusterIP diff --git a/helm-charts b/helm-charts deleted file mode 160000 index 61ae4e7e..00000000 --- a/helm-charts +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 61ae4e7e81dc5296b9f7ccfd0a79d897b44db0b2 diff --git a/helm-otel/Chart.yaml b/helm-otel/Chart.yaml deleted file mode 100644 index 06f4ff4c..00000000 --- a/helm-otel/Chart.yaml +++ /dev/null @@ -1,8 +0,0 @@ -name: docker-compose -description: A generated Helm Chart for docker-compose from Skippbox Kompose -version: 0.0.1 -apiVersion: v1 -keywords: - - docker-compose -sources: -home: diff --git a/helm-otel/templates/configmap.yaml b/helm-otel/templates/configmap.yaml deleted file mode 100644 index 1e267bfa..00000000 --- a/helm-otel/templates/configmap.yaml +++ /dev/null @@ -1,118 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: collector-config -data: - collector.yaml: | - receivers: - otlp: - protocols: - grpc: - http: - cors_allowed_origins: - - http://* - - https://* - - exporters: - logging: - prometheus: - endpoint: "0.0.0.0:8889" - # namespace: promexample - #const_labels: - # label1: value1 - - zipkin: - endpoint: "http://zipkin-all-in-one:9411/api/v2/spans" - format: proto - - jaeger: - endpoint: jaeger-all-in-one:14250 - insecure: true - - processors: - batch: - - service: - pipelines: - traces: - receivers: [otlp] - exporters: [zipkin, jaeger] - processors: [batch] - metrics: - receivers: [otlp] - processors: [batch] - exporters: [prometheus] ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: agent-config -data: - agent.yaml: | - receivers: - otlp: - protocols: - grpc: - http: - opencensus: - jaeger: - protocols: - grpc: - thrift_http: - zipkin: - - exporters: - otlp: - endpoint: "otel-collector:4317" - insecure: true - logging: - loglevel: debug - - processors: - batch: - - service: - pipelines: - traces: - receivers: [otlp, zipkin, jaeger] - processors: [batch] - exporters: [otlp] - metrics: - receivers: [otlp] - processors: [batch] - exporters: [otlp] ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: vmetrics-config -data: - vMetrics.yaml: | - scrape_configs: - #- job_name: 'otel-collector' - - job_name: '{{ .Values.application.metrics.jobname }}' - scrape_interval: 10s - metrics_path: '{{ .Values.application.metrics.url }}' - static_configs: - - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] - #- targets: ['otel-collector:8889'] - - #- targets: ['otel-collector:8888'] - # - # - # - # ---- - -apiVersion: v1 -kind: ConfigMap -metadata: - name: prometheus -data: - prometheus-config: | - scrape_configs: - - job_name: '{{ .Values.application.metrics.jobname }}' - scrape_interval: 10s - metrics_path: '{{ .Values.application.metrics.url }}' - static_configs: - - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] diff --git a/helm-otel/templates/demo-networkpolicy.yaml b/helm-otel/templates/demo-networkpolicy.yaml deleted file mode 100644 index 266697f5..00000000 --- a/helm-otel/templates/demo-networkpolicy.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: ingress -metadata: - creationTimestamp: null - name: ingress -spec: - rules: - - host: {{ .Values.ingress.application.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: {{ .Values.application.service.name }} - port: - number: {{ .Values.ingress.application.port }} - - host: {{ .Values.ingress.jaeger.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: jaeger-all-in-one - port: - number: {{ .Values.ingress.jaeger.port }} - - host: {{ .Values.ingress.zipkin.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: zipkin-all-in-one - port: - number: {{ .Values.ingress.zipkin.port }} - - - host: {{ .Values.ingress.grafana.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: grafana - port: - number: {{ .Values.ingress.grafana.port }} diff --git a/helm-otel/templates/jaeger-all-in-one-deployment.yaml b/helm-otel/templates/jaeger-all-in-one-deployment.yaml deleted file mode 100644 index 0b87db57..00000000 --- a/helm-otel/templates/jaeger-all-in-one-deployment.yaml +++ /dev/null @@ -1,41 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: jaeger-all-in-one - name: jaeger-all-in-one -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: jaeger-all-in-one - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: jaeger-all-in-one - spec: - containers: - - image: jaegertracing/all-in-one:latest - imagePullPolicy: "" - name: jaeger-all-in-one - ports: - - containerPort: 16686 - - containerPort: 14268 - - containerPort: 14250 - resources: {} - restartPolicy: Always - serviceAccountName: "" - volumes: null -status: {} diff --git a/helm-otel/templates/jaeger-all-in-one-service.yaml b/helm-otel/templates/jaeger-all-in-one-service.yaml deleted file mode 100644 index 91862d52..00000000 --- a/helm-otel/templates/jaeger-all-in-one-service.yaml +++ /dev/null @@ -1,30 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: jaeger-all-in-one - name: jaeger-all-in-one -spec: - ports: - - name: "16686" - port: 16686 - protocol: TCP - targetPort: 16686 - - name: "14268" - port: 14268 - protocol: TCP - targetPort: 14268 - - name: "14250" - port: 14250 - protocol: TCP - targetPort: 14250 - selector: - io.kompose.service: jaeger-all-in-one - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/helm-otel/templates/otel-agent-deployment.yaml b/helm-otel/templates/otel-agent-deployment.yaml deleted file mode 100644 index 7ad0efb6..00000000 --- a/helm-otel/templates/otel-agent-deployment.yaml +++ /dev/null @@ -1,58 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: otel-agent - name: otel-agent -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: otel-agent - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: otel-agent - spec: - containers: - - args: - - --config=/conf/agent.yaml - - --log-level=DEBUG - image: otel/opentelemetry-collector:latest - imagePullPolicy: "" - name: otel-agent - ports: - - containerPort: 8888 - - containerPort: 14250 - - containerPort: 14268 - - containerPort: 55678 - - containerPort: 4317 - - containerPort: 9411 - - containerPort: 1777 - - containerPort: 13133 - resources: {} - volumeMounts: - - mountPath: /conf - name: agent-config - volumes: - - configMap: - items: - - key: agent.yaml - path: agent.yaml - name: agent-config - name: agent-config - restartPolicy: Always - serviceAccountName: "" -status: {} diff --git a/helm-otel/templates/otel-agent-service.yaml b/helm-otel/templates/otel-agent-service.yaml deleted file mode 100644 index a18a0260..00000000 --- a/helm-otel/templates/otel-agent-service.yaml +++ /dev/null @@ -1,54 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: otel-agent - name: otel-agent -spec: - ports: - - name: "8887" - port: 8887 - protocol: TCP - targetPort: 8888 - - name: "14250" - port: 14250 - protocol: TCP - targetPort: 14250 - - name: "14268" - port: 14268 - protocol: TCP - targetPort: 14268 - - name: "55678" - port: 55678 - protocol: TCP - targetPort: 55678 - - name: "4317" - port: 4317 - protocol: TCP - targetPort: 4317 - - name: "9411" - port: 9411 - protocol: TCP - targetPort: 9411 - - name: "1777" - port: 1777 - protocol: TCP - targetPort: 1777 - - name: "55679" - port: 55679 - protocol: TCP - targetPort: 55679 - - name: "13133" - port: 13133 - protocol: TCP - targetPort: 13133 - selector: - io.kompose.service: otel-agent - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/helm-otel/templates/otel-collector-deployment.yaml b/helm-otel/templates/otel-collector-deployment.yaml deleted file mode 100644 index b150acdf..00000000 --- a/helm-otel/templates/otel-collector-deployment.yaml +++ /dev/null @@ -1,56 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: otel-collector - name: otel-collector -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: otel-collector - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: otel-collector - spec: - containers: - - args: - - --config=/conf/collector.yaml - - --log-level=DEBUG - image: otel/opentelemetry-collector:latest - imagePullPolicy: "" - name: otel-collector - ports: - - containerPort: 1888 - - containerPort: 8888 - - containerPort: 8889 - - containerPort: 13133 - - containerPort: 4317 - - containerPort: 55679 - resources: {} - volumeMounts: - - mountPath: /conf - name: collector-config - volumes: - - configMap: - items: - - key: collector.yaml - path: collector.yaml - name: collector-config - name: collector-config - restartPolicy: Always - serviceAccountName: "" -status: {} diff --git a/helm-otel/templates/otel-collector-service.yaml b/helm-otel/templates/otel-collector-service.yaml deleted file mode 100644 index b35b23a2..00000000 --- a/helm-otel/templates/otel-collector-service.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: otel-collector - name: otel-collector -spec: - ports: - - name: "1888" - port: 1888 - protocol: TCP - targetPort: 1888 - - name: "8888" - port: 8888 - protocol: TCP - targetPort: 8888 - - name: "8889" - port: 8889 - protocol: TCP - targetPort: 8889 - - name: "13133" - port: 13133 - protocol: TCP - targetPort: 13133 - - name: "4317" - port: 4317 - protocol: TCP - targetPort: 4317 - - name: "55670" - port: 55670 - protocol: TCP - targetPort: 55679 - selector: - io.kompose.service: otel-collector - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/helm-otel/templates/prometheus-deployment.yaml b/helm-otel/templates/prometheus-deployment.yaml deleted file mode 100644 index 5f9888ef..00000000 --- a/helm-otel/templates/prometheus-deployment.yaml +++ /dev/null @@ -1,49 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: prometheus - name: prometheus -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: prometheus - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: prometheus - spec: - containers: - - image: prom/prometheus:latest - imagePullPolicy: "" - name: prometheus - ports: - - containerPort: 9090 - resources: {} - restartPolicy: Always - serviceAccountName: "" - volumeMounts: - - mountPath: /etc/prometheus/ - name: prometheus-config-volume - restartPolicy: Always - volumes: - - name: prometheus-config-volume - configMap: - name: prometheus - items: - - key: prometheus-config - path: prometheus.yml -status: {} diff --git a/helm-otel/templates/prometheus-service.yaml b/helm-otel/templates/prometheus-service.yaml deleted file mode 100644 index ceef1238..00000000 --- a/helm-otel/templates/prometheus-service.yaml +++ /dev/null @@ -1,22 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: prometheus - name: prometheus -spec: - ports: - - name: "9090" - port: 9090 - protocol: TCP - targetPort: 9090 - selector: - io.kompose.service: prometheus - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/helm-otel/templates/reference-project-deployment.yaml b/helm-otel/templates/reference-project-deployment.yaml deleted file mode 100644 index 6b02ebe8..00000000 --- a/helm-otel/templates/reference-project-deployment.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: reference-project - name: reference-project -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: reference-project - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: reference-project - spec: - containers: - - env: - - name: QUARKUS_DATASOURCE_PASSWORD - value: demo - - name: QUARKUS_DATASOURCE_USERNAME - value: demo - - name: quarkus.datasource.jdbc.url - value: jdbc:postgresql://postgresdb:5432/demo - - name: quarkus.opentelemetry.tracer.exporter.jaeger.endpoint - value: http://otel-agent:14250 - image: k3d-myregistry.localhost:5000/ref-project:latest - imagePullPolicy: "" - name: reference-project - ports: - - containerPort: 8080 - resources: {} - restartPolicy: Always - serviceAccountName: "" - volumes: null -status: {} diff --git a/helm-otel/templates/reference-project-service.yaml b/helm-otel/templates/reference-project-service.yaml deleted file mode 100644 index 26276f5f..00000000 --- a/helm-otel/templates/reference-project-service.yaml +++ /dev/null @@ -1,22 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: reference-project - name: reference-project -spec: - ports: - - name: "8080" - port: 8080 - protocol: TCP - targetPort: 8080 - selector: - io.kompose.service: reference-project - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/helm-otel/templates/victoriametrics-deployment.yaml b/helm-otel/templates/victoriametrics-deployment.yaml deleted file mode 100644 index 0de2ca07..00000000 --- a/helm-otel/templates/victoriametrics-deployment.yaml +++ /dev/null @@ -1,57 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: victoriametrics - name: victoriametrics -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: victoriametrics - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: victoriametrics - spec: - containers: - - args: - - --promscrape.config=/conf/vMetrics.yaml - image: victoriametrics/victoria-metrics - imagePullPolicy: "" - name: victoriametrics - ports: - - containerPort: 8428 - - containerPort: 8089 - - containerPort: 8089 - protocol: UDP - - containerPort: 2003 - - containerPort: 2003 - protocol: UDP - - containerPort: 4242 - resources: {} - volumeMounts: - - mountPath: /conf - name: vmetrics-config - volumes: - - configMap: - items: - - key: vMetrics.yaml - path: vMetrics.yaml - name: vmetrics-config - name: vmetrics-config - restartPolicy: Always - serviceAccountName: "" -status: {} diff --git a/helm-otel/templates/victoriametrics-service.yaml b/helm-otel/templates/victoriametrics-service.yaml deleted file mode 100644 index 2df8b51a..00000000 --- a/helm-otel/templates/victoriametrics-service.yaml +++ /dev/null @@ -1,37 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: victoriametrics - name: victoriametrics -spec: - ports: - - name: "8428" - port: 8428 - targetPort: 8428 - - name: "8089" - port: 8089 - targetPort: 8089 - - name: 8089-udp - port: 8089 - protocol: UDP - targetPort: 8089 - - name: "2003" - port: 2003 - targetPort: 2003 - - name: 2003-udp - port: 2003 - protocol: UDP - targetPort: 2003 - - name: "4242" - port: 4242 - targetPort: 4242 - selector: - io.kompose.service: victoriametrics -status: - loadBalancer: {} diff --git a/helm-otel/templates/vmagent-deployment.yaml b/helm-otel/templates/vmagent-deployment.yaml deleted file mode 100644 index 072b6226..00000000 --- a/helm-otel/templates/vmagent-deployment.yaml +++ /dev/null @@ -1,51 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: vmagent - name: vmagent -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: vmagent - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: vmagent - spec: - containers: - - args: - - --promscrape.config=/conf/vMetrics.yaml - - --remoteWrite.url=http://victoriametrics:8428/api/v1/write - image: victoriametrics/vmagent - imagePullPolicy: "" - name: vmagent - ports: - - containerPort: 8429 - resources: {} - volumeMounts: - - mountPath: /conf - name: vmetrics-config - volumes: - - configMap: - items: - - key: vMetrics.yaml - path: vMetrics.yaml - name: vmetrics-config - name: vmetrics-config - restartPolicy: Always - serviceAccountName: "" -status: {} diff --git a/helm-otel/templates/vmagent-service.yaml b/helm-otel/templates/vmagent-service.yaml deleted file mode 100644 index 97697fca..00000000 --- a/helm-otel/templates/vmagent-service.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: vmagent - name: vmagent -spec: - ports: - - name: "8429" - port: 8429 - targetPort: 8429 - selector: - io.kompose.service: vmagent -status: - loadBalancer: {} diff --git a/helm-otel/templates/zipkin-all-in-one-deployment.yaml b/helm-otel/templates/zipkin-all-in-one-deployment.yaml deleted file mode 100644 index 77bfe8fd..00000000 --- a/helm-otel/templates/zipkin-all-in-one-deployment.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: zipkin-all-in-one - name: zipkin-all-in-one -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: zipkin-all-in-one - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: zipkin-all-in-one - spec: - containers: - - image: openzipkin/zipkin:latest - imagePullPolicy: "" - name: zipkin-all-in-one - ports: - - containerPort: 9411 - resources: {} - restartPolicy: Always - serviceAccountName: "" - volumes: null -status: {} diff --git a/helm-otel/templates/zipkin-all-in-one-service.yaml b/helm-otel/templates/zipkin-all-in-one-service.yaml deleted file mode 100644 index 4fbf2f3f..00000000 --- a/helm-otel/templates/zipkin-all-in-one-service.yaml +++ /dev/null @@ -1,22 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: zipkin-all-in-one - name: zipkin-all-in-one -spec: - ports: - - name: "9411" - port: 9411 - protocol: TCP - targetPort: 9411 - selector: - io.kompose.service: zipkin-all-in-one - type: LoadBalancer -status: - loadBalancer: {} diff --git a/helm-otel/values.yaml b/helm-otel/values.yaml deleted file mode 100644 index 81ec35b2..00000000 --- a/helm-otel/values.yaml +++ /dev/null @@ -1,24 +0,0 @@ -pplication configuration -application: - # Configuration to get the metrics information - metrics: - jobname: "metrics-jobname" - url: "metrics-url" - # Configuration of the application service - service: - name: "application-service-name" - name: "application-service-port" - # Ingress configuration - ingress: - application: - host: "application.localhost" - port: 8080 - jaeger: - host: "jaeger.localhost" - port: 16686 - zipkin: - host: "zipkin.localhost" - port: 9411 - grafana: - host: "grafana.localhost" - port: 3000 diff --git a/otel-charts/Chart.yaml b/otel-charts/Chart.yaml deleted file mode 100644 index f0182ccc..00000000 --- a/otel-charts/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: otel-charts -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/otel-charts/helm/Chart.yaml b/otel-charts/helm/Chart.yaml deleted file mode 100644 index 9f02c0a0..00000000 --- a/otel-charts/helm/Chart.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v3 -name: OpenTelemetry Helm template -version: 1.0.0 -description: Helm chart template for an OpenTelemetry Kubernetes deployment -appVersion: 1.0.0 -keywords: - - template -maintainers: - - name: devon4j Developer diff --git a/otel-charts/helm/templates/configmap.yaml b/otel-charts/helm/templates/configmap.yaml deleted file mode 100644 index 87ed63d2..00000000 --- a/otel-charts/helm/templates/configmap.yaml +++ /dev/null @@ -1,98 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: otel-agent -data: - otel-agent-config: | - receivers: - otlp: - protocols: - grpc: - - processors: - batch: - - exporters: - otlp: - endpoint: "otel-collector.default.svc.cluster.local:4317" - insecure: true - - service: - pipelines: - traces: - receivers: [otlp] - processors: [batch] - exporters: [otlp] - metrics: - receivers: [otlp] - processors: [batch] - exporters: [otlp] ---- - -apiVersion: v1 -kind: ConfigMap -metadata: - name: otel-collector -data: - otel-collector-config: | - receivers: - otlp: - protocols: - grpc: - http: - cors_allowed_origins: - - http://* - - https://* - - processors: - batch: - - exporters: - logging: - zipkin: - endpoint: "http://zipkin-all-in-one.default.svc.cluster.local:9411/api/v2/spans" - format: proto - jaeger: - endpoint: jaeger-all-in-one.default.svc.cluster.local:14250 - insecure: true - prometheus: - endpoint: "0.0.0.0:8889" - - service: - pipelines: - traces: - receivers: [otlp] - exporters: [zipkin, jaeger] - processors: [batch] - metrics: - receivers: [otlp] - processors: [batch] - exporters: [prometheus] ---- - -apiVersion: v1 -kind: ConfigMap -metadata: - name: vmetrics-config -data: - vMetrics.yaml: | - scrape_configs: - - job_name: '{{ .Values.application.metrics.jobname }}' - scrape_interval: 10s - metrics_path: '{{ .Values.application.metrics.url }}' - static_configs: - - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] ---- - -apiVersion: v1 -kind: ConfigMap -metadata: - name: prometheus -data: - prometheus-config: | - scrape_configs: - - job_name: '{{ .Values.application.metrics.jobname }}' - scrape_interval: 10s - metrics_path: '{{ .Values.application.metrics.url }}' - static_configs: - - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] \ No newline at end of file diff --git a/otel-charts/helm/templates/grafana-deployment.yaml b/otel-charts/helm/templates/grafana-deployment.yaml deleted file mode 100644 index a1b2db33..00000000 --- a/otel-charts/helm/templates/grafana-deployment.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: grafana - name: grafana -spec: - replicas: 1 - selector: - matchLabels: - component: grafana - template: - metadata: - labels: - component: grafana - spec: - containers: - - image: grafana/grafana - name: grafana - ports: - - containerPort: 3000 - resources: {} - restartPolicy: Always - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: grafana - name: grafana -spec: - ports: - - name: "3000" - port: 3000 - protocol: TCP - targetPort: 3000 - selector: - component: grafana - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/otel-charts/helm/templates/ingress.yaml b/otel-charts/helm/templates/ingress.yaml deleted file mode 100644 index efa4bca9..00000000 --- a/otel-charts/helm/templates/ingress.yaml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: ingress -spec: - rules: - - host: {{ .Values.ingress.application.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: {{ .Values.application.service.name }} - port: - number: {{ .Values.ingress.application.port }} - - host: {{ .Values.ingress.jaeger.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: jaeger-all-in-one - port: - number: {{ .Values.ingress.jaeger.port }} - - host: {{ .Values.ingress.zipkin.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: zipkin-all-in-one - port: - number: {{ .Values.ingress.zipkin.port }} - - host: {{ .Values.ingress.grafana.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: grafana - port: - number: {{ .Values.ingress.grafana.port }} \ No newline at end of file diff --git a/otel-charts/helm/templates/jaeger-all-in-one-deployment.yaml b/otel-charts/helm/templates/jaeger-all-in-one-deployment.yaml deleted file mode 100644 index 0c37f108..00000000 --- a/otel-charts/helm/templates/jaeger-all-in-one-deployment.yaml +++ /dev/null @@ -1,55 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: jaeger-all-in-one - name: jaeger-all-in-one -spec: - replicas: 1 - selector: - matchLabels: - component: jaeger-all-in-one - strategy: {} - template: - metadata: - labels: - component: jaeger-all-in-one - spec: - containers: - - image: jaegertracing/all-in-one:latest - name: jaeger-all-in-one - ports: - - containerPort: 16686 - - containerPort: 14268 - - containerPort: 14250 - resources: {} - restartPolicy: Always - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: jaeger-all-in-one - name: jaeger-all-in-one -spec: - ports: - - name: "16686" - port: 16686 - protocol: TCP - targetPort: 16686 - - name: "14268" - port: 14268 - protocol: TCP - targetPort: 14268 - - name: "14250" - port: 14250 - protocol: TCP - targetPort: 14250 - selector: - component: jaeger-all-in-one - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} - diff --git a/otel-charts/helm/templates/otel-agent-deployment.yaml b/otel-charts/helm/templates/otel-agent-deployment.yaml deleted file mode 100644 index bf2c591c..00000000 --- a/otel-charts/helm/templates/otel-agent-deployment.yaml +++ /dev/null @@ -1,98 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: otel-agent - name: otel-agent -spec: - replicas: 1 - selector: - matchLabels: - component: otel-agent - strategy: - type: Recreate - template: - metadata: - labels: - component: otel-agent - spec: - containers: - - args: - - /otelcol - - --config=/conf/otel-agent-config.yaml - - --log-level=DEBUG - image: otel/opentelemetry-collector:latest - name: otel-agent - ports: - - containerPort: 8888 - - containerPort: 14250 - - containerPort: 14268 - - containerPort: 55678 - - containerPort: 4317 - - containerPort: 9411 - - containerPort: 1777 - - containerPort: 13133 - resources: {} - volumeMounts: - - mountPath: /conf - name: otel-agent-config-volume - volumes: - - name: otel-agent-config-volume - configMap: - name: otel-agent - items: - - key: otel-agent-config - path: otel-agent-config.yaml - restartPolicy: Always - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: otel-agent - name: otel-agent -spec: - ports: - - name: "8887" - port: 8887 - - targetPort: 8888 - - name: "14250" - port: 14250 - protocol: TCP - targetPort: 14250 - - name: "14268" - port: 14268 - protocol: TCP - targetPort: 14268 - - name: "55678" - port: 55678 - protocol: TCP - targetPort: 55678 - - name: "4317" - port: 4317 - protocol: TCP - targetPort: 4317 - - name: "9411" - port: 9411 - protocol: TCP - targetPort: 9411 - - name: "1777" - port: 1777 - protocol: TCP - targetPort: 1777 - - name: "55679" - port: 55679 - protocol: TCP - targetPort: 55679 - - name: "13133" - port: 13133 - protocol: TCP - targetPort: 13133 - selector: - component: otel-agent - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/otel-charts/helm/templates/otel-collector-deployment.yaml b/otel-charts/helm/templates/otel-collector-deployment.yaml deleted file mode 100644 index 57669258..00000000 --- a/otel-charts/helm/templates/otel-collector-deployment.yaml +++ /dev/null @@ -1,83 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: otel-collector - name: otel-collector -spec: - replicas: 1 - selector: - matchLabels: - component: otel-collector - strategy: - type: Recreate - template: - metadata: - labels: - component: otel-collector - spec: - containers: - - args: - - --config=/conf/otel-collector-config.yaml - - --log-level=DEBUG - image: otel/opentelemetry-collector:latest - name: otel-collector - ports: - - containerPort: 1888 - - containerPort: 8888 - - containerPort: 8889 - - containerPort: 13133 - - containerPort: 4317 - - containerPort: 55679 - resources: {} - volumeMounts: - - mountPath: /conf - name: otel-collector-config-volume - restartPolicy: Always - volumes: - - name: otel-collector-config-volume - configMap: - name: otel-collector - items: - - key: otel-collector-config - path: otel-collector-config.yaml - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: otel-collector - name: otel-collector -spec: - ports: - - name: "1888" - port: 1888 - protocol: TCP - targetPort: 1888 - - name: "8888" - port: 8888 - protocol: TCP - targetPort: 8888 - - name: "8889" - port: 8889 - protocol: TCP - targetPort: 8889 - - name: "13133" - port: 13133 - protocol: TCP - targetPort: 13133 - - name: "4317" - port: 4317 - protocol: TCP - targetPort: 4317 - - name: "55670" - port: 55670 - protocol: TCP - targetPort: 55679 - selector: - component: otel-collector - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/otel-charts/helm/templates/prometheus-deployment.yaml b/otel-charts/helm/templates/prometheus-deployment.yaml deleted file mode 100644 index ab3ef30d..00000000 --- a/otel-charts/helm/templates/prometheus-deployment.yaml +++ /dev/null @@ -1,55 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: prometheus - name: prometheus -spec: - replicas: 1 - selector: - matchLabels: - component: prometheus - strategy: - type: Recreate - template: - metadata: - labels: - component: prometheus - spec: - containers: - - image: prom/prometheus:latest - name: prometheus - ports: - - containerPort: 9090 - resources: {} - volumeMounts: - - mountPath: /etc/prometheus/ - name: prometheus-config-volume - restartPolicy: Always - volumes: - - name: prometheus-config-volume - configMap: - name: prometheus - items: - - key: prometheus-config - path: prometheus.yml - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: prometheus - name: prometheus -spec: - ports: - - name: "9090" - port: 9090 - protocol: TCP - targetPort: 9090 - selector: - component: prometheus - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/otel-charts/helm/templates/victoriametrics-deployment.yaml b/otel-charts/helm/templates/victoriametrics-deployment.yaml deleted file mode 100644 index 271ae96d..00000000 --- a/otel-charts/helm/templates/victoriametrics-deployment.yaml +++ /dev/null @@ -1,77 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: victoriametrics - name: victoriametrics -spec: - replicas: 1 - selector: - matchLabels: - component: victoriametrics - strategy: - type: Recreate - template: - metadata: - labels: - component: victoriametrics - spec: - containers: - - args: - - --promscrape.config=/conf/vMetrics.yaml - image: victoriametrics/victoria-metrics - name: victoriametrics - ports: - - containerPort: 8428 - - containerPort: 8089 - - containerPort: 8089 - protocol: UDP - - containerPort: 2003 - - containerPort: 2003 - protocol: UDP - - containerPort: 4242 - resources: {} - volumeMounts: - - mountPath: /conf - name: vmetrics-config - restartPolicy: Always - volumes: - - configMap: - items: - - key: vMetrics.yaml - path: vMetrics.yaml - name: vmetrics-config - name: vmetrics-config - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: victoriametrics - name: victoriametrics -spec: - ports: - - name: "8428" - port: 8428 - targetPort: 8428 - - name: "8089" - port: 8089 - targetPort: 8089 - - name: 8089-udp - port: 8089 - protocol: UDP - targetPort: 8089 - - name: "2003" - port: 2003 - targetPort: 2003 - - name: 2003-udp - port: 2003 - protocol: UDP - targetPort: 2003 - - name: "4242" - port: 4242 - targetPort: 4242 - selector: - component: victoriametrics diff --git a/otel-charts/helm/templates/vmagent-deployment.yaml b/otel-charts/helm/templates/vmagent-deployment.yaml deleted file mode 100644 index 7560d9c1..00000000 --- a/otel-charts/helm/templates/vmagent-deployment.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: vmagent - name: vmagent -spec: - replicas: 1 - selector: - matchLabels: - component: vmagent - strategy: - type: Recreate - template: - metadata: - labels: - component: vmagent - spec: - containers: - - args: - - --promscrape.config=/conf/vMetrics.yaml - - --remoteWrite.url=http://victoriametrics:8428/api/v1/write - image: victoriametrics/vmagent - name: vmagent - ports: - - containerPort: 8429 - volumeMounts: - - mountPath: /conf - name: vmetrics-config - restartPolicy: Always - volumes: - - configMap: - items: - - key: vMetrics.yaml - path: vMetrics.yaml - name: vmetrics-config - name: vmetrics-config - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: vmagent - name: vmagent -spec: - ports: - - name: "8429" - port: 8429 - targetPort: 8429 - selector: - component: vmagent diff --git a/otel-charts/helm/templates/zipkin-all-in-one-deployment.yaml b/otel-charts/helm/templates/zipkin-all-in-one-deployment.yaml deleted file mode 100644 index 9bd061a2..00000000 --- a/otel-charts/helm/templates/zipkin-all-in-one-deployment.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: zipkin-all-in-one - labels: - component: zipkin-all-in-one -spec: - selector: - matchLabels: - component: zipkin-all-in-one - minReadySeconds: 5 - progressDeadlineSeconds: 120 - replicas: 1 - template: - metadata: - labels: - component: zipkin-all-in-one - spec: - containers: - - name: zipkin-all-in-one - image: openzipkin/zipkin:latest - ports: - - containerPort: 9411 - ---- - -apiVersion: v1 -kind: Service -metadata: - name: zipkin-all-in-one - labels: - component: zipkin-all-in-one -spec: - selector: - component: zipkin-all-in-one - ports: - - name: zipkin - protocol: TCP - port: 9411 - targetPort: 9411 - selector: - component: jaeger-all-in-one - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/otel-charts/helm/values.yaml b/otel-charts/helm/values.yaml deleted file mode 100644 index 86c885a8..00000000 --- a/otel-charts/helm/values.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Application configuration -application: - # Configuration to get the metrics information - metrics: - jobname: "demo-quarkus" - url: "/q/metrics" - - # Configuration of the application service - service: - name: "demo-quarkus" - port: 8080 - -# Ingress configuration -ingress: - application: - host: "application.localhost" - port: 8080 - jaeger: - host: "jaeger.localhost" - port: 16686 - zipkin: - host: "zipkin.localhost" - port: 9411 - grafana: - host: "grafana.localhost" - port: 3000 diff --git a/otel-charts/templates/configmap.yaml b/otel-charts/templates/configmap.yaml deleted file mode 100644 index c1f106fc..00000000 --- a/otel-charts/templates/configmap.yaml +++ /dev/null @@ -1,98 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: collector-config -data: - collector.yaml: | - receivers: - otlp: - protocols: - grpc: - http: - cors_allowed_origins: - - http://* - - https://* - - exporters: - prometheus: - endpoint: "0.0.0.0:8889" - namespace: promexample - const_labels: - label1: value1 - - zipkin: - endpoint: "http://zipkin-all-in-one:9411/api/v2/spans" - format: proto - - jaeger: - endpoint: jaeger-all-in-one:14250 - insecure: true - - processors: - batch: - - service: - pipelines: - traces: - receivers: [otlp] - exporters: [zipkin, jaeger] - processors: [batch] - metrics: - receivers: [otlp] - processors: [batch] - exporters: [prometheus] ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: agent-config -data: - agent.yaml: | - receivers: - otlp: - protocols: - grpc: - http: - opencensus: - jaeger: - protocols: - grpc: - thrift_http: - zipkin: - - exporters: - otlp: - endpoint: "otel-collector:4317" - insecure: true - logging: - loglevel: debug - - processors: - batch: - - service: - pipelines: - traces: - receivers: [otlp, zipkin, jaeger] - processors: [batch] - exporters: [otlp] - metrics: - receivers: [otlp] - processors: [batch] - exporters: [otlp] ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: vmetrics-config -data: - vMetrics.yaml: | - scrape_configs: - #- job_name: 'otel-collector' - - job_name: 'demo_quarkus' - scrape_interval: 10s - metrics_path: '/q/metrics' - static_configs: - - targets: ['reference-project:8080'] - #- targets: ['otel-collector:8889'] - #- targets: ['otel-collector:8888'] \ No newline at end of file diff --git a/otel-charts/templates/demo-networkpolicy.yaml b/otel-charts/templates/demo-networkpolicy.yaml deleted file mode 100644 index 8b57ef91..00000000 --- a/otel-charts/templates/demo-networkpolicy.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - creationTimestamp: null - name: demo -spec: - ingress: - - from: - - podSelector: - matchLabels: - io.kompose.network/demo: "true" - podSelector: - matchLabels: - io.kompose.network/demo: "true" diff --git a/otel-charts/templates/ingress.yaml b/otel-charts/templates/ingress.yaml deleted file mode 100644 index 226f9740..00000000 --- a/otel-charts/templates/ingress.yaml +++ /dev/null @@ -1,61 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "otel-charts.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - labels: - {{- include "otel-charts.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - {{- range .Values.ingress.hosts }} - - host: {{ .host | quote }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/otel-charts/templates/jaeger-all-in-one-deployment.yaml b/otel-charts/templates/jaeger-all-in-one-deployment.yaml deleted file mode 100644 index 0b87db57..00000000 --- a/otel-charts/templates/jaeger-all-in-one-deployment.yaml +++ /dev/null @@ -1,41 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: jaeger-all-in-one - name: jaeger-all-in-one -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: jaeger-all-in-one - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: jaeger-all-in-one - spec: - containers: - - image: jaegertracing/all-in-one:latest - imagePullPolicy: "" - name: jaeger-all-in-one - ports: - - containerPort: 16686 - - containerPort: 14268 - - containerPort: 14250 - resources: {} - restartPolicy: Always - serviceAccountName: "" - volumes: null -status: {} diff --git a/otel-charts/templates/jaeger-all-in-one-service.yaml b/otel-charts/templates/jaeger-all-in-one-service.yaml deleted file mode 100644 index 91862d52..00000000 --- a/otel-charts/templates/jaeger-all-in-one-service.yaml +++ /dev/null @@ -1,30 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: jaeger-all-in-one - name: jaeger-all-in-one -spec: - ports: - - name: "16686" - port: 16686 - protocol: TCP - targetPort: 16686 - - name: "14268" - port: 14268 - protocol: TCP - targetPort: 14268 - - name: "14250" - port: 14250 - protocol: TCP - targetPort: 14250 - selector: - io.kompose.service: jaeger-all-in-one - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/otel-charts/templates/otel-agent-deployment.yaml b/otel-charts/templates/otel-agent-deployment.yaml deleted file mode 100644 index 7ad0efb6..00000000 --- a/otel-charts/templates/otel-agent-deployment.yaml +++ /dev/null @@ -1,58 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: otel-agent - name: otel-agent -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: otel-agent - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: otel-agent - spec: - containers: - - args: - - --config=/conf/agent.yaml - - --log-level=DEBUG - image: otel/opentelemetry-collector:latest - imagePullPolicy: "" - name: otel-agent - ports: - - containerPort: 8888 - - containerPort: 14250 - - containerPort: 14268 - - containerPort: 55678 - - containerPort: 4317 - - containerPort: 9411 - - containerPort: 1777 - - containerPort: 13133 - resources: {} - volumeMounts: - - mountPath: /conf - name: agent-config - volumes: - - configMap: - items: - - key: agent.yaml - path: agent.yaml - name: agent-config - name: agent-config - restartPolicy: Always - serviceAccountName: "" -status: {} diff --git a/otel-charts/templates/otel-agent-service.yaml b/otel-charts/templates/otel-agent-service.yaml deleted file mode 100644 index a18a0260..00000000 --- a/otel-charts/templates/otel-agent-service.yaml +++ /dev/null @@ -1,54 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: otel-agent - name: otel-agent -spec: - ports: - - name: "8887" - port: 8887 - protocol: TCP - targetPort: 8888 - - name: "14250" - port: 14250 - protocol: TCP - targetPort: 14250 - - name: "14268" - port: 14268 - protocol: TCP - targetPort: 14268 - - name: "55678" - port: 55678 - protocol: TCP - targetPort: 55678 - - name: "4317" - port: 4317 - protocol: TCP - targetPort: 4317 - - name: "9411" - port: 9411 - protocol: TCP - targetPort: 9411 - - name: "1777" - port: 1777 - protocol: TCP - targetPort: 1777 - - name: "55679" - port: 55679 - protocol: TCP - targetPort: 55679 - - name: "13133" - port: 13133 - protocol: TCP - targetPort: 13133 - selector: - io.kompose.service: otel-agent - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/otel-charts/templates/otel-collector-deployment.yaml b/otel-charts/templates/otel-collector-deployment.yaml deleted file mode 100644 index b150acdf..00000000 --- a/otel-charts/templates/otel-collector-deployment.yaml +++ /dev/null @@ -1,56 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: otel-collector - name: otel-collector -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: otel-collector - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: otel-collector - spec: - containers: - - args: - - --config=/conf/collector.yaml - - --log-level=DEBUG - image: otel/opentelemetry-collector:latest - imagePullPolicy: "" - name: otel-collector - ports: - - containerPort: 1888 - - containerPort: 8888 - - containerPort: 8889 - - containerPort: 13133 - - containerPort: 4317 - - containerPort: 55679 - resources: {} - volumeMounts: - - mountPath: /conf - name: collector-config - volumes: - - configMap: - items: - - key: collector.yaml - path: collector.yaml - name: collector-config - name: collector-config - restartPolicy: Always - serviceAccountName: "" -status: {} diff --git a/otel-charts/templates/otel-collector-service.yaml b/otel-charts/templates/otel-collector-service.yaml deleted file mode 100644 index b35b23a2..00000000 --- a/otel-charts/templates/otel-collector-service.yaml +++ /dev/null @@ -1,42 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: otel-collector - name: otel-collector -spec: - ports: - - name: "1888" - port: 1888 - protocol: TCP - targetPort: 1888 - - name: "8888" - port: 8888 - protocol: TCP - targetPort: 8888 - - name: "8889" - port: 8889 - protocol: TCP - targetPort: 8889 - - name: "13133" - port: 13133 - protocol: TCP - targetPort: 13133 - - name: "4317" - port: 4317 - protocol: TCP - targetPort: 4317 - - name: "55670" - port: 55670 - protocol: TCP - targetPort: 55679 - selector: - io.kompose.service: otel-collector - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/otel-charts/templates/prometheus-deployment.yaml b/otel-charts/templates/prometheus-deployment.yaml deleted file mode 100644 index ef7999ea..00000000 --- a/otel-charts/templates/prometheus-deployment.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: prometheus - name: prometheus -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: prometheus - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: prometheus - spec: - containers: - - image: prom/prometheus:latest - imagePullPolicy: "" - name: prometheus - ports: - - containerPort: 9090 - resources: {} - restartPolicy: Always - serviceAccountName: "" - volumes: null -status: {} diff --git a/otel-charts/templates/prometheus-service.yaml b/otel-charts/templates/prometheus-service.yaml deleted file mode 100644 index ceef1238..00000000 --- a/otel-charts/templates/prometheus-service.yaml +++ /dev/null @@ -1,22 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: prometheus - name: prometheus -spec: - ports: - - name: "9090" - port: 9090 - protocol: TCP - targetPort: 9090 - selector: - io.kompose.service: prometheus - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/otel-charts/templates/zipkin-all-in-one-deployment.yaml b/otel-charts/templates/zipkin-all-in-one-deployment.yaml deleted file mode 100644 index 77bfe8fd..00000000 --- a/otel-charts/templates/zipkin-all-in-one-deployment.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: zipkin-all-in-one - name: zipkin-all-in-one -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: zipkin-all-in-one - strategy: {} - template: - metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.network/demo: "true" - io.kompose.service: zipkin-all-in-one - spec: - containers: - - image: openzipkin/zipkin:latest - imagePullPolicy: "" - name: zipkin-all-in-one - ports: - - containerPort: 9411 - resources: {} - restartPolicy: Always - serviceAccountName: "" - volumes: null -status: {} diff --git a/otel-charts/templates/zipkin-all-in-one-service.yaml b/otel-charts/templates/zipkin-all-in-one-service.yaml deleted file mode 100644 index 4fbf2f3f..00000000 --- a/otel-charts/templates/zipkin-all-in-one-service.yaml +++ /dev/null @@ -1,22 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - annotations: - kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe - convert -c - kompose.version: 1.21.0 (992df58d8) - creationTimestamp: null - labels: - io.kompose.service: zipkin-all-in-one - name: zipkin-all-in-one -spec: - ports: - - name: "9411" - port: 9411 - protocol: TCP - targetPort: 9411 - selector: - io.kompose.service: zipkin-all-in-one - type: LoadBalancer -status: - loadBalancer: {} diff --git a/otel-charts/terraform-helm-deploy b/otel-charts/terraform-helm-deploy deleted file mode 160000 index e3eafd7e..00000000 --- a/otel-charts/terraform-helm-deploy +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e3eafd7e3bbd9893908985ea938376a0da9e65cb diff --git a/otel-charts/values.yaml b/otel-charts/values.yaml deleted file mode 100644 index 1b5ac5cc..00000000 --- a/otel-charts/values.yaml +++ /dev/null @@ -1,82 +0,0 @@ -# Default values for otel-charts. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: nginx - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: true - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 80 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: chart-example.local - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} From 25d1ec60247684fd7d271443bb944a3c9cd56c84 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 22 Nov 2021 05:28:53 +0000 Subject: [PATCH 06/72] update --- .../charts => charts}/helm/Chart.yaml | 0 .../helm/templates/configmap.yaml | 0 .../helm/templates/grafana-deployment.yaml | 0 .../helm/templates/ingress.yaml | 0 .../jaeger-all-in-one-deployment.yaml | 0 .../helm/templates/otel-agent-deployment.yaml | 0 .../templates/otel-collector-deployment.yaml | 0 .../helm/templates/prometheus-deployment.yaml | 0 .../templates/victoriametrics-deployment.yaml | 0 .../helm/templates/vmagent-deployment.yaml | 0 .../zipkin-all-in-one-deployment.yaml | 0 .../charts => charts}/helm/values.yaml | 0 .../charts => charts}/quarkus-app/Chart.yaml | 0 .../quarkus-app/templates/deployment.yaml | 0 .../quarkus-app/templates/ingress.yaml | 0 .../templates/postgres-deployment.yaml | 0 .../templates/postgres-service.yaml | 0 .../quarkus-app/templates/service.yaml | 0 .../terraform-aks => terraform-aks | 0 terraform_doc.asciidoc | 115 ++++++++++++++++++ 20 files changed, 115 insertions(+) rename {terraform-helm-release/charts => charts}/helm/Chart.yaml (100%) rename {terraform-helm-release/charts => charts}/helm/templates/configmap.yaml (100%) rename {terraform-helm-release/charts => charts}/helm/templates/grafana-deployment.yaml (100%) rename {terraform-helm-release/charts => charts}/helm/templates/ingress.yaml (100%) rename {terraform-helm-release/charts => charts}/helm/templates/jaeger-all-in-one-deployment.yaml (100%) rename {terraform-helm-release/charts => charts}/helm/templates/otel-agent-deployment.yaml (100%) rename {terraform-helm-release/charts => charts}/helm/templates/otel-collector-deployment.yaml (100%) rename {terraform-helm-release/charts => charts}/helm/templates/prometheus-deployment.yaml (100%) rename {terraform-helm-release/charts => charts}/helm/templates/victoriametrics-deployment.yaml (100%) rename {terraform-helm-release/charts => charts}/helm/templates/vmagent-deployment.yaml (100%) rename {terraform-helm-release/charts => charts}/helm/templates/zipkin-all-in-one-deployment.yaml (100%) rename {terraform-helm-release/charts => charts}/helm/values.yaml (100%) rename {terraform-helm-release/charts => charts}/quarkus-app/Chart.yaml (100%) rename {terraform-helm-release/charts => charts}/quarkus-app/templates/deployment.yaml (100%) rename {terraform-helm-release/charts => charts}/quarkus-app/templates/ingress.yaml (100%) rename {terraform-helm-release/charts => charts}/quarkus-app/templates/postgres-deployment.yaml (100%) rename {terraform-helm-release/charts => charts}/quarkus-app/templates/postgres-service.yaml (100%) rename {terraform-helm-release/charts => charts}/quarkus-app/templates/service.yaml (100%) rename terraform-helm-release/terraform-aks => terraform-aks (100%) create mode 100644 terraform_doc.asciidoc diff --git a/terraform-helm-release/charts/helm/Chart.yaml b/charts/helm/Chart.yaml similarity index 100% rename from terraform-helm-release/charts/helm/Chart.yaml rename to charts/helm/Chart.yaml diff --git a/terraform-helm-release/charts/helm/templates/configmap.yaml b/charts/helm/templates/configmap.yaml similarity index 100% rename from terraform-helm-release/charts/helm/templates/configmap.yaml rename to charts/helm/templates/configmap.yaml diff --git a/terraform-helm-release/charts/helm/templates/grafana-deployment.yaml b/charts/helm/templates/grafana-deployment.yaml similarity index 100% rename from terraform-helm-release/charts/helm/templates/grafana-deployment.yaml rename to charts/helm/templates/grafana-deployment.yaml diff --git a/terraform-helm-release/charts/helm/templates/ingress.yaml b/charts/helm/templates/ingress.yaml similarity index 100% rename from terraform-helm-release/charts/helm/templates/ingress.yaml rename to charts/helm/templates/ingress.yaml diff --git a/terraform-helm-release/charts/helm/templates/jaeger-all-in-one-deployment.yaml b/charts/helm/templates/jaeger-all-in-one-deployment.yaml similarity index 100% rename from terraform-helm-release/charts/helm/templates/jaeger-all-in-one-deployment.yaml rename to charts/helm/templates/jaeger-all-in-one-deployment.yaml diff --git a/terraform-helm-release/charts/helm/templates/otel-agent-deployment.yaml b/charts/helm/templates/otel-agent-deployment.yaml similarity index 100% rename from terraform-helm-release/charts/helm/templates/otel-agent-deployment.yaml rename to charts/helm/templates/otel-agent-deployment.yaml diff --git a/terraform-helm-release/charts/helm/templates/otel-collector-deployment.yaml b/charts/helm/templates/otel-collector-deployment.yaml similarity index 100% rename from terraform-helm-release/charts/helm/templates/otel-collector-deployment.yaml rename to charts/helm/templates/otel-collector-deployment.yaml diff --git a/terraform-helm-release/charts/helm/templates/prometheus-deployment.yaml b/charts/helm/templates/prometheus-deployment.yaml similarity index 100% rename from terraform-helm-release/charts/helm/templates/prometheus-deployment.yaml rename to charts/helm/templates/prometheus-deployment.yaml diff --git a/terraform-helm-release/charts/helm/templates/victoriametrics-deployment.yaml b/charts/helm/templates/victoriametrics-deployment.yaml similarity index 100% rename from terraform-helm-release/charts/helm/templates/victoriametrics-deployment.yaml rename to charts/helm/templates/victoriametrics-deployment.yaml diff --git a/terraform-helm-release/charts/helm/templates/vmagent-deployment.yaml b/charts/helm/templates/vmagent-deployment.yaml similarity index 100% rename from terraform-helm-release/charts/helm/templates/vmagent-deployment.yaml rename to charts/helm/templates/vmagent-deployment.yaml diff --git a/terraform-helm-release/charts/helm/templates/zipkin-all-in-one-deployment.yaml b/charts/helm/templates/zipkin-all-in-one-deployment.yaml similarity index 100% rename from terraform-helm-release/charts/helm/templates/zipkin-all-in-one-deployment.yaml rename to charts/helm/templates/zipkin-all-in-one-deployment.yaml diff --git a/terraform-helm-release/charts/helm/values.yaml b/charts/helm/values.yaml similarity index 100% rename from terraform-helm-release/charts/helm/values.yaml rename to charts/helm/values.yaml diff --git a/terraform-helm-release/charts/quarkus-app/Chart.yaml b/charts/quarkus-app/Chart.yaml similarity index 100% rename from terraform-helm-release/charts/quarkus-app/Chart.yaml rename to charts/quarkus-app/Chart.yaml diff --git a/terraform-helm-release/charts/quarkus-app/templates/deployment.yaml b/charts/quarkus-app/templates/deployment.yaml similarity index 100% rename from terraform-helm-release/charts/quarkus-app/templates/deployment.yaml rename to charts/quarkus-app/templates/deployment.yaml diff --git a/terraform-helm-release/charts/quarkus-app/templates/ingress.yaml b/charts/quarkus-app/templates/ingress.yaml similarity index 100% rename from terraform-helm-release/charts/quarkus-app/templates/ingress.yaml rename to charts/quarkus-app/templates/ingress.yaml diff --git a/terraform-helm-release/charts/quarkus-app/templates/postgres-deployment.yaml b/charts/quarkus-app/templates/postgres-deployment.yaml similarity index 100% rename from terraform-helm-release/charts/quarkus-app/templates/postgres-deployment.yaml rename to charts/quarkus-app/templates/postgres-deployment.yaml diff --git a/terraform-helm-release/charts/quarkus-app/templates/postgres-service.yaml b/charts/quarkus-app/templates/postgres-service.yaml similarity index 100% rename from terraform-helm-release/charts/quarkus-app/templates/postgres-service.yaml rename to charts/quarkus-app/templates/postgres-service.yaml diff --git a/terraform-helm-release/charts/quarkus-app/templates/service.yaml b/charts/quarkus-app/templates/service.yaml similarity index 100% rename from terraform-helm-release/charts/quarkus-app/templates/service.yaml rename to charts/quarkus-app/templates/service.yaml diff --git a/terraform-helm-release/terraform-aks b/terraform-aks similarity index 100% rename from terraform-helm-release/terraform-aks rename to terraform-aks diff --git a/terraform_doc.asciidoc b/terraform_doc.asciidoc new file mode 100644 index 00000000..149662c6 --- /dev/null +++ b/terraform_doc.asciidoc @@ -0,0 +1,115 @@ + +== Provision an AKS Cluster with Terraform + +:url-az-account: https://portal.azure.com/#home + +:url-az-CLI: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest + +:url-az-kubectl: https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli + +:url-helm: https://helm.sh/docs/intro/install/ + +:url-terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli + +:url-repo-code: + +The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing, and scaling containerized applications on Azure. + +== *Prerequisites:* + +. Sign up into {url-az-account}[Azure Account]. +. Install the Azure {url-az-CLI}[CLI]. +. Install the {url-az-kubectl}[kubectl]. +. Install {url-helm}[Helm]. +. Installing {url-terraform}[Terraform]. + +== *Set up and initialize your Terraform workspace* +In your terminal, clone the following {url-repo-code}[repository] code. + +`$ git clone xxxxxxxxxxxxxxxxxxxxxx` + +You can explore this repository by changing directories. + +`cd xxxxxxxxxxxxxxxxxx` + +In here, you will find three files used to provision the AKS cluster. + +1. `aks-cluster.tf` provisions a resource group and an AKS cluster. The default_node_pool defines the number of VMs and the VM type the cluster uses. + +2. `variables.tf` declares the appID and password so Terraform can use reference its configuration + +3. `terraform.tfvars` defines the appId and password variables to authenticate to Azure + +4. `outputs.tf` declares values that can be useful to interact with your AKS cluster + + +5. `versions.tf` set the Terraform version and defines the required_provider block + +== *Create an Active Directory service principal account* + +Here you will use an Azure Active Directory service principal to authenticate to the Azure provider. + +First, you need to create an Active Directory service principal account using the Azure CLI. You should see something like the following. + +``` +$ az ad sp create-for-rbac --skip-assignment +{ + "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "displayName": "azure-cli-2021-11-17-00-46-05", + "name": "http://azure-cli-2021-11-17-00-46-05", + "password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "tenant": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" +} + +``` + +== *Update your terraform.tfvars file* + +Replace the values in your `terraform.tfvars` file with your `appId` and `password`. Terraform will use these values to authenticate to Azure before provisioning your resources. + +``` +# terraform.tfvars +appId = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" +password = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + +``` +== *Deploy Applications with the Helm Provider* +The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. + +Create the Helm Provider in `aks-cluster.tf` and configure the helm repository location. + +== *Initialize Terraform* +After you have saved your customized variables file, initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. + +`$ terraform init` + +== *Provision the AKS cluster* +In your initialized directory, run terraform apply and review the planned actions. Your terminal output should indicate the plan is running and what resources will be created. + +`$ terraform apply` + +You can see this terraform apply will provision an Azure resource group and an AKS cluster. Confirm the apply with a yes. + +== *Configure kubectl* + +Now that you've provisioned your AKS cluster, you need to configure kubectl. + +Run the following command to retrieve the access credentials for your cluster and automatically configure kubectl. + +`az aks get-credentials --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` + +The resource group name and Kubernetes Cluster name correspond to the output variables showed after the successful Terraform run. + +== *Access Kubernetes Dashboard* +Run the following command to generate the Azure portal link. + +`az aks browse --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` + +Go to the URL in your preferred browser to view the Kubernetes resource view. + +== *Clean up your workspace* +Run the destroy command and confirm with yes in your terminal. + +`$ terraform destroy` + + From b5d3fc5d5e7b88ffe5a5c281f055223c6d04def8 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 22 Nov 2021 05:46:21 +0000 Subject: [PATCH 07/72] update --- terraform-aks => Terraform/terraform-aks | 0 terraform_doc.asciidoc => Terraform/terraform_doc.asciidoc | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename terraform-aks => Terraform/terraform-aks (100%) rename terraform_doc.asciidoc => Terraform/terraform_doc.asciidoc (100%) diff --git a/terraform-aks b/Terraform/terraform-aks similarity index 100% rename from terraform-aks rename to Terraform/terraform-aks diff --git a/terraform_doc.asciidoc b/Terraform/terraform_doc.asciidoc similarity index 100% rename from terraform_doc.asciidoc rename to Terraform/terraform_doc.asciidoc From 0f3d7d748ebc0353ab176e3dc7a639b13577b28c Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:33:31 +0530 Subject: [PATCH 08/72] Delete Terraform directory --- Terraform/terraform-aks | 1 - Terraform/terraform_doc.asciidoc | 115 ------------------------------- 2 files changed, 116 deletions(-) delete mode 160000 Terraform/terraform-aks delete mode 100644 Terraform/terraform_doc.asciidoc diff --git a/Terraform/terraform-aks b/Terraform/terraform-aks deleted file mode 160000 index adcf9015..00000000 --- a/Terraform/terraform-aks +++ /dev/null @@ -1 +0,0 @@ -Subproject commit adcf9015102a85f1e86406e2edb5546cfe2491a9 diff --git a/Terraform/terraform_doc.asciidoc b/Terraform/terraform_doc.asciidoc deleted file mode 100644 index 149662c6..00000000 --- a/Terraform/terraform_doc.asciidoc +++ /dev/null @@ -1,115 +0,0 @@ - -== Provision an AKS Cluster with Terraform - -:url-az-account: https://portal.azure.com/#home - -:url-az-CLI: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest - -:url-az-kubectl: https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli - -:url-helm: https://helm.sh/docs/intro/install/ - -:url-terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli - -:url-repo-code: - -The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing, and scaling containerized applications on Azure. - -== *Prerequisites:* - -. Sign up into {url-az-account}[Azure Account]. -. Install the Azure {url-az-CLI}[CLI]. -. Install the {url-az-kubectl}[kubectl]. -. Install {url-helm}[Helm]. -. Installing {url-terraform}[Terraform]. - -== *Set up and initialize your Terraform workspace* -In your terminal, clone the following {url-repo-code}[repository] code. - -`$ git clone xxxxxxxxxxxxxxxxxxxxxx` - -You can explore this repository by changing directories. - -`cd xxxxxxxxxxxxxxxxxx` - -In here, you will find three files used to provision the AKS cluster. - -1. `aks-cluster.tf` provisions a resource group and an AKS cluster. The default_node_pool defines the number of VMs and the VM type the cluster uses. - -2. `variables.tf` declares the appID and password so Terraform can use reference its configuration - -3. `terraform.tfvars` defines the appId and password variables to authenticate to Azure - -4. `outputs.tf` declares values that can be useful to interact with your AKS cluster - - -5. `versions.tf` set the Terraform version and defines the required_provider block - -== *Create an Active Directory service principal account* - -Here you will use an Azure Active Directory service principal to authenticate to the Azure provider. - -First, you need to create an Active Directory service principal account using the Azure CLI. You should see something like the following. - -``` -$ az ad sp create-for-rbac --skip-assignment -{ - "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", - "displayName": "azure-cli-2021-11-17-00-46-05", - "name": "http://azure-cli-2021-11-17-00-46-05", - "password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", - "tenant": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" -} - -``` - -== *Update your terraform.tfvars file* - -Replace the values in your `terraform.tfvars` file with your `appId` and `password`. Terraform will use these values to authenticate to Azure before provisioning your resources. - -``` -# terraform.tfvars -appId = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" -password = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" - -``` -== *Deploy Applications with the Helm Provider* -The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. - -Create the Helm Provider in `aks-cluster.tf` and configure the helm repository location. - -== *Initialize Terraform* -After you have saved your customized variables file, initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. - -`$ terraform init` - -== *Provision the AKS cluster* -In your initialized directory, run terraform apply and review the planned actions. Your terminal output should indicate the plan is running and what resources will be created. - -`$ terraform apply` - -You can see this terraform apply will provision an Azure resource group and an AKS cluster. Confirm the apply with a yes. - -== *Configure kubectl* - -Now that you've provisioned your AKS cluster, you need to configure kubectl. - -Run the following command to retrieve the access credentials for your cluster and automatically configure kubectl. - -`az aks get-credentials --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` - -The resource group name and Kubernetes Cluster name correspond to the output variables showed after the successful Terraform run. - -== *Access Kubernetes Dashboard* -Run the following command to generate the Azure portal link. - -`az aks browse --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` - -Go to the URL in your preferred browser to view the Kubernetes resource view. - -== *Clean up your workspace* -Run the destroy command and confirm with yes in your terminal. - -`$ terraform destroy` - - From dce519bfa3e7f9d5b9a0b431d51a80ddeced5564 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:34:49 +0530 Subject: [PATCH 09/72] Create aks-cluster.tf --- terraform/aks-cluster.tf | 74 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 terraform/aks-cluster.tf diff --git a/terraform/aks-cluster.tf b/terraform/aks-cluster.tf new file mode 100644 index 00000000..c7c6191f --- /dev/null +++ b/terraform/aks-cluster.tf @@ -0,0 +1,74 @@ + +resource "random_pet" "prefix" {} + +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "default" { + name = "${random_pet.prefix.id}-rg" + location = "West US 2" + + tags = { + environment = "Demo" + } +} + +resource "azurerm_kubernetes_cluster" "default" { + name = "${random_pet.prefix.id}-aks" + location = azurerm_resource_group.default.location + resource_group_name = azurerm_resource_group.default.name + dns_prefix = "${random_pet.prefix.id}-k8s" + + default_node_pool { + name = "default" + node_count = 2 + vm_size = "Standard_D2_v2" + os_disk_size_gb = 30 + } + + service_principal { + client_id = var.appId + client_secret = var.password + } + + role_based_access_control { + enabled = true + } + + tags = { + environment = "Demo" + } +} + +provider helm { + kubernetes { + #config_path = "~/.kube/config" + config_path = "/root/.kube/config" + } +} + +resource helm_release otel-release { + name = "otel-release-controller" + + #repository = " https://github.com/prathibhapadma/helm-charts/charts/helm" + chart = "/root/devon4quarkus-reference/charts/helm" + + set { + name = "service.type" + value = "LoadBalancer" + } +} + +resource helm_release quarkus-app-release { + name = "quarkus-app-controller" + + repository = "https://github.com/prathibhapadma/helm-charts/charts/quarkus-app" + chart = "/root/devon4quarkus-reference/charts/quarkus-app" + + set { + name = "service.type" + value = "LoadBalancer" + } +} + From b8942acef992b4e1840771b1183ae58a99674f0e Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:35:29 +0530 Subject: [PATCH 10/72] Create outputs.tf --- terraform/outputs.tf | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 terraform/outputs.tf diff --git a/terraform/outputs.tf b/terraform/outputs.tf new file mode 100644 index 00000000..d358d1bd --- /dev/null +++ b/terraform/outputs.tf @@ -0,0 +1,31 @@ +output "resource_group_name" { + value = azurerm_resource_group.default.name +} + +output "kubernetes_cluster_name" { + value = azurerm_kubernetes_cluster.default.name +} + +# output "host" { +# value = azurerm_kubernetes_cluster.default.kube_config.0.host +# } + +# output "client_key" { +# value = azurerm_kubernetes_cluster.default.kube_config.0.client_key +# } + +# output "client_certificate" { +# value = azurerm_kubernetes_cluster.default.kube_config.0.client_certificate +# } + +# output "kube_config" { +# value = azurerm_kubernetes_cluster.default.kube_config_raw +# } + +# output "cluster_username" { +# value = azurerm_kubernetes_cluster.default.kube_config.0.username +# } + +# output "cluster_password" { +# value = azurerm_kubernetes_cluster.default.kube_config.0.password +# } From 7048ff0928ad787c388085d20e40041e8437c579 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:36:56 +0530 Subject: [PATCH 11/72] Create terraform.tfvars --- terraform/terraform.tfvars | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 terraform/terraform.tfvars diff --git a/terraform/terraform.tfvars b/terraform/terraform.tfvars new file mode 100644 index 00000000..01687ad9 --- /dev/null +++ b/terraform/terraform.tfvars @@ -0,0 +1,2 @@ +appId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +password = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" From 94cc826b33921cd36c57f290b848c544badcc8d2 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:37:28 +0530 Subject: [PATCH 12/72] Create variables.tf --- terraform/variables.tf | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 terraform/variables.tf diff --git a/terraform/variables.tf b/terraform/variables.tf new file mode 100644 index 00000000..6bff5ce7 --- /dev/null +++ b/terraform/variables.tf @@ -0,0 +1,7 @@ +variable "appId" { + description = "Azure Kubernetes Service Cluster service principal" +} + +variable "password" { + description = "Azure Kubernetes Service Cluster password" +} From 6bb00ddc1fcdc451623dae135ef13aa1a1b5ac58 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:39:54 +0530 Subject: [PATCH 13/72] Create versions.tf --- terraform/versions.tf | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 terraform/versions.tf diff --git a/terraform/versions.tf b/terraform/versions.tf new file mode 100644 index 00000000..7dbb0202 --- /dev/null +++ b/terraform/versions.tf @@ -0,0 +1,20 @@ + +variable "appId" { + description = "Azure Kubernetes Service Cluster service principal" +} + +variable "password" { + description = "Azure Kubernetes Service Cluster password" +} +root@Terraform-vm:~/Terraform/AKSClustertf# cat versions.tf +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "2.66.0" + } + } + + required_version = ">= 0.14" +} + From fc8416905820dc09c308fad2d88299acc7a5f3f9 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:41:34 +0530 Subject: [PATCH 14/72] Create README.md --- terraform/README.md | 114 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 terraform/README.md diff --git a/terraform/README.md b/terraform/README.md new file mode 100644 index 00000000..ae6e7fce --- /dev/null +++ b/terraform/README.md @@ -0,0 +1,114 @@ + +== Provision an AKS Cluster with Terraform + +:url-az-account: https://portal.azure.com/#home + +:url-az-CLI: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest + +:url-az-kubectl: https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli + +:url-helm: https://helm.sh/docs/intro/install/ + +:url-terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli + +:url-repo-code: + +The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing, and scaling containerized applications on Azure. + +== *Prerequisites:* + +. Sign up into {url-az-account}[Azure Account]. +. Install the Azure {url-az-CLI}[CLI]. +. Install the {url-az-kubectl}[kubectl]. +. Install {url-helm}[Helm]. +. Installing {url-terraform}[Terraform]. + +== *Set up and initialize your Terraform workspace* +In your terminal, clone the following {url-repo-code}[repository] code. + +`$ git clone xxxxxxxxxxxxxxxxxxxxxx` + +You can explore this repository by changing directories. + +`cd xxxxxxxxxxxxxxxxxx` + +In here, you will find three files used to provision the AKS cluster. + +1. `aks-cluster.tf` provisions a resource group and an AKS cluster. The default_node_pool defines the number of VMs and the VM type the cluster uses. + +2. `variables.tf` declares the appID and password so Terraform can use reference its configuration + +3. `terraform.tfvars` defines the appId and password variables to authenticate to Azure + +4. `outputs.tf` declares values that can be useful to interact with your AKS cluster + + +5. `versions.tf` set the Terraform version and defines the required_provider block + +== *Create an Active Directory service principal account* + +Here you will use an Azure Active Directory service principal to authenticate to the Azure provider. + +First, you need to create an Active Directory service principal account using the Azure CLI. You should see something like the following. + +``` +$ az ad sp create-for-rbac --skip-assignment +{ + "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "displayName": "azure-cli-2021-11-17-00-46-05", + "name": "http://azure-cli-2021-11-17-00-46-05", + "password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "tenant": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" +} + +``` + +== *Update your terraform.tfvars file* + +Replace the values in your `terraform.tfvars` file with your `appId` and `password`. Terraform will use these values to authenticate to Azure before provisioning your resources. + +``` +# terraform.tfvars +appId = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" +password = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + +``` +== *Deploy Applications with the Helm Provider* +The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. + +Create the Helm Provider in `aks-cluster.tf` and configure the helm repository location. + +== *Initialize Terraform* +After you have saved your customized variables file, initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. + +`$ terraform init` + +== *Provision the AKS cluster* +In your initialized directory, run terraform apply and review the planned actions. Your terminal output should indicate the plan is running and what resources will be created. + +`$ terraform apply` + +You can see this terraform apply will provision an Azure resource group and an AKS cluster. Confirm the apply with a yes. + +== *Configure kubectl* + +Now that you've provisioned your AKS cluster, you need to configure kubectl. + +Run the following command to retrieve the access credentials for your cluster and automatically configure kubectl. + +`az aks get-credentials --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` + +The resource group name and Kubernetes Cluster name correspond to the output variables showed after the successful Terraform run. + +== *Access Kubernetes Dashboard* +Run the following command to generate the Azure portal link. + +`az aks browse --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` + +Go to the URL in your preferred browser to view the Kubernetes resource view. + +== *Clean up your workspace* +Run the destroy command and confirm with yes in your terminal. + +`$ terraform destroy` + From 874648894d4fcdc86e8ebd5532f898d078cd9966 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:44:33 +0530 Subject: [PATCH 15/72] Create terraform_doc.asciidoc --- terraform/terraform_doc.asciidoc | 114 +++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 terraform/terraform_doc.asciidoc diff --git a/terraform/terraform_doc.asciidoc b/terraform/terraform_doc.asciidoc new file mode 100644 index 00000000..ae6e7fce --- /dev/null +++ b/terraform/terraform_doc.asciidoc @@ -0,0 +1,114 @@ + +== Provision an AKS Cluster with Terraform + +:url-az-account: https://portal.azure.com/#home + +:url-az-CLI: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest + +:url-az-kubectl: https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli + +:url-helm: https://helm.sh/docs/intro/install/ + +:url-terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli + +:url-repo-code: + +The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing, and scaling containerized applications on Azure. + +== *Prerequisites:* + +. Sign up into {url-az-account}[Azure Account]. +. Install the Azure {url-az-CLI}[CLI]. +. Install the {url-az-kubectl}[kubectl]. +. Install {url-helm}[Helm]. +. Installing {url-terraform}[Terraform]. + +== *Set up and initialize your Terraform workspace* +In your terminal, clone the following {url-repo-code}[repository] code. + +`$ git clone xxxxxxxxxxxxxxxxxxxxxx` + +You can explore this repository by changing directories. + +`cd xxxxxxxxxxxxxxxxxx` + +In here, you will find three files used to provision the AKS cluster. + +1. `aks-cluster.tf` provisions a resource group and an AKS cluster. The default_node_pool defines the number of VMs and the VM type the cluster uses. + +2. `variables.tf` declares the appID and password so Terraform can use reference its configuration + +3. `terraform.tfvars` defines the appId and password variables to authenticate to Azure + +4. `outputs.tf` declares values that can be useful to interact with your AKS cluster + + +5. `versions.tf` set the Terraform version and defines the required_provider block + +== *Create an Active Directory service principal account* + +Here you will use an Azure Active Directory service principal to authenticate to the Azure provider. + +First, you need to create an Active Directory service principal account using the Azure CLI. You should see something like the following. + +``` +$ az ad sp create-for-rbac --skip-assignment +{ + "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "displayName": "azure-cli-2021-11-17-00-46-05", + "name": "http://azure-cli-2021-11-17-00-46-05", + "password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", + "tenant": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" +} + +``` + +== *Update your terraform.tfvars file* + +Replace the values in your `terraform.tfvars` file with your `appId` and `password`. Terraform will use these values to authenticate to Azure before provisioning your resources. + +``` +# terraform.tfvars +appId = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" +password = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" + +``` +== *Deploy Applications with the Helm Provider* +The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. + +Create the Helm Provider in `aks-cluster.tf` and configure the helm repository location. + +== *Initialize Terraform* +After you have saved your customized variables file, initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. + +`$ terraform init` + +== *Provision the AKS cluster* +In your initialized directory, run terraform apply and review the planned actions. Your terminal output should indicate the plan is running and what resources will be created. + +`$ terraform apply` + +You can see this terraform apply will provision an Azure resource group and an AKS cluster. Confirm the apply with a yes. + +== *Configure kubectl* + +Now that you've provisioned your AKS cluster, you need to configure kubectl. + +Run the following command to retrieve the access credentials for your cluster and automatically configure kubectl. + +`az aks get-credentials --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` + +The resource group name and Kubernetes Cluster name correspond to the output variables showed after the successful Terraform run. + +== *Access Kubernetes Dashboard* +Run the following command to generate the Azure portal link. + +`az aks browse --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` + +Go to the URL in your preferred browser to view the Kubernetes resource view. + +== *Clean up your workspace* +Run the destroy command and confirm with yes in your terminal. + +`$ terraform destroy` + From 1f633704f228b36b471cb34d1b6d9b098cd3c704 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:48:15 +0530 Subject: [PATCH 16/72] Update README.md --- terraform/README.md | 115 +------------------------------------------- 1 file changed, 2 insertions(+), 113 deletions(-) diff --git a/terraform/README.md b/terraform/README.md index ae6e7fce..0932e455 100644 --- a/terraform/README.md +++ b/terraform/README.md @@ -1,114 +1,3 @@ +# Provision your Azure Kubernetes clusters with the Terraform and Deploy Helm charts using Helm provider. -== Provision an AKS Cluster with Terraform - -:url-az-account: https://portal.azure.com/#home - -:url-az-CLI: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest - -:url-az-kubectl: https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli - -:url-helm: https://helm.sh/docs/intro/install/ - -:url-terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli - -:url-repo-code: - -The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing, and scaling containerized applications on Azure. - -== *Prerequisites:* - -. Sign up into {url-az-account}[Azure Account]. -. Install the Azure {url-az-CLI}[CLI]. -. Install the {url-az-kubectl}[kubectl]. -. Install {url-helm}[Helm]. -. Installing {url-terraform}[Terraform]. - -== *Set up and initialize your Terraform workspace* -In your terminal, clone the following {url-repo-code}[repository] code. - -`$ git clone xxxxxxxxxxxxxxxxxxxxxx` - -You can explore this repository by changing directories. - -`cd xxxxxxxxxxxxxxxxxx` - -In here, you will find three files used to provision the AKS cluster. - -1. `aks-cluster.tf` provisions a resource group and an AKS cluster. The default_node_pool defines the number of VMs and the VM type the cluster uses. - -2. `variables.tf` declares the appID and password so Terraform can use reference its configuration - -3. `terraform.tfvars` defines the appId and password variables to authenticate to Azure - -4. `outputs.tf` declares values that can be useful to interact with your AKS cluster - - -5. `versions.tf` set the Terraform version and defines the required_provider block - -== *Create an Active Directory service principal account* - -Here you will use an Azure Active Directory service principal to authenticate to the Azure provider. - -First, you need to create an Active Directory service principal account using the Azure CLI. You should see something like the following. - -``` -$ az ad sp create-for-rbac --skip-assignment -{ - "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", - "displayName": "azure-cli-2021-11-17-00-46-05", - "name": "http://azure-cli-2021-11-17-00-46-05", - "password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", - "tenant": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" -} - -``` - -== *Update your terraform.tfvars file* - -Replace the values in your `terraform.tfvars` file with your `appId` and `password`. Terraform will use these values to authenticate to Azure before provisioning your resources. - -``` -# terraform.tfvars -appId = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" -password = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" - -``` -== *Deploy Applications with the Helm Provider* -The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. - -Create the Helm Provider in `aks-cluster.tf` and configure the helm repository location. - -== *Initialize Terraform* -After you have saved your customized variables file, initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. - -`$ terraform init` - -== *Provision the AKS cluster* -In your initialized directory, run terraform apply and review the planned actions. Your terminal output should indicate the plan is running and what resources will be created. - -`$ terraform apply` - -You can see this terraform apply will provision an Azure resource group and an AKS cluster. Confirm the apply with a yes. - -== *Configure kubectl* - -Now that you've provisioned your AKS cluster, you need to configure kubectl. - -Run the following command to retrieve the access credentials for your cluster and automatically configure kubectl. - -`az aks get-credentials --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` - -The resource group name and Kubernetes Cluster name correspond to the output variables showed after the successful Terraform run. - -== *Access Kubernetes Dashboard* -Run the following command to generate the Azure portal link. - -`az aks browse --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` - -Go to the URL in your preferred browser to view the Kubernetes resource view. - -== *Clean up your workspace* -Run the destroy command and confirm with yes in your terminal. - -`$ terraform destroy` - +Follow the [terraform_doc](https://github.com/prathibhapadma/devon4quarkus-reference/blob/updated-block/terraform/terraform_doc.asciidoc). From d23a98b852e5b04e771a47cb057e190e2217ef8f Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:06:37 +0530 Subject: [PATCH 17/72] Create run.sh --- terraform/run.sh | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 terraform/run.sh diff --git a/terraform/run.sh b/terraform/run.sh new file mode 100644 index 00000000..b29d7ce5 --- /dev/null +++ b/terraform/run.sh @@ -0,0 +1,23 @@ +# make sure terraform CLI is installed +terraform + +# format the tf files +terraform fmt + +# initialize terraform Azure modules +terraform init + +# validate the template +terraform validate + +# plan and save the infra changes into tfplan file +terraform plan + +# delete the infra +#terraform destroy + +# cleanup files +#rm terraform.tfstate +#rm terraform.tfstate.backup +#rm .terraform.lock.hcl +#rm -r .terraform/ From 35cb8009c1f528a5992065aa15bfee70fdc61709 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:13:04 +0530 Subject: [PATCH 18/72] Update run.sh --- terraform/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terraform/run.sh b/terraform/run.sh index b29d7ce5..bd7314ad 100644 --- a/terraform/run.sh +++ b/terraform/run.sh @@ -10,7 +10,7 @@ terraform init # validate the template terraform validate -# plan and save the infra changes into tfplan file +# plan and save the infra changes into tfplan file. terraform plan # delete the infra From 23450a293a08f91dedee20f57dc9497983eaecee Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:17:33 +0530 Subject: [PATCH 19/72] Update run.sh --- terraform/run.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/terraform/run.sh b/terraform/run.sh index bd7314ad..949cc47d 100644 --- a/terraform/run.sh +++ b/terraform/run.sh @@ -1,9 +1,6 @@ # make sure terraform CLI is installed terraform -# format the tf files -terraform fmt - # initialize terraform Azure modules terraform init From 5a47ab51c6ad1edfb1271d2c122ac1014ee9e96b Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:19:57 +0530 Subject: [PATCH 20/72] updated --- terraform/terraform_doc.asciidoc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/terraform/terraform_doc.asciidoc b/terraform/terraform_doc.asciidoc index ae6e7fce..47b6c252 100644 --- a/terraform/terraform_doc.asciidoc +++ b/terraform/terraform_doc.asciidoc @@ -83,7 +83,12 @@ After you have saved your customized variables file, initialize your Terraform w `$ terraform init` -== *Provision the AKS cluster* +== *Terraform plan* +terraform plan command creates an execution of plan and save it to the local file tfplan. + +`$terraform plan` + +== *Terraform apply* In your initialized directory, run terraform apply and review the planned actions. Your terminal output should indicate the plan is running and what resources will be created. `$ terraform apply` From 3b8fb83e7fef997e2a86db8082b50103412b1464 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 22 Nov 2021 15:27:06 +0530 Subject: [PATCH 21/72] Update versions.tf --- terraform/versions.tf | 9 --------- 1 file changed, 9 deletions(-) diff --git a/terraform/versions.tf b/terraform/versions.tf index 7dbb0202..c9511836 100644 --- a/terraform/versions.tf +++ b/terraform/versions.tf @@ -1,12 +1,3 @@ - -variable "appId" { - description = "Azure Kubernetes Service Cluster service principal" -} - -variable "password" { - description = "Azure Kubernetes Service Cluster password" -} -root@Terraform-vm:~/Terraform/AKSClustertf# cat versions.tf terraform { required_providers { azurerm = { From 67f653f3035fc64ae5ebb3226add4324b26340fd Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Tue, 23 Nov 2021 08:48:44 +0530 Subject: [PATCH 22/72] Update terraform_doc.asciidoc --- terraform/terraform_doc.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/terraform/terraform_doc.asciidoc b/terraform/terraform_doc.asciidoc index 47b6c252..a81a276c 100644 --- a/terraform/terraform_doc.asciidoc +++ b/terraform/terraform_doc.asciidoc @@ -26,11 +26,11 @@ The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for dep == *Set up and initialize your Terraform workspace* In your terminal, clone the following {url-repo-code}[repository] code. -`$ git clone xxxxxxxxxxxxxxxxxxxxxx` +`$ git clone https://github.com/prathibhapadma/devon4quarkus-reference/terraform` You can explore this repository by changing directories. -`cd xxxxxxxxxxxxxxxxxx` +`cd terraform` In here, you will find three files used to provision the AKS cluster. From 52a71bfa98f9a820b8ba6dfcef2beb7ed7f58ec4 Mon Sep 17 00:00:00 2001 From: Padma Date: Wed, 24 Nov 2021 09:06:12 +0530 Subject: [PATCH 23/72] terraform doc updated --- terraform/terraform_doc.asciidoc | 62 +++++++++++++++++++------------- 1 file changed, 37 insertions(+), 25 deletions(-) diff --git a/terraform/terraform_doc.asciidoc b/terraform/terraform_doc.asciidoc index a81a276c..79cb2541 100644 --- a/terraform/terraform_doc.asciidoc +++ b/terraform/terraform_doc.asciidoc @@ -1,5 +1,5 @@ -== Provision an AKS Cluster with Terraform +== Provision an Aks Cluster with Terraform :url-az-account: https://portal.azure.com/#home @@ -13,46 +13,53 @@ :url-repo-code: -The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing, and scaling containerized applications on Azure. +The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing and scaling containerized applications on Azure. == *Prerequisites:* . Sign up into {url-az-account}[Azure Account]. . Install the Azure {url-az-CLI}[CLI]. . Install the {url-az-kubectl}[kubectl]. -. Install {url-helm}[Helm]. -. Installing {url-terraform}[Terraform]. +. Install the {url-helm}[Helm]. +. Install the {url-terraform}[Terraform]. + +== *Login to Azure Account* + +Before the terraform implementation we need to login Azure account through Azure CLI. + +`az login` + +== *Set-Up And Initialize Terraform Workspace* -== *Set up and initialize your Terraform workspace* In your terminal, clone the following {url-repo-code}[repository] code. -`$ git clone https://github.com/prathibhapadma/devon4quarkus-reference/terraform` +`$ git clone https://github.com/devon4quarkus-reference/terraform` You can explore this repository by changing directories. `cd terraform` -In here, you will find three files used to provision the AKS cluster. - -1. `aks-cluster.tf` provisions a resource group and an AKS cluster. The default_node_pool defines the number of VMs and the VM type the cluster uses. +List of the files used to provision the Aks Cluster. -2. `variables.tf` declares the appID and password so Terraform can use reference its configuration +. `aks-cluster.tf` provisions a Resource Group and Aks Cluster. The default node pool defines the number of VMs and the VM type cluster uses. -3. `terraform.tfvars` defines the appId and password variables to authenticate to Azure +. `variables.tf` declares the variables to terraform, It can use reference to its configuration. -4. `outputs.tf` declares values that can be useful to interact with your AKS cluster +. `terraform.tfvars` defines the variables values to terraform. +. `outputs.tf` declares values that can be useful to interact with your Aks Cluster. -5. `versions.tf` set the Terraform version and defines the required_provider block +. `versions.tf` set the Terraform version and defines the required provider block. -== *Create an Active Directory service principal account* +== *Create an Active Directory Service Principal Account* -Here you will use an Azure Active Directory service principal to authenticate to the Azure provider. +Here you will use an Azure Active Directory Service Principal to authenticate the Azure provider. -First, you need to create an Active Directory service principal account using the Azure CLI. You should see something like the following. +First, you need to create an Active Directory Service Principal account using the Azure CLI. You should see something like the following. ``` -$ az ad sp create-for-rbac --skip-assignment +$ az ad sp create-for-rbac --name az-aks-sp --role Contributor + { "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", "displayName": "azure-cli-2021-11-17-00-46-05", @@ -65,7 +72,7 @@ $ az ad sp create-for-rbac --skip-assignment == *Update your terraform.tfvars file* -Replace the values in your `terraform.tfvars` file with your `appId` and `password`. Terraform will use these values to authenticate to Azure before provisioning your resources. +Replace the values in your `terraform.tfvars` file with your `appId` and `password`, Terraform will use these values to authenticate to Azure before provisioning your resources. ``` # terraform.tfvars @@ -73,37 +80,38 @@ appId = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" password = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" ``` -== *Deploy Applications with the Helm Provider* +== *Deploy Helm-charts with the Helm Provider* + The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. Create the Helm Provider in `aks-cluster.tf` and configure the helm repository location. == *Initialize Terraform* -After you have saved your customized variables file, initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. +After you have saved your customized variables file, Initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. `$ terraform init` == *Terraform plan* -terraform plan command creates an execution of plan and save it to the local file tfplan. +Terraform plan creates an execution of plan and evaluates a Terraform configuration to determine the desired state of all the resources it declares. `$terraform plan` == *Terraform apply* -In your initialized directory, run terraform apply and review the planned actions. Your terminal output should indicate the plan is running and what resources will be created. +Terraform apply will review the planned actions, your terminal output should indicate the plan is running and what resources will be created. `$ terraform apply` -You can see this terraform apply will provision an Azure resource group and an AKS cluster. Confirm the apply with a yes. +You can see this terraform apply will provision an Azure Resource Group and Aks Cluster. Confirm the apply with a yes. == *Configure kubectl* -Now that you've provisioned your AKS cluster, you need to configure kubectl. +Now that you've provisioned your AKS Cluster, you need to configure kubectl. Run the following command to retrieve the access credentials for your cluster and automatically configure kubectl. `az aks get-credentials --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` -The resource group name and Kubernetes Cluster name correspond to the output variables showed after the successful Terraform run. +The Resource Group name and Kubernetes cluster name correspond to the output variables showed after the successful Terraform run. == *Access Kubernetes Dashboard* Run the following command to generate the Azure portal link. @@ -117,3 +125,7 @@ Run the destroy command and confirm with yes in your terminal. `$ terraform destroy` +``` +Note: terraform destroy can clean your Aks Cluster but not Resource Group, Because we are not authorized to perform RG deletion. For the RG deletion we need to raise ticket for IT Group. +``` + From fc126cf79c0e2e9cd9c00a221f51ca795d0c343f Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 24 Nov 2021 09:14:09 +0530 Subject: [PATCH 24/72] Update terraform_doc.asciidoc --- terraform/terraform_doc.asciidoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/terraform/terraform_doc.asciidoc b/terraform/terraform_doc.asciidoc index 79cb2541..e3de897c 100644 --- a/terraform/terraform_doc.asciidoc +++ b/terraform/terraform_doc.asciidoc @@ -25,7 +25,7 @@ The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for dep == *Login to Azure Account* -Before the terraform implementation we need to login Azure account through Azure CLI. +Before the terraform implementation we need to login Azure account through `Azure CLI`. `az login` @@ -41,7 +41,7 @@ You can explore this repository by changing directories. List of the files used to provision the Aks Cluster. -. `aks-cluster.tf` provisions a Resource Group and Aks Cluster. The default node pool defines the number of VMs and the VM type cluster uses. +. `aks-cluster.tf` provisions a Resource Group and AKS Cluster. The default node pool defines the number of VMs and the VM type cluster uses. . `variables.tf` declares the variables to terraform, It can use reference to its configuration. @@ -53,9 +53,9 @@ List of the files used to provision the Aks Cluster. == *Create an Active Directory Service Principal Account* -Here you will use an Azure Active Directory Service Principal to authenticate the Azure provider. +Here you will use an Azure `Active Directory Service Principal` to authenticate the Azure provider. -First, you need to create an Active Directory Service Principal account using the Azure CLI. You should see something like the following. +First, you need to create an `Active Directory Service Principal` account using the `Azure CLI`. You should see something like the following. ``` $ az ad sp create-for-rbac --name az-aks-sp --role Contributor From cb39e47f61d1d465968a0d7e308692a90ea6486a Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 24 Nov 2021 09:14:54 +0530 Subject: [PATCH 25/72] Update terraform_doc.asciidoc --- terraform/terraform_doc.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terraform/terraform_doc.asciidoc b/terraform/terraform_doc.asciidoc index e3de897c..0462d285 100644 --- a/terraform/terraform_doc.asciidoc +++ b/terraform/terraform_doc.asciidoc @@ -126,6 +126,6 @@ Run the destroy command and confirm with yes in your terminal. `$ terraform destroy` ``` -Note: terraform destroy can clean your Aks Cluster but not Resource Group, Because we are not authorized to perform RG deletion. For the RG deletion we need to raise ticket for IT Group. +Note: terraform destroy can clean your Aks Cluster but not Resource Group, Because we are not authorized to perform RG deletion. For that we need to raise ticket for IT Group. ``` From 2eff0543c1d82a3b7ead4717af4408ec99f6e698 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Thu, 25 Nov 2021 09:34:59 +0530 Subject: [PATCH 26/72] Update deployment.yaml --- charts/quarkus-app/templates/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/quarkus-app/templates/deployment.yaml b/charts/quarkus-app/templates/deployment.yaml index ab721835..106f56f5 100644 --- a/charts/quarkus-app/templates/deployment.yaml +++ b/charts/quarkus-app/templates/deployment.yaml @@ -24,7 +24,7 @@ spec: containers: - name: demo-quarkus # where should the image come from - image: 'dockerimages1508/quarkas-repo:v1' + image: 'dockerregistry101/demo-quarkus:latest' #command: ["java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes="service.name=quarkus-demo"] #command: ["/deployments/run-java.sh"] # always perform pull when creating pod From 22fc6c48d66328fe9511f4d3ba62bac6b71fc58d Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Thu, 25 Nov 2021 19:40:48 +0530 Subject: [PATCH 27/72] Update terraform_doc.asciidoc --- terraform/terraform_doc.asciidoc | 77 +++++++++++++++----------------- 1 file changed, 35 insertions(+), 42 deletions(-) diff --git a/terraform/terraform_doc.asciidoc b/terraform/terraform_doc.asciidoc index 0462d285..21914c82 100644 --- a/terraform/terraform_doc.asciidoc +++ b/terraform/terraform_doc.asciidoc @@ -11,7 +11,7 @@ :url-terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli -:url-repo-code: +:url-repo-code: https://github.com/devon4quarkus-reference/azure-terraform The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing and scaling containerized applications on Azure. @@ -23,23 +23,33 @@ The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for dep . Install the {url-helm}[Helm]. . Install the {url-terraform}[Terraform]. +*Setup using Script* + +Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/initial_setup_script.sh` + +*Usage* + +`bash initial_setup_script.sh` + == *Login to Azure Account* Before the terraform implementation we need to login Azure account through `Azure CLI`. - -`az login` +``` +az login +az account set --subscription $SUBSCRIPTION +``` == *Set-Up And Initialize Terraform Workspace* In your terminal, clone the following {url-repo-code}[repository] code. -`$ git clone https://github.com/devon4quarkus-reference/terraform` +`$ git clone https://github.com/devon4quarkus-reference` -You can explore this repository by changing directories. +You can explore this repository by changing the directories. -`cd terraform` +`cd azure-terraform/terraform-aks-setup` -List of the files used to provision the Aks Cluster. +List of the files used to provision the AKS Cluster. . `aks-cluster.tf` provisions a Resource Group and AKS Cluster. The default node pool defines the number of VMs and the VM type cluster uses. @@ -51,41 +61,6 @@ List of the files used to provision the Aks Cluster. . `versions.tf` set the Terraform version and defines the required provider block. -== *Create an Active Directory Service Principal Account* - -Here you will use an Azure `Active Directory Service Principal` to authenticate the Azure provider. - -First, you need to create an `Active Directory Service Principal` account using the `Azure CLI`. You should see something like the following. - -``` -$ az ad sp create-for-rbac --name az-aks-sp --role Contributor - -{ - "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", - "displayName": "azure-cli-2021-11-17-00-46-05", - "name": "http://azure-cli-2021-11-17-00-46-05", - "password": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", - "tenant": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" -} - -``` - -== *Update your terraform.tfvars file* - -Replace the values in your `terraform.tfvars` file with your `appId` and `password`, Terraform will use these values to authenticate to Azure before provisioning your resources. - -``` -# terraform.tfvars -appId = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" -password = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" - -``` -== *Deploy Helm-charts with the Helm Provider* - -The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. - -Create the Helm Provider in `aks-cluster.tf` and configure the helm repository location. - == *Initialize Terraform* After you have saved your customized variables file, Initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. @@ -103,6 +78,24 @@ Terraform apply will review the planned actions, your terminal output should ind You can see this terraform apply will provision an Azure Resource Group and Aks Cluster. Confirm the apply with a yes. +== *Deploy Helm-charts with the Helm Provider* + +The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. Create the Helm Provider in `helm_release.tf` and configure the helm-charts repository location. + +Change the directory in to `Helm Release Provider`. + +`cd azure-terraform/terraform-helm-deploy` + +Here we need to follow same steps as above process to deploy helm charts in to AKS cluster (Example: terraform init and terraform apply). + +== Terraform initialize and apply using Script + +Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/script_execute.sh` + +== Usage + +`bash script_execute.sh` + == *Configure kubectl* Now that you've provisioned your AKS Cluster, you need to configure kubectl. From 846fab55600843e43798c2e0f009c0cdd26768f1 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:31:34 +0530 Subject: [PATCH 28/72] Delete terraform directory --- terraform/README.md | 3 - terraform/aks-cluster.tf | 74 ------------------ terraform/outputs.tf | 31 -------- terraform/run.sh | 20 ----- terraform/terraform.tfvars | 2 - terraform/terraform_doc.asciidoc | 124 ------------------------------- terraform/variables.tf | 7 -- terraform/versions.tf | 11 --- 8 files changed, 272 deletions(-) delete mode 100644 terraform/README.md delete mode 100644 terraform/aks-cluster.tf delete mode 100644 terraform/outputs.tf delete mode 100644 terraform/run.sh delete mode 100644 terraform/terraform.tfvars delete mode 100644 terraform/terraform_doc.asciidoc delete mode 100644 terraform/variables.tf delete mode 100644 terraform/versions.tf diff --git a/terraform/README.md b/terraform/README.md deleted file mode 100644 index 0932e455..00000000 --- a/terraform/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Provision your Azure Kubernetes clusters with the Terraform and Deploy Helm charts using Helm provider. - -Follow the [terraform_doc](https://github.com/prathibhapadma/devon4quarkus-reference/blob/updated-block/terraform/terraform_doc.asciidoc). diff --git a/terraform/aks-cluster.tf b/terraform/aks-cluster.tf deleted file mode 100644 index c7c6191f..00000000 --- a/terraform/aks-cluster.tf +++ /dev/null @@ -1,74 +0,0 @@ - -resource "random_pet" "prefix" {} - -provider "azurerm" { - features {} -} - -resource "azurerm_resource_group" "default" { - name = "${random_pet.prefix.id}-rg" - location = "West US 2" - - tags = { - environment = "Demo" - } -} - -resource "azurerm_kubernetes_cluster" "default" { - name = "${random_pet.prefix.id}-aks" - location = azurerm_resource_group.default.location - resource_group_name = azurerm_resource_group.default.name - dns_prefix = "${random_pet.prefix.id}-k8s" - - default_node_pool { - name = "default" - node_count = 2 - vm_size = "Standard_D2_v2" - os_disk_size_gb = 30 - } - - service_principal { - client_id = var.appId - client_secret = var.password - } - - role_based_access_control { - enabled = true - } - - tags = { - environment = "Demo" - } -} - -provider helm { - kubernetes { - #config_path = "~/.kube/config" - config_path = "/root/.kube/config" - } -} - -resource helm_release otel-release { - name = "otel-release-controller" - - #repository = " https://github.com/prathibhapadma/helm-charts/charts/helm" - chart = "/root/devon4quarkus-reference/charts/helm" - - set { - name = "service.type" - value = "LoadBalancer" - } -} - -resource helm_release quarkus-app-release { - name = "quarkus-app-controller" - - repository = "https://github.com/prathibhapadma/helm-charts/charts/quarkus-app" - chart = "/root/devon4quarkus-reference/charts/quarkus-app" - - set { - name = "service.type" - value = "LoadBalancer" - } -} - diff --git a/terraform/outputs.tf b/terraform/outputs.tf deleted file mode 100644 index d358d1bd..00000000 --- a/terraform/outputs.tf +++ /dev/null @@ -1,31 +0,0 @@ -output "resource_group_name" { - value = azurerm_resource_group.default.name -} - -output "kubernetes_cluster_name" { - value = azurerm_kubernetes_cluster.default.name -} - -# output "host" { -# value = azurerm_kubernetes_cluster.default.kube_config.0.host -# } - -# output "client_key" { -# value = azurerm_kubernetes_cluster.default.kube_config.0.client_key -# } - -# output "client_certificate" { -# value = azurerm_kubernetes_cluster.default.kube_config.0.client_certificate -# } - -# output "kube_config" { -# value = azurerm_kubernetes_cluster.default.kube_config_raw -# } - -# output "cluster_username" { -# value = azurerm_kubernetes_cluster.default.kube_config.0.username -# } - -# output "cluster_password" { -# value = azurerm_kubernetes_cluster.default.kube_config.0.password -# } diff --git a/terraform/run.sh b/terraform/run.sh deleted file mode 100644 index 949cc47d..00000000 --- a/terraform/run.sh +++ /dev/null @@ -1,20 +0,0 @@ -# make sure terraform CLI is installed -terraform - -# initialize terraform Azure modules -terraform init - -# validate the template -terraform validate - -# plan and save the infra changes into tfplan file. -terraform plan - -# delete the infra -#terraform destroy - -# cleanup files -#rm terraform.tfstate -#rm terraform.tfstate.backup -#rm .terraform.lock.hcl -#rm -r .terraform/ diff --git a/terraform/terraform.tfvars b/terraform/terraform.tfvars deleted file mode 100644 index 01687ad9..00000000 --- a/terraform/terraform.tfvars +++ /dev/null @@ -1,2 +0,0 @@ -appId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -password = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" diff --git a/terraform/terraform_doc.asciidoc b/terraform/terraform_doc.asciidoc deleted file mode 100644 index 21914c82..00000000 --- a/terraform/terraform_doc.asciidoc +++ /dev/null @@ -1,124 +0,0 @@ - -== Provision an Aks Cluster with Terraform - -:url-az-account: https://portal.azure.com/#home - -:url-az-CLI: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest - -:url-az-kubectl: https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli - -:url-helm: https://helm.sh/docs/intro/install/ - -:url-terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli - -:url-repo-code: https://github.com/devon4quarkus-reference/azure-terraform - -The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing and scaling containerized applications on Azure. - -== *Prerequisites:* - -. Sign up into {url-az-account}[Azure Account]. -. Install the Azure {url-az-CLI}[CLI]. -. Install the {url-az-kubectl}[kubectl]. -. Install the {url-helm}[Helm]. -. Install the {url-terraform}[Terraform]. - -*Setup using Script* - -Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/initial_setup_script.sh` - -*Usage* - -`bash initial_setup_script.sh` - -== *Login to Azure Account* - -Before the terraform implementation we need to login Azure account through `Azure CLI`. -``` -az login -az account set --subscription $SUBSCRIPTION -``` - -== *Set-Up And Initialize Terraform Workspace* - -In your terminal, clone the following {url-repo-code}[repository] code. - -`$ git clone https://github.com/devon4quarkus-reference` - -You can explore this repository by changing the directories. - -`cd azure-terraform/terraform-aks-setup` - -List of the files used to provision the AKS Cluster. - -. `aks-cluster.tf` provisions a Resource Group and AKS Cluster. The default node pool defines the number of VMs and the VM type cluster uses. - -. `variables.tf` declares the variables to terraform, It can use reference to its configuration. - -. `terraform.tfvars` defines the variables values to terraform. - -. `outputs.tf` declares values that can be useful to interact with your Aks Cluster. - -. `versions.tf` set the Terraform version and defines the required provider block. - -== *Initialize Terraform* -After you have saved your customized variables file, Initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. - -`$ terraform init` - -== *Terraform plan* -Terraform plan creates an execution of plan and evaluates a Terraform configuration to determine the desired state of all the resources it declares. - -`$terraform plan` - -== *Terraform apply* -Terraform apply will review the planned actions, your terminal output should indicate the plan is running and what resources will be created. - -`$ terraform apply` - -You can see this terraform apply will provision an Azure Resource Group and Aks Cluster. Confirm the apply with a yes. - -== *Deploy Helm-charts with the Helm Provider* - -The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. Create the Helm Provider in `helm_release.tf` and configure the helm-charts repository location. - -Change the directory in to `Helm Release Provider`. - -`cd azure-terraform/terraform-helm-deploy` - -Here we need to follow same steps as above process to deploy helm charts in to AKS cluster (Example: terraform init and terraform apply). - -== Terraform initialize and apply using Script - -Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/script_execute.sh` - -== Usage - -`bash script_execute.sh` - -== *Configure kubectl* - -Now that you've provisioned your AKS Cluster, you need to configure kubectl. - -Run the following command to retrieve the access credentials for your cluster and automatically configure kubectl. - -`az aks get-credentials --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` - -The Resource Group name and Kubernetes cluster name correspond to the output variables showed after the successful Terraform run. - -== *Access Kubernetes Dashboard* -Run the following command to generate the Azure portal link. - -`az aks browse --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` - -Go to the URL in your preferred browser to view the Kubernetes resource view. - -== *Clean up your workspace* -Run the destroy command and confirm with yes in your terminal. - -`$ terraform destroy` - -``` -Note: terraform destroy can clean your Aks Cluster but not Resource Group, Because we are not authorized to perform RG deletion. For that we need to raise ticket for IT Group. -``` - diff --git a/terraform/variables.tf b/terraform/variables.tf deleted file mode 100644 index 6bff5ce7..00000000 --- a/terraform/variables.tf +++ /dev/null @@ -1,7 +0,0 @@ -variable "appId" { - description = "Azure Kubernetes Service Cluster service principal" -} - -variable "password" { - description = "Azure Kubernetes Service Cluster password" -} diff --git a/terraform/versions.tf b/terraform/versions.tf deleted file mode 100644 index c9511836..00000000 --- a/terraform/versions.tf +++ /dev/null @@ -1,11 +0,0 @@ -terraform { - required_providers { - azurerm = { - source = "hashicorp/azurerm" - version = "2.66.0" - } - } - - required_version = ">= 0.14" -} - From 78e01cd257cb98031f6f086af3f3d8ee356eb57f Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:33:05 +0530 Subject: [PATCH 29/72] updated main file --- azure-terraform/terraform-aks-setup/main.tf | 31 +++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 azure-terraform/terraform-aks-setup/main.tf diff --git a/azure-terraform/terraform-aks-setup/main.tf b/azure-terraform/terraform-aks-setup/main.tf new file mode 100644 index 00000000..1c490a36 --- /dev/null +++ b/azure-terraform/terraform-aks-setup/main.tf @@ -0,0 +1,31 @@ +resource "azurerm_resource_group" "aks-rg" { + name = var.resource_group_name + location = var.location +} + + +resource "azurerm_kubernetes_cluster" "aks" { + name = var.cluster_name + kubernetes_version = var.kubernetes_version + location = var.location + resource_group_name = azurerm_resource_group.aks-rg.name + dns_prefix = var.cluster_name + + default_node_pool { + name = "system" + node_count = var.system_node_count + vm_size = "Standard_DS2_v2" + type = "VirtualMachineScaleSets" + availability_zones = [1, 2, 3] + enable_auto_scaling = false + } + + identity { + type = "SystemAssigned" + } + + network_profile { + load_balancer_sku = "Standard" + network_plugin = "kubenet" + } +} From 1df76c8b620135b058996f068df8565535d01e5a Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:36:03 +0530 Subject: [PATCH 30/72] Create output.tf --- azure-terraform/terraform-aks-setup/output.tf | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 azure-terraform/terraform-aks-setup/output.tf diff --git a/azure-terraform/terraform-aks-setup/output.tf b/azure-terraform/terraform-aks-setup/output.tf new file mode 100644 index 00000000..3be3b183 --- /dev/null +++ b/azure-terraform/terraform-aks-setup/output.tf @@ -0,0 +1,39 @@ +output "aks_node_rg" { + value = azurerm_kubernetes_cluster.aks.node_resource_group +} +output "kubernetes_cluster_name" { + value = azurerm_kubernetes_cluster.aks.name +} + +output "aks_id" { + value = azurerm_kubernetes_cluster.aks.id +} + +output "aks_fqdn" { + value = azurerm_kubernetes_cluster.aks.fqdn +} + +output "host" { + value = azurerm_kubernetes_cluster.aks.kube_config.0.host +} + +output "client_key" { + value = azurerm_kubernetes_cluster.aks.kube_config.0.client_key +} + +output "client_certificate" { + value = azurerm_kubernetes_cluster.aks.kube_config.0.client_certificate +} + +output "kube_config" { + value = azurerm_kubernetes_cluster.aks.kube_config_raw + sensitive = true +} + +output "cluster_username" { + value = azurerm_kubernetes_cluster.aks.kube_config.0.username +} + +output "cluster_password" { + value = azurerm_kubernetes_cluster.aks.kube_config.0.password +} From d9b17c2ca8a83cb29af93e5357360e7c7ba3d2a4 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:36:37 +0530 Subject: [PATCH 31/72] Create provider.tf --- azure-terraform/terraform-aks-setup/provider.tf | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 azure-terraform/terraform-aks-setup/provider.tf diff --git a/azure-terraform/terraform-aks-setup/provider.tf b/azure-terraform/terraform-aks-setup/provider.tf new file mode 100644 index 00000000..de271b58 --- /dev/null +++ b/azure-terraform/terraform-aks-setup/provider.tf @@ -0,0 +1,16 @@ +provider "azurerm" { + features {} + +} + +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "2.66.0" + } + } + + required_version = ">= 0.14" + +} From 9763fb3363cded0e13b96db8f7fa0eaa218a4968 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:37:25 +0530 Subject: [PATCH 32/72] Create terraform.tfvars --- azure-terraform/terraform-aks-setup/terraform.tfvars | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 azure-terraform/terraform-aks-setup/terraform.tfvars diff --git a/azure-terraform/terraform-aks-setup/terraform.tfvars b/azure-terraform/terraform-aks-setup/terraform.tfvars new file mode 100644 index 00000000..a8c4f223 --- /dev/null +++ b/azure-terraform/terraform-aks-setup/terraform.tfvars @@ -0,0 +1,5 @@ +resource_group_name = "AKSRG103" +location = "West Europe" +cluster_name = "k8s-cluster" +kubernetes_version = "1.19.13" +system_node_count = 2 From 3a98f25e947eb272c93cc36150a98444ec0321a0 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:38:01 +0530 Subject: [PATCH 33/72] Create variables.tf --- .../terraform-aks-setup/variables.tf | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 azure-terraform/terraform-aks-setup/variables.tf diff --git a/azure-terraform/terraform-aks-setup/variables.tf b/azure-terraform/terraform-aks-setup/variables.tf new file mode 100644 index 00000000..33dbfdbf --- /dev/null +++ b/azure-terraform/terraform-aks-setup/variables.tf @@ -0,0 +1,20 @@ +variable "resource_group_name" { + type = string + description = "RG name in Azure" +} +variable "location" { + type = string + description = "Resources location in Azure" +} +variable "cluster_name" { + type = string + description = "AKS name in Azure" +} +variable "kubernetes_version" { + type = string + description = "Kubernetes version" +} +variable "system_node_count" { + type = number + description = "Number of AKS worker nodes" +} From 26ce5e59421fba269875c2f137b87f779dac562d Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:39:21 +0530 Subject: [PATCH 34/72] Create helm_release.tf --- .../terraform-helm-deploy/helm_release.tf | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 azure-terraform/terraform-helm-deploy/helm_release.tf diff --git a/azure-terraform/terraform-helm-deploy/helm_release.tf b/azure-terraform/terraform-helm-deploy/helm_release.tf new file mode 100644 index 00000000..0a9d4018 --- /dev/null +++ b/azure-terraform/terraform-helm-deploy/helm_release.tf @@ -0,0 +1,55 @@ +data "terraform_remote_state" "aks" { + backend = "local" + config = { + path = "/root/quarkus-opentelemetry-example/azure-terraform/terraform-aks-setup/terraform.tfstate" + } +} + +data "azurerm_kubernetes_cluster" "aks" { + name = "k8s-cluster" + resource_group_name = "AKSRG103" +} + +provider "kubernetes" { + host = data.azurerm_kubernetes_cluster.aks.kube_config.0.host + username = data.azurerm_kubernetes_cluster.aks.kube_config.0.username + password = data.azurerm_kubernetes_cluster.aks.kube_config.0.password + client_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_certificate) + client_key = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_key) + cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.cluster_ca_certificate) +} + +provider "helm" { + kubernetes { + host = data.azurerm_kubernetes_cluster.aks.kube_config.0.host + username = data.azurerm_kubernetes_cluster.aks.kube_config.0.username + password = data.azurerm_kubernetes_cluster.aks.kube_config.0.password + client_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_certificate) + client_key = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_key) + cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.cluster_ca_certificate) +} +} + +resource helm_release otel-release { + name = "otel-release-controller" + +# repository = "https://github.com/prathibhapadma/quarkus-otel-test-repo/tree/master/charts" + chart = "/root/quarkus-opentelemetry-example/charts/helm" + + set { + name = "service.type" + value = "LoadBalancer" + } +} + +resource helm_release quarkus-app-release { + name = "quarkus-app-controller" + + #repository = "https://github.com/prathibhapadma/quarkus-otel-test-repo/tree/master/charts" + chart = "/root/quarkus-opentelemetry-example/charts/quarkus-app" + + set { + name = "service.type" + value = "LoadBalancer" + } +} From 7a08dc78b89b8102196975df48f7fbc22a9e7fbb Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:39:49 +0530 Subject: [PATCH 35/72] Create provider.tf --- azure-terraform/terraform-helm-deploy/provider.tf | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 azure-terraform/terraform-helm-deploy/provider.tf diff --git a/azure-terraform/terraform-helm-deploy/provider.tf b/azure-terraform/terraform-helm-deploy/provider.tf new file mode 100644 index 00000000..bea28bfc --- /dev/null +++ b/azure-terraform/terraform-helm-deploy/provider.tf @@ -0,0 +1,15 @@ +provider "azurerm" { + features {} + +} + +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "2.66.0" + } + } + + required_version = ">= 0.14" +} From cfe525adf0283a14eaafc709f973553d43b9c04e Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:40:50 +0530 Subject: [PATCH 36/72] Create terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 123 +++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 azure-terraform/terraform_doc.asciidoc diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc new file mode 100644 index 00000000..502da54a --- /dev/null +++ b/azure-terraform/terraform_doc.asciidoc @@ -0,0 +1,123 @@ + +== Provision an Aks Cluster with Terraform + +:url-az-account: https://portal.azure.com/#home + +:url-az-CLI: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest + +:url-az-kubectl: https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli + +:url-helm: https://helm.sh/docs/intro/install/ + +:url-terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli + +:url-repo-code: https://github.com/devon4quarkus-reference/azure-terraform + +The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing and scaling containerized applications on Azure. + +== *Prerequisites:* + +. Sign up into {url-az-account}[Azure Account]. +. Install the Azure {url-az-CLI}[CLI]. +. Install the {url-az-kubectl}[kubectl]. +. Install the {url-helm}[Helm]. +. Install the {url-terraform}[Terraform]. + +*Setup using Script* + +Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/initial_setup_script.sh` + +*Usage* + +`bash initial_setup_script.sh` + +== *Login to Azure Account* + +Before the terraform implementation we need to login Azure account through `Azure CLI`. +``` +az login +az account set --subscription $SUBSCRIPTION +``` + +== *Set-Up And Initialize Terraform Workspace* + +In your terminal, clone the following {url-repo-code}[repository] code. + +`$ git clone https://github.com/devon4quarkus-reference` + +You can explore this repository by changing the directories. + +`cd azure-terraform/terraform-aks-setup` + +List of the files used to provision the AKS Cluster. + +. `aks-cluster.tf` provisions a Resource Group and AKS Cluster. The default node pool defines the number of VMs and the VM type cluster uses. + +. `variables.tf` declares the variables to terraform, It can use reference to its configuration. + +. `terraform.tfvars` defines the variables values to terraform. + +. `outputs.tf` declares values that can be useful to interact with your Aks Cluster. + +. `versions.tf` set the Terraform version and defines the required provider block. + +== *Initialize Terraform* +After you have saved your customized variables file, Initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. + +`$ terraform init` + +== *Terraform plan* +Terraform plan creates an execution of plan and evaluates a Terraform configuration to determine the desired state of all the resources it declares. + +`$terraform plan` + +== *Terraform apply* +Terraform apply will review the planned actions, your terminal output should indicate the plan is running and what resources will be created. + +`$ terraform apply` + +You can see this terraform apply will provision an Azure Resource Group and Aks Cluster. Confirm the apply with a yes. + +== *Deploy Helm-charts with the Helm Provider* + +The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. Create the Helm Provider in `helm_release.tf` and configure the helm-charts repository location. + +Change the directory in to `Helm Release Provider`. + +`cd azure-terraform/terraform-helm-deploy` + +Here we need to follow same steps as above process to deploy helm charts in to AKS cluster (Example: terraform init and terraform apply). + +== Terraform initialize and apply using Script + +Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/script_execute.sh` + +== Usage + +`bash script_execute.sh` + +== *Configure kubectl* + +Now that you've provisioned your AKS Cluster, you need to configure kubectl. + +Run the following command to retrieve the access credentials for your cluster and automatically configure kubectl. + +`az aks get-credentials --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` + +The Resource Group name and Kubernetes cluster name correspond to the output variables showed after the successful Terraform run. + +== *Access Kubernetes Dashboard* +Run the following command to generate the Azure portal link. + +`az aks browse --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` + +Go to the URL in your preferred browser to view the Kubernetes resource view. + +== *Clean up your workspace* +Run the destroy command and confirm with yes in your terminal. + +`$ terraform destroy` + +``` +Note: terraform destroy can clean your Aks Cluster but not Resource Group, Because we are not authorized to perform RG deletion. For that we need to raise ticket for IT Group. +``` From 373c63dfc09f144d8ee389dfab8d56861916017e Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:41:37 +0530 Subject: [PATCH 37/72] Create script_execute.sh --- azure-terraform/script_execute.sh | 47 +++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 azure-terraform/script_execute.sh diff --git a/azure-terraform/script_execute.sh b/azure-terraform/script_execute.sh new file mode 100644 index 00000000..d91ecdeb --- /dev/null +++ b/azure-terraform/script_execute.sh @@ -0,0 +1,47 @@ + +echo "Switch into Terraform AKS Cluster Set-up directory" +cd terraform-aks-setup +# make sure terraform CLI is installed +#terraform + +# format the tf files +#terraform fmt + +# initialize terraform Azure modules +terraform init + +# validate the template +terraform validate + +# plan and save the infra changes into tfplan file +terraform plan + +# apply the infra changes +terraform apply --auto-approve + +# delete the infra +#terraform destroy + +cd ../ +echo "Switch into Terraform Helm Release directory" +cd terraform-helm-deploy +# make sure terraform CLI is installed +#terraform + +# format the tf files +#terraform fmt + +# initialize terraform Azure modules +terraform init + +# validate the template +terraform validate + +# plan and save the infra changes into tfplan file +terraform plan + +# apply the infra changes +terraform apply --auto-approve + +# delete the infra +#terraform destroy From e3b62f4281a4490e9003d6a29fefc273d7d2aa13 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:42:11 +0530 Subject: [PATCH 38/72] Create initial_setup_script.sh --- azure-terraform/initial_setup_script.sh | 1 + 1 file changed, 1 insertion(+) create mode 100644 azure-terraform/initial_setup_script.sh diff --git a/azure-terraform/initial_setup_script.sh b/azure-terraform/initial_setup_script.sh new file mode 100644 index 00000000..2282502f --- /dev/null +++ b/azure-terraform/initial_setup_script.sh @@ -0,0 +1 @@ +In progress From 9d3f2069ad03c09ca6b5805ebf22ff7453335a83 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:44:28 +0530 Subject: [PATCH 39/72] Delete charts directory --- charts/helm/Chart.yaml | 9 -- charts/helm/templates/configmap.yaml | 98 --------------- charts/helm/templates/grafana-deployment.yaml | 43 ------- charts/helm/templates/ingress.yaml | 46 ------- .../jaeger-all-in-one-deployment.yaml | 55 -------- .../helm/templates/otel-agent-deployment.yaml | 98 --------------- .../templates/otel-collector-deployment.yaml | 83 ------------ .../helm/templates/prometheus-deployment.yaml | 55 -------- .../templates/victoriametrics-deployment.yaml | 77 ------------ charts/helm/templates/vmagent-deployment.yaml | 53 -------- .../zipkin-all-in-one-deployment.yaml | 45 ------- charts/helm/values.yaml | 26 ---- charts/quarkus-app/Chart.yaml | 24 ---- charts/quarkus-app/templates/deployment.yaml | 118 ------------------ charts/quarkus-app/templates/ingress.yaml | 20 --- .../templates/postgres-deployment.yaml | 79 ------------ .../templates/postgres-service.yaml | 15 --- charts/quarkus-app/templates/service.yaml | 17 --- 18 files changed, 961 deletions(-) delete mode 100644 charts/helm/Chart.yaml delete mode 100644 charts/helm/templates/configmap.yaml delete mode 100644 charts/helm/templates/grafana-deployment.yaml delete mode 100644 charts/helm/templates/ingress.yaml delete mode 100644 charts/helm/templates/jaeger-all-in-one-deployment.yaml delete mode 100644 charts/helm/templates/otel-agent-deployment.yaml delete mode 100644 charts/helm/templates/otel-collector-deployment.yaml delete mode 100644 charts/helm/templates/prometheus-deployment.yaml delete mode 100644 charts/helm/templates/victoriametrics-deployment.yaml delete mode 100644 charts/helm/templates/vmagent-deployment.yaml delete mode 100644 charts/helm/templates/zipkin-all-in-one-deployment.yaml delete mode 100644 charts/helm/values.yaml delete mode 100644 charts/quarkus-app/Chart.yaml delete mode 100644 charts/quarkus-app/templates/deployment.yaml delete mode 100644 charts/quarkus-app/templates/ingress.yaml delete mode 100644 charts/quarkus-app/templates/postgres-deployment.yaml delete mode 100644 charts/quarkus-app/templates/postgres-service.yaml delete mode 100644 charts/quarkus-app/templates/service.yaml diff --git a/charts/helm/Chart.yaml b/charts/helm/Chart.yaml deleted file mode 100644 index 9f02c0a0..00000000 --- a/charts/helm/Chart.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: v3 -name: OpenTelemetry Helm template -version: 1.0.0 -description: Helm chart template for an OpenTelemetry Kubernetes deployment -appVersion: 1.0.0 -keywords: - - template -maintainers: - - name: devon4j Developer diff --git a/charts/helm/templates/configmap.yaml b/charts/helm/templates/configmap.yaml deleted file mode 100644 index 87ed63d2..00000000 --- a/charts/helm/templates/configmap.yaml +++ /dev/null @@ -1,98 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: otel-agent -data: - otel-agent-config: | - receivers: - otlp: - protocols: - grpc: - - processors: - batch: - - exporters: - otlp: - endpoint: "otel-collector.default.svc.cluster.local:4317" - insecure: true - - service: - pipelines: - traces: - receivers: [otlp] - processors: [batch] - exporters: [otlp] - metrics: - receivers: [otlp] - processors: [batch] - exporters: [otlp] ---- - -apiVersion: v1 -kind: ConfigMap -metadata: - name: otel-collector -data: - otel-collector-config: | - receivers: - otlp: - protocols: - grpc: - http: - cors_allowed_origins: - - http://* - - https://* - - processors: - batch: - - exporters: - logging: - zipkin: - endpoint: "http://zipkin-all-in-one.default.svc.cluster.local:9411/api/v2/spans" - format: proto - jaeger: - endpoint: jaeger-all-in-one.default.svc.cluster.local:14250 - insecure: true - prometheus: - endpoint: "0.0.0.0:8889" - - service: - pipelines: - traces: - receivers: [otlp] - exporters: [zipkin, jaeger] - processors: [batch] - metrics: - receivers: [otlp] - processors: [batch] - exporters: [prometheus] ---- - -apiVersion: v1 -kind: ConfigMap -metadata: - name: vmetrics-config -data: - vMetrics.yaml: | - scrape_configs: - - job_name: '{{ .Values.application.metrics.jobname }}' - scrape_interval: 10s - metrics_path: '{{ .Values.application.metrics.url }}' - static_configs: - - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] ---- - -apiVersion: v1 -kind: ConfigMap -metadata: - name: prometheus -data: - prometheus-config: | - scrape_configs: - - job_name: '{{ .Values.application.metrics.jobname }}' - scrape_interval: 10s - metrics_path: '{{ .Values.application.metrics.url }}' - static_configs: - - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] \ No newline at end of file diff --git a/charts/helm/templates/grafana-deployment.yaml b/charts/helm/templates/grafana-deployment.yaml deleted file mode 100644 index a1b2db33..00000000 --- a/charts/helm/templates/grafana-deployment.yaml +++ /dev/null @@ -1,43 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: grafana - name: grafana -spec: - replicas: 1 - selector: - matchLabels: - component: grafana - template: - metadata: - labels: - component: grafana - spec: - containers: - - image: grafana/grafana - name: grafana - ports: - - containerPort: 3000 - resources: {} - restartPolicy: Always - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: grafana - name: grafana -spec: - ports: - - name: "3000" - port: 3000 - protocol: TCP - targetPort: 3000 - selector: - component: grafana - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/charts/helm/templates/ingress.yaml b/charts/helm/templates/ingress.yaml deleted file mode 100644 index efa4bca9..00000000 --- a/charts/helm/templates/ingress.yaml +++ /dev/null @@ -1,46 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: ingress -spec: - rules: - - host: {{ .Values.ingress.application.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: {{ .Values.application.service.name }} - port: - number: {{ .Values.ingress.application.port }} - - host: {{ .Values.ingress.jaeger.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: jaeger-all-in-one - port: - number: {{ .Values.ingress.jaeger.port }} - - host: {{ .Values.ingress.zipkin.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: zipkin-all-in-one - port: - number: {{ .Values.ingress.zipkin.port }} - - host: {{ .Values.ingress.grafana.host }} - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: grafana - port: - number: {{ .Values.ingress.grafana.port }} \ No newline at end of file diff --git a/charts/helm/templates/jaeger-all-in-one-deployment.yaml b/charts/helm/templates/jaeger-all-in-one-deployment.yaml deleted file mode 100644 index 0c37f108..00000000 --- a/charts/helm/templates/jaeger-all-in-one-deployment.yaml +++ /dev/null @@ -1,55 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: jaeger-all-in-one - name: jaeger-all-in-one -spec: - replicas: 1 - selector: - matchLabels: - component: jaeger-all-in-one - strategy: {} - template: - metadata: - labels: - component: jaeger-all-in-one - spec: - containers: - - image: jaegertracing/all-in-one:latest - name: jaeger-all-in-one - ports: - - containerPort: 16686 - - containerPort: 14268 - - containerPort: 14250 - resources: {} - restartPolicy: Always - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: jaeger-all-in-one - name: jaeger-all-in-one -spec: - ports: - - name: "16686" - port: 16686 - protocol: TCP - targetPort: 16686 - - name: "14268" - port: 14268 - protocol: TCP - targetPort: 14268 - - name: "14250" - port: 14250 - protocol: TCP - targetPort: 14250 - selector: - component: jaeger-all-in-one - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} - diff --git a/charts/helm/templates/otel-agent-deployment.yaml b/charts/helm/templates/otel-agent-deployment.yaml deleted file mode 100644 index bf2c591c..00000000 --- a/charts/helm/templates/otel-agent-deployment.yaml +++ /dev/null @@ -1,98 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: otel-agent - name: otel-agent -spec: - replicas: 1 - selector: - matchLabels: - component: otel-agent - strategy: - type: Recreate - template: - metadata: - labels: - component: otel-agent - spec: - containers: - - args: - - /otelcol - - --config=/conf/otel-agent-config.yaml - - --log-level=DEBUG - image: otel/opentelemetry-collector:latest - name: otel-agent - ports: - - containerPort: 8888 - - containerPort: 14250 - - containerPort: 14268 - - containerPort: 55678 - - containerPort: 4317 - - containerPort: 9411 - - containerPort: 1777 - - containerPort: 13133 - resources: {} - volumeMounts: - - mountPath: /conf - name: otel-agent-config-volume - volumes: - - name: otel-agent-config-volume - configMap: - name: otel-agent - items: - - key: otel-agent-config - path: otel-agent-config.yaml - restartPolicy: Always - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: otel-agent - name: otel-agent -spec: - ports: - - name: "8887" - port: 8887 - - targetPort: 8888 - - name: "14250" - port: 14250 - protocol: TCP - targetPort: 14250 - - name: "14268" - port: 14268 - protocol: TCP - targetPort: 14268 - - name: "55678" - port: 55678 - protocol: TCP - targetPort: 55678 - - name: "4317" - port: 4317 - protocol: TCP - targetPort: 4317 - - name: "9411" - port: 9411 - protocol: TCP - targetPort: 9411 - - name: "1777" - port: 1777 - protocol: TCP - targetPort: 1777 - - name: "55679" - port: 55679 - protocol: TCP - targetPort: 55679 - - name: "13133" - port: 13133 - protocol: TCP - targetPort: 13133 - selector: - component: otel-agent - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/charts/helm/templates/otel-collector-deployment.yaml b/charts/helm/templates/otel-collector-deployment.yaml deleted file mode 100644 index 57669258..00000000 --- a/charts/helm/templates/otel-collector-deployment.yaml +++ /dev/null @@ -1,83 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: otel-collector - name: otel-collector -spec: - replicas: 1 - selector: - matchLabels: - component: otel-collector - strategy: - type: Recreate - template: - metadata: - labels: - component: otel-collector - spec: - containers: - - args: - - --config=/conf/otel-collector-config.yaml - - --log-level=DEBUG - image: otel/opentelemetry-collector:latest - name: otel-collector - ports: - - containerPort: 1888 - - containerPort: 8888 - - containerPort: 8889 - - containerPort: 13133 - - containerPort: 4317 - - containerPort: 55679 - resources: {} - volumeMounts: - - mountPath: /conf - name: otel-collector-config-volume - restartPolicy: Always - volumes: - - name: otel-collector-config-volume - configMap: - name: otel-collector - items: - - key: otel-collector-config - path: otel-collector-config.yaml - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: otel-collector - name: otel-collector -spec: - ports: - - name: "1888" - port: 1888 - protocol: TCP - targetPort: 1888 - - name: "8888" - port: 8888 - protocol: TCP - targetPort: 8888 - - name: "8889" - port: 8889 - protocol: TCP - targetPort: 8889 - - name: "13133" - port: 13133 - protocol: TCP - targetPort: 13133 - - name: "4317" - port: 4317 - protocol: TCP - targetPort: 4317 - - name: "55670" - port: 55670 - protocol: TCP - targetPort: 55679 - selector: - component: otel-collector - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/charts/helm/templates/prometheus-deployment.yaml b/charts/helm/templates/prometheus-deployment.yaml deleted file mode 100644 index ab3ef30d..00000000 --- a/charts/helm/templates/prometheus-deployment.yaml +++ /dev/null @@ -1,55 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: prometheus - name: prometheus -spec: - replicas: 1 - selector: - matchLabels: - component: prometheus - strategy: - type: Recreate - template: - metadata: - labels: - component: prometheus - spec: - containers: - - image: prom/prometheus:latest - name: prometheus - ports: - - containerPort: 9090 - resources: {} - volumeMounts: - - mountPath: /etc/prometheus/ - name: prometheus-config-volume - restartPolicy: Always - volumes: - - name: prometheus-config-volume - configMap: - name: prometheus - items: - - key: prometheus-config - path: prometheus.yml - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: prometheus - name: prometheus -spec: - ports: - - name: "9090" - port: 9090 - protocol: TCP - targetPort: 9090 - selector: - component: prometheus - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/charts/helm/templates/victoriametrics-deployment.yaml b/charts/helm/templates/victoriametrics-deployment.yaml deleted file mode 100644 index 271ae96d..00000000 --- a/charts/helm/templates/victoriametrics-deployment.yaml +++ /dev/null @@ -1,77 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: victoriametrics - name: victoriametrics -spec: - replicas: 1 - selector: - matchLabels: - component: victoriametrics - strategy: - type: Recreate - template: - metadata: - labels: - component: victoriametrics - spec: - containers: - - args: - - --promscrape.config=/conf/vMetrics.yaml - image: victoriametrics/victoria-metrics - name: victoriametrics - ports: - - containerPort: 8428 - - containerPort: 8089 - - containerPort: 8089 - protocol: UDP - - containerPort: 2003 - - containerPort: 2003 - protocol: UDP - - containerPort: 4242 - resources: {} - volumeMounts: - - mountPath: /conf - name: vmetrics-config - restartPolicy: Always - volumes: - - configMap: - items: - - key: vMetrics.yaml - path: vMetrics.yaml - name: vmetrics-config - name: vmetrics-config - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: victoriametrics - name: victoriametrics -spec: - ports: - - name: "8428" - port: 8428 - targetPort: 8428 - - name: "8089" - port: 8089 - targetPort: 8089 - - name: 8089-udp - port: 8089 - protocol: UDP - targetPort: 8089 - - name: "2003" - port: 2003 - targetPort: 2003 - - name: 2003-udp - port: 2003 - protocol: UDP - targetPort: 2003 - - name: "4242" - port: 4242 - targetPort: 4242 - selector: - component: victoriametrics diff --git a/charts/helm/templates/vmagent-deployment.yaml b/charts/helm/templates/vmagent-deployment.yaml deleted file mode 100644 index 7560d9c1..00000000 --- a/charts/helm/templates/vmagent-deployment.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: vmagent - name: vmagent -spec: - replicas: 1 - selector: - matchLabels: - component: vmagent - strategy: - type: Recreate - template: - metadata: - labels: - component: vmagent - spec: - containers: - - args: - - --promscrape.config=/conf/vMetrics.yaml - - --remoteWrite.url=http://victoriametrics:8428/api/v1/write - image: victoriametrics/vmagent - name: vmagent - ports: - - containerPort: 8429 - volumeMounts: - - mountPath: /conf - name: vmetrics-config - restartPolicy: Always - volumes: - - configMap: - items: - - key: vMetrics.yaml - path: vMetrics.yaml - name: vmetrics-config - name: vmetrics-config - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: vmagent - name: vmagent -spec: - ports: - - name: "8429" - port: 8429 - targetPort: 8429 - selector: - component: vmagent diff --git a/charts/helm/templates/zipkin-all-in-one-deployment.yaml b/charts/helm/templates/zipkin-all-in-one-deployment.yaml deleted file mode 100644 index 9bd061a2..00000000 --- a/charts/helm/templates/zipkin-all-in-one-deployment.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: zipkin-all-in-one - labels: - component: zipkin-all-in-one -spec: - selector: - matchLabels: - component: zipkin-all-in-one - minReadySeconds: 5 - progressDeadlineSeconds: 120 - replicas: 1 - template: - metadata: - labels: - component: zipkin-all-in-one - spec: - containers: - - name: zipkin-all-in-one - image: openzipkin/zipkin:latest - ports: - - containerPort: 9411 - ---- - -apiVersion: v1 -kind: Service -metadata: - name: zipkin-all-in-one - labels: - component: zipkin-all-in-one -spec: - selector: - component: zipkin-all-in-one - ports: - - name: zipkin - protocol: TCP - port: 9411 - targetPort: 9411 - selector: - component: jaeger-all-in-one - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} diff --git a/charts/helm/values.yaml b/charts/helm/values.yaml deleted file mode 100644 index 86c885a8..00000000 --- a/charts/helm/values.yaml +++ /dev/null @@ -1,26 +0,0 @@ -# Application configuration -application: - # Configuration to get the metrics information - metrics: - jobname: "demo-quarkus" - url: "/q/metrics" - - # Configuration of the application service - service: - name: "demo-quarkus" - port: 8080 - -# Ingress configuration -ingress: - application: - host: "application.localhost" - port: 8080 - jaeger: - host: "jaeger.localhost" - port: 16686 - zipkin: - host: "zipkin.localhost" - port: 9411 - grafana: - host: "grafana.localhost" - port: 3000 diff --git a/charts/quarkus-app/Chart.yaml b/charts/quarkus-app/Chart.yaml deleted file mode 100644 index 9cc1ed5c..00000000 --- a/charts/quarkus-app/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: helm-app -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: v1 #"1.16.0" diff --git a/charts/quarkus-app/templates/deployment.yaml b/charts/quarkus-app/templates/deployment.yaml deleted file mode 100644 index 106f56f5..00000000 --- a/charts/quarkus-app/templates/deployment.yaml +++ /dev/null @@ -1,118 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -# deployment v1 -metadata: - # metadata labels - tags under which this resources can be found in k8s api - labels: - app: demo-quarkus - app.kubernetes.io/name: demo-quarkus - name: demo-quarkus - namespace: default -spec: - # scale to 2 instances - replicas: 2 - selector: - #how are the pods linked together - matchLabels: - app: demo-quarkus - template: - metadata: - labels: - app: demo-quarkus - spec: - # pod spec, we want a single container in our pods - containers: - - name: demo-quarkus - # where should the image come from - image: 'dockerregistry101/demo-quarkus:latest' - #command: ["java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes="service.name=quarkus-demo"] - #command: ["/deployments/run-java.sh"] - # always perform pull when creating pod - imagePullPolicy: Always - #env Secrets to pull image from regidtry - - # command: ["/deployments/run-java.sh", "&&", "java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes='service.name=quarkus-demo'"] - # env vars so we can connect to DB - env: - - name: QUARKUS_DATASOURCE_JDBC_URL - value: jdbc:postgresql://postgresql:5432/demo - - name: QUARKUS_DATASOURCE_USERNAME - value: demo - - name: QUARKUS_DATASOURCE_PASSWORD - value: demo - - name: QUARKUS.OPENTELEMETRY.ENABLED - value: "true" - - name: QUARKUS.OPENTELEMETRY.TRACER.EXPORTER.OTLP.ENDPOINT - value: http://otel-agent:4317 - - name: QUARKUS.APPLICATION.NAME - value: demo-quarkus - - # live & ready probes, using our healthcheck endpoints - livenessProbe: - failureThreshold: 5 - httpGet: - path: /q/health/live - port: 8080 - scheme: HTTP - initialDelaySeconds: 5 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 3 - ports: - - containerPort: 8080 - readinessProbe: - failureThreshold: 5 - httpGet: - path: /q/health/ready - port: 8080 - scheme: HTTP - initialDelaySeconds: 5 - periodSeconds: 30 - successThreshold: 1 - timeoutSeconds: 3 - # we can define init containers, single run jobs that run before our main container does - # we use them to init database and check that its ready - initContainers: - - command: - - /bin/bash - - '-c' - - >- - psql -tc "SELECT 1 FROM pg_database WHERE datname = - 'demo'" | grep -q 1 | psql -c "CREATE USER - demo WITH ENCRYPTED PASSWORD 'demo';" -c - "CREATE DATABASE demo;" -c "GRANT ALL PRIVILEGES - ON DATABASE demo TO demo;" - env: - - name: PGHOST - value: postgresql - - name: PGPORT - value: '5432' - - name: PGDATABASE - value: null - - name: PGUSER - value: postgres - - name: PGPASSWORD - value: postgres - - name: DISABLE_WELCOME_MESSAGE - value: 'true' - image: 'docker.io/bitnami/postgresql:12.2.0' - name: create-db - - command: - - /bin/bash - - '-c' - - until pg_isready; do echo waiting for database; sleep 2; done; - env: - - name: PGHOST - value: postgresql - - name: PGPORT - value: '5432' - - name: PGDATABASE - value: demo - - name: PGUSER - value: demo - - name: PGPASSWORD - value: demo - - name: DISABLE_WELCOME_MESSAGE - value: 'true' - image: 'docker.io/bitnami/postgresql:12.2.0' - name: check-db diff --git a/charts/quarkus-app/templates/ingress.yaml b/charts/quarkus-app/templates/ingress.yaml deleted file mode 100644 index 8d3a9a1a..00000000 --- a/charts/quarkus-app/templates/ingress.yaml +++ /dev/null @@ -1,20 +0,0 @@ -# a simple ingress for our service -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: demo-quarkus - annotations: - ingress.kubernetes.io/ssl-redirect: "false" -spec: - rules: - - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: demo-quarkus - port: - number: 8080 - # #this will work if you have dnsmasq(tkit env guide) - host: demo-quarkus.localhost diff --git a/charts/quarkus-app/templates/postgres-deployment.yaml b/charts/quarkus-app/templates/postgres-deployment.yaml deleted file mode 100644 index 2b2b9f02..00000000 --- a/charts/quarkus-app/templates/postgres-deployment.yaml +++ /dev/null @@ -1,79 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -# deployment v1 -metadata: - name: postgresql -spec: - replicas: 1 - selector: - #how are the pods linked together - matchLabels: - app: postgresql - template: - metadata: - labels: - app: postgresql - spec: - containers: - - name: postgresql - image: 'docker.io/bitnami/postgresql:12.2.0' - ports: - - name: tcp-postgresql - containerPort: 5432 - protocol: TCP - env: - - name: POSTGRESQL_PORT_NUMBER - value: '5432' - - name: POSTGRESQL_VOLUME_DIR - value: /bitnami/postgresql - - name: PGDATA - value: /bitnami/postgresql/data - - name: POSTGRES_USER - value: postgres - #dont even try this in production - - name: POSTGRES_PASSWORD - value: postgres - - name: POSTGRES_DB - value: kubernetes - - name: DISABLE_WELCOME_MESSAGE - value: 'true' - - name: POSTGRESQL_ENABLE_LDAP - value: 'no' - resources: - requests: - cpu: 250m - memory: 256Mi - livenessProbe: - exec: - command: - - /bin/sh - - '-c' - - >- - exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p - 5432 - initialDelaySeconds: 30 - timeoutSeconds: 5 - periodSeconds: 10 - successThreshold: 1 - failureThreshold: 6 - readinessProbe: - exec: - command: - - /bin/sh - - '-c' - - '-e' - - > - exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p - 5432 - - [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f - /bitnami/postgresql/.initialized ] - initialDelaySeconds: 5 - timeoutSeconds: 5 - periodSeconds: 10 - successThreshold: 1 - failureThreshold: 6 - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - imagePullPolicy: IfNotPresent -# we run database without any persistent data volume - not a good idea, but sufficient for demo diff --git a/charts/quarkus-app/templates/postgres-service.yaml b/charts/quarkus-app/templates/postgres-service.yaml deleted file mode 100644 index 6d19ee33..00000000 --- a/charts/quarkus-app/templates/postgres-service.yaml +++ /dev/null @@ -1,15 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: postgresql - labels: - app: postgresql -spec: - ports: - - name: tcp-postgresql - protocol: TCP - port: 5432 - targetPort: tcp-postgresql - selector: - app: postgresql - type: LoadBalancer #ClusterIP diff --git a/charts/quarkus-app/templates/service.yaml b/charts/quarkus-app/templates/service.yaml deleted file mode 100644 index af2219f0..00000000 --- a/charts/quarkus-app/templates/service.yaml +++ /dev/null @@ -1,17 +0,0 @@ -kind: Service -apiVersion: v1 -metadata: - name: demo-quarkus - labels: - app: demo-quarkus -spec: - # we expose port 8080 which load balances traffic to the pods and their internal port 8080 - ports: - - name: http-port - protocol: TCP - port: 8080 - targetPort: 8080 -# how to find the pods we are load balancing - selector: - app: demo-quarkus - type: LoadBalancer #ClusterIP From 5fde87b75e8cfeeb8e06d37981d0223ee3ba5c81 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:45:47 +0530 Subject: [PATCH 40/72] Add files via upload --- charts/helm/Chart.yaml | 9 ++ charts/helm/templates/configmap.yaml | 98 +++++++++++++++ charts/helm/templates/grafana-deployment.yaml | 43 +++++++ charts/helm/templates/ingress.yaml | 46 +++++++ .../jaeger-all-in-one-deployment.yaml | 54 ++++++++ .../helm/templates/otel-agent-deployment.yaml | 98 +++++++++++++++ .../templates/otel-collector-deployment.yaml | 83 ++++++++++++ .../helm/templates/prometheus-deployment.yaml | 55 ++++++++ .../templates/victoriametrics-deployment.yaml | 77 ++++++++++++ charts/helm/templates/vmagent-deployment.yaml | 53 ++++++++ .../zipkin-all-in-one-deployment.yaml | 45 +++++++ charts/helm/values.yaml | 26 ++++ charts/quarkus-app/Chart.yaml | 24 ++++ charts/quarkus-app/templates/deployment.yaml | 118 ++++++++++++++++++ charts/quarkus-app/templates/ingress.yaml | 20 +++ .../templates/postgres-deployment.yaml | 79 ++++++++++++ .../templates/postgres-service.yaml | 15 +++ charts/quarkus-app/templates/service.yaml | 17 +++ 18 files changed, 960 insertions(+) create mode 100644 charts/helm/Chart.yaml create mode 100644 charts/helm/templates/configmap.yaml create mode 100644 charts/helm/templates/grafana-deployment.yaml create mode 100644 charts/helm/templates/ingress.yaml create mode 100644 charts/helm/templates/jaeger-all-in-one-deployment.yaml create mode 100644 charts/helm/templates/otel-agent-deployment.yaml create mode 100644 charts/helm/templates/otel-collector-deployment.yaml create mode 100644 charts/helm/templates/prometheus-deployment.yaml create mode 100644 charts/helm/templates/victoriametrics-deployment.yaml create mode 100644 charts/helm/templates/vmagent-deployment.yaml create mode 100644 charts/helm/templates/zipkin-all-in-one-deployment.yaml create mode 100644 charts/helm/values.yaml create mode 100644 charts/quarkus-app/Chart.yaml create mode 100644 charts/quarkus-app/templates/deployment.yaml create mode 100644 charts/quarkus-app/templates/ingress.yaml create mode 100644 charts/quarkus-app/templates/postgres-deployment.yaml create mode 100644 charts/quarkus-app/templates/postgres-service.yaml create mode 100644 charts/quarkus-app/templates/service.yaml diff --git a/charts/helm/Chart.yaml b/charts/helm/Chart.yaml new file mode 100644 index 00000000..1d1149c3 --- /dev/null +++ b/charts/helm/Chart.yaml @@ -0,0 +1,9 @@ +apiVersion: v3 +name: OpenTelemetry Helm template +version: 1.0.0 +description: Helm chart template for an OpenTelemetry Kubernetes deployment +appVersion: 1.0.0 +keywords: + - template +maintainers: + - name: devon4j Developer diff --git a/charts/helm/templates/configmap.yaml b/charts/helm/templates/configmap.yaml new file mode 100644 index 00000000..7b0c1735 --- /dev/null +++ b/charts/helm/templates/configmap.yaml @@ -0,0 +1,98 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-agent +data: + otel-agent-config: | + receivers: + otlp: + protocols: + grpc: + + processors: + batch: + + exporters: + otlp: + endpoint: "otel-collector.default.svc.cluster.local:4317" + insecure: true + + service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [otlp] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [otlp] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector +data: + otel-collector-config: | + receivers: + otlp: + protocols: + grpc: + http: + cors_allowed_origins: + - http://* + - https://* + + processors: + batch: + + exporters: + logging: + zipkin: + endpoint: "http://zipkin-all-in-one.default.svc.cluster.local:9411/api/v2/spans" + format: proto + jaeger: + endpoint: jaeger-all-in-one.default.svc.cluster.local:14250 + insecure: true + prometheus: + endpoint: "0.0.0.0:8889" + + service: + pipelines: + traces: + receivers: [otlp] + exporters: [zipkin, jaeger] + processors: [batch] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [prometheus] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vmetrics-config +data: + vMetrics.yaml: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: prometheus +data: + prometheus-config: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] \ No newline at end of file diff --git a/charts/helm/templates/grafana-deployment.yaml b/charts/helm/templates/grafana-deployment.yaml new file mode 100644 index 00000000..2b965d62 --- /dev/null +++ b/charts/helm/templates/grafana-deployment.yaml @@ -0,0 +1,43 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: grafana + name: grafana +spec: + replicas: 1 + selector: + matchLabels: + component: grafana + template: + metadata: + labels: + component: grafana + spec: + containers: + - image: grafana/grafana + name: grafana + ports: + - containerPort: 3000 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: grafana + name: grafana +spec: + ports: + - name: "3000" + port: 3000 + protocol: TCP + targetPort: 3000 + selector: + component: grafana + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/charts/helm/templates/ingress.yaml b/charts/helm/templates/ingress.yaml new file mode 100644 index 00000000..a527080c --- /dev/null +++ b/charts/helm/templates/ingress.yaml @@ -0,0 +1,46 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress +spec: + rules: + - host: {{ .Values.ingress.application.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: {{ .Values.application.service.name }} + port: + number: {{ .Values.ingress.application.port }} + - host: {{ .Values.ingress.jaeger.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: jaeger-all-in-one + port: + number: {{ .Values.ingress.jaeger.port }} + - host: {{ .Values.ingress.zipkin.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: zipkin-all-in-one + port: + number: {{ .Values.ingress.zipkin.port }} + - host: {{ .Values.ingress.grafana.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: grafana + port: + number: {{ .Values.ingress.grafana.port }} \ No newline at end of file diff --git a/charts/helm/templates/jaeger-all-in-one-deployment.yaml b/charts/helm/templates/jaeger-all-in-one-deployment.yaml new file mode 100644 index 00000000..60516367 --- /dev/null +++ b/charts/helm/templates/jaeger-all-in-one-deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + replicas: 1 + selector: + matchLabels: + component: jaeger-all-in-one + strategy: {} + template: + metadata: + labels: + component: jaeger-all-in-one + spec: + containers: + - image: jaegertracing/all-in-one:latest + name: jaeger-all-in-one + ports: + - containerPort: 16686 + - containerPort: 14268 + - containerPort: 14250 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + ports: + - name: "16686" + port: 16686 + protocol: TCP + targetPort: 16686 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + selector: + component: jaeger-all-in-one + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/charts/helm/templates/otel-agent-deployment.yaml b/charts/helm/templates/otel-agent-deployment.yaml new file mode 100644 index 00000000..5255e516 --- /dev/null +++ b/charts/helm/templates/otel-agent-deployment.yaml @@ -0,0 +1,98 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + replicas: 1 + selector: + matchLabels: + component: otel-agent + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-agent + spec: + containers: + - args: + - /otelcol + - --config=/conf/otel-agent-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-agent + ports: + - containerPort: 8888 + - containerPort: 14250 + - containerPort: 14268 + - containerPort: 55678 + - containerPort: 4317 + - containerPort: 9411 + - containerPort: 1777 + - containerPort: 13133 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-agent-config-volume + volumes: + - name: otel-agent-config-volume + configMap: + name: otel-agent + items: + - key: otel-agent-config + path: otel-agent-config.yaml + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + ports: + - name: "8887" + port: 8887 + + targetPort: 8888 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "55678" + port: 55678 + protocol: TCP + targetPort: 55678 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "9411" + port: 9411 + protocol: TCP + targetPort: 9411 + - name: "1777" + port: 1777 + protocol: TCP + targetPort: 1777 + - name: "55679" + port: 55679 + protocol: TCP + targetPort: 55679 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + selector: + component: otel-agent + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/charts/helm/templates/otel-collector-deployment.yaml b/charts/helm/templates/otel-collector-deployment.yaml new file mode 100644 index 00000000..318ef5bc --- /dev/null +++ b/charts/helm/templates/otel-collector-deployment.yaml @@ -0,0 +1,83 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + replicas: 1 + selector: + matchLabels: + component: otel-collector + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-collector + spec: + containers: + - args: + - --config=/conf/otel-collector-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-collector + ports: + - containerPort: 1888 + - containerPort: 8888 + - containerPort: 8889 + - containerPort: 13133 + - containerPort: 4317 + - containerPort: 55679 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-collector-config-volume + restartPolicy: Always + volumes: + - name: otel-collector-config-volume + configMap: + name: otel-collector + items: + - key: otel-collector-config + path: otel-collector-config.yaml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + ports: + - name: "1888" + port: 1888 + protocol: TCP + targetPort: 1888 + - name: "8888" + port: 8888 + protocol: TCP + targetPort: 8888 + - name: "8889" + port: 8889 + protocol: TCP + targetPort: 8889 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "55670" + port: 55670 + protocol: TCP + targetPort: 55679 + selector: + component: otel-collector + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/charts/helm/templates/prometheus-deployment.yaml b/charts/helm/templates/prometheus-deployment.yaml new file mode 100644 index 00000000..c9fd2689 --- /dev/null +++ b/charts/helm/templates/prometheus-deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: prometheus + name: prometheus +spec: + replicas: 1 + selector: + matchLabels: + component: prometheus + strategy: + type: Recreate + template: + metadata: + labels: + component: prometheus + spec: + containers: + - image: prom/prometheus:latest + name: prometheus + ports: + - containerPort: 9090 + resources: {} + volumeMounts: + - mountPath: /etc/prometheus/ + name: prometheus-config-volume + restartPolicy: Always + volumes: + - name: prometheus-config-volume + configMap: + name: prometheus + items: + - key: prometheus-config + path: prometheus.yml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: prometheus + name: prometheus +spec: + ports: + - name: "9090" + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + component: prometheus + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/charts/helm/templates/victoriametrics-deployment.yaml b/charts/helm/templates/victoriametrics-deployment.yaml new file mode 100644 index 00000000..3819e880 --- /dev/null +++ b/charts/helm/templates/victoriametrics-deployment.yaml @@ -0,0 +1,77 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: victoriametrics + name: victoriametrics +spec: + replicas: 1 + selector: + matchLabels: + component: victoriametrics + strategy: + type: Recreate + template: + metadata: + labels: + component: victoriametrics + spec: + containers: + - args: + - --promscrape.config=/conf/vMetrics.yaml + image: victoriametrics/victoria-metrics + name: victoriametrics + ports: + - containerPort: 8428 + - containerPort: 8089 + - containerPort: 8089 + protocol: UDP + - containerPort: 2003 + - containerPort: 2003 + protocol: UDP + - containerPort: 4242 + resources: {} + volumeMounts: + - mountPath: /conf + name: vmetrics-config + restartPolicy: Always + volumes: + - configMap: + items: + - key: vMetrics.yaml + path: vMetrics.yaml + name: vmetrics-config + name: vmetrics-config + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: victoriametrics + name: victoriametrics +spec: + ports: + - name: "8428" + port: 8428 + targetPort: 8428 + - name: "8089" + port: 8089 + targetPort: 8089 + - name: 8089-udp + port: 8089 + protocol: UDP + targetPort: 8089 + - name: "2003" + port: 2003 + targetPort: 2003 + - name: 2003-udp + port: 2003 + protocol: UDP + targetPort: 2003 + - name: "4242" + port: 4242 + targetPort: 4242 + selector: + component: victoriametrics diff --git a/charts/helm/templates/vmagent-deployment.yaml b/charts/helm/templates/vmagent-deployment.yaml new file mode 100644 index 00000000..7d13f5d3 --- /dev/null +++ b/charts/helm/templates/vmagent-deployment.yaml @@ -0,0 +1,53 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: vmagent + name: vmagent +spec: + replicas: 1 + selector: + matchLabels: + component: vmagent + strategy: + type: Recreate + template: + metadata: + labels: + component: vmagent + spec: + containers: + - args: + - --promscrape.config=/conf/vMetrics.yaml + - --remoteWrite.url=http://victoriametrics:8428/api/v1/write + image: victoriametrics/vmagent + name: vmagent + ports: + - containerPort: 8429 + volumeMounts: + - mountPath: /conf + name: vmetrics-config + restartPolicy: Always + volumes: + - configMap: + items: + - key: vMetrics.yaml + path: vMetrics.yaml + name: vmetrics-config + name: vmetrics-config + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: vmagent + name: vmagent +spec: + ports: + - name: "8429" + port: 8429 + targetPort: 8429 + selector: + component: vmagent diff --git a/charts/helm/templates/zipkin-all-in-one-deployment.yaml b/charts/helm/templates/zipkin-all-in-one-deployment.yaml new file mode 100644 index 00000000..f6bb0cc1 --- /dev/null +++ b/charts/helm/templates/zipkin-all-in-one-deployment.yaml @@ -0,0 +1,45 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: zipkin-all-in-one + labels: + component: zipkin-all-in-one +spec: + selector: + matchLabels: + component: zipkin-all-in-one + minReadySeconds: 5 + progressDeadlineSeconds: 120 + replicas: 1 + template: + metadata: + labels: + component: zipkin-all-in-one + spec: + containers: + - name: zipkin-all-in-one + image: openzipkin/zipkin:latest + ports: + - containerPort: 9411 + +--- + +apiVersion: v1 +kind: Service +metadata: + name: zipkin-all-in-one + labels: + component: zipkin-all-in-one +spec: + selector: + component: zipkin-all-in-one + ports: + - name: zipkin + protocol: TCP + port: 9411 + targetPort: 9411 + selector: + component: jaeger-all-in-one + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/charts/helm/values.yaml b/charts/helm/values.yaml new file mode 100644 index 00000000..94eb543f --- /dev/null +++ b/charts/helm/values.yaml @@ -0,0 +1,26 @@ +# Application configuration +application: + # Configuration to get the metrics information + metrics: + jobname: "demo-quarkus" + url: "/q/metrics" + + # Configuration of the application service + service: + name: "demo-quarkus" + port: 8080 + +# Ingress configuration +ingress: + application: + host: "application.localhost" + port: 8080 + jaeger: + host: "jaeger.localhost" + port: 16686 + zipkin: + host: "zipkin.localhost" + port: 9411 + grafana: + host: "grafana.localhost" + port: 3000 diff --git a/charts/quarkus-app/Chart.yaml b/charts/quarkus-app/Chart.yaml new file mode 100644 index 00000000..c72fbaae --- /dev/null +++ b/charts/quarkus-app/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: helm-app +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: v1 #"1.16.0" diff --git a/charts/quarkus-app/templates/deployment.yaml b/charts/quarkus-app/templates/deployment.yaml new file mode 100644 index 00000000..171cfa3b --- /dev/null +++ b/charts/quarkus-app/templates/deployment.yaml @@ -0,0 +1,118 @@ +apiVersion: apps/v1 +kind: Deployment +# deployment v1 +metadata: + # metadata labels - tags under which this resources can be found in k8s api + labels: + app: demo-quarkus + app.kubernetes.io/name: demo-quarkus + name: demo-quarkus + namespace: default +spec: + # scale to 2 instances + replicas: 2 + selector: + #how are the pods linked together + matchLabels: + app: demo-quarkus + template: + metadata: + labels: + app: demo-quarkus + spec: + # pod spec, we want a single container in our pods + containers: + - name: demo-quarkus + # where should the image come from + image: 'guentherjulian/devon4quarkus-reference:latest' + #command: ["java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes="service.name=quarkus-demo"] + #command: ["/deployments/run-java.sh"] + # always perform pull when creating pod + imagePullPolicy: Always + #env Secrets to pull image from regidtry + + # command: ["/deployments/run-java.sh", "&&", "java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes='service.name=quarkus-demo'"] + # env vars so we can connect to DB + env: + - name: QUARKUS_DATASOURCE_JDBC_URL + value: jdbc:postgresql://postgresql:5432/demo + - name: QUARKUS_DATASOURCE_USERNAME + value: demo + - name: QUARKUS_DATASOURCE_PASSWORD + value: demo + - name: quarkus.opentelemetry.enabled + value: "true" + - name: quarkus.opentelemetry.tracer.exporter.otlp.endpoint + value: http://otel-agent:4317 + - name: quarkus.application.name + value: demo-quarkus + + # live & ready probes, using our healthcheck endpoints + livenessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/live + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + ports: + - containerPort: 8080 + readinessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/ready + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + # we can define init containers, single run jobs that run before our main container does + # we use them to init database and check that its ready + initContainers: + - command: + - /bin/bash + - '-c' + - >- + psql -tc "SELECT 1 FROM pg_database WHERE datname = + 'demo'" | grep -q 1 | psql -c "CREATE USER + demo WITH ENCRYPTED PASSWORD 'demo';" -c + "CREATE DATABASE demo;" -c "GRANT ALL PRIVILEGES + ON DATABASE demo TO demo;" + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: null + - name: PGUSER + value: postgres + - name: PGPASSWORD + value: postgres + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: create-db + - command: + - /bin/bash + - '-c' + - until pg_isready; do echo waiting for database; sleep 2; done; + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: demo + - name: PGUSER + value: demo + - name: PGPASSWORD + value: demo + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: check-db diff --git a/charts/quarkus-app/templates/ingress.yaml b/charts/quarkus-app/templates/ingress.yaml new file mode 100644 index 00000000..f0390a4d --- /dev/null +++ b/charts/quarkus-app/templates/ingress.yaml @@ -0,0 +1,20 @@ +# a simple ingress for our service +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: demo-quarkus + annotations: + ingress.kubernetes.io/ssl-redirect: "false" +spec: + rules: + - http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: demo-quarkus + port: + number: 8080 + # #this will work if you have dnsmasq(tkit env guide) + host: demo-quarkus.localhost diff --git a/charts/quarkus-app/templates/postgres-deployment.yaml b/charts/quarkus-app/templates/postgres-deployment.yaml new file mode 100644 index 00000000..e3d8ff00 --- /dev/null +++ b/charts/quarkus-app/templates/postgres-deployment.yaml @@ -0,0 +1,79 @@ +apiVersion: apps/v1 +kind: Deployment +# deployment v1 +metadata: + name: postgresql +spec: + replicas: 1 + selector: + #how are the pods linked together + matchLabels: + app: postgresql + template: + metadata: + labels: + app: postgresql + spec: + containers: + - name: postgresql + image: 'docker.io/bitnami/postgresql:12.2.0' + ports: + - name: tcp-postgresql + containerPort: 5432 + protocol: TCP + env: + - name: POSTGRESQL_PORT_NUMBER + value: '5432' + - name: POSTGRESQL_VOLUME_DIR + value: /bitnami/postgresql + - name: PGDATA + value: /bitnami/postgresql/data + - name: POSTGRES_USER + value: postgres + #dont even try this in production + - name: POSTGRES_PASSWORD + value: postgres + - name: POSTGRES_DB + value: kubernetes + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + - name: POSTGRESQL_ENABLE_LDAP + value: 'no' + resources: + requests: + cpu: 250m + memory: 256Mi + livenessProbe: + exec: + command: + - /bin/sh + - '-c' + - >- + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + initialDelaySeconds: 30 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + readinessProbe: + exec: + command: + - /bin/sh + - '-c' + - '-e' + - > + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + + [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f + /bitnami/postgresql/.initialized ] + initialDelaySeconds: 5 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + imagePullPolicy: IfNotPresent +# we run database without any persistent data volume - not a good idea, but sufficient for demo diff --git a/charts/quarkus-app/templates/postgres-service.yaml b/charts/quarkus-app/templates/postgres-service.yaml new file mode 100644 index 00000000..31cdc930 --- /dev/null +++ b/charts/quarkus-app/templates/postgres-service.yaml @@ -0,0 +1,15 @@ +kind: Service +apiVersion: v1 +metadata: + name: postgresql + labels: + app: postgresql +spec: + ports: + - name: tcp-postgresql + protocol: TCP + port: 5432 + targetPort: tcp-postgresql + selector: + app: postgresql + type: LoadBalancer #ClusterIP diff --git a/charts/quarkus-app/templates/service.yaml b/charts/quarkus-app/templates/service.yaml new file mode 100644 index 00000000..22f1f676 --- /dev/null +++ b/charts/quarkus-app/templates/service.yaml @@ -0,0 +1,17 @@ +kind: Service +apiVersion: v1 +metadata: + name: demo-quarkus + labels: + app: demo-quarkus +spec: + # we expose port 8080 which load balances traffic to the pods and their internal port 8080 + ports: + - name: http-port + protocol: TCP + port: 8080 + targetPort: 8080 +# how to find the pods we are load balancing + selector: + app: demo-quarkus + type: LoadBalancer #ClusterIP From 281ab88224557c6b82ff274fe91d110dc4847430 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:46:30 +0530 Subject: [PATCH 41/72] Update deployment.yaml --- charts/quarkus-app/templates/deployment.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/quarkus-app/templates/deployment.yaml b/charts/quarkus-app/templates/deployment.yaml index 171cfa3b..9b43c911 100644 --- a/charts/quarkus-app/templates/deployment.yaml +++ b/charts/quarkus-app/templates/deployment.yaml @@ -24,7 +24,7 @@ spec: containers: - name: demo-quarkus # where should the image come from - image: 'guentherjulian/devon4quarkus-reference:latest' + image: 'dockerregistry101/demo-quarkus:latest' #command: ["java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes="service.name=quarkus-demo"] #command: ["/deployments/run-java.sh"] # always perform pull when creating pod From 881f3249707c259983cd46d79c7604d5504a5f84 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:48:03 +0530 Subject: [PATCH 42/72] Update helm_release.tf --- azure-terraform/terraform-helm-deploy/helm_release.tf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-terraform/terraform-helm-deploy/helm_release.tf b/azure-terraform/terraform-helm-deploy/helm_release.tf index 0a9d4018..b3f05aa8 100644 --- a/azure-terraform/terraform-helm-deploy/helm_release.tf +++ b/azure-terraform/terraform-helm-deploy/helm_release.tf @@ -34,7 +34,7 @@ resource helm_release otel-release { name = "otel-release-controller" # repository = "https://github.com/prathibhapadma/quarkus-otel-test-repo/tree/master/charts" - chart = "/root/quarkus-opentelemetry-example/charts/helm" + chart = "../devon4quarkus-reference/charts/helm" set { name = "service.type" @@ -46,7 +46,7 @@ resource helm_release quarkus-app-release { name = "quarkus-app-controller" #repository = "https://github.com/prathibhapadma/quarkus-otel-test-repo/tree/master/charts" - chart = "/root/quarkus-opentelemetry-example/charts/quarkus-app" + chart = "../devon4quarkus-reference/charts/quarkus-app" set { name = "service.type" From 83cc80d84041be711d6ffdd4ac2e216108d50bc9 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 10:55:20 +0530 Subject: [PATCH 43/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 502da54a..818d4904 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -88,6 +88,9 @@ Change the directory in to `Helm Release Provider`. Here we need to follow same steps as above process to deploy helm charts in to AKS cluster (Example: terraform init and terraform apply). + +*Note*: You need to change helm charts path location in `terraform-helm-deploy/helm_release.tf` file. + == Terraform initialize and apply using Script Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/script_execute.sh` From 13ec802033b3ff530f8847088540a94f1f8f7747 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 26 Nov 2021 11:53:34 +0530 Subject: [PATCH 44/72] Add files via upload --- LICENSE | 402 +++++----- README.md | 278 ++++--- azure-terraform/initial_setup_script.sh | 2 +- azure-terraform/script_execute.sh | 94 +-- azure-terraform/terraform-aks-setup/main.tf | 62 +- azure-terraform/terraform-aks-setup/output.tf | 78 +- .../terraform-aks-setup/provider.tf | 32 +- .../terraform-aks-setup/terraform.tfvars | 10 +- .../terraform-aks-setup/variables.tf | 40 +- .../terraform-helm-deploy/helm_release.tf | 110 +-- .../terraform-helm-deploy/provider.tf | 30 +- azure-terraform/terraform_doc.asciidoc | 252 +++---- docker-compose.yaml | 223 +++--- .../opentelemetry-deployment.asciidoc | 86 +++ helm-charts/demo-quarkus/Chart.yaml | 24 + .../demo-quarkus/templates/deployment.yaml | 118 +++ .../demo-quarkus/templates/ingress.yaml | 20 + .../templates/postgres-deployment.yaml | 79 ++ .../templates/postgres-service.yaml | 15 + .../demo-quarkus/templates/service.yaml | 17 + helm-charts/opentelementry/Chart.yaml | 9 + .../opentelementry/templates/configmap.yaml | 98 +++ .../templates/grafana-deployment.yaml | 43 ++ .../opentelementry/templates/ingress.yaml | 46 ++ .../jaeger-all-in-one-deployment.yaml | 54 ++ .../templates/otel-agent-deployment.yaml | 98 +++ .../templates/otel-collector-deployment.yaml | 83 +++ .../templates/prometheus-deployment.yaml | 55 ++ helm-charts/opentelementry/values.yaml | 26 + k8s/application-deployment.yaml | 98 +++ k8s/application-service.yaml | 15 + k8s/ingress.yaml | 38 +- k8s/postgres-deployment.yaml | 156 ++-- k8s/postgres-service.yaml | 30 +- mvnw | 620 +++++++-------- mvnw.cmd | 364 ++++----- otel-agent-config.yaml | 54 +- otel-collector-config.yaml | 60 +- pom.xml | 636 ++++++++-------- src/main/docker/Dockerfile.jvm | 109 ++- src/main/docker/Dockerfile.native | 55 +- src/main/docker/Dockerfile.native-distroless | 46 +- src/main/helm/application/Chart.yaml | 11 + .../templates/application-deployment.yaml | 104 +++ .../templates/application-service.yaml | 18 + .../helm/application/templates/ingress.yaml | 16 + .../templates/postgres-deployment.yaml | 77 ++ .../templates/postgres-service.yaml | 17 + src/main/helm/application/values.yaml | 36 + src/main/helm/opentelemetry/Chart.yaml | 9 + .../opentelemetry/templates/configmap.yaml | 75 ++ .../templates/grafana-deployment.yaml | 43 ++ .../helm/opentelemetry/templates/ingress.yaml | 26 + .../jaeger-all-in-one-deployment.yaml | 54 ++ .../templates/otel-agent-deployment.yaml | 103 +++ .../templates/otel-collector-deployment.yaml | 83 +++ .../templates/prometheus-deployment.yaml | 55 ++ .../templates/victoriametrics-deployment.yaml | 77 ++ .../templates/vmagent-deployment.yaml | 53 ++ src/main/helm/opentelemetry/values.yaml | 19 + .../com/devonfw/quarkus/DemoApplication.java | 32 +- .../model/ApplicationPersistenceEntity.java | 158 ++-- .../service/json/CustomObjectMapper.java | 23 + .../general/service/json/PageSerializer.java | 50 ++ .../domain/model/ProductEntity.java | 52 +- .../domain/model/ProductSearchCriteria.java | 38 +- .../domain/repo/ProductFragment.java | 32 +- .../domain/repo/ProductFragmentImpl.java | 228 +++--- .../domain/repo/ProductRepository.java | 30 +- .../logic/UcFindProduct.java | 48 +- .../logic/UcFindProductImpl.java | 204 ++--- .../logic/UcManageProduct.java | 20 +- .../logic/UcManageProductImpl.java | 80 +- .../service/v1/ProductRestService.java | 286 +++---- .../service/v1/mapper/ProductMapper.java | 42 +- .../service/v1/model/NewProductDto.java | 46 +- .../service/v1/model/ProductDto.java | 40 +- .../v1/model/ProductSearchCriteriaDto.java | 68 +- src/main/resources/application.properties | 121 ++- .../db/migration/V001__Create_schema.sql | 20 +- .../db/migration/V002__Master_data.sql | 704 +++++++++--------- .../service/v1/ProductRestServiceTest.java | 96 +++ src/test/resources/data/empty.xls | Bin 35328 -> 34816 bytes src/test/resources/data/product.xls | Bin 35328 -> 35328 bytes src/test/resources/docker-compose.yml | 60 +- vMetrics.yaml | 16 +- 86 files changed, 5044 insertions(+), 3091 deletions(-) create mode 100644 documentation/opentelemetry-deployment.asciidoc create mode 100644 helm-charts/demo-quarkus/Chart.yaml create mode 100644 helm-charts/demo-quarkus/templates/deployment.yaml create mode 100644 helm-charts/demo-quarkus/templates/ingress.yaml create mode 100644 helm-charts/demo-quarkus/templates/postgres-deployment.yaml create mode 100644 helm-charts/demo-quarkus/templates/postgres-service.yaml create mode 100644 helm-charts/demo-quarkus/templates/service.yaml create mode 100644 helm-charts/opentelementry/Chart.yaml create mode 100644 helm-charts/opentelementry/templates/configmap.yaml create mode 100644 helm-charts/opentelementry/templates/grafana-deployment.yaml create mode 100644 helm-charts/opentelementry/templates/ingress.yaml create mode 100644 helm-charts/opentelementry/templates/jaeger-all-in-one-deployment.yaml create mode 100644 helm-charts/opentelementry/templates/otel-agent-deployment.yaml create mode 100644 helm-charts/opentelementry/templates/otel-collector-deployment.yaml create mode 100644 helm-charts/opentelementry/templates/prometheus-deployment.yaml create mode 100644 helm-charts/opentelementry/values.yaml create mode 100644 k8s/application-deployment.yaml create mode 100644 k8s/application-service.yaml create mode 100644 src/main/helm/application/Chart.yaml create mode 100644 src/main/helm/application/templates/application-deployment.yaml create mode 100644 src/main/helm/application/templates/application-service.yaml create mode 100644 src/main/helm/application/templates/ingress.yaml create mode 100644 src/main/helm/application/templates/postgres-deployment.yaml create mode 100644 src/main/helm/application/templates/postgres-service.yaml create mode 100644 src/main/helm/application/values.yaml create mode 100644 src/main/helm/opentelemetry/Chart.yaml create mode 100644 src/main/helm/opentelemetry/templates/configmap.yaml create mode 100644 src/main/helm/opentelemetry/templates/grafana-deployment.yaml create mode 100644 src/main/helm/opentelemetry/templates/ingress.yaml create mode 100644 src/main/helm/opentelemetry/templates/jaeger-all-in-one-deployment.yaml create mode 100644 src/main/helm/opentelemetry/templates/otel-agent-deployment.yaml create mode 100644 src/main/helm/opentelemetry/templates/otel-collector-deployment.yaml create mode 100644 src/main/helm/opentelemetry/templates/prometheus-deployment.yaml create mode 100644 src/main/helm/opentelemetry/templates/victoriametrics-deployment.yaml create mode 100644 src/main/helm/opentelemetry/templates/vmagent-deployment.yaml create mode 100644 src/main/helm/opentelemetry/values.yaml create mode 100644 src/main/java/com/devonfw/quarkus/general/service/json/CustomObjectMapper.java create mode 100644 src/main/java/com/devonfw/quarkus/general/service/json/PageSerializer.java create mode 100644 src/test/java/com/devonfw/demoquarkus/service/v1/ProductRestServiceTest.java diff --git a/LICENSE b/LICENSE index 261eeb9e..29f81d81 100644 --- a/LICENSE +++ b/LICENSE @@ -1,201 +1,201 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index 58329d37..6d9edf2c 100644 --- a/README.md +++ b/README.md @@ -1,141 +1,137 @@ -# devon4quarkus cloud native reference project - -This is the reference project of [devon4quarkus](https://github.com/devonfw/devon4quarkus). - -If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ . - -## Database & Jaeger & Prometheus - -The app uses data persistence and you need a working database to use it. We also use tracing and metrics collector. -There is a `docker-compose.yaml` in the root of this repo that provides all of them. -You can start the DB and Jaeger containers using simple cmd: -``` -docker-compose up -``` -If you want to use other DB, modify the params in `application.properties` - -To access Jaeger UI(tracing): http://localhost:16686 -To access Prometheus(metrics): http://localhost:9090/graph -To access health check of our app: http://localhost:8080/q/health - -## Running the application in dev mode - -You can run your application in dev mode that enables live coding using: -```shell script -./mvnw compile quarkus:dev -``` - -> **_NOTE:_** Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8080/q/dev/. - -## Running tests - -You can run tests from your IDE or via Maven. Simply run `./mvnw test ` or `./mvnw package` - -## Tkit quarkus - -Adding tkit libs to our project gives us several new features. Check the logs for example, all our business methods are now logged and timed. -The REST API now handles exceptions gracefully(as JSON response), and we get server side pagination with very little effort. -Our tests are now real integration tests with real postgres DB, and are stuitable for CI envs. - -## Access your REST endpoint - -Go to http://localhost:8080/animals - - -## OpenAPI & Swagger UI - -With your app running, go to http://localhost:8080/q/swagger-ui to see the Swagger UI visualizing your API. You can access the YAML OpenAPI schema under http://localhost:8080/q/openapi - -## Packaging and running the application - -The application can be packaged using: -```shell script -./mvnw package -``` -It produces the `quarkus-run.jar` file in the `target/quarkus-app/` directory. -Be aware that it’s not an _über-jar_ as the dependencies are copied into the `target/quarkus-app/lib/` directory. - -If you want to build an _über-jar_, execute the following command: -```shell script -./mvnw package -Dquarkus.package.type=uber-jar -``` - -The application is now runnable using `java -jar target/quarkus-app/quarkus-run.jar`. - -## Creating a native executable - -You can create a native executable using: -```shell script -./mvnw package -Pnative -``` - -Or, if you don't have GraalVM installed, you can run the native executable build in a container using: -```shell script -./mvnw package -Pnative -Dquarkus.native.container-build=true -``` - -You can then execute your native executable with: `./target/demo-quarkus-1.0.0-SNAPSHOT-runner` - -If you want to learn more about building native executables, please consult https://quarkus.io/guides/maven-tooling.html. - -## Maven settings - -It is recommended to use vanilla maven settings (no custom mirror, proxy) for better performance. If you have modified your default settings `~/.m2/settings.xml` please revert it, or run the maven commands with the clean settings included in this project using `-s ./settings.xml` - -## Deploy to kubernetes - -Create your k3d cluster and registry -```shell -k3d registry create registry --port 5000 -k3d cluster create -c k8s/dev.yaml -``` - -Package your app as docker container and push to local k3d registry: -> **_NOTE:_** Be sure to package your app as native before -```shell -docker build -f src/main/docker/Dockerfile.jvm . -t k3d-registry:5000/demo-quarkus:latest -docker push k3d-registry:5000/demo-quarkus:latest -``` - -If `push` fails because of unresolved host, you can add it manually (`c:\windows\system32\drivers\etc\hosts` on Windows or `/etc/hosts` on Linux) -```shell -127.0.0.1 k3d-registry -``` - -Then apply the k8s resources to your cluster(make sure your kubectl has the correct context first) - -```shell -kubectl apply -f k8s/postgres-deployment.yaml -kubectl apply -f k8s/postgres-service.yaml -kubectl apply -f k8s/deployment.yaml -kubectl apply -f k8s/service.yaml -kubectl apply -f k8s/ingress.yaml -``` - -Give it a few moments and then go to http://demo-quarkus.localhost - -## Helm - -Check our helm chart and update dependencies. -``` -helm lint helm/ -helm dependency update helm/ -``` - -Deploy helm chart in the k8s cluster -> **_NOTE:_** Be sure to remove your old resources -```shell -kubectl delete Service demo-quarkus -kubectl delete Deployment demo-quarkus -kubectl delete Ingress demo-quarkus -``` -``` -helm install demo-quarkus ./helm -helm list -``` - -We can also package helm as artefact for the helm repository: -``` -helm package helm/ -Successfully packaged chart and saved it to: .../demo-quarkus-1.0.0.tgz -``` +# devon4quarkus cloud native reference project + +This is the reference project of [devon4quarkus](https://github.com/devonfw/devon4quarkus). + +If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ . + +## Database & Jaeger & Prometheus + +The app uses data persistence and you need a working database to use it. We also use tracing and metrics collector. +There is a `docker-compose.yaml` in the root of this repo that provides all of them. +You can start the DB and Jaeger containers using simple cmd: +``` +docker-compose up +``` +If you want to use other DB, modify the params in `application.properties` + +To access Jaeger UI(tracing): http://localhost:16686 +To access Prometheus(metrics): http://localhost:9090/graph +To access health check of our app: http://localhost:8080/q/health + +## Running the application in dev mode + +You can run your application in dev mode that enables live coding using: +```shell script +./mvnw compile quarkus:dev +``` + +> **_NOTE:_** Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8080/q/dev/. + +## Running tests + +You can run tests from your IDE or via Maven. Simply run `./mvnw test ` or `./mvnw package` + +## Tkit quarkus + +Adding tkit libs to our project gives us several new features. Check the logs for example, all our business methods are now logged and timed. +The REST API now handles exceptions gracefully(as JSON response), and we get server side pagination with very little effort. +Our tests are now real integration tests with real postgres DB, and are stuitable for CI envs. + +## Access your REST endpoint + +Go to http://localhost:8080/animals + + +## OpenAPI & Swagger UI + +With your app running, go to http://localhost:8080/q/swagger-ui to see the Swagger UI visualizing your API. You can access the YAML OpenAPI schema under http://localhost:8080/q/openapi + +## Packaging and running the application + +The application can be packaged using: +```shell script +./mvnw package +``` +It produces the `quarkus-run.jar` file in the `target/quarkus-app/` directory. +Be aware that it’s not an _über-jar_ as the dependencies are copied into the `target/quarkus-app/lib/` directory. + +If you want to build an _über-jar_, execute the following command: +```shell script +./mvnw package -Dquarkus.package.type=uber-jar +``` + +The application is now runnable using `java -jar target/quarkus-app/quarkus-run.jar`. + +## Creating a native executable + +You can create a native executable using: +```shell script +./mvnw package -Pnative +``` + +Or, if you don't have GraalVM installed, you can run the native executable build in a container using: +```shell script +./mvnw package -Pnative -Dquarkus.native.container-build=true +``` + +You can then execute your native executable with: `./target/demo-quarkus-1.0.0-SNAPSHOT-runner` + +If you want to learn more about building native executables, please consult https://quarkus.io/guides/maven-tooling.html. + +## Maven settings + +It is recommended to use vanilla maven settings (no custom mirror, proxy) for better performance. If you have modified your default settings `~/.m2/settings.xml` please revert it, or run the maven commands with the clean settings included in this project using `-s ./settings.xml` + +## Deploy to kubernetes + +To deploy the application, you need a Kubernetes cluster and a registry from which to pull the application image. + +Package your app as docker container and push the image to your local registry: + +```shell +docker build -f src/main/docker/Dockerfile.jvm . -t your-registry/demo-quarkus:latest +docker push your-registry/demo-quarkus:latest +``` + +Also enter the path to your registry in the `k8s/application-deployment.yaml` file so that Kubernetes knows where to get the image from. The location to change is marked with a "TODO" comment. + +Then apply the k8s resources to your cluster (make sure your kubectl has the correct context first) + +```shell +kubectl apply -f k8s/postgres-deployment.yaml +kubectl apply -f k8s/postgres-service.yaml +kubectl apply -f k8s/application-deployment.yaml +kubectl apply -f k8s/application-service.yaml +kubectl apply -f k8s/ingress.yaml +``` + +Give it a few moments and then open http://demo-quarkus.localhost/products/ in your browser. + +## Helm + +> **_NOTE:_** Be sure to remove your old resources first +```shell +kubectl delete -f k8s +``` + +First, in the `src/main/helm/values.yaml` file, specify the path to your registry from which you want to obtain the image. +Then you can deploy the application with the following command: + +```shell +helm install demo-quarkus src/main/helm +``` + +This will deploy the application and the corresponding Postgres database. +Try it out by opening http://demo-quarkus.localhost/products/ in your browser. + +To terminate the instances use the following command: +```shell +helm uninstall demo-quarkus +``` + +### OpenTelemetry integration + +Quarkus can be easily configured to support OpenTelemetry features that can be used in combination with tools such as Jaeger or VictoriaMetrics to monitor traces and metrics. +To learn more about OpenTelemetry, see the devonfw architecture browser in the [chapter about OpenTelemetry](https://devonfw.com/website/pages/architectures/solutions/monitoring_openTelemetry/). + +The `documentation` folder contains a guide with instructions on how to set up the application in combination with these tools. diff --git a/azure-terraform/initial_setup_script.sh b/azure-terraform/initial_setup_script.sh index 2282502f..a836439d 100644 --- a/azure-terraform/initial_setup_script.sh +++ b/azure-terraform/initial_setup_script.sh @@ -1 +1 @@ -In progress +In progress diff --git a/azure-terraform/script_execute.sh b/azure-terraform/script_execute.sh index d91ecdeb..e0e108fe 100644 --- a/azure-terraform/script_execute.sh +++ b/azure-terraform/script_execute.sh @@ -1,47 +1,47 @@ - -echo "Switch into Terraform AKS Cluster Set-up directory" -cd terraform-aks-setup -# make sure terraform CLI is installed -#terraform - -# format the tf files -#terraform fmt - -# initialize terraform Azure modules -terraform init - -# validate the template -terraform validate - -# plan and save the infra changes into tfplan file -terraform plan - -# apply the infra changes -terraform apply --auto-approve - -# delete the infra -#terraform destroy - -cd ../ -echo "Switch into Terraform Helm Release directory" -cd terraform-helm-deploy -# make sure terraform CLI is installed -#terraform - -# format the tf files -#terraform fmt - -# initialize terraform Azure modules -terraform init - -# validate the template -terraform validate - -# plan and save the infra changes into tfplan file -terraform plan - -# apply the infra changes -terraform apply --auto-approve - -# delete the infra -#terraform destroy + +echo "Switch into Terraform AKS Cluster Set-up directory" +cd terraform-aks-setup +# make sure terraform CLI is installed +#terraform + +# format the tf files +#terraform fmt + +# initialize terraform Azure modules +terraform init + +# validate the template +terraform validate + +# plan and save the infra changes into tfplan file +terraform plan + +# apply the infra changes +terraform apply --auto-approve + +# delete the infra +#terraform destroy + +cd ../ +echo "Switch into Terraform Helm Release directory" +cd terraform-helm-deploy +# make sure terraform CLI is installed +#terraform + +# format the tf files +#terraform fmt + +# initialize terraform Azure modules +terraform init + +# validate the template +terraform validate + +# plan and save the infra changes into tfplan file +terraform plan + +# apply the infra changes +terraform apply --auto-approve + +# delete the infra +#terraform destroy diff --git a/azure-terraform/terraform-aks-setup/main.tf b/azure-terraform/terraform-aks-setup/main.tf index 1c490a36..c07eaa5c 100644 --- a/azure-terraform/terraform-aks-setup/main.tf +++ b/azure-terraform/terraform-aks-setup/main.tf @@ -1,31 +1,31 @@ -resource "azurerm_resource_group" "aks-rg" { - name = var.resource_group_name - location = var.location -} - - -resource "azurerm_kubernetes_cluster" "aks" { - name = var.cluster_name - kubernetes_version = var.kubernetes_version - location = var.location - resource_group_name = azurerm_resource_group.aks-rg.name - dns_prefix = var.cluster_name - - default_node_pool { - name = "system" - node_count = var.system_node_count - vm_size = "Standard_DS2_v2" - type = "VirtualMachineScaleSets" - availability_zones = [1, 2, 3] - enable_auto_scaling = false - } - - identity { - type = "SystemAssigned" - } - - network_profile { - load_balancer_sku = "Standard" - network_plugin = "kubenet" - } -} +resource "azurerm_resource_group" "aks-rg" { + name = var.resource_group_name + location = var.location +} + + +resource "azurerm_kubernetes_cluster" "aks" { + name = var.cluster_name + kubernetes_version = var.kubernetes_version + location = var.location + resource_group_name = azurerm_resource_group.aks-rg.name + dns_prefix = var.cluster_name + + default_node_pool { + name = "system" + node_count = var.system_node_count + vm_size = "Standard_DS2_v2" + type = "VirtualMachineScaleSets" + availability_zones = [1, 2, 3] + enable_auto_scaling = false + } + + identity { + type = "SystemAssigned" + } + + network_profile { + load_balancer_sku = "Standard" + network_plugin = "kubenet" + } +} diff --git a/azure-terraform/terraform-aks-setup/output.tf b/azure-terraform/terraform-aks-setup/output.tf index 3be3b183..4a7be7e5 100644 --- a/azure-terraform/terraform-aks-setup/output.tf +++ b/azure-terraform/terraform-aks-setup/output.tf @@ -1,39 +1,39 @@ -output "aks_node_rg" { - value = azurerm_kubernetes_cluster.aks.node_resource_group -} -output "kubernetes_cluster_name" { - value = azurerm_kubernetes_cluster.aks.name -} - -output "aks_id" { - value = azurerm_kubernetes_cluster.aks.id -} - -output "aks_fqdn" { - value = azurerm_kubernetes_cluster.aks.fqdn -} - -output "host" { - value = azurerm_kubernetes_cluster.aks.kube_config.0.host -} - -output "client_key" { - value = azurerm_kubernetes_cluster.aks.kube_config.0.client_key -} - -output "client_certificate" { - value = azurerm_kubernetes_cluster.aks.kube_config.0.client_certificate -} - -output "kube_config" { - value = azurerm_kubernetes_cluster.aks.kube_config_raw - sensitive = true -} - -output "cluster_username" { - value = azurerm_kubernetes_cluster.aks.kube_config.0.username -} - -output "cluster_password" { - value = azurerm_kubernetes_cluster.aks.kube_config.0.password -} +output "aks_node_rg" { + value = azurerm_kubernetes_cluster.aks.node_resource_group +} +output "kubernetes_cluster_name" { + value = azurerm_kubernetes_cluster.aks.name +} + +output "aks_id" { + value = azurerm_kubernetes_cluster.aks.id +} + +output "aks_fqdn" { + value = azurerm_kubernetes_cluster.aks.fqdn +} + +output "host" { + value = azurerm_kubernetes_cluster.aks.kube_config.0.host +} + +output "client_key" { + value = azurerm_kubernetes_cluster.aks.kube_config.0.client_key +} + +output "client_certificate" { + value = azurerm_kubernetes_cluster.aks.kube_config.0.client_certificate +} + +output "kube_config" { + value = azurerm_kubernetes_cluster.aks.kube_config_raw + sensitive = true +} + +output "cluster_username" { + value = azurerm_kubernetes_cluster.aks.kube_config.0.username +} + +output "cluster_password" { + value = azurerm_kubernetes_cluster.aks.kube_config.0.password +} diff --git a/azure-terraform/terraform-aks-setup/provider.tf b/azure-terraform/terraform-aks-setup/provider.tf index de271b58..26496f47 100644 --- a/azure-terraform/terraform-aks-setup/provider.tf +++ b/azure-terraform/terraform-aks-setup/provider.tf @@ -1,16 +1,16 @@ -provider "azurerm" { - features {} - -} - -terraform { - required_providers { - azurerm = { - source = "hashicorp/azurerm" - version = "2.66.0" - } - } - - required_version = ">= 0.14" - -} +provider "azurerm" { + features {} + +} + +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "2.66.0" + } + } + + required_version = ">= 0.14" + +} diff --git a/azure-terraform/terraform-aks-setup/terraform.tfvars b/azure-terraform/terraform-aks-setup/terraform.tfvars index a8c4f223..313c9331 100644 --- a/azure-terraform/terraform-aks-setup/terraform.tfvars +++ b/azure-terraform/terraform-aks-setup/terraform.tfvars @@ -1,5 +1,5 @@ -resource_group_name = "AKSRG103" -location = "West Europe" -cluster_name = "k8s-cluster" -kubernetes_version = "1.19.13" -system_node_count = 2 +resource_group_name = "AKSRG103" +location = "West Europe" +cluster_name = "k8s-cluster" +kubernetes_version = "1.19.13" +system_node_count = 2 diff --git a/azure-terraform/terraform-aks-setup/variables.tf b/azure-terraform/terraform-aks-setup/variables.tf index 33dbfdbf..3bc2c70c 100644 --- a/azure-terraform/terraform-aks-setup/variables.tf +++ b/azure-terraform/terraform-aks-setup/variables.tf @@ -1,20 +1,20 @@ -variable "resource_group_name" { - type = string - description = "RG name in Azure" -} -variable "location" { - type = string - description = "Resources location in Azure" -} -variable "cluster_name" { - type = string - description = "AKS name in Azure" -} -variable "kubernetes_version" { - type = string - description = "Kubernetes version" -} -variable "system_node_count" { - type = number - description = "Number of AKS worker nodes" -} +variable "resource_group_name" { + type = string + description = "RG name in Azure" +} +variable "location" { + type = string + description = "Resources location in Azure" +} +variable "cluster_name" { + type = string + description = "AKS name in Azure" +} +variable "kubernetes_version" { + type = string + description = "Kubernetes version" +} +variable "system_node_count" { + type = number + description = "Number of AKS worker nodes" +} diff --git a/azure-terraform/terraform-helm-deploy/helm_release.tf b/azure-terraform/terraform-helm-deploy/helm_release.tf index b3f05aa8..730512ca 100644 --- a/azure-terraform/terraform-helm-deploy/helm_release.tf +++ b/azure-terraform/terraform-helm-deploy/helm_release.tf @@ -1,55 +1,55 @@ -data "terraform_remote_state" "aks" { - backend = "local" - config = { - path = "/root/quarkus-opentelemetry-example/azure-terraform/terraform-aks-setup/terraform.tfstate" - } -} - -data "azurerm_kubernetes_cluster" "aks" { - name = "k8s-cluster" - resource_group_name = "AKSRG103" -} - -provider "kubernetes" { - host = data.azurerm_kubernetes_cluster.aks.kube_config.0.host - username = data.azurerm_kubernetes_cluster.aks.kube_config.0.username - password = data.azurerm_kubernetes_cluster.aks.kube_config.0.password - client_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_certificate) - client_key = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_key) - cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.cluster_ca_certificate) -} - -provider "helm" { - kubernetes { - host = data.azurerm_kubernetes_cluster.aks.kube_config.0.host - username = data.azurerm_kubernetes_cluster.aks.kube_config.0.username - password = data.azurerm_kubernetes_cluster.aks.kube_config.0.password - client_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_certificate) - client_key = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_key) - cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.cluster_ca_certificate) -} -} - -resource helm_release otel-release { - name = "otel-release-controller" - -# repository = "https://github.com/prathibhapadma/quarkus-otel-test-repo/tree/master/charts" - chart = "../devon4quarkus-reference/charts/helm" - - set { - name = "service.type" - value = "LoadBalancer" - } -} - -resource helm_release quarkus-app-release { - name = "quarkus-app-controller" - - #repository = "https://github.com/prathibhapadma/quarkus-otel-test-repo/tree/master/charts" - chart = "../devon4quarkus-reference/charts/quarkus-app" - - set { - name = "service.type" - value = "LoadBalancer" - } -} +data "terraform_remote_state" "aks" { + backend = "local" + config = { + path = "/root/quarkus-opentelemetry-example/azure-terraform/terraform-aks-setup/terraform.tfstate" + } +} + +data "azurerm_kubernetes_cluster" "aks" { + name = "k8s-cluster" + resource_group_name = "AKSRG103" +} + +provider "kubernetes" { + host = data.azurerm_kubernetes_cluster.aks.kube_config.0.host + username = data.azurerm_kubernetes_cluster.aks.kube_config.0.username + password = data.azurerm_kubernetes_cluster.aks.kube_config.0.password + client_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_certificate) + client_key = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_key) + cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.cluster_ca_certificate) +} + +provider "helm" { + kubernetes { + host = data.azurerm_kubernetes_cluster.aks.kube_config.0.host + username = data.azurerm_kubernetes_cluster.aks.kube_config.0.username + password = data.azurerm_kubernetes_cluster.aks.kube_config.0.password + client_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_certificate) + client_key = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.client_key) + cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.aks.kube_config.0.cluster_ca_certificate) +} +} + +resource helm_release otel-release { + name = "otel-release-controller" + +# repository = "https://github.com/prathibhapadma/quarkus-otel-test-repo/tree/master/charts" + chart = "../devon4quarkus-reference/helm-charts/opentelementry" + + set { + name = "service.type" + value = "LoadBalancer" + } +} + +resource helm_release quarkus-app-release { + name = "quarkus-app-controller" + + #repository = "https://github.com/prathibhapadma/quarkus-otel-test-repo/tree/master/charts" + chart = "../devon4quarkus-reference/helm-charts/demo-quarkus" + + set { + name = "service.type" + value = "LoadBalancer" + } +} diff --git a/azure-terraform/terraform-helm-deploy/provider.tf b/azure-terraform/terraform-helm-deploy/provider.tf index bea28bfc..89d4f49b 100644 --- a/azure-terraform/terraform-helm-deploy/provider.tf +++ b/azure-terraform/terraform-helm-deploy/provider.tf @@ -1,15 +1,15 @@ -provider "azurerm" { - features {} - -} - -terraform { - required_providers { - azurerm = { - source = "hashicorp/azurerm" - version = "2.66.0" - } - } - - required_version = ">= 0.14" -} +provider "azurerm" { + features {} + +} + +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "2.66.0" + } + } + + required_version = ">= 0.14" +} diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 818d4904..4599b4c1 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -1,126 +1,126 @@ - -== Provision an Aks Cluster with Terraform - -:url-az-account: https://portal.azure.com/#home - -:url-az-CLI: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest - -:url-az-kubectl: https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli - -:url-helm: https://helm.sh/docs/intro/install/ - -:url-terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli - -:url-repo-code: https://github.com/devon4quarkus-reference/azure-terraform - -The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing and scaling containerized applications on Azure. - -== *Prerequisites:* - -. Sign up into {url-az-account}[Azure Account]. -. Install the Azure {url-az-CLI}[CLI]. -. Install the {url-az-kubectl}[kubectl]. -. Install the {url-helm}[Helm]. -. Install the {url-terraform}[Terraform]. - -*Setup using Script* - -Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/initial_setup_script.sh` - -*Usage* - -`bash initial_setup_script.sh` - -== *Login to Azure Account* - -Before the terraform implementation we need to login Azure account through `Azure CLI`. -``` -az login -az account set --subscription $SUBSCRIPTION -``` - -== *Set-Up And Initialize Terraform Workspace* - -In your terminal, clone the following {url-repo-code}[repository] code. - -`$ git clone https://github.com/devon4quarkus-reference` - -You can explore this repository by changing the directories. - -`cd azure-terraform/terraform-aks-setup` - -List of the files used to provision the AKS Cluster. - -. `aks-cluster.tf` provisions a Resource Group and AKS Cluster. The default node pool defines the number of VMs and the VM type cluster uses. - -. `variables.tf` declares the variables to terraform, It can use reference to its configuration. - -. `terraform.tfvars` defines the variables values to terraform. - -. `outputs.tf` declares values that can be useful to interact with your Aks Cluster. - -. `versions.tf` set the Terraform version and defines the required provider block. - -== *Initialize Terraform* -After you have saved your customized variables file, Initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. - -`$ terraform init` - -== *Terraform plan* -Terraform plan creates an execution of plan and evaluates a Terraform configuration to determine the desired state of all the resources it declares. - -`$terraform plan` - -== *Terraform apply* -Terraform apply will review the planned actions, your terminal output should indicate the plan is running and what resources will be created. - -`$ terraform apply` - -You can see this terraform apply will provision an Azure Resource Group and Aks Cluster. Confirm the apply with a yes. - -== *Deploy Helm-charts with the Helm Provider* - -The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. Create the Helm Provider in `helm_release.tf` and configure the helm-charts repository location. - -Change the directory in to `Helm Release Provider`. - -`cd azure-terraform/terraform-helm-deploy` - -Here we need to follow same steps as above process to deploy helm charts in to AKS cluster (Example: terraform init and terraform apply). - - -*Note*: You need to change helm charts path location in `terraform-helm-deploy/helm_release.tf` file. - -== Terraform initialize and apply using Script - -Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/script_execute.sh` - -== Usage - -`bash script_execute.sh` - -== *Configure kubectl* - -Now that you've provisioned your AKS Cluster, you need to configure kubectl. - -Run the following command to retrieve the access credentials for your cluster and automatically configure kubectl. - -`az aks get-credentials --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` - -The Resource Group name and Kubernetes cluster name correspond to the output variables showed after the successful Terraform run. - -== *Access Kubernetes Dashboard* -Run the following command to generate the Azure portal link. - -`az aks browse --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` - -Go to the URL in your preferred browser to view the Kubernetes resource view. - -== *Clean up your workspace* -Run the destroy command and confirm with yes in your terminal. - -`$ terraform destroy` - -``` -Note: terraform destroy can clean your Aks Cluster but not Resource Group, Because we are not authorized to perform RG deletion. For that we need to raise ticket for IT Group. -``` + +== Provision an Aks Cluster with Terraform + +:url-az-account: https://portal.azure.com/#home + +:url-az-CLI: https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest + +:url-az-kubectl: https://docs.microsoft.com/en-us/azure/aks/tutorial-kubernetes-deploy-cluster?tabs=azure-cli + +:url-helm: https://helm.sh/docs/intro/install/ + +:url-terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli + +:url-repo-code: https://github.com/devon4quarkus-reference/azure-terraform + +The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing and scaling containerized applications on Azure. + +== *Prerequisites:* + +. Sign up into {url-az-account}[Azure Account]. +. Install the Azure {url-az-CLI}[CLI]. +. Install the {url-az-kubectl}[kubectl]. +. Install the {url-helm}[Helm]. +. Install the {url-terraform}[Terraform]. + +*Setup using Script* + +Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/initial_setup_script.sh` + +*Usage* + +`bash initial_setup_script.sh` + +== *Login to Azure Account* + +Before the terraform implementation we need to login Azure account through `Azure CLI`. +``` +az login +az account set --subscription $SUBSCRIPTION +``` + +== *Set-Up And Initialize Terraform Workspace* + +In your terminal, clone the following {url-repo-code}[repository] code. + +`$ git clone https://github.com/devon4quarkus-reference` + +You can explore this repository by changing the directories. + +`cd azure-terraform/terraform-aks-setup` + +List of the files used to provision the AKS Cluster. + +. `aks-cluster.tf` provisions a Resource Group and AKS Cluster. The default node pool defines the number of VMs and the VM type cluster uses. + +. `variables.tf` declares the variables to terraform, It can use reference to its configuration. + +. `terraform.tfvars` defines the variables values to terraform. + +. `outputs.tf` declares values that can be useful to interact with your Aks Cluster. + +. `versions.tf` set the Terraform version and defines the required provider block. + +== *Initialize Terraform* +After you have saved your customized variables file, Initialize your Terraform workspace, which will download the provider and initialize it with the values provided in your terraform.tfvars file. + +`$ terraform init` + +== *Terraform plan* +Terraform plan creates an execution of plan and evaluates a Terraform configuration to determine the desired state of all the resources it declares. + +`$terraform plan` + +== *Terraform apply* +Terraform apply will review the planned actions, your terminal output should indicate the plan is running and what resources will be created. + +`$ terraform apply` + +You can see this terraform apply will provision an Azure Resource Group and Aks Cluster. Confirm the apply with a yes. + +== *Deploy Helm-charts with the Helm Provider* + +The Terraform Helm provider allows you to deploy and manage your Kubernetes applications dynamically and securely. Create the Helm Provider in `helm_release.tf` and configure the helm-charts repository location. + +Change the directory in to `Helm Release Provider`. + +`cd azure-terraform/terraform-helm-deploy` + +Here we need to follow same steps as above process to deploy helm charts in to AKS cluster (Example: terraform init and terraform apply). + + +*Note*: You need to change helm charts path location in `terraform-helm-deploy/helm_release.tf` file. + +== Terraform initialize and apply using Script + +Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/script_execute.sh` + +== Usage + +`bash script_execute.sh` + +== *Configure kubectl* + +Now that you've provisioned your AKS Cluster, you need to configure kubectl. + +Run the following command to retrieve the access credentials for your cluster and automatically configure kubectl. + +`az aks get-credentials --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` + +The Resource Group name and Kubernetes cluster name correspond to the output variables showed after the successful Terraform run. + +== *Access Kubernetes Dashboard* +Run the following command to generate the Azure portal link. + +`az aks browse --resource-group $(terraform output -raw resource_group_name) --name $(terraform output -raw kubernetes_cluster_name)` + +Go to the URL in your preferred browser to view the Kubernetes resource view. + +== *Clean up your workspace* +Run the destroy command and confirm with yes in your terminal. + +`$ terraform destroy` + +``` +Note: terraform destroy can clean your Aks Cluster but not Resource Group, Because we are not authorized to perform RG deletion. For that we need to raise ticket for IT Group. +``` diff --git a/docker-compose.yaml b/docker-compose.yaml index b01aee3b..616f7e97 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,117 +1,106 @@ -version: "3" - -services: - postgresdb: - image: postgres:11.5 - container_name: postgresdb - environment: - POSTGRES_HOST_AUTH_METHOD: trust - POSTGRES_USER: demo - POSTGRES_PASSWORD: demo - POSTGRES_DB: demo - command: [-cmax_prepared_transactions=100] - ports: - - "5432:5432" - networks: - - demo - - # Collector - otel-collector: - image: otel/opentelemetry-collector:latest - command: ["--config=/conf/otel-collector-config.yaml", "--log-level=DEBUG"] - volumes: - - ./otel-collector-config.yaml:/conf/otel-collector-config.yaml - ports: - - "1888:1888" # pprof extension - - "8888:8888" # Prometheus metrics exposed by the collector - - "8889:8889" # Prometheus exporter metrics - - "13133:13133" # health_check extension - - "4317:4317" # OTLP gRPC receiver - - "55670:55679" # zpages extension - depends_on: - - jaeger-all-in-one - - zipkin-all-in-one - networks: - - demo - - # Zipkin - zipkin-all-in-one: - image: openzipkin/zipkin:latest - ports: - - "9411:9411" - networks: - - demo - - jaeger-all-in-one: - image: jaegertracing/all-in-one:latest - ports: - - "16686:16686" - - "14268" - - "14250" - networks: - - demo - - otel-agent: - image: otel/opentelemetry-collector:latest - command: ["--config=/etc/otel-agent-config.yaml", "--log-level=DEBUG"] - volumes: - - ./otel-agent-config.yaml:/etc/otel-agent-config.yaml - ports: - - "8887:8888" # Prometheus metrics exposed by the agent - - "14250:14250" # Jaeger grpc receiver - - "14268:14268" # Jaeger http thrift receiver - - "55678" # OpenCensus receiver - - "4317" # OTLP gRPC receiver - - "9411" # Zipkin receiver - - "1777:1777" # pprof extension - - "55679:55679" # zpages extension - - "13133" # health_check - depends_on: - - otel-collector - networks: - - demo - - vmagent: - container_name: vmagent - image: victoriametrics/vmagent - depends_on: - - "victoriametrics" - ports: - - 8429:8429 - volumes: - - ./vMetrics.yaml:/etc/victoriametrics/vMetrics.yml - command: - - '--promscrape.config=/etc/victoriametrics/vMetrics.yml' - - '--remoteWrite.url=http://victoriametrics:8428/api/v1/write' - networks: - - demo - - victoriametrics: - container_name: victoriametrics - image: victoriametrics/victoria-metrics - ports: - - 8428:8428 - - 8089:8089 - - 8089:8089/udp - - 2003:2003 - - 2003:2003/udp - - 4242:4242 - command: - - --promscrape.config=/etc/victoriametrics/vMetrics.yml - volumes: - - ./vMetrics.yaml:/etc/victoriametrics/vMetrics.yml:ro - networks: - - demo - - prometheus: - container_name: prometheus - image: prom/prometheus:latest - volumes: - - ./prometheus.yaml:/etc/prometheus/prometheus.yml - ports: - - "9090:9090" - networks: - - demo - -networks: - demo: +version: "3" + +services: + postgresdb: + image: 'docker.io/bitnami/postgresql:12.2.0' + container_name: postgresdb + environment: + POSTGRES_HOST_AUTH_METHOD: trust + POSTGRES_USER: demo + POSTGRES_PASSWORD: demo + POSTGRES_DB: demo + command: [-cmax_prepared_transactions=100] + ports: + - "5432:5432" + networks: + - demo + + otel-agent: + image: otel/opentelemetry-collector-dev:latest + command: ["--config=/etc/otel-agent-config.yaml", "--log-level=DEBUG"] + volumes: + - ./otel-agent-config.yaml:/etc/otel-agent-config.yaml + ports: + - "8887:8888" # Prometheus metrics exposed by the agent + - "14250:14250" # Jaeger grpc receiver + - "14268:14268" # Jaeger http thrift receiver + - "55678" # OpenCensus receiver + - "4317" # OTLP gRPC receiver + - "9411" # Zipkin receiver + - "1777:1777" # pprof extension + - "55679:55679" # zpages extension + - "13133" # health_check + depends_on: + - otel-collector + networks: + - demo + + # Collector + otel-collector: + image: otel/opentelemetry-collector-dev:latest + command: ["--config=/conf/otel-collector-config.yaml", "--log-level=DEBUG"] + volumes: + - ./otel-collector-config.yaml:/conf/otel-collector-config.yaml + ports: + - "1888:1888" # pprof extension + - "8888:8888" # Prometheus metrics exposed by the collector + - "8889:8889" # Prometheus exporter metrics + - "13133:13133" # health_check extension + - "4317:4317" # OTLP gRPC receiver + - "55670:55679" # zpages extension + depends_on: + - jaeger-all-in-one + networks: + - demo + + jaeger-all-in-one: + image: jaegertracing/all-in-one:latest + ports: + - "16686:16686" + - "14268" + - "14250" + networks: + - demo + + vmagent: + container_name: vmagent + image: victoriametrics/vmagent + depends_on: + - "victoriametrics" + ports: + - 8429:8429 + volumes: + - ./vMetrics.yaml:/etc/victoriametrics/vMetrics.yml + command: + - '--promscrape.config=/etc/victoriametrics/vMetrics.yml' + - '--remoteWrite.url=http://victoriametrics:8428/api/v1/write' + networks: + - demo + + victoriametrics: + container_name: victoriametrics + image: victoriametrics/victoria-metrics + ports: + - 8428:8428 + - 8089:8089 + - 8089:8089/udp + - 2003:2003 + - 2003:2003/udp + - 4242:4242 + command: + - --promscrape.config=/etc/victoriametrics/vMetrics.yml + volumes: + - ./vMetrics.yaml:/etc/victoriametrics/vMetrics.yml:ro + networks: + - demo + + grafana: + container_name: grafana + image: grafana/grafana + ports: + - "3000:3000" + networks: + - demo + +networks: + demo: \ No newline at end of file diff --git a/documentation/opentelemetry-deployment.asciidoc b/documentation/opentelemetry-deployment.asciidoc new file mode 100644 index 00000000..d4f91f5c --- /dev/null +++ b/documentation/opentelemetry-deployment.asciidoc @@ -0,0 +1,86 @@ +:toc: macro +toc::[] + += OpenTelemetry deployment + +Quarkus applications can easily use OpenTelemetry to collect information about traces and metrics. +This guide describes how to set up the application to support OpenTelemetry for exporting and visualizing traces and spans with tools such as Jaeger, VictoriaMetrics, and Grafana. + +For this setup you need a Kubernetes cluster, an installation of Helm and a local Docker registry. + +== Preparation of the application + +First, you need to create the application and Docker image. Use the following commands to package the application, create the Docker image, and push it to your local Docker registry. + +[shell] +---- +mvn clean package + +docker build src/main/docker/Dockerfile.jvm . -t demo-quarkus +docker tag demo-quarkus name-of-your-registry/demo-quarkus +docker push name-of-your-registry/demo-quarkus +---- + +After this the Docker image should be available in your Docker registry. + +== Deploy the OpenTelemetry components + +To deploy the components needed for the OpenTelemetry setup, we use the Helm template from the link:https://github.com/devonfw/architectures/tree/master/solutions/monitoring_openTelemetry/helm[devonfw architecture repository]. +Download the folder from Github or clone the repository by executing `git clone https://github.com/devonfw/architectures.git`. +Before we can deploy the Helm chart, we need to change some values in the `values.yaml` file. Set the following properties. + +[yaml] +---- +application: + metrics: + jobname: "demo-quarkus" + url: "/q/metrics" + + service: + name: "demo-quarkus" + port: 8080 + + ... +---- + +The install the Helm chart by executing `helm install opentelemetry helm` (make sure to pass the correct path to the Helm chart as the last parameter). + +This will deploy the following components: + +* OpenTelemetry agent +* OpenTelemetry collector +* Jaeger +* VictoriaMetrics +* Grafana + +== Configure the application + +The Quarkus application uses the `quarkus-opentelemetry-exporter-otlp` extension to export the traces. The extension is already added to the project. We just need to configure the application accordingly. +To do this, set the following environment variables in the `src/main/helm/templates/application-deployment.yaml` file. + +[yaml] +---- +... +- name: quarkus.opentelemetry.enabled + value: "true" +- name: quarkus.opentelemetry.tracer.exporter.otlp.endpoint + value: http://otel-agent:4317 +- name: quarkus.application.name + value: demo-quarkus +... +---- + +This will enable the export of the traces to the OpenTelemetry collector. + +Then deploy the application by executing `helm install demo-quarkus src/main/helm`. + +== Testing the components + +After these steps, the application and components for OpenTelemetry should work properly. +To verify the application, first open http://demo-quarkus.localhost/products in your browser. You should receive a JSON response listing all the products in the database. + +Open the Jaeger user interface by navigating to http://jaeger.localhost/search in your browser to view the application traces. Select "demo-quarkus" as the service name and view the results. Each time you make a request to the application, you should see a new record. + +Now let's take a look at the metrics. Navigate to http://grafana.localhost/ in your browser to open Grafana. Log in with the default username and password `admin`. Go to the configuration area and add a new datasource to view the metrics. +Select the "Prometheus" entry (VictoriaMetrics is compatible with Prometheus) and enter http://victoriametrics.default.svc.cluster.local:8428 as the URL. +After that you should be able to see the metrics in the Grafana Dashboard. diff --git a/helm-charts/demo-quarkus/Chart.yaml b/helm-charts/demo-quarkus/Chart.yaml new file mode 100644 index 00000000..c72fbaae --- /dev/null +++ b/helm-charts/demo-quarkus/Chart.yaml @@ -0,0 +1,24 @@ +apiVersion: v2 +name: helm-app +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: v1 #"1.16.0" diff --git a/helm-charts/demo-quarkus/templates/deployment.yaml b/helm-charts/demo-quarkus/templates/deployment.yaml new file mode 100644 index 00000000..9b43c911 --- /dev/null +++ b/helm-charts/demo-quarkus/templates/deployment.yaml @@ -0,0 +1,118 @@ +apiVersion: apps/v1 +kind: Deployment +# deployment v1 +metadata: + # metadata labels - tags under which this resources can be found in k8s api + labels: + app: demo-quarkus + app.kubernetes.io/name: demo-quarkus + name: demo-quarkus + namespace: default +spec: + # scale to 2 instances + replicas: 2 + selector: + #how are the pods linked together + matchLabels: + app: demo-quarkus + template: + metadata: + labels: + app: demo-quarkus + spec: + # pod spec, we want a single container in our pods + containers: + - name: demo-quarkus + # where should the image come from + image: 'dockerregistry101/demo-quarkus:latest' + #command: ["java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes="service.name=quarkus-demo"] + #command: ["/deployments/run-java.sh"] + # always perform pull when creating pod + imagePullPolicy: Always + #env Secrets to pull image from regidtry + + # command: ["/deployments/run-java.sh", "&&", "java", "-javaagent:agent/opentelemetry-javaagent-all.jar", "-Dotel.metrics.exporter=none", "-Dotel.exporter.otlp.endpoint=http://otel-collector:4317", "-Dotel.resource.attributes='service.name=quarkus-demo'"] + # env vars so we can connect to DB + env: + - name: QUARKUS_DATASOURCE_JDBC_URL + value: jdbc:postgresql://postgresql:5432/demo + - name: QUARKUS_DATASOURCE_USERNAME + value: demo + - name: QUARKUS_DATASOURCE_PASSWORD + value: demo + - name: quarkus.opentelemetry.enabled + value: "true" + - name: quarkus.opentelemetry.tracer.exporter.otlp.endpoint + value: http://otel-agent:4317 + - name: quarkus.application.name + value: demo-quarkus + + # live & ready probes, using our healthcheck endpoints + livenessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/live + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + ports: + - containerPort: 8080 + readinessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/ready + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + # we can define init containers, single run jobs that run before our main container does + # we use them to init database and check that its ready + initContainers: + - command: + - /bin/bash + - '-c' + - >- + psql -tc "SELECT 1 FROM pg_database WHERE datname = + 'demo'" | grep -q 1 | psql -c "CREATE USER + demo WITH ENCRYPTED PASSWORD 'demo';" -c + "CREATE DATABASE demo;" -c "GRANT ALL PRIVILEGES + ON DATABASE demo TO demo;" + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: null + - name: PGUSER + value: postgres + - name: PGPASSWORD + value: postgres + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: create-db + - command: + - /bin/bash + - '-c' + - until pg_isready; do echo waiting for database; sleep 2; done; + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: demo + - name: PGUSER + value: demo + - name: PGPASSWORD + value: demo + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: check-db diff --git a/helm-charts/demo-quarkus/templates/ingress.yaml b/helm-charts/demo-quarkus/templates/ingress.yaml new file mode 100644 index 00000000..f0390a4d --- /dev/null +++ b/helm-charts/demo-quarkus/templates/ingress.yaml @@ -0,0 +1,20 @@ +# a simple ingress for our service +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: demo-quarkus + annotations: + ingress.kubernetes.io/ssl-redirect: "false" +spec: + rules: + - http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: demo-quarkus + port: + number: 8080 + # #this will work if you have dnsmasq(tkit env guide) + host: demo-quarkus.localhost diff --git a/helm-charts/demo-quarkus/templates/postgres-deployment.yaml b/helm-charts/demo-quarkus/templates/postgres-deployment.yaml new file mode 100644 index 00000000..e3d8ff00 --- /dev/null +++ b/helm-charts/demo-quarkus/templates/postgres-deployment.yaml @@ -0,0 +1,79 @@ +apiVersion: apps/v1 +kind: Deployment +# deployment v1 +metadata: + name: postgresql +spec: + replicas: 1 + selector: + #how are the pods linked together + matchLabels: + app: postgresql + template: + metadata: + labels: + app: postgresql + spec: + containers: + - name: postgresql + image: 'docker.io/bitnami/postgresql:12.2.0' + ports: + - name: tcp-postgresql + containerPort: 5432 + protocol: TCP + env: + - name: POSTGRESQL_PORT_NUMBER + value: '5432' + - name: POSTGRESQL_VOLUME_DIR + value: /bitnami/postgresql + - name: PGDATA + value: /bitnami/postgresql/data + - name: POSTGRES_USER + value: postgres + #dont even try this in production + - name: POSTGRES_PASSWORD + value: postgres + - name: POSTGRES_DB + value: kubernetes + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + - name: POSTGRESQL_ENABLE_LDAP + value: 'no' + resources: + requests: + cpu: 250m + memory: 256Mi + livenessProbe: + exec: + command: + - /bin/sh + - '-c' + - >- + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + initialDelaySeconds: 30 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + readinessProbe: + exec: + command: + - /bin/sh + - '-c' + - '-e' + - > + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + + [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f + /bitnami/postgresql/.initialized ] + initialDelaySeconds: 5 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + imagePullPolicy: IfNotPresent +# we run database without any persistent data volume - not a good idea, but sufficient for demo diff --git a/helm-charts/demo-quarkus/templates/postgres-service.yaml b/helm-charts/demo-quarkus/templates/postgres-service.yaml new file mode 100644 index 00000000..31cdc930 --- /dev/null +++ b/helm-charts/demo-quarkus/templates/postgres-service.yaml @@ -0,0 +1,15 @@ +kind: Service +apiVersion: v1 +metadata: + name: postgresql + labels: + app: postgresql +spec: + ports: + - name: tcp-postgresql + protocol: TCP + port: 5432 + targetPort: tcp-postgresql + selector: + app: postgresql + type: LoadBalancer #ClusterIP diff --git a/helm-charts/demo-quarkus/templates/service.yaml b/helm-charts/demo-quarkus/templates/service.yaml new file mode 100644 index 00000000..22f1f676 --- /dev/null +++ b/helm-charts/demo-quarkus/templates/service.yaml @@ -0,0 +1,17 @@ +kind: Service +apiVersion: v1 +metadata: + name: demo-quarkus + labels: + app: demo-quarkus +spec: + # we expose port 8080 which load balances traffic to the pods and their internal port 8080 + ports: + - name: http-port + protocol: TCP + port: 8080 + targetPort: 8080 +# how to find the pods we are load balancing + selector: + app: demo-quarkus + type: LoadBalancer #ClusterIP diff --git a/helm-charts/opentelementry/Chart.yaml b/helm-charts/opentelementry/Chart.yaml new file mode 100644 index 00000000..1d1149c3 --- /dev/null +++ b/helm-charts/opentelementry/Chart.yaml @@ -0,0 +1,9 @@ +apiVersion: v3 +name: OpenTelemetry Helm template +version: 1.0.0 +description: Helm chart template for an OpenTelemetry Kubernetes deployment +appVersion: 1.0.0 +keywords: + - template +maintainers: + - name: devon4j Developer diff --git a/helm-charts/opentelementry/templates/configmap.yaml b/helm-charts/opentelementry/templates/configmap.yaml new file mode 100644 index 00000000..7b0c1735 --- /dev/null +++ b/helm-charts/opentelementry/templates/configmap.yaml @@ -0,0 +1,98 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-agent +data: + otel-agent-config: | + receivers: + otlp: + protocols: + grpc: + + processors: + batch: + + exporters: + otlp: + endpoint: "otel-collector.default.svc.cluster.local:4317" + insecure: true + + service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [otlp] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [otlp] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector +data: + otel-collector-config: | + receivers: + otlp: + protocols: + grpc: + http: + cors_allowed_origins: + - http://* + - https://* + + processors: + batch: + + exporters: + logging: + zipkin: + endpoint: "http://zipkin-all-in-one.default.svc.cluster.local:9411/api/v2/spans" + format: proto + jaeger: + endpoint: jaeger-all-in-one.default.svc.cluster.local:14250 + insecure: true + prometheus: + endpoint: "0.0.0.0:8889" + + service: + pipelines: + traces: + receivers: [otlp] + exporters: [zipkin, jaeger] + processors: [batch] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [prometheus] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vmetrics-config +data: + vMetrics.yaml: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: prometheus +data: + prometheus-config: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] \ No newline at end of file diff --git a/helm-charts/opentelementry/templates/grafana-deployment.yaml b/helm-charts/opentelementry/templates/grafana-deployment.yaml new file mode 100644 index 00000000..2b965d62 --- /dev/null +++ b/helm-charts/opentelementry/templates/grafana-deployment.yaml @@ -0,0 +1,43 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: grafana + name: grafana +spec: + replicas: 1 + selector: + matchLabels: + component: grafana + template: + metadata: + labels: + component: grafana + spec: + containers: + - image: grafana/grafana + name: grafana + ports: + - containerPort: 3000 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: grafana + name: grafana +spec: + ports: + - name: "3000" + port: 3000 + protocol: TCP + targetPort: 3000 + selector: + component: grafana + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/helm-charts/opentelementry/templates/ingress.yaml b/helm-charts/opentelementry/templates/ingress.yaml new file mode 100644 index 00000000..a527080c --- /dev/null +++ b/helm-charts/opentelementry/templates/ingress.yaml @@ -0,0 +1,46 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress +spec: + rules: + - host: {{ .Values.ingress.application.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: {{ .Values.application.service.name }} + port: + number: {{ .Values.ingress.application.port }} + - host: {{ .Values.ingress.jaeger.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: jaeger-all-in-one + port: + number: {{ .Values.ingress.jaeger.port }} + - host: {{ .Values.ingress.zipkin.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: zipkin-all-in-one + port: + number: {{ .Values.ingress.zipkin.port }} + - host: {{ .Values.ingress.grafana.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: grafana + port: + number: {{ .Values.ingress.grafana.port }} \ No newline at end of file diff --git a/helm-charts/opentelementry/templates/jaeger-all-in-one-deployment.yaml b/helm-charts/opentelementry/templates/jaeger-all-in-one-deployment.yaml new file mode 100644 index 00000000..60516367 --- /dev/null +++ b/helm-charts/opentelementry/templates/jaeger-all-in-one-deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + replicas: 1 + selector: + matchLabels: + component: jaeger-all-in-one + strategy: {} + template: + metadata: + labels: + component: jaeger-all-in-one + spec: + containers: + - image: jaegertracing/all-in-one:latest + name: jaeger-all-in-one + ports: + - containerPort: 16686 + - containerPort: 14268 + - containerPort: 14250 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + ports: + - name: "16686" + port: 16686 + protocol: TCP + targetPort: 16686 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + selector: + component: jaeger-all-in-one + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/helm-charts/opentelementry/templates/otel-agent-deployment.yaml b/helm-charts/opentelementry/templates/otel-agent-deployment.yaml new file mode 100644 index 00000000..5255e516 --- /dev/null +++ b/helm-charts/opentelementry/templates/otel-agent-deployment.yaml @@ -0,0 +1,98 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + replicas: 1 + selector: + matchLabels: + component: otel-agent + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-agent + spec: + containers: + - args: + - /otelcol + - --config=/conf/otel-agent-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-agent + ports: + - containerPort: 8888 + - containerPort: 14250 + - containerPort: 14268 + - containerPort: 55678 + - containerPort: 4317 + - containerPort: 9411 + - containerPort: 1777 + - containerPort: 13133 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-agent-config-volume + volumes: + - name: otel-agent-config-volume + configMap: + name: otel-agent + items: + - key: otel-agent-config + path: otel-agent-config.yaml + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + ports: + - name: "8887" + port: 8887 + + targetPort: 8888 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "55678" + port: 55678 + protocol: TCP + targetPort: 55678 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "9411" + port: 9411 + protocol: TCP + targetPort: 9411 + - name: "1777" + port: 1777 + protocol: TCP + targetPort: 1777 + - name: "55679" + port: 55679 + protocol: TCP + targetPort: 55679 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + selector: + component: otel-agent + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/helm-charts/opentelementry/templates/otel-collector-deployment.yaml b/helm-charts/opentelementry/templates/otel-collector-deployment.yaml new file mode 100644 index 00000000..318ef5bc --- /dev/null +++ b/helm-charts/opentelementry/templates/otel-collector-deployment.yaml @@ -0,0 +1,83 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + replicas: 1 + selector: + matchLabels: + component: otel-collector + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-collector + spec: + containers: + - args: + - --config=/conf/otel-collector-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-collector + ports: + - containerPort: 1888 + - containerPort: 8888 + - containerPort: 8889 + - containerPort: 13133 + - containerPort: 4317 + - containerPort: 55679 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-collector-config-volume + restartPolicy: Always + volumes: + - name: otel-collector-config-volume + configMap: + name: otel-collector + items: + - key: otel-collector-config + path: otel-collector-config.yaml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + ports: + - name: "1888" + port: 1888 + protocol: TCP + targetPort: 1888 + - name: "8888" + port: 8888 + protocol: TCP + targetPort: 8888 + - name: "8889" + port: 8889 + protocol: TCP + targetPort: 8889 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "55670" + port: 55670 + protocol: TCP + targetPort: 55679 + selector: + component: otel-collector + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/helm-charts/opentelementry/templates/prometheus-deployment.yaml b/helm-charts/opentelementry/templates/prometheus-deployment.yaml new file mode 100644 index 00000000..c9fd2689 --- /dev/null +++ b/helm-charts/opentelementry/templates/prometheus-deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: prometheus + name: prometheus +spec: + replicas: 1 + selector: + matchLabels: + component: prometheus + strategy: + type: Recreate + template: + metadata: + labels: + component: prometheus + spec: + containers: + - image: prom/prometheus:latest + name: prometheus + ports: + - containerPort: 9090 + resources: {} + volumeMounts: + - mountPath: /etc/prometheus/ + name: prometheus-config-volume + restartPolicy: Always + volumes: + - name: prometheus-config-volume + configMap: + name: prometheus + items: + - key: prometheus-config + path: prometheus.yml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: prometheus + name: prometheus +spec: + ports: + - name: "9090" + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + component: prometheus + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/helm-charts/opentelementry/values.yaml b/helm-charts/opentelementry/values.yaml new file mode 100644 index 00000000..94eb543f --- /dev/null +++ b/helm-charts/opentelementry/values.yaml @@ -0,0 +1,26 @@ +# Application configuration +application: + # Configuration to get the metrics information + metrics: + jobname: "demo-quarkus" + url: "/q/metrics" + + # Configuration of the application service + service: + name: "demo-quarkus" + port: 8080 + +# Ingress configuration +ingress: + application: + host: "application.localhost" + port: 8080 + jaeger: + host: "jaeger.localhost" + port: 16686 + zipkin: + host: "zipkin.localhost" + port: 9411 + grafana: + host: "grafana.localhost" + port: 3000 diff --git a/k8s/application-deployment.yaml b/k8s/application-deployment.yaml new file mode 100644 index 00000000..05e3de33 --- /dev/null +++ b/k8s/application-deployment.yaml @@ -0,0 +1,98 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: demo-quarkus + app.kubernetes.io/name: demo-quarkus + name: demo-quarkus +spec: + # scale to 2 instances + replicas: 2 + selector: + matchLabels: + app: demo-quarkus + template: + metadata: + labels: + app: demo-quarkus + spec: + containers: + - name: demo-quarkus + ## TODO: Insert the registry from which you want to pull the image + image: 'your-registry/demo-quarkus:latest' + imagePullPolicy: Always + env: + - name: QUARKUS_DATASOURCE_JDBC_URL + value: jdbc:postgresql://postgresql:5432/demo + - name: QUARKUS_DATASOURCE_USERNAME + value: demo + - name: QUARKUS_DATASOURCE_PASSWORD + value: demo + livenessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/live + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + ports: + - containerPort: 8080 + readinessProbe: + failureThreshold: 5 + httpGet: + path: /q/health/ready + port: 8080 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + # we can define init containers, single run jobs that run before our main container does + # we use them to init database and check that its ready + initContainers: + - command: + - /bin/bash + - '-c' + - >- + psql -tc "SELECT 1 FROM pg_database WHERE datname = + 'demo'" | grep -q 1 | psql -c "CREATE USER + demo WITH ENCRYPTED PASSWORD 'demo';" -c + "CREATE DATABASE demo;" -c "GRANT ALL PRIVILEGES + ON DATABASE demo TO demo;" + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: null + - name: PGUSER + value: postgres + - name: PGPASSWORD + value: postgres + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: create-db + - command: + - /bin/bash + - '-c' + - until pg_isready; do echo waiting for database; sleep 2; done; + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '5432' + - name: PGDATABASE + value: demo + - name: PGUSER + value: demo + - name: PGPASSWORD + value: demo + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: 'docker.io/bitnami/postgresql:12.2.0' + name: check-db diff --git a/k8s/application-service.yaml b/k8s/application-service.yaml new file mode 100644 index 00000000..7b678504 --- /dev/null +++ b/k8s/application-service.yaml @@ -0,0 +1,15 @@ +kind: Service +apiVersion: v1 +metadata: + name: demo-quarkus + labels: + app: demo-quarkus +spec: + ports: + - name: http-port + protocol: TCP + port: 8080 + targetPort: 8080 + selector: + app: demo-quarkus + type: ClusterIP diff --git a/k8s/ingress.yaml b/k8s/ingress.yaml index 8d3a9a1a..cdcd74f1 100644 --- a/k8s/ingress.yaml +++ b/k8s/ingress.yaml @@ -1,20 +1,18 @@ -# a simple ingress for our service -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: demo-quarkus - annotations: - ingress.kubernetes.io/ssl-redirect: "false" -spec: - rules: - - http: - paths: - - path: "/" - pathType: Prefix - backend: - service: - name: demo-quarkus - port: - number: 8080 - # #this will work if you have dnsmasq(tkit env guide) - host: demo-quarkus.localhost +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: demo-quarkus + annotations: + ingress.kubernetes.io/ssl-redirect: "false" +spec: + rules: + - http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: demo-quarkus + port: + number: 8080 + host: demo-quarkus.localhost \ No newline at end of file diff --git a/k8s/postgres-deployment.yaml b/k8s/postgres-deployment.yaml index 2b2b9f02..a988f8eb 100644 --- a/k8s/postgres-deployment.yaml +++ b/k8s/postgres-deployment.yaml @@ -1,79 +1,77 @@ -apiVersion: apps/v1 -kind: Deployment -# deployment v1 -metadata: - name: postgresql -spec: - replicas: 1 - selector: - #how are the pods linked together - matchLabels: - app: postgresql - template: - metadata: - labels: - app: postgresql - spec: - containers: - - name: postgresql - image: 'docker.io/bitnami/postgresql:12.2.0' - ports: - - name: tcp-postgresql - containerPort: 5432 - protocol: TCP - env: - - name: POSTGRESQL_PORT_NUMBER - value: '5432' - - name: POSTGRESQL_VOLUME_DIR - value: /bitnami/postgresql - - name: PGDATA - value: /bitnami/postgresql/data - - name: POSTGRES_USER - value: postgres - #dont even try this in production - - name: POSTGRES_PASSWORD - value: postgres - - name: POSTGRES_DB - value: kubernetes - - name: DISABLE_WELCOME_MESSAGE - value: 'true' - - name: POSTGRESQL_ENABLE_LDAP - value: 'no' - resources: - requests: - cpu: 250m - memory: 256Mi - livenessProbe: - exec: - command: - - /bin/sh - - '-c' - - >- - exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p - 5432 - initialDelaySeconds: 30 - timeoutSeconds: 5 - periodSeconds: 10 - successThreshold: 1 - failureThreshold: 6 - readinessProbe: - exec: - command: - - /bin/sh - - '-c' - - '-e' - - > - exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p - 5432 - - [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f - /bitnami/postgresql/.initialized ] - initialDelaySeconds: 5 - timeoutSeconds: 5 - periodSeconds: 10 - successThreshold: 1 - failureThreshold: 6 - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - imagePullPolicy: IfNotPresent -# we run database without any persistent data volume - not a good idea, but sufficient for demo +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgresql +spec: + replicas: 1 + selector: + matchLabels: + app: postgresql + template: + metadata: + labels: + app: postgresql + spec: + containers: + - name: postgresql + image: 'docker.io/bitnami/postgresql:12.2.0' + ports: + - name: tcp-postgresql + containerPort: 5432 + protocol: TCP + env: + - name: POSTGRESQL_PORT_NUMBER + value: '5432' + - name: POSTGRESQL_VOLUME_DIR + value: /bitnami/postgresql + - name: PGDATA + value: /bitnami/postgresql/data + - name: POSTGRES_USER + value: postgres + #dont even try this in production + - name: POSTGRES_PASSWORD + value: postgres + - name: POSTGRES_DB + value: kubernetes + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + - name: POSTGRESQL_ENABLE_LDAP + value: 'no' + resources: + requests: + cpu: 250m + memory: 256Mi + livenessProbe: + exec: + command: + - /bin/sh + - '-c' + - >- + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + initialDelaySeconds: 30 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + readinessProbe: + exec: + command: + - /bin/sh + - '-c' + - '-e' + - > + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + + [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f + /bitnami/postgresql/.initialized ] + initialDelaySeconds: 5 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + imagePullPolicy: IfNotPresent +# we run database without any persistent data volume - not a good idea, but sufficient for demo diff --git a/k8s/postgres-service.yaml b/k8s/postgres-service.yaml index 6d19ee33..c41f373e 100644 --- a/k8s/postgres-service.yaml +++ b/k8s/postgres-service.yaml @@ -1,15 +1,15 @@ -kind: Service -apiVersion: v1 -metadata: - name: postgresql - labels: - app: postgresql -spec: - ports: - - name: tcp-postgresql - protocol: TCP - port: 5432 - targetPort: tcp-postgresql - selector: - app: postgresql - type: LoadBalancer #ClusterIP +kind: Service +apiVersion: v1 +metadata: + name: postgresql + labels: + app: postgresql +spec: + ports: + - name: tcp-postgresql + protocol: TCP + port: 5432 + targetPort: tcp-postgresql + selector: + app: postgresql + type: ClusterIP diff --git a/mvnw b/mvnw index a16b5431..4c1c4271 100644 --- a/mvnw +++ b/mvnw @@ -1,310 +1,310 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd index c8d43372..66db70c1 100644 --- a/mvnw.cmd +++ b/mvnw.cmd @@ -1,182 +1,182 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM https://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/otel-agent-config.yaml b/otel-agent-config.yaml index b0c44d40..22c28f7e 100644 --- a/otel-agent-config.yaml +++ b/otel-agent-config.yaml @@ -1,31 +1,25 @@ -receivers: - otlp: - protocols: - grpc: - opencensus: - jaeger: - protocols: - grpc: - thrift_http: - zipkin: - -exporters: - otlp: - endpoint: "otel-collector:4317" - insecure: true - logging: - loglevel: debug - -processors: - batch: - -service: - pipelines: - traces: - receivers: [otlp, zipkin, jaeger] - processors: [batch] - exporters: [otlp] - metrics: - receivers: [otlp] - processors: [batch] +receivers: + otlp: + protocols: + grpc: + +exporters: + otlp: + endpoint: "otel-collector:4317" + insecure: true + logging: + loglevel: debug + +processors: + batch: + +service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [otlp] + metrics: + receivers: [otlp] + processors: [batch] exporters: [otlp] \ No newline at end of file diff --git a/otel-collector-config.yaml b/otel-collector-config.yaml index 1e5f6977..bcc510bc 100644 --- a/otel-collector-config.yaml +++ b/otel-collector-config.yaml @@ -1,38 +1,24 @@ -receivers: - otlp: - protocols: - grpc: - http: - cors_allowed_origins: - - http://* - - https://* - -exporters: - prometheus: - endpoint: "0.0.0.0:8889" - namespace: promexample - const_labels: - label1: value1 - - zipkin: - endpoint: "http://zipkin-all-in-one:9411/api/v2/spans" - format: proto - - jaeger: - endpoint: jaeger-all-in-one:14250 - insecure: true - -processors: - batch: - -service: - pipelines: - traces: - receivers: [otlp] - exporters: [zipkin, jaeger] - processors: [batch] - metrics: - receivers: [otlp] - processors: [batch] - exporters: [prometheus] +receivers: + otlp: + protocols: + grpc: + http: + cors_allowed_origins: + - http://* + - https://* + +exporters: + jaeger: + endpoint: jaeger-all-in-one:14250 + insecure: true + +processors: + batch: + +service: + pipelines: + traces: + receivers: [otlp] + exporters: [jaeger] + processors: [batch] \ No newline at end of file diff --git a/pom.xml b/pom.xml index 92bbd1e1..80eaf1c4 100644 --- a/pom.xml +++ b/pom.xml @@ -1,327 +1,309 @@ - - - - 4.0.0 - com.devonfw - demo-quarkus - 1.0.0-SNAPSHOT - - 3.8.1 - true - 11 - 11 - UTF-8 - UTF-8 - 2.0.1.Final - quarkus-universe-bom - io.quarkus - 2.0.1.Final - 3.0.0-M5 - 1.4.2.Final - - - - - ${quarkus.platform.group-id} - ${quarkus.platform.artifact-id} - ${quarkus.platform.version} - pom - import - - - - - - io.quarkus - quarkus-arc - - - - io.quarkus - quarkus-resteasy-jackson - - - - io.quarkus - quarkus-hibernate-orm - - - - io.quarkus - quarkus-jdbc-postgresql - - - - io.quarkus - quarkus-flyway - - - - io.quarkus - quarkus-smallrye-openapi - - - - - io.quarkus - quarkus-opentelemetry - - - io.quarkus - quarkus-opentelemetry-exporter-otlp - - - io.quarkus - quarkus-opentelemetry-exporter-jaeger - - - io.opentelemetry - opentelemetry-extension-annotations - 1.0.0 - - - io.quarkus - quarkus-smallrye-health - - - io.quarkus - quarkus-micrometer-registry-prometheus - - - io.quarkus - quarkus-smallrye-fault-tolerance - - - org.hibernate - hibernate-jpamodelgen - - - io.quarkus - quarkus-spring-data-jpa - - - com.querydsl - querydsl-jpa - 4.3.1 - - - com.querydsl - querydsl-apt - provided - 4.3.1 - - - - - - - - - org.projectlombok - lombok - 1.18.18 - provided - - - - org.mapstruct - mapstruct-processor - ${mapstruct.version} - provided - - - org.mapstruct - mapstruct - ${mapstruct.version} - provided - - - - org.projectlombok - lombok-mapstruct-binding - 0.2.0 - provided - - - - org.tkit.quarkus - tkit-quarkus-rest - 2.4.0 - - - - org.tkit.quarkus - tkit-quarkus-log-cdi - 1.4.5 - - - - org.tkit.quarkus - tkit-quarkus-log-rs - 1.4.5 - - - - org.tkit.quarkus - tkit-quarkus-log-json - 1.4.5 - - - - org.tkit.quarkus - tkit-quarkus-test - 1.12.0 - test - - - - io.quarkus - quarkus-junit5 - test - - - io.rest-assured - rest-assured - test - - - - - - io.quarkus - quarkus-maven-plugin - ${quarkus-plugin.version} - true - - - - build - generate-code - generate-code-tests - - - - - - maven-compiler-plugin - ${compiler-plugin.version} - - true - - - -Amapstruct.defaultComponentModel=cdi - -Amapstruct.defaultInjectionStrategy=CONSTRUCTOR - - - - - maven-surefire-plugin - ${surefire-plugin.version} - - - org.jboss.logmanager.LogManager - ${maven.home} - - - - - com.microsoft.azure - azure-webapp-maven-plugin - 2.1.0 - - v2 - 38f51217-7342-4f22-b591-b19d85f1504d - demo-quarkus-1636631398107-rg - demo-quarkus-1636631398107 - P1v2 - westeurope - - Linux - Java 11 - Java SE - - - - PORT - 8080 - - - WEBSITES_PORT - 8080 - - - WEBSITES_CONTAINER_START_TIME_LIMIT - 600 - - - - - - ${project.basedir}/target - - *.jar - - - - - - - - com.mysema.maven - apt-maven-plugin - 1.1.3 - - - generate-sources - - process - - - target/generated-sources/annotations - com.querydsl.apt.jpa.JPAAnnotationProcessor - - - - - - - - - native - - - native - - - - - - maven-failsafe-plugin - ${surefire-plugin.version} - - - - integration-test - verify - - - - ${project.build.directory}/${project.build.finalName}-runner - org.jboss.logmanager.LogManager - ${maven.home} - - - - - - - - - native - - - - + + + 4.0.0 + com.devonfw + demo-quarkus + 1.0.0-SNAPSHOT + + 3.8.1 + true + 11 + 11 + UTF-8 + UTF-8 + 2.0.1.Final + quarkus-universe-bom + io.quarkus + 2.0.1.Final + 3.0.0-M5 + 1.4.2.Final + + + + + ${quarkus.platform.group-id} + ${quarkus.platform.artifact-id} + ${quarkus.platform.version} + pom + import + + + + + + + io.quarkus + quarkus-arc + + + + + io.quarkus + quarkus-resteasy-jackson + + + + + io.quarkus + quarkus-hibernate-orm + + + + + io.quarkus + quarkus-jdbc-postgresql + + + + + io.quarkus + quarkus-flyway + + + + + io.quarkus + quarkus-smallrye-openapi + + + + io.quarkus + quarkus-opentelemetry-exporter-otlp + + + io.quarkus + quarkus-smallrye-health + + + io.quarkus + quarkus-micrometer-registry-prometheus + + + io.quarkus + quarkus-smallrye-fault-tolerance + + + org.hibernate + hibernate-jpamodelgen + + + io.quarkus + quarkus-spring-data-jpa + + + com.querydsl + querydsl-jpa + 4.3.1 + + + com.querydsl + querydsl-apt + provided + 4.3.1 + + + + + + + + + + org.projectlombok + lombok + 1.18.18 + provided + + + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + provided + + + org.mapstruct + mapstruct + ${mapstruct.version} + provided + + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0 + provided + + + + + org.tkit.quarkus + tkit-quarkus-rest + 2.4.0 + + + + org.tkit.quarkus + tkit-quarkus-log-cdi + 1.4.5 + + + + org.tkit.quarkus + tkit-quarkus-log-rs + 1.4.5 + + + + org.tkit.quarkus + tkit-quarkus-log-json + 1.4.5 + + + + + org.tkit.quarkus + tkit-quarkus-test + 1.12.0 + test + + + + + io.quarkus + quarkus-junit5 + test + + + + io.rest-assured + rest-assured + test + + + + + + io.quarkus + quarkus-maven-plugin + ${quarkus-plugin.version} + true + + + + build + generate-code + generate-code-tests + + + + + + maven-compiler-plugin + ${compiler-plugin.version} + + true + + + -Amapstruct.defaultComponentModel=cdi + -Amapstruct.defaultInjectionStrategy=CONSTRUCTOR + + + + + maven-surefire-plugin + ${surefire-plugin.version} + + + org.jboss.logmanager.LogManager + ${maven.home} + + + + + com.mysema.maven + apt-maven-plugin + 1.1.3 + + + generate-sources + + process + + + target/generated-sources/annotations + com.querydsl.apt.jpa.JPAAnnotationProcessor + + + + + + + + + + native + + + native + + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + + + org.codehaus.mojo + servicedocgen-maven-plugin + 1.0.0 + + + + generate + + + + + + + Product Service REST API Documentation + This documentation describes the REST API of the product service with all its operations in detail. + + + + 8443 + product/services/rest + + https + + + + + + + + native + + + + diff --git a/src/main/docker/Dockerfile.jvm b/src/main/docker/Dockerfile.jvm index 085695a4..eafeb773 100644 --- a/src/main/docker/Dockerfile.jvm +++ b/src/main/docker/Dockerfile.jvm @@ -1,55 +1,54 @@ -#### -# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode -# -# Before building the container image run: -# -# ./mvnw package -# -# Then, build the image with: -# -# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/quarkus-basics-jvm . -# -# Then run the container using: -# -# docker run -i --rm -p 8080:8080 quarkus/quarkus-basics-jvm -# -# If you want to include the debug port into your docker image -# you will have to expose the debug port (default 5005) like this : EXPOSE 8080 5050 -# -# Then run the container using : -# -# docker run -i --rm -p 8080:8080 -p 5005:5005 -e JAVA_ENABLE_DEBUG="true" quarkus/quarkus-basics-jvm -# -### -FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3 - -ARG JAVA_PACKAGE=java-11-openjdk-headless -ARG RUN_JAVA_VERSION=1.3.8 -ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' -# Install java and the run-java script -# Also set up permissions for user `1001` -RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \ - && microdnf update \ - && microdnf clean all \ - && mkdir /deployments \ - && chown 1001 /deployments \ - && chmod "g+rwX" /deployments \ - && chown 1001:root /deployments \ - && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \ - && chown 1001 /deployments/run-java.sh \ - && chmod 540 /deployments/run-java.sh \ - && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.security - -# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size. -ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" -# We make four distinct layers so if there are application changes the library layers can be re-used -COPY --chown=1001 target/quarkus-app/lib/ /deployments/lib/ -COPY --chown=1001 target/quarkus-app/*.jar /deployments/ -COPY --chown=1001 target/quarkus-app/app/ /deployments/app/ -COPY --chown=1001 target/quarkus-app/quarkus/ /deployments/quarkus/ -COPY --chown=1001 agent/opentelemetry-javaagent-all.jar /deployments/agent/ -EXPOSE 8080 -USER 1001 - -#CMD [ "/deployments/run-java.sh" ] -ENTRYPOINT [ "/deployments/run-java.sh" ] +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/quarkus-basics-jvm . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-basics-jvm +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005) like this : EXPOSE 8080 5050 +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 -p 5005:5005 -e JAVA_ENABLE_DEBUG="true" quarkus/quarkus-basics-jvm +# +### +FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3 + +ARG JAVA_PACKAGE=java-11-openjdk-headless +ARG RUN_JAVA_VERSION=1.3.8 +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' +# Install java and the run-java script +# Also set up permissions for user `1001` +RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \ + && microdnf update \ + && microdnf clean all \ + && mkdir /deployments \ + && chown 1001 /deployments \ + && chmod "g+rwX" /deployments \ + && chown 1001:root /deployments \ + && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \ + && chown 1001 /deployments/run-java.sh \ + && chmod 540 /deployments/run-java.sh \ + && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.security + +# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size. +ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +# We make four distinct layers so if there are application changes the library layers can be re-used +COPY --chown=1001 target/quarkus-app/lib/ /deployments/lib/ +COPY --chown=1001 target/quarkus-app/*.jar /deployments/ +COPY --chown=1001 target/quarkus-app/app/ /deployments/app/ +COPY --chown=1001 target/quarkus-app/quarkus/ /deployments/quarkus/ + +EXPOSE 8080 +USER 1001 + +ENTRYPOINT [ "/deployments/run-java.sh" ] diff --git a/src/main/docker/Dockerfile.native b/src/main/docker/Dockerfile.native index 9f2fb390..9d5f28e9 100644 --- a/src/main/docker/Dockerfile.native +++ b/src/main/docker/Dockerfile.native @@ -1,28 +1,27 @@ -#### -# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode -# -# Before building the container image run: -# -# ./mvnw package -Pnative -# -# Then, build the image with: -# -# docker build -f src/main/docker/Dockerfile.native -t quarkus/quarkus-basics . -# -# Then run the container using: -# -# docker run -i --rm -p 8080:8080 quarkus/quarkus-basics -# -### -FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3 -WORKDIR /work/ -RUN chown 1001 /work \ - && chmod "g+rwX" /work \ - && chown 1001:root /work -COPY --chown=1001:root target/*-runner.jar /work/application - -EXPOSE 8080 -USER 1001 - -#CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] -ENTRYPOINT ["java","-jar","./application/demo-quarkus-1.0.0-SNAPSHOT-runner.jar"] +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode +# +# Before building the container image run: +# +# ./mvnw package -Pnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native -t quarkus/quarkus-basics . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-basics +# +### +FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3 +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --chown=1001:root target/*-runner /work/application + +EXPOSE 8080 +USER 1001 + +CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/src/main/docker/Dockerfile.native-distroless b/src/main/docker/Dockerfile.native-distroless index 0c1b52c3..1c9e39e7 100644 --- a/src/main/docker/Dockerfile.native-distroless +++ b/src/main/docker/Dockerfile.native-distroless @@ -1,23 +1,23 @@ -#### -# This Dockerfile is used in order to build a distroless container that runs the Quarkus application in native (no JVM) mode -# -# Before building the container image run: -# -# ./mvnw package -Pnative -# -# Then, build the image with: -# -# docker build -f src/main/docker/Dockerfile.native-distroless -t quarkus/quarkus-basics . -# -# Then run the container using: -# -# docker run -i --rm -p 8080:8080 quarkus/quarkus-basics -# -### -FROM quay.io/quarkus/quarkus-distroless-image:1.0 -COPY target/*-runner /application - -EXPOSE 8080 -USER nonroot - -CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] +#### +# This Dockerfile is used in order to build a distroless container that runs the Quarkus application in native (no JVM) mode +# +# Before building the container image run: +# +# ./mvnw package -Pnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native-distroless -t quarkus/quarkus-basics . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/quarkus-basics +# +### +FROM quay.io/quarkus/quarkus-distroless-image:1.0 +COPY target/*-runner /application + +EXPOSE 8080 +USER nonroot + +CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/src/main/helm/application/Chart.yaml b/src/main/helm/application/Chart.yaml new file mode 100644 index 00000000..8d4dfe82 --- /dev/null +++ b/src/main/helm/application/Chart.yaml @@ -0,0 +1,11 @@ +apiVersion: v3 +name: demo-quarkus +version: 1.0.0 +description: Helm chart for the devon4j Quarkus reference application +appVersion: 1.0.0 +keywords: + - devon4j + - demo + - quarkus +maintainers: + - name: devon4j Developer diff --git a/src/main/helm/application/templates/application-deployment.yaml b/src/main/helm/application/templates/application-deployment.yaml new file mode 100644 index 00000000..24de34c9 --- /dev/null +++ b/src/main/helm/application/templates/application-deployment.yaml @@ -0,0 +1,104 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: demo-quarkus + app.kubernetes.io/name: demo-quarkus + name: demo-quarkus +spec: + # scale default to 2 instances + replicas: {{ .Values.application.replicas | default 2 }} + selector: + matchLabels: + app: demo-quarkus + template: + metadata: + labels: + app: demo-quarkus + spec: + containers: + - name: demo-quarkus + image: {{ .Values.application.image.repository }} #{{ .Values.application.image.registry }}/{{ .Values.application.image.repository }}:{{ .Values.application.image.tag }} + imagePullPolicy: Always + env: + - name: QUARKUS_DATASOURCE_JDBC_URL + value: jdbc:postgresql://postgresql:{{ .Values.postgres.service.port }}/demo + - name: QUARKUS_DATASOURCE_USERNAME + value: demo + - name: QUARKUS_DATASOURCE_PASSWORD + value: demo + - name: quarkus.opentelemetry.enabled + value: "true" + - name: quarkus.opentelemetry.tracer.exporter.otlp.endpoint + value: http://otel-agent:4317 + - name: quarkus.application.name + value: demo-quarkus + # live & ready probes, using our healthcheck endpoints + livenessProbe: + failureThreshold: 5 + httpGet: + path: {{ .Values.application.livenessProbe.url }} + port: {{ .Values.application.pod.port }} + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + ports: + - containerPort: {{ .Values.application.pod.port }} + readinessProbe: + failureThreshold: 5 + httpGet: + path: {{ .Values.application.readinessProbe.url }} + port: {{ .Values.application.pod.port }} + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 3 + # we can define init containers, single run jobs that run before our main container does + # we use them to init database and check that its ready + initContainers: + - command: + - /bin/bash + - '-c' + - >- + psql -tc "SELECT 1 FROM pg_database WHERE datname = + 'demo'" | grep -q 1 | psql -c "CREATE USER + demo WITH ENCRYPTED PASSWORD 'demo';" -c + "CREATE DATABASE demo;" -c "GRANT ALL PRIVILEGES + ON DATABASE demo TO demo;" + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '{{ .Values.postgres.service.port }}' + - name: PGDATABASE + value: null + - name: PGUSER + value: postgres + - name: PGPASSWORD + value: postgres + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: {{ .Values.postgres.image }}:{{ .Values.postgres.imageTag }} + name: create-db + - command: + - /bin/bash + - '-c' + - until pg_isready; do echo waiting for database; sleep 2; done; + env: + - name: PGHOST + value: postgresql + - name: PGPORT + value: '{{ .Values.postgres.service.port }}' + - name: PGDATABASE + value: demo + - name: PGUSER + value: demo + - name: PGPASSWORD + value: demo + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + image: {{ .Values.postgres.image }}:{{ .Values.postgres.imageTag }} + name: check-db diff --git a/src/main/helm/application/templates/application-service.yaml b/src/main/helm/application/templates/application-service.yaml new file mode 100644 index 00000000..cac1ce9c --- /dev/null +++ b/src/main/helm/application/templates/application-service.yaml @@ -0,0 +1,18 @@ +kind: Service +apiVersion: v1 +metadata: + name: demo-quarkus + labels: + app: demo-quarkus +spec: + ports: + - name: http-port + protocol: TCP + port: {{ .Values.application.service.port }} + targetPort: {{ .Values.application.pod.port }} + selector: + app: demo-quarkus + #type: ClusterIP + type: LoadBalancer +status: + loadBalancer: {} diff --git a/src/main/helm/application/templates/ingress.yaml b/src/main/helm/application/templates/ingress.yaml new file mode 100644 index 00000000..88ae1922 --- /dev/null +++ b/src/main/helm/application/templates/ingress.yaml @@ -0,0 +1,16 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: demo-quarkus +spec: + rules: + - http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: demo-quarkus + port: + number: {{ .Values.application.service.port }} + host: {{ .Values.ingress.host }} \ No newline at end of file diff --git a/src/main/helm/application/templates/postgres-deployment.yaml b/src/main/helm/application/templates/postgres-deployment.yaml new file mode 100644 index 00000000..afda775d --- /dev/null +++ b/src/main/helm/application/templates/postgres-deployment.yaml @@ -0,0 +1,77 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: postgresql +spec: + replicas: 1 + selector: + matchLabels: + app: postgresql + template: + metadata: + labels: + app: postgresql + spec: + containers: + - name: postgresql + image: {{ .Values.postgres.image }}:{{ .Values.postgres.imageTag }} + ports: + - name: tcp-postgresql + containerPort: {{ .Values.postgres.service.port }} + protocol: TCP + env: + - name: POSTGRESQL_PORT_NUMBER + value: '{{ .Values.postgres.service.port }}' + - name: POSTGRESQL_VOLUME_DIR + value: /bitnami/postgresql + - name: PGDATA + value: /bitnami/postgresql/data + - name: POSTGRES_USER + value: postgres + #dont even try this in production + - name: POSTGRES_PASSWORD + value: postgres + - name: POSTGRES_DB + value: kubernetes + - name: DISABLE_WELCOME_MESSAGE + value: 'true' + - name: POSTGRESQL_ENABLE_LDAP + value: 'no' + resources: + requests: + cpu: 250m + memory: 256Mi + livenessProbe: + exec: + command: + - /bin/sh + - '-c' + - >- + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + initialDelaySeconds: 30 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + readinessProbe: + exec: + command: + - /bin/sh + - '-c' + - '-e' + - > + exec pg_isready -U "postgres" -d "kubernetes" -h 127.0.0.1 -p + 5432 + + [ -f /opt/bitnami/postgresql/tmp/.initialized ] || [ -f + /bitnami/postgresql/.initialized ] + initialDelaySeconds: 5 + timeoutSeconds: 5 + periodSeconds: 10 + successThreshold: 1 + failureThreshold: 6 + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + imagePullPolicy: IfNotPresent +# we run database without any persistent data volume - not a good idea, but sufficient for demo diff --git a/src/main/helm/application/templates/postgres-service.yaml b/src/main/helm/application/templates/postgres-service.yaml new file mode 100644 index 00000000..d897fe6d --- /dev/null +++ b/src/main/helm/application/templates/postgres-service.yaml @@ -0,0 +1,17 @@ +kind: Service +apiVersion: v1 +metadata: + name: postgresql + labels: + app: postgresql +spec: + ports: + - name: tcp-postgresql + protocol: TCP + port: {{ .Values.postgres.service.port }} + targetPort: tcp-postgresql + selector: + app: postgresql + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/src/main/helm/application/values.yaml b/src/main/helm/application/values.yaml new file mode 100644 index 00000000..5f35a158 --- /dev/null +++ b/src/main/helm/application/values.yaml @@ -0,0 +1,36 @@ +# Application configuration +application: + image: + ## TODO: Insert the registry from which you want to pull the image + #registry: "hub.docker.com/dockerregistry101" + #repository: "guentherjulian/devon4quarkus-reference:latest" + repository: "dockerregistry101/demo-quarkus:latest" + # tag: "latest" + + replicas: 2 + + livenessProbe: + url: /q/health/live + + readinessProbe: + url: /q/health/ready + + pod: + port: 8080 + + service: + port: 8080 + + +# Database configuration +postgres: + image: "docker.io/bitnami/postgresql" + imageTag: "12.2.0" + + service: + port: 5432 + + +# Ingress configuration +ingress: + host: "demo-quarkus.demo-cluster-dns-be5e9d93.hcp.centralus.azmk8s.io" diff --git a/src/main/helm/opentelemetry/Chart.yaml b/src/main/helm/opentelemetry/Chart.yaml new file mode 100644 index 00000000..1d1149c3 --- /dev/null +++ b/src/main/helm/opentelemetry/Chart.yaml @@ -0,0 +1,9 @@ +apiVersion: v3 +name: OpenTelemetry Helm template +version: 1.0.0 +description: Helm chart template for an OpenTelemetry Kubernetes deployment +appVersion: 1.0.0 +keywords: + - template +maintainers: + - name: devon4j Developer diff --git a/src/main/helm/opentelemetry/templates/configmap.yaml b/src/main/helm/opentelemetry/templates/configmap.yaml new file mode 100644 index 00000000..4b3d18a9 --- /dev/null +++ b/src/main/helm/opentelemetry/templates/configmap.yaml @@ -0,0 +1,75 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-agent +data: + otel-agent-config: | + receivers: + otlp: + protocols: + grpc: + + processors: + batch: + + exporters: + otlp: + endpoint: "otel-collector:4317" + insecure: true + + service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [otlp] + metrics: + receivers: [otlp] + processors: [batch] + exporters: [otlp] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: otel-collector +data: + otel-collector-config: | + receivers: + otlp: + protocols: + grpc: + http: + cors_allowed_origins: + - http://* + - https://* + + processors: + batch: + + exporters: + logging: + jaeger: + endpoint: jaeger-all-in-one:14250 + insecure: true + + service: + pipelines: + traces: + receivers: [otlp] + exporters: [jaeger] + processors: [batch] +--- + +apiVersion: v1 +kind: ConfigMap +metadata: + name: vmetrics-config +data: + vMetrics.yaml: | + scrape_configs: + - job_name: '{{ .Values.application.metrics.jobname }}' + scrape_interval: 10s + metrics_path: '{{ .Values.application.metrics.url }}' + static_configs: + - targets: ['{{ .Values.application.service.name }}:{{ .Values.application.service.port }}'] \ No newline at end of file diff --git a/src/main/helm/opentelemetry/templates/grafana-deployment.yaml b/src/main/helm/opentelemetry/templates/grafana-deployment.yaml new file mode 100644 index 00000000..2b965d62 --- /dev/null +++ b/src/main/helm/opentelemetry/templates/grafana-deployment.yaml @@ -0,0 +1,43 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: grafana + name: grafana +spec: + replicas: 1 + selector: + matchLabels: + component: grafana + template: + metadata: + labels: + component: grafana + spec: + containers: + - image: grafana/grafana + name: grafana + ports: + - containerPort: 3000 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: grafana + name: grafana +spec: + ports: + - name: "3000" + port: 3000 + protocol: TCP + targetPort: 3000 + selector: + component: grafana + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/src/main/helm/opentelemetry/templates/ingress.yaml b/src/main/helm/opentelemetry/templates/ingress.yaml new file mode 100644 index 00000000..6594a825 --- /dev/null +++ b/src/main/helm/opentelemetry/templates/ingress.yaml @@ -0,0 +1,26 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: ingress +spec: + rules: + - host: {{ .Values.ingress.jaeger.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: jaeger-all-in-one + port: + number: {{ .Values.ingress.jaeger.port }} + - host: {{ .Values.ingress.grafana.host }} + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: grafana + port: + number: {{ .Values.ingress.grafana.port }} \ No newline at end of file diff --git a/src/main/helm/opentelemetry/templates/jaeger-all-in-one-deployment.yaml b/src/main/helm/opentelemetry/templates/jaeger-all-in-one-deployment.yaml new file mode 100644 index 00000000..60516367 --- /dev/null +++ b/src/main/helm/opentelemetry/templates/jaeger-all-in-one-deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + replicas: 1 + selector: + matchLabels: + component: jaeger-all-in-one + strategy: {} + template: + metadata: + labels: + component: jaeger-all-in-one + spec: + containers: + - image: jaegertracing/all-in-one:latest + name: jaeger-all-in-one + ports: + - containerPort: 16686 + - containerPort: 14268 + - containerPort: 14250 + resources: {} + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: jaeger-all-in-one + name: jaeger-all-in-one +spec: + ports: + - name: "16686" + port: 16686 + protocol: TCP + targetPort: 16686 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + selector: + component: jaeger-all-in-one + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/src/main/helm/opentelemetry/templates/otel-agent-deployment.yaml b/src/main/helm/opentelemetry/templates/otel-agent-deployment.yaml new file mode 100644 index 00000000..31c4257b --- /dev/null +++ b/src/main/helm/opentelemetry/templates/otel-agent-deployment.yaml @@ -0,0 +1,103 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + replicas: 1 + selector: + matchLabels: + component: otel-agent + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-agent + spec: + containers: + - args: + - /otelcol + - --config=/conf/otel-agent-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-agent + ports: + - containerPort: 8888 + - containerPort: 14250 + - containerPort: 14268 + - containerPort: 55678 + - containerPort: 4317 + - containerPort: 4318 + - containerPort: 9411 + - containerPort: 1777 + - containerPort: 13133 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-agent-config-volume + volumes: + - name: otel-agent-config-volume + configMap: + name: otel-agent + items: + - key: otel-agent-config + path: otel-agent-config.yaml + restartPolicy: Always + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-agent + name: otel-agent +spec: + ports: + - name: "8887" + port: 8887 + protocol: TCP + targetPort: 8888 + - name: "14250" + port: 14250 + protocol: TCP + targetPort: 14250 + - name: "14268" + port: 14268 + protocol: TCP + targetPort: 14268 + - name: "55678" + port: 55678 + protocol: TCP + targetPort: 55678 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "4318" + port: 4318 + protocol: TCP + targetPort: 4318 + - name: "9411" + port: 9411 + protocol: TCP + targetPort: 9411 + - name: "1777" + port: 1777 + protocol: TCP + targetPort: 1777 + - name: "55679" + port: 55679 + protocol: TCP + targetPort: 55679 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + selector: + component: otel-agent + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/src/main/helm/opentelemetry/templates/otel-collector-deployment.yaml b/src/main/helm/opentelemetry/templates/otel-collector-deployment.yaml new file mode 100644 index 00000000..48c04dd1 --- /dev/null +++ b/src/main/helm/opentelemetry/templates/otel-collector-deployment.yaml @@ -0,0 +1,83 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + replicas: 1 + selector: + matchLabels: + component: otel-collector + strategy: + type: Recreate + template: + metadata: + labels: + component: otel-collector + spec: + containers: + - args: + - --config=/conf/otel-collector-config.yaml + - --log-level=DEBUG + image: otel/opentelemetry-collector:latest + name: otel-collector + ports: + - containerPort: 1888 + - containerPort: 8888 + - containerPort: 8889 + - containerPort: 13133 + - containerPort: 4317 + - containerPort: 55679 + resources: {} + volumeMounts: + - mountPath: /conf + name: otel-collector-config-volume + restartPolicy: Always + volumes: + - name: otel-collector-config-volume + configMap: + name: otel-collector + items: + - key: otel-collector-config + path: otel-collector-config.yaml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: otel-collector + name: otel-collector +spec: + ports: + - name: "1888" + port: 1888 + protocol: TCP + targetPort: 1888 + - name: "8888" + port: 8888 + protocol: TCP + targetPort: 8888 + - name: "8889" + port: 8889 + protocol: TCP + targetPort: 8889 + - name: "13133" + port: 13133 + protocol: TCP + targetPort: 13133 + - name: "4317" + port: 4317 + protocol: TCP + targetPort: 4317 + - name: "55670" + port: 55670 + protocol: TCP + targetPort: 55679 + selector: + component: otel-collector + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/src/main/helm/opentelemetry/templates/prometheus-deployment.yaml b/src/main/helm/opentelemetry/templates/prometheus-deployment.yaml new file mode 100644 index 00000000..c9fd2689 --- /dev/null +++ b/src/main/helm/opentelemetry/templates/prometheus-deployment.yaml @@ -0,0 +1,55 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: prometheus + name: prometheus +spec: + replicas: 1 + selector: + matchLabels: + component: prometheus + strategy: + type: Recreate + template: + metadata: + labels: + component: prometheus + spec: + containers: + - image: prom/prometheus:latest + name: prometheus + ports: + - containerPort: 9090 + resources: {} + volumeMounts: + - mountPath: /etc/prometheus/ + name: prometheus-config-volume + restartPolicy: Always + volumes: + - name: prometheus-config-volume + configMap: + name: prometheus + items: + - key: prometheus-config + path: prometheus.yml + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: prometheus + name: prometheus +spec: + ports: + - name: "9090" + port: 9090 + protocol: TCP + targetPort: 9090 + selector: + component: prometheus + type: LoadBalancer #ClusterIP +status: + loadBalancer: {} diff --git a/src/main/helm/opentelemetry/templates/victoriametrics-deployment.yaml b/src/main/helm/opentelemetry/templates/victoriametrics-deployment.yaml new file mode 100644 index 00000000..3819e880 --- /dev/null +++ b/src/main/helm/opentelemetry/templates/victoriametrics-deployment.yaml @@ -0,0 +1,77 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: victoriametrics + name: victoriametrics +spec: + replicas: 1 + selector: + matchLabels: + component: victoriametrics + strategy: + type: Recreate + template: + metadata: + labels: + component: victoriametrics + spec: + containers: + - args: + - --promscrape.config=/conf/vMetrics.yaml + image: victoriametrics/victoria-metrics + name: victoriametrics + ports: + - containerPort: 8428 + - containerPort: 8089 + - containerPort: 8089 + protocol: UDP + - containerPort: 2003 + - containerPort: 2003 + protocol: UDP + - containerPort: 4242 + resources: {} + volumeMounts: + - mountPath: /conf + name: vmetrics-config + restartPolicy: Always + volumes: + - configMap: + items: + - key: vMetrics.yaml + path: vMetrics.yaml + name: vmetrics-config + name: vmetrics-config + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: victoriametrics + name: victoriametrics +spec: + ports: + - name: "8428" + port: 8428 + targetPort: 8428 + - name: "8089" + port: 8089 + targetPort: 8089 + - name: 8089-udp + port: 8089 + protocol: UDP + targetPort: 8089 + - name: "2003" + port: 2003 + targetPort: 2003 + - name: 2003-udp + port: 2003 + protocol: UDP + targetPort: 2003 + - name: "4242" + port: 4242 + targetPort: 4242 + selector: + component: victoriametrics diff --git a/src/main/helm/opentelemetry/templates/vmagent-deployment.yaml b/src/main/helm/opentelemetry/templates/vmagent-deployment.yaml new file mode 100644 index 00000000..7d13f5d3 --- /dev/null +++ b/src/main/helm/opentelemetry/templates/vmagent-deployment.yaml @@ -0,0 +1,53 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + component: vmagent + name: vmagent +spec: + replicas: 1 + selector: + matchLabels: + component: vmagent + strategy: + type: Recreate + template: + metadata: + labels: + component: vmagent + spec: + containers: + - args: + - --promscrape.config=/conf/vMetrics.yaml + - --remoteWrite.url=http://victoriametrics:8428/api/v1/write + image: victoriametrics/vmagent + name: vmagent + ports: + - containerPort: 8429 + volumeMounts: + - mountPath: /conf + name: vmetrics-config + restartPolicy: Always + volumes: + - configMap: + items: + - key: vMetrics.yaml + path: vMetrics.yaml + name: vmetrics-config + name: vmetrics-config + +--- + +apiVersion: v1 +kind: Service +metadata: + labels: + component: vmagent + name: vmagent +spec: + ports: + - name: "8429" + port: 8429 + targetPort: 8429 + selector: + component: vmagent diff --git a/src/main/helm/opentelemetry/values.yaml b/src/main/helm/opentelemetry/values.yaml new file mode 100644 index 00000000..5533dad0 --- /dev/null +++ b/src/main/helm/opentelemetry/values.yaml @@ -0,0 +1,19 @@ +# Application configuration +application: + # Configuration to get the metrics information + metrics: + jobname: "demo-quarkus" + url: "/q/metrics" + + service: + name: "demo-quarkus" + port: 8080 + +# Ingress configuration +ingress: + jaeger: + host: "jaeger.demo-cluster-dns-be5e9d93.hcp.centralus.azmk8s.io" + port: 16686 + grafana: + host: "grafana.demo-cluster-dns-be5e9d93.hcp.centralus.azmk8s.io" + port: 3000 diff --git a/src/main/java/com/devonfw/quarkus/DemoApplication.java b/src/main/java/com/devonfw/quarkus/DemoApplication.java index 1c0f6662..1c32839c 100644 --- a/src/main/java/com/devonfw/quarkus/DemoApplication.java +++ b/src/main/java/com/devonfw/quarkus/DemoApplication.java @@ -1,17 +1,17 @@ -package com.devonfw.quarkus; - -import javax.ws.rs.core.Application; - -import org.eclipse.microprofile.openapi.annotations.OpenAPIDefinition; -import org.eclipse.microprofile.openapi.annotations.info.Contact; -import org.eclipse.microprofile.openapi.annotations.info.Info; -import org.eclipse.microprofile.openapi.annotations.tags.Tag; - -@OpenAPIDefinition(tags = { -@Tag(name = "product", description = "Product API.") }, info = @Info(title = "My Demo App RESTful API", version = "1.0.0", contact = @Contact(name = "API Support", email = "support@acme.com"))) -/** - * JaxRS application is not required in quarkus, but it is useful to place central API docs somewhere. We could also use - * package-info.java for this. - */ -public class DemoApplication extends Application { +package com.devonfw.quarkus; + +import javax.ws.rs.core.Application; + +import org.eclipse.microprofile.openapi.annotations.OpenAPIDefinition; +import org.eclipse.microprofile.openapi.annotations.info.Contact; +import org.eclipse.microprofile.openapi.annotations.info.Info; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; + +@OpenAPIDefinition(tags = { +@Tag(name = "product", description = "Product API.") }, info = @Info(title = "My Demo App RESTful API", version = "1.0.0", contact = @Contact(name = "API Support", email = "support@acme.com"))) +/** + * JaxRS application is not required in quarkus, but it is useful to place central API docs somewhere. We could also use + * package-info.java for this. + */ +public class DemoApplication extends Application { } \ No newline at end of file diff --git a/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java b/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java index f3f9d079..d2400136 100644 --- a/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java +++ b/src/main/java/com/devonfw/quarkus/general/domain/model/ApplicationPersistenceEntity.java @@ -1,79 +1,79 @@ -package com.devonfw.quarkus.general.domain.model; - -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.MappedSuperclass; -import javax.persistence.Transient; -import javax.persistence.Version; - -/** - * Abstract base class for all {@link PersistenceEntity persistence entities} with an {@link #getId() id} and a - * {@link #getModificationCounter() modificationCounter} (version) field. All persistence entities of this application - * should inherit from this class. It is using JPA annotations at the getters what has several advantages but also - * implies that you have to annotate transient getter methods with the {@link Transient} annotation. - */ -@MappedSuperclass -public abstract class ApplicationPersistenceEntity { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private Long id; - - private Integer modificationCounter; - - /** - * The constructor. - */ - public ApplicationPersistenceEntity() { - - super(); - } - - public Long getId() { - - return this.id; - } - - public void setId(Long id) { - - this.id = id; - } - - @Version - public Integer getModificationCounter() { - - return this.modificationCounter; - } - - public void setModificationCounter(Integer version) { - - this.modificationCounter = version; - } - - @Override - public String toString() { - - StringBuilder buffer = new StringBuilder(); - toString(buffer); - return buffer.toString(); - } - - /** - * Method to extend {@link #toString()} logic. - * - * @param buffer is the {@link StringBuilder} where to {@link StringBuilder#append(Object) append} the string - * representation. - */ - protected void toString(StringBuilder buffer) { - - buffer.append(getClass().getSimpleName()); - if (this.id != null) { - buffer.append("[id="); - buffer.append(this.id); - buffer.append("]"); - } - } -} +package com.devonfw.quarkus.general.domain.model; + +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import javax.persistence.Transient; +import javax.persistence.Version; + +/** + * Abstract base class for all {@link PersistenceEntity persistence entities} with an {@link #getId() id} and a + * {@link #getModificationCounter() modificationCounter} (version) field. All persistence entities of this application + * should inherit from this class. It is using JPA annotations at the getters what has several advantages but also + * implies that you have to annotate transient getter methods with the {@link Transient} annotation. + */ +@MappedSuperclass +public abstract class ApplicationPersistenceEntity { + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private Integer modificationCounter; + + /** + * The constructor. + */ + public ApplicationPersistenceEntity() { + + super(); + } + + public Long getId() { + + return this.id; + } + + public void setId(Long id) { + + this.id = id; + } + + @Version + public Integer getModificationCounter() { + + return this.modificationCounter; + } + + public void setModificationCounter(Integer version) { + + this.modificationCounter = version; + } + + @Override + public String toString() { + + StringBuilder buffer = new StringBuilder(); + toString(buffer); + return buffer.toString(); + } + + /** + * Method to extend {@link #toString()} logic. + * + * @param buffer is the {@link StringBuilder} where to {@link StringBuilder#append(Object) append} the string + * representation. + */ + protected void toString(StringBuilder buffer) { + + buffer.append(getClass().getSimpleName()); + if (this.id != null) { + buffer.append("[id="); + buffer.append(this.id); + buffer.append("]"); + } + } +} diff --git a/src/main/java/com/devonfw/quarkus/general/service/json/CustomObjectMapper.java b/src/main/java/com/devonfw/quarkus/general/service/json/CustomObjectMapper.java new file mode 100644 index 00000000..e2dbfe85 --- /dev/null +++ b/src/main/java/com/devonfw/quarkus/general/service/json/CustomObjectMapper.java @@ -0,0 +1,23 @@ +package com.devonfw.quarkus.general.service.json; + +import javax.inject.Singleton; + +import org.springframework.data.domain.Page; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; + +import io.quarkus.jackson.ObjectMapperCustomizer; + +@Singleton +public class CustomObjectMapper implements ObjectMapperCustomizer { + + @Override + public void customize(ObjectMapper objectMapper) { + + SimpleModule module = new SimpleModule(); + module.addSerializer(Page.class, new PageSerializer()); + objectMapper.registerModule(module); + } + +} diff --git a/src/main/java/com/devonfw/quarkus/general/service/json/PageSerializer.java b/src/main/java/com/devonfw/quarkus/general/service/json/PageSerializer.java new file mode 100644 index 00000000..f580f701 --- /dev/null +++ b/src/main/java/com/devonfw/quarkus/general/service/json/PageSerializer.java @@ -0,0 +1,50 @@ +package com.devonfw.quarkus.general.service.json; + +import java.io.IOException; + +import org.springframework.data.domain.Page; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +public class PageSerializer extends JsonSerializer { + + @Override + public void serialize(Page page, JsonGenerator gen, SerializerProvider serializers) throws IOException { + + if (page != null) { + gen.writeStartObject(); + + gen.writeObjectField("content", page.getContent()); + gen.writeObjectFieldStart("pageable"); + gen.writeObjectFieldStart("sort"); + gen.writeBooleanField("unsorted", page.getSort().isUnsorted()); + gen.writeBooleanField("sorted", page.getSort().isSorted()); + gen.writeBooleanField("empty", page.getSort().isEmpty()); + gen.writeEndObject(); + gen.writeNumberField("offset", page.getPageable().getOffset()); + gen.writeNumberField("pageSize", page.getPageable().getPageSize()); + gen.writeNumberField("pageNumber", page.getPageable().getPageNumber()); + gen.writeBooleanField("paged", page.getPageable().isPaged()); + gen.writeBooleanField("unpaged", page.getPageable().isUnpaged()); + gen.writeEndObject(); + gen.writeBooleanField("last", page.isLast()); + gen.writeNumberField("totalPages", page.getTotalPages()); + gen.writeNumberField("totalElements", page.getTotalElements()); + gen.writeBooleanField("first", page.isFirst()); + gen.writeNumberField("numberOfElements", page.getNumberOfElements()); + gen.writeObjectFieldStart("sort"); + gen.writeBooleanField("unsorted", page.getSort().isUnsorted()); + gen.writeBooleanField("sorted", page.getSort().isSorted()); + gen.writeBooleanField("empty", page.getSort().isEmpty()); + gen.writeEndObject(); + gen.writeNumberField("number", page.getNumber()); + gen.writeNumberField("size", page.getSize()); + gen.writeBooleanField("empty", page.isEmpty()); + + gen.writeEndObject(); + } + } + +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/domain/model/ProductEntity.java b/src/main/java/com/devonfw/quarkus/productmanagement/domain/model/ProductEntity.java index b7b22ac0..9b609017 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/domain/model/ProductEntity.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/domain/model/ProductEntity.java @@ -1,26 +1,26 @@ -package com.devonfw.quarkus.productmanagement.domain.model; - -import java.math.BigDecimal; - -import javax.persistence.Entity; -import javax.persistence.Table; - -import com.devonfw.quarkus.general.domain.model.ApplicationPersistenceEntity; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@Entity -@Table(name = "Product") -// A JPA entity requires at least 2 things @Entity annotation and an ID -// by default, the DB table will have the same name as our class -public class ProductEntity extends ApplicationPersistenceEntity { - - private String title; - - private String description; - - private BigDecimal price; -} +package com.devonfw.quarkus.productmanagement.domain.model; + +import java.math.BigDecimal; + +import javax.persistence.Entity; +import javax.persistence.Table; + +import com.devonfw.quarkus.general.domain.model.ApplicationPersistenceEntity; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Entity +@Table(name = "Product") +// A JPA entity requires at least 2 things @Entity annotation and an ID +// by default, the DB table will have the same name as our class +public class ProductEntity extends ApplicationPersistenceEntity { + + private String title; + + private String description; + + private BigDecimal price; +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/domain/model/ProductSearchCriteria.java b/src/main/java/com/devonfw/quarkus/productmanagement/domain/model/ProductSearchCriteria.java index 4cca919b..d9c7d47b 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/domain/model/ProductSearchCriteria.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/domain/model/ProductSearchCriteria.java @@ -1,19 +1,19 @@ -package com.devonfw.quarkus.productmanagement.domain.model; - -import java.math.BigDecimal; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class ProductSearchCriteria { - - private String title; - - private Integer pageNumber; - - private Integer pageSize; - - private BigDecimal price, priceMin, priceMax; -} +package com.devonfw.quarkus.productmanagement.domain.model; + +import java.math.BigDecimal; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ProductSearchCriteria { + + private String title; + + private Integer pageNumber; + + private Integer pageSize; + + private BigDecimal price, priceMin, priceMax; +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductFragment.java b/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductFragment.java index 576fba29..06181a2f 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductFragment.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductFragment.java @@ -1,16 +1,16 @@ -package com.devonfw.quarkus.productmanagement.domain.repo; - -import org.springframework.data.domain.Page; - -import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductSearchCriteriaDto; - -public interface ProductFragment { - public Page findAllCriteriaApi(ProductSearchCriteriaDto dto); - - public Page findAllQueryDsl(ProductSearchCriteriaDto dto); - - public Page findByTitleNativeQuery(ProductSearchCriteriaDto dto); - - public Page findByTitleQuery(ProductSearchCriteriaDto dto); -} +package com.devonfw.quarkus.productmanagement.domain.repo; + +import org.springframework.data.domain.Page; + +import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductSearchCriteriaDto; + +public interface ProductFragment { + public Page findAllCriteriaApi(ProductSearchCriteriaDto dto); + + public Page findAllQueryDsl(ProductSearchCriteriaDto dto); + + public Page findByTitleNativeQuery(ProductSearchCriteriaDto dto); + + public Page findByTitleQuery(ProductSearchCriteriaDto dto); +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductFragmentImpl.java b/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductFragmentImpl.java index 3c7e0c78..2c7592b1 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductFragmentImpl.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductFragmentImpl.java @@ -1,114 +1,114 @@ -package com.devonfw.quarkus.productmanagement.domain.repo; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.Query; -import javax.persistence.TypedQuery; -import javax.persistence.criteria.CriteriaBuilder; -import javax.persistence.criteria.CriteriaQuery; -import javax.persistence.criteria.Predicate; -import javax.persistence.criteria.Root; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; - -import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; -import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity_; -import com.devonfw.quarkus.productmanagement.domain.model.QProductEntity; -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductSearchCriteriaDto; -import com.querydsl.jpa.impl.JPAQuery; - -public class ProductFragmentImpl implements ProductFragment { - - @Inject - EntityManager em; - - @Override - public Page findAllCriteriaApi(ProductSearchCriteriaDto dto) { - - CriteriaQuery cq = this.em.getCriteriaBuilder().createQuery(ProductEntity.class); - Root root = cq.from(ProductEntity.class); - List predicates = new ArrayList<>(); - CriteriaBuilder cb = this.em.getCriteriaBuilder(); - if (dto.getTitle() != null && !dto.getTitle().isEmpty()) { - predicates.add(cb.like(root.get(ProductEntity_.TITLE), dto.getTitle())); - } - - if (dto.getPrice() != null) { - predicates.add(cb.gt(root.get(ProductEntity_.PRICE), dto.getPrice())); - } else if (dto.getPriceMin() != null || dto.getPriceMax() != null) { - if (dto.getPriceMin() != null) { - predicates.add(cb.gt(root.get(ProductEntity_.PRICE), dto.getPriceMin())); - } - if (dto.getPriceMax() != null) { - predicates.add(cb.lt(root.get(ProductEntity_.PRICE), dto.getPriceMax())); - } - } - - if (!predicates.isEmpty()) - - { - cq.where(predicates.toArray(new Predicate[0])); - } - - // Order by title - cq.orderBy(cb.desc(root.get(ProductEntity_.TITLE))); - - TypedQuery products = this.em.createQuery(cq).setFirstResult(dto.getPageNumber() * dto.getPageSize()) - .setMaxResults(dto.getPageSize()); - return new PageImpl(products.getResultList(), PageRequest.of(dto.getPageNumber(), dto.getPageSize()), - products.getResultList().size()); - } - - @Override - public Page findAllQueryDsl(ProductSearchCriteriaDto dto) { - - QProductEntity product = QProductEntity.productEntity; - JPAQuery query = new JPAQuery(this.em); - query.from(product); - if (dto.getTitle() != null && !dto.getTitle().isEmpty()) { - query.where(product.title.eq(dto.getTitle())); - } - - if (dto.getPrice() != null) { - query.where(product.price.eq(dto.getPrice())); - } else if (dto.getPriceMin() != null || dto.getPriceMax() != null) { - if (dto.getPriceMin() != null) { - query.where(product.price.gt(dto.getPriceMin())); - } - if (dto.getPriceMax() != null) { - query.where(product.price.lt(dto.getPriceMax())); - } - } - - // Order by title - query.orderBy(product.title.desc()); - - List products = query.limit(dto.getPageSize()).offset(dto.getPageNumber() * dto.getPageSize()) - .fetch(); - return new PageImpl<>(products, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), products.size()); - } - - @Override - public Page findByTitleQuery(ProductSearchCriteriaDto dto) { - - Query query = this.em.createQuery("select a from ProductEntity a where a.title = :title"); - query.setParameter("title", dto.getTitle()); - List products = query.getResultList(); - return new PageImpl<>(products, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), products.size()); - } - - @Override - public Page findByTitleNativeQuery(ProductSearchCriteriaDto dto) { - - Query query = this.em.createNativeQuery("select * from ProductEntity where title = :title", ProductEntity.class); - query.setParameter("title", dto.getTitle()); - List products = query.getResultList(); - return new PageImpl<>(products, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), products.size()); - } - -} +package com.devonfw.quarkus.productmanagement.domain.repo; + +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.Query; +import javax.persistence.TypedQuery; +import javax.persistence.criteria.CriteriaBuilder; +import javax.persistence.criteria.CriteriaQuery; +import javax.persistence.criteria.Predicate; +import javax.persistence.criteria.Root; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; + +import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; +import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity_; +import com.devonfw.quarkus.productmanagement.domain.model.QProductEntity; +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductSearchCriteriaDto; +import com.querydsl.jpa.impl.JPAQuery; + +public class ProductFragmentImpl implements ProductFragment { + + @Inject + EntityManager em; + + @Override + public Page findAllCriteriaApi(ProductSearchCriteriaDto dto) { + + CriteriaQuery cq = this.em.getCriteriaBuilder().createQuery(ProductEntity.class); + Root root = cq.from(ProductEntity.class); + List predicates = new ArrayList<>(); + CriteriaBuilder cb = this.em.getCriteriaBuilder(); + if (dto.getTitle() != null && !dto.getTitle().isEmpty()) { + predicates.add(cb.like(root.get(ProductEntity_.TITLE), dto.getTitle())); + } + + if (dto.getPrice() != null) { + predicates.add(cb.gt(root.get(ProductEntity_.PRICE), dto.getPrice())); + } else if (dto.getPriceMin() != null || dto.getPriceMax() != null) { + if (dto.getPriceMin() != null) { + predicates.add(cb.gt(root.get(ProductEntity_.PRICE), dto.getPriceMin())); + } + if (dto.getPriceMax() != null) { + predicates.add(cb.lt(root.get(ProductEntity_.PRICE), dto.getPriceMax())); + } + } + + if (!predicates.isEmpty()) + + { + cq.where(predicates.toArray(new Predicate[0])); + } + + // Order by title + cq.orderBy(cb.desc(root.get(ProductEntity_.TITLE))); + + TypedQuery products = this.em.createQuery(cq).setFirstResult(dto.getPageNumber() * dto.getPageSize()) + .setMaxResults(dto.getPageSize()); + return new PageImpl(products.getResultList(), PageRequest.of(dto.getPageNumber(), dto.getPageSize()), + products.getResultList().size()); + } + + @Override + public Page findAllQueryDsl(ProductSearchCriteriaDto dto) { + + QProductEntity product = QProductEntity.productEntity; + JPAQuery query = new JPAQuery(this.em); + query.from(product); + if (dto.getTitle() != null && !dto.getTitle().isEmpty()) { + query.where(product.title.eq(dto.getTitle())); + } + + if (dto.getPrice() != null) { + query.where(product.price.eq(dto.getPrice())); + } else if (dto.getPriceMin() != null || dto.getPriceMax() != null) { + if (dto.getPriceMin() != null) { + query.where(product.price.gt(dto.getPriceMin())); + } + if (dto.getPriceMax() != null) { + query.where(product.price.lt(dto.getPriceMax())); + } + } + + // Order by title + query.orderBy(product.title.desc()); + + List products = query.limit(dto.getPageSize()).offset(dto.getPageNumber() * dto.getPageSize()) + .fetch(); + return new PageImpl<>(products, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), products.size()); + } + + @Override + public Page findByTitleQuery(ProductSearchCriteriaDto dto) { + + Query query = this.em.createQuery("select a from ProductEntity a where a.title = :title"); + query.setParameter("title", dto.getTitle()); + List products = query.getResultList(); + return new PageImpl<>(products, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), products.size()); + } + + @Override + public Page findByTitleNativeQuery(ProductSearchCriteriaDto dto) { + + Query query = this.em.createNativeQuery("select * from ProductEntity where title = :title", ProductEntity.class); + query.setParameter("title", dto.getTitle()); + List products = query.getResultList(); + return new PageImpl<>(products, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), products.size()); + } + +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductRepository.java b/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductRepository.java index 39a68d4f..9f4f517e 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductRepository.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/domain/repo/ProductRepository.java @@ -1,16 +1,16 @@ -package com.devonfw.quarkus.productmanagement.domain.repo; - -import org.springframework.data.domain.Page; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.CrudRepository; -import org.springframework.data.repository.query.Param; - -import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; - -public interface ProductRepository extends CrudRepository, ProductFragment { - - @Query("select a from ProductEntity a where title = :title") - ProductEntity findByTitle(@Param("title") String title); - - Page findAllByOrderByTitle(); +package com.devonfw.quarkus.productmanagement.domain.repo; + +import org.springframework.data.domain.Page; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; + +import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; + +public interface ProductRepository extends CrudRepository, ProductFragment { + + @Query("select a from ProductEntity a where title = :title") + ProductEntity findByTitle(@Param("title") String title); + + Page findAllByOrderByTitle(); } \ No newline at end of file diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcFindProduct.java b/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcFindProduct.java index 487232d8..767f5081 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcFindProduct.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcFindProduct.java @@ -1,24 +1,24 @@ -package com.devonfw.quarkus.productmanagement.logic; - -import org.springframework.data.domain.Page; - -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductSearchCriteriaDto; - -public interface UcFindProduct { - Page findProducts(ProductSearchCriteriaDto dto); - - Page findProductsByCriteriaApi(ProductSearchCriteriaDto dto); - - Page findProductsByQueryDsl(ProductSearchCriteriaDto dto); - - Page findProductsByTitleQuery(ProductSearchCriteriaDto dto); - - Page findProductsByTitleNativeQuery(ProductSearchCriteriaDto dto); - - Page findProductsOrderedByTitle(); - - ProductDto findProduct(String id); - - ProductDto findProductByTitle(String title); -} +package com.devonfw.quarkus.productmanagement.logic; + +import org.springframework.data.domain.Page; + +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductSearchCriteriaDto; + +public interface UcFindProduct { + Page findProducts(ProductSearchCriteriaDto dto); + + Page findProductsByCriteriaApi(ProductSearchCriteriaDto dto); + + Page findProductsByQueryDsl(ProductSearchCriteriaDto dto); + + Page findProductsByTitleQuery(ProductSearchCriteriaDto dto); + + Page findProductsByTitleNativeQuery(ProductSearchCriteriaDto dto); + + Page findProductsOrderedByTitle(); + + ProductDto findProduct(String id); + + ProductDto findProductByTitle(String title); +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcFindProductImpl.java b/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcFindProductImpl.java index 759f7dc0..20ce0204 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcFindProductImpl.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcFindProductImpl.java @@ -1,103 +1,103 @@ -package com.devonfw.quarkus.productmanagement.logic; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; -import javax.inject.Named; -import javax.transaction.Transactional; - -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; - -import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; -import com.devonfw.quarkus.productmanagement.domain.repo.ProductRepository; -import com.devonfw.quarkus.productmanagement.service.v1.mapper.ProductMapper; -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductSearchCriteriaDto; - -import lombok.extern.slf4j.Slf4j; - -@Named -@Transactional -@Slf4j -public class UcFindProductImpl implements UcFindProduct { - @Inject - ProductRepository ProductRepository; - - @Inject - ProductMapper mapper; - - @Override - public Page findProducts(ProductSearchCriteriaDto dto) { - - Iterable productsIterator = this.ProductRepository.findAll(); - List products = new ArrayList(); - productsIterator.forEach(products::add); - List productsDto = this.mapper.map(products); - return new PageImpl<>(productsDto, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), productsDto.size()); - } - - @Override - public Page findProductsByCriteriaApi(ProductSearchCriteriaDto dto) { - - List products = this.ProductRepository.findAllCriteriaApi(dto).getContent(); - List productsDto = this.mapper.map(products); - return new PageImpl<>(productsDto, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), productsDto.size()); - } - - @Override - public Page findProductsByQueryDsl(ProductSearchCriteriaDto dto) { - - List products = this.ProductRepository.findAllQueryDsl(dto).getContent(); - List productsDto = this.mapper.map(products); - return new PageImpl<>(productsDto, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), productsDto.size()); - } - - @Override - public Page findProductsByTitleQuery(ProductSearchCriteriaDto dto) { - - List products = this.ProductRepository.findByTitleQuery(dto).getContent(); - List productsDto = this.mapper.map(products); - return new PageImpl<>(productsDto, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), productsDto.size()); - } - - @Override - public Page findProductsByTitleNativeQuery(ProductSearchCriteriaDto dto) { - - List products = this.ProductRepository.findByTitleNativeQuery(dto).getContent(); - List productsDto = this.mapper.map(products); - return new PageImpl<>(productsDto, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), productsDto.size()); - } - - @Override - public Page findProductsOrderedByTitle() { - - List products = this.ProductRepository.findAllByOrderByTitle().getContent(); - List productsDto = this.mapper.map(products); - return new PageImpl<>(productsDto); - } - - @Override - public ProductDto findProduct(String id) { - - ProductEntity product = this.ProductRepository.findById(Long.valueOf(id)).get(); - if (product != null) { - return this.mapper.map(product); - } else { - return null; - } - } - - @Override - public ProductDto findProductByTitle(String title) { - - ProductEntity product = this.ProductRepository.findByTitle(title); - if (product != null) { - return this.mapper.map(product); - } else { - return null; - } - } +package com.devonfw.quarkus.productmanagement.logic; + +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.transaction.Transactional; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; + +import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; +import com.devonfw.quarkus.productmanagement.domain.repo.ProductRepository; +import com.devonfw.quarkus.productmanagement.service.v1.mapper.ProductMapper; +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductSearchCriteriaDto; + +import lombok.extern.slf4j.Slf4j; + +@Named +@Transactional +@Slf4j +public class UcFindProductImpl implements UcFindProduct { + @Inject + ProductRepository ProductRepository; + + @Inject + ProductMapper mapper; + + @Override + public Page findProducts(ProductSearchCriteriaDto dto) { + + Iterable productsIterator = this.ProductRepository.findAll(); + List products = new ArrayList(); + productsIterator.forEach(products::add); + List productsDto = this.mapper.map(products); + return new PageImpl<>(productsDto, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), productsDto.size()); + } + + @Override + public Page findProductsByCriteriaApi(ProductSearchCriteriaDto dto) { + + List products = this.ProductRepository.findAllCriteriaApi(dto).getContent(); + List productsDto = this.mapper.map(products); + return new PageImpl<>(productsDto, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), productsDto.size()); + } + + @Override + public Page findProductsByQueryDsl(ProductSearchCriteriaDto dto) { + + List products = this.ProductRepository.findAllQueryDsl(dto).getContent(); + List productsDto = this.mapper.map(products); + return new PageImpl<>(productsDto, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), productsDto.size()); + } + + @Override + public Page findProductsByTitleQuery(ProductSearchCriteriaDto dto) { + + List products = this.ProductRepository.findByTitleQuery(dto).getContent(); + List productsDto = this.mapper.map(products); + return new PageImpl<>(productsDto, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), productsDto.size()); + } + + @Override + public Page findProductsByTitleNativeQuery(ProductSearchCriteriaDto dto) { + + List products = this.ProductRepository.findByTitleNativeQuery(dto).getContent(); + List productsDto = this.mapper.map(products); + return new PageImpl<>(productsDto, PageRequest.of(dto.getPageNumber(), dto.getPageSize()), productsDto.size()); + } + + @Override + public Page findProductsOrderedByTitle() { + + List products = this.ProductRepository.findAllByOrderByTitle().getContent(); + List productsDto = this.mapper.map(products); + return new PageImpl<>(productsDto); + } + + @Override + public ProductDto findProduct(String id) { + + ProductEntity product = this.ProductRepository.findById(Long.valueOf(id)).get(); + if (product != null) { + return this.mapper.map(product); + } else { + return null; + } + } + + @Override + public ProductDto findProductByTitle(String title) { + + ProductEntity product = this.ProductRepository.findByTitle(title); + if (product != null) { + return this.mapper.map(product); + } else { + return null; + } + } } \ No newline at end of file diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcManageProduct.java b/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcManageProduct.java index 1b8cf630..64809a74 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcManageProduct.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcManageProduct.java @@ -1,10 +1,10 @@ -package com.devonfw.quarkus.productmanagement.logic; - -import com.devonfw.quarkus.productmanagement.service.v1.model.NewProductDto; -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; - -public interface UcManageProduct { - ProductDto saveProduct(NewProductDto dto); - - ProductDto deleteProduct(String id); -} +package com.devonfw.quarkus.productmanagement.logic; + +import com.devonfw.quarkus.productmanagement.service.v1.model.NewProductDto; +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; + +public interface UcManageProduct { + ProductDto saveProduct(NewProductDto dto); + + ProductDto deleteProduct(String id); +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcManageProductImpl.java b/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcManageProductImpl.java index d79477a3..e199e1cc 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcManageProductImpl.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/logic/UcManageProductImpl.java @@ -1,40 +1,40 @@ -package com.devonfw.quarkus.productmanagement.logic; - -import javax.inject.Inject; -import javax.inject.Named; -import javax.transaction.Transactional; - -import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; -import com.devonfw.quarkus.productmanagement.domain.repo.ProductRepository; -import com.devonfw.quarkus.productmanagement.service.v1.mapper.ProductMapper; -import com.devonfw.quarkus.productmanagement.service.v1.model.NewProductDto; -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; - -@Named -@Transactional -public class UcManageProductImpl implements UcManageProduct { - @Inject - ProductRepository productRepository; - - @Inject - ProductMapper mapper; - - @Override - public ProductDto saveProduct(NewProductDto dto) { - - ProductEntity created = this.productRepository.save(this.mapper.create(dto)); - return this.mapper.map(created); - } - - @Override - public ProductDto deleteProduct(String id) { - - ProductEntity product = this.productRepository.findById(Long.valueOf(id)).get(); - if (product != null) { - this.productRepository.delete(product); - return this.mapper.map(product); - } else { - return null; - } - } -} +package com.devonfw.quarkus.productmanagement.logic; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.transaction.Transactional; + +import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; +import com.devonfw.quarkus.productmanagement.domain.repo.ProductRepository; +import com.devonfw.quarkus.productmanagement.service.v1.mapper.ProductMapper; +import com.devonfw.quarkus.productmanagement.service.v1.model.NewProductDto; +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; + +@Named +@Transactional +public class UcManageProductImpl implements UcManageProduct { + @Inject + ProductRepository productRepository; + + @Inject + ProductMapper mapper; + + @Override + public ProductDto saveProduct(NewProductDto dto) { + + ProductEntity created = this.productRepository.save(this.mapper.create(dto)); + return this.mapper.map(created); + } + + @Override + public ProductDto deleteProduct(String id) { + + ProductEntity product = this.productRepository.findById(Long.valueOf(id)).get(); + if (product != null) { + this.productRepository.delete(product); + return this.mapper.map(product); + } else { + return null; + } + } +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/ProductRestService.java b/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/ProductRestService.java index b886fcea..b04442b4 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/ProductRestService.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/ProductRestService.java @@ -1,143 +1,143 @@ -package com.devonfw.quarkus.productmanagement.service.v1; - -import javax.inject.Inject; -import javax.ws.rs.BeanParam; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.UriInfo; - -import org.eclipse.microprofile.openapi.annotations.Operation; -import org.eclipse.microprofile.openapi.annotations.media.Content; -import org.eclipse.microprofile.openapi.annotations.media.Schema; -import org.eclipse.microprofile.openapi.annotations.parameters.Parameter; -import org.eclipse.microprofile.openapi.annotations.responses.APIResponse; -import org.eclipse.microprofile.openapi.annotations.responses.APIResponses; -import org.springframework.data.domain.PageImpl; -import org.tkit.quarkus.rs.models.PageResultDTO; - -import com.devonfw.quarkus.productmanagement.logic.UcFindProduct; -import com.devonfw.quarkus.productmanagement.logic.UcManageProduct; -import com.devonfw.quarkus.productmanagement.service.v1.model.NewProductDto; -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductSearchCriteriaDto; - -//In Quarkus all JAX-RS resources are treated as CDI beans -//default is Singleton scope -@Path("/products") -// how we serialize response -@Produces(MediaType.APPLICATION_JSON) -// how we deserialize params -@Consumes(MediaType.APPLICATION_JSON) -public class ProductRestService { - - // using @Context we can inject contextual info from JAXRS(e.g. http request, current uri info, endpoint info...) - @Context - UriInfo uriInfo; - - @Inject - UcFindProduct ucFindProduct; - - @Inject - UcManageProduct ucManageProduct; - - @APIResponses({ - @APIResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = PagedProductResponse.class))), - @APIResponse(responseCode = "500") }) - @Operation(operationId = "Get Products", description = "Returns list of Products matching given criteria, uses pagination") - @GET - // REST service methods should not declare exceptions, any thrown error will be transformed by exceptionMapper in - // tkit-rest - // We did not define custom @Path - so it will use class level path - public PageImpl getAll(@BeanParam ProductSearchCriteriaDto dto) { - - return (PageImpl) this.ucFindProduct.findProducts(dto); - } - - @GET - @Path("criteriaApi") - public PageImpl getAllCriteriaApi(@BeanParam ProductSearchCriteriaDto dto) { - - return (PageImpl) this.ucFindProduct.findProductsByCriteriaApi(dto); - } - - @GET - @Path("queryDsl") - public PageImpl getAllQueryDsl(@BeanParam ProductSearchCriteriaDto dto) { - - return (PageImpl) this.ucFindProduct.findProductsByQueryDsl(dto); - } - - @GET - @Path("query") - public PageImpl getAllQuery(@BeanParam ProductSearchCriteriaDto dto) { - - return (PageImpl) this.ucFindProduct.findProductsByTitleQuery(dto); - } - - @GET - @Path("nativeQuery") - public PageImpl getAllNativeQuery(@BeanParam ProductSearchCriteriaDto dto) { - - return (PageImpl) this.ucFindProduct.findProductsByTitleNativeQuery(dto); - } - - @GET - @Path("ordered") - public PageImpl getAllOrderedByTitle() { - - return (PageImpl) this.ucFindProduct.findProductsOrderedByTitle(); - } - - @APIResponses({ - @APIResponse(responseCode = "201", description = "OK, New Product created", content = @Content(schema = @Schema(implementation = NewProductDto.class))), - @APIResponse(responseCode = "400", description = "Client side error, invalid request"), - @APIResponse(responseCode = "500") }) - @Operation(operationId = "createNewProduct", description = "Stores new Product in DB") - @POST - // We did not define custom @Path - so it will use class level path. - // Although we now have 2 methods with same path, it is ok, because it is a different method (get vs post) - public ProductDto createNewProduct(NewProductDto dto) { - - return this.ucManageProduct.saveProduct(dto); - } - - @APIResponses({ - @APIResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ProductDto.class))), - @APIResponse(responseCode = "404", description = "Product not found"), @APIResponse(responseCode = "500") }) - @Operation(operationId = "getProductById", description = "Returns Product with given id") - @GET - @Path("{id}") - public ProductDto getProductById(@Parameter(description = "Product unique id") @PathParam("id") String id) { - - return this.ucFindProduct.findProduct(id); - } - - @GET - @Path("title/{title}") - public ProductDto getProductByTitle(@PathParam("title") String title) { - - return this.ucFindProduct.findProductByTitle(title); - } - - @APIResponses({ - @APIResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ProductDto.class))), - @APIResponse(responseCode = "404", description = "Product not found"), @APIResponse(responseCode = "500") }) - @Operation(operationId = "deleteProductById", description = "Deletes the Product with given id") - @DELETE - @Path("{id}") - public ProductDto deleteProductById(@Parameter(description = "Product unique id") @PathParam("id") String id) { - - return this.ucManageProduct.deleteProduct(id); - } - - private static class PagedProductResponse extends PageResultDTO { - } - -} +package com.devonfw.quarkus.productmanagement.service.v1; + +import javax.inject.Inject; +import javax.ws.rs.BeanParam; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.UriInfo; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.media.Content; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import org.eclipse.microprofile.openapi.annotations.parameters.Parameter; +import org.eclipse.microprofile.openapi.annotations.responses.APIResponse; +import org.eclipse.microprofile.openapi.annotations.responses.APIResponses; +import org.springframework.data.domain.Page; +import org.tkit.quarkus.rs.models.PageResultDTO; + +import com.devonfw.quarkus.productmanagement.logic.UcFindProduct; +import com.devonfw.quarkus.productmanagement.logic.UcManageProduct; +import com.devonfw.quarkus.productmanagement.service.v1.model.NewProductDto; +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductSearchCriteriaDto; + +//In Quarkus all JAX-RS resources are treated as CDI beans +//default is Singleton scope +@Path("/products") +// how we serialize response +@Produces(MediaType.APPLICATION_JSON) +// how we deserialize params +@Consumes(MediaType.APPLICATION_JSON) +public class ProductRestService { + + // using @Context we can inject contextual info from JAXRS(e.g. http request, current uri info, endpoint info...) + @Context + UriInfo uriInfo; + + @Inject + UcFindProduct ucFindProduct; + + @Inject + UcManageProduct ucManageProduct; + + @APIResponses({ + @APIResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = PagedProductResponse.class))), + @APIResponse(responseCode = "500") }) + @Operation(operationId = "Get Products", description = "Returns list of Products matching given criteria, uses pagination") + @GET + // REST service methods should not declare exceptions, any thrown error will be transformed by exceptionMapper in + // tkit-rest + // We did not define custom @Path - so it will use class level path + public Page getAll(@BeanParam ProductSearchCriteriaDto dto) { + + return this.ucFindProduct.findProducts(dto); + } + + @GET + @Path("criteriaApi") + public Page getAllCriteriaApi(@BeanParam ProductSearchCriteriaDto dto) { + + return this.ucFindProduct.findProductsByCriteriaApi(dto); + } + + @GET + @Path("queryDsl") + public Page getAllQueryDsl(@BeanParam ProductSearchCriteriaDto dto) { + + return this.ucFindProduct.findProductsByQueryDsl(dto); + } + + @GET + @Path("query") + public Page getAllQuery(@BeanParam ProductSearchCriteriaDto dto) { + + return this.ucFindProduct.findProductsByTitleQuery(dto); + } + + @GET + @Path("nativeQuery") + public Page getAllNativeQuery(@BeanParam ProductSearchCriteriaDto dto) { + + return this.ucFindProduct.findProductsByTitleNativeQuery(dto); + } + + @GET + @Path("ordered") + public Page getAllOrderedByTitle() { + + return this.ucFindProduct.findProductsOrderedByTitle(); + } + + @APIResponses({ + @APIResponse(responseCode = "200", description = "OK, New Product created", content = @Content(schema = @Schema(implementation = NewProductDto.class))), + @APIResponse(responseCode = "400", description = "Client side error, invalid request"), + @APIResponse(responseCode = "500") }) + @Operation(operationId = "createNewProduct", description = "Stores new Product in DB") + @POST + // We did not define custom @Path - so it will use class level path. + // Although we now have 2 methods with same path, it is ok, because it is a different method (get vs post) + public ProductDto createNewProduct(NewProductDto dto) { + + return this.ucManageProduct.saveProduct(dto); + } + + @APIResponses({ + @APIResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ProductDto.class))), + @APIResponse(responseCode = "404", description = "Product not found"), @APIResponse(responseCode = "500") }) + @Operation(operationId = "getProductById", description = "Returns Product with given id") + @GET + @Path("{id}") + public ProductDto getProductById(@Parameter(description = "Product unique id") @PathParam("id") String id) { + + return this.ucFindProduct.findProduct(id); + } + + @GET + @Path("title/{title}") + public ProductDto getProductByTitle(@PathParam("title") String title) { + + return this.ucFindProduct.findProductByTitle(title); + } + + @APIResponses({ + @APIResponse(responseCode = "200", description = "OK", content = @Content(schema = @Schema(implementation = ProductDto.class))), + @APIResponse(responseCode = "404", description = "Product not found"), @APIResponse(responseCode = "500") }) + @Operation(operationId = "deleteProductById", description = "Deletes the Product with given id") + @DELETE + @Path("{id}") + public ProductDto deleteProductById(@Parameter(description = "Product unique id") @PathParam("id") String id) { + + return this.ucManageProduct.deleteProduct(id); + } + + private static class PagedProductResponse extends PageResultDTO { + } + +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/mapper/ProductMapper.java b/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/mapper/ProductMapper.java index 46c1f856..19c2992d 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/mapper/ProductMapper.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/mapper/ProductMapper.java @@ -1,21 +1,21 @@ -package com.devonfw.quarkus.productmanagement.service.v1.mapper; - -import java.util.List; - -import org.mapstruct.Mapper; -import org.tkit.quarkus.rs.mappers.OffsetDateTimeMapper; - -import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; -import com.devonfw.quarkus.productmanagement.service.v1.model.NewProductDto; -import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; - -//mapstruct will generate an impl class(CDI bean, see pom.xml) from this interface at compile time -@Mapper(uses = OffsetDateTimeMapper.class) -public interface ProductMapper { - - ProductDto map(ProductEntity model); - - ProductEntity create(NewProductDto dto); - - List map(List Products); -} +package com.devonfw.quarkus.productmanagement.service.v1.mapper; + +import java.util.List; + +import org.mapstruct.Mapper; +import org.tkit.quarkus.rs.mappers.OffsetDateTimeMapper; + +import com.devonfw.quarkus.productmanagement.domain.model.ProductEntity; +import com.devonfw.quarkus.productmanagement.service.v1.model.NewProductDto; +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; + +//mapstruct will generate an impl class(CDI bean, see pom.xml) from this interface at compile time +@Mapper(uses = OffsetDateTimeMapper.class) +public interface ProductMapper { + + ProductDto map(ProductEntity model); + + ProductEntity create(NewProductDto dto); + + List map(List Products); +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/NewProductDto.java b/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/NewProductDto.java index 69cf8119..2b5807cd 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/NewProductDto.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/NewProductDto.java @@ -1,23 +1,23 @@ -package com.devonfw.quarkus.productmanagement.service.v1.model; - -import java.math.BigDecimal; - -import org.eclipse.microprofile.openapi.annotations.media.Schema; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class NewProductDto { - - @Schema(nullable = false, description = "Product title", minLength = 3, maxLength = 500) - private String title; - - @Schema(description = "Product description", minLength = 3, maxLength = 500) - private String description; - - @Schema(description = "Product price") - private BigDecimal price; - -} +package com.devonfw.quarkus.productmanagement.service.v1.model; + +import java.math.BigDecimal; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class NewProductDto { + + @Schema(nullable = false, description = "Product title", minLength = 3, maxLength = 500) + private String title; + + @Schema(description = "Product description", minLength = 3, maxLength = 500) + private String description; + + @Schema(description = "Product price") + private BigDecimal price; + +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/ProductDto.java b/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/ProductDto.java index c3dd0465..b31afd33 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/ProductDto.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/ProductDto.java @@ -1,20 +1,20 @@ -package com.devonfw.quarkus.productmanagement.service.v1.model; - -import java.math.BigDecimal; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class ProductDto { - - private Long id; - - private String title; - - private String description; - - private BigDecimal price; - -} +package com.devonfw.quarkus.productmanagement.service.v1.model; + +import java.math.BigDecimal; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ProductDto { + + private Long id; + + private String title; + + private String description; + + private BigDecimal price; + +} diff --git a/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/ProductSearchCriteriaDto.java b/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/ProductSearchCriteriaDto.java index 1ad69ed5..ccf52ea0 100644 --- a/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/ProductSearchCriteriaDto.java +++ b/src/main/java/com/devonfw/quarkus/productmanagement/service/v1/model/ProductSearchCriteriaDto.java @@ -1,34 +1,34 @@ -package com.devonfw.quarkus.productmanagement.service.v1.model; - -import java.math.BigDecimal; - -import javax.ws.rs.DefaultValue; -import javax.ws.rs.QueryParam; - -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -public class ProductSearchCriteriaDto { - - @QueryParam("title") - private String title; - - @QueryParam("page") - @DefaultValue("0") - private int pageNumber = 0; - - @QueryParam("size") - @DefaultValue("10") - private int pageSize = 10; - - @QueryParam("priceMin") - private BigDecimal priceMin; - - @QueryParam("priceMax") - private BigDecimal priceMax; - - @QueryParam("price") - private BigDecimal price; -} +package com.devonfw.quarkus.productmanagement.service.v1.model; + +import java.math.BigDecimal; + +import javax.ws.rs.DefaultValue; +import javax.ws.rs.QueryParam; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class ProductSearchCriteriaDto { + + @QueryParam("title") + private String title; + + @QueryParam("page") + @DefaultValue("0") + private int pageNumber = 0; + + @QueryParam("size") + @DefaultValue("10") + private int pageSize = 10; + + @QueryParam("priceMin") + private BigDecimal priceMin; + + @QueryParam("priceMax") + private BigDecimal priceMax; + + @QueryParam("price") + private BigDecimal price; +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 497599d5..ec3fc7e5 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,69 +1,52 @@ -# Here we put all our configuration values -# we can define profile-specific values using `%.` prefix -# e.g. %dev.quarkus.log.level=DEBUG would only be applied in dev mode - -# Datasource configuration -quarkus.datasource.db-kind=postgresql -quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/demo -quarkus.datasource.username=demo -quarkus.datasource.password=demo - -# Flyway minimal config properties -quarkus.flyway.migrate-at-start=true -quarkus.flyway.baseline-on-migrate=true -quarkus.flyway.baseline-version=0 - -#create uber jar file -quarkus.package.uber-jar=true - -# logging configuration -# which packages should be automatically logged by tkit cdi logger -quarkus.tkit.log.packages=org.tkit,com.devonfw -# you can supress logs from classes by annotations or regex -quarkus.tkit.log.ignore.pattern=.*MapperImpl - - -#identifier of your service when using openTracing, if empty a no-op tracer will be used -#openTelemetry works without these configurations, exporting to different backends. -#Still, there should be some configuration possible in a future quarkus version. -#quarkus.jaeger.service-name=demo-app -#sampling algorithm, const=tracing all or nothing -#quarkus.jaeger.sampler-type=const -#1=trace every single method -#quarkus.jaeger.sampler-param=1 -#quarkus.log.console.format=%d{HH:mm:ss} %-5p traceId=%X{traceId}, parentId=%X{parentId}, spanId=%X{spanId}, sampled=%X{sampled} [%c{2.}] (%t) %s%e%n -#report spans to central aggregator(you must start Jaeger yourself - e.g. using the docker-compose.yaml) -#quarkus.jaeger.endpoint=http://localhost:14268/api/traces - -# all of these are default values, metrics would work just fine if you remove it -quarkus.micrometer.binder-enabled-default=true -# also report metrics from microprofile -quarkus.micrometer.binder.mp-metrics.enabled=true -# implicit metrics from http client -quarkus.micrometer.binder.http-client.enabled=true -# implicit metrics from REST endpoints -quarkus.micrometer.binder.http-server.enabled=true - - -# DEV profile -# in dev mode, use flyway master-data -%quarkus.hibernate-orm.database.generation=none -# during dev, print sql produced by hibernate, disable in prod(default) -%dev.quarkus.hibernate-orm.log.sql=true -# disable json logs for better readability -%dev.quarkus.tkit.log.console.json=false -#if you dont use tkit-json=log but standard quarkus-json-log, use this instead -#%dev.quarkus.log.console.json=false -# if you want to see opentracing values in -%dev.quarkus.log.console.format=%d{HH:mm:ss} %-5p traceId=%X{traceId}, parentId=%X{parentId}, spanId=%X{spanId}, sampled=%X{sampled} [%c{2.}] (%t) %s%e%n - - -# TEST - -%test.quarkus.tkit.log.console.json=false -# Test DB is provided by tkit test containers, URL will be set dynamically -%test.quarkus.datasource.password=demo -%test.quarkus.datasource.username=demo -%test.quarkus.hibernate-orm.database.generation=drop-and-create -%test.quarkus.hibernate-orm.log.sql=true - +# Here we put all our configuration values +# we can define profile-specific values using `%.` prefix +# e.g. %dev.quarkus.log.level=DEBUG would only be applied in dev mode + +# Datasource configuration +quarkus.datasource.db-kind=postgresql +quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/demo +quarkus.datasource.username=demo +quarkus.datasource.password=demo + +# Flyway minimal config properties +quarkus.flyway.migrate-at-start=true +quarkus.flyway.baseline-on-migrate=true +quarkus.flyway.baseline-version=0 + +# logging configuration +# which packages should be automatically logged by tkit cdi logger +quarkus.tkit.log.packages=org.tkit,com.devonfw +# you can supress logs from classes by annotations or regex +quarkus.tkit.log.ignore.pattern=.*MapperImpl + +# Metrics +# all of these are default values, metrics would work just fine if you remove it +quarkus.micrometer.binder-enabled-default=true +# also report metrics from microprofile +quarkus.micrometer.binder.mp-metrics.enabled=true +# implicit metrics from http client +quarkus.micrometer.binder.http-client.enabled=true +# implicit metrics from REST endpoints +quarkus.micrometer.binder.http-server.enabled=true + +# DEV profile +# in dev mode, use flyway master-data +%quarkus.hibernate-orm.database.generation=none +# during dev, print sql produced by hibernate, disable in prod(default) +%dev.quarkus.hibernate-orm.log.sql=true +# disable json logs for better readability +%dev.quarkus.tkit.log.console.json=false +#if you dont use tkit-json=log but standard quarkus-json-log, use this instead +#%dev.quarkus.log.console.json=false +# if you want to see opentracing values in +%dev.quarkus.log.console.format=%d{HH:mm:ss} %-5p traceId=%X{traceId}, parentId=%X{parentId}, spanId=%X{spanId}, sampled=%X{sampled} [%c{2.}] (%t) %s%e%n + + +# TEST +%test.quarkus.tkit.log.console.json=false +# Test DB is provided by tkit test containers, URL will be set dynamically +%test.quarkus.datasource.password=demo +%test.quarkus.datasource.username=demo +%test.quarkus.hibernate-orm.database.generation=drop-and-create +%test.quarkus.hibernate-orm.log.sql=true + diff --git a/src/main/resources/db/migration/V001__Create_schema.sql b/src/main/resources/db/migration/V001__Create_schema.sql index af0c1b3b..560e3001 100644 --- a/src/main/resources/db/migration/V001__Create_schema.sql +++ b/src/main/resources/db/migration/V001__Create_schema.sql @@ -1,10 +1,10 @@ --- *** Product catalog *** -CREATE TABLE Product -( - id BIGSERIAL, - modificationCounter INTEGER NOT NULL, - title VARCHAR (255) NOT NULL, - description VARCHAR (4000), - price DECIMAL (16,2) NOT NULL, - CONSTRAINT PK_Product PRIMARY KEY(id) -); +-- *** Product catalog *** +CREATE TABLE Product +( + id BIGSERIAL, + modificationCounter INTEGER NOT NULL, + title VARCHAR (255) NOT NULL, + description VARCHAR (4000), + price DECIMAL (16,2) NOT NULL, + CONSTRAINT PK_Product PRIMARY KEY(id) +); diff --git a/src/main/resources/db/migration/V002__Master_data.sql b/src/main/resources/db/migration/V002__Master_data.sql index 5fd00a94..204cf812 100644 --- a/src/main/resources/db/migration/V002__Master_data.sql +++ b/src/main/resources/db/migration/V002__Master_data.sql @@ -1,352 +1,352 @@ --- Products 350 entries from https://github.com/etano/productner/blob/master/Product%20Dataset.csv --- Original source: Justifying recommendations using distantly-labeled reviews and fined-grained aspects, Jianmo Ni, Jiacheng Li, Julian McAuley, Empirical Methods in Natural Language Processing (EMNLP), 2019ss -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (0, 1, 'Bose Acoustimass 5 Series III Speaker System - AM53BK', 'Bose Acoustimass 5 Series III Speaker System - AM53BK/ 2 Dual Cube Speakers With Two 2-1/2'' Wide-range Drivers In Each Speaker/ Powerful Bass Module With Two 5-1/2'' Woofers/ 200 Watts Max Power/ Black Finish', 399.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (1, 1, 'Sony Switcher - SBV40S', 'Sony Switcher - SBV40S/ Eliminates Disconnecting And Reconnecting Cables/ Compact Design/ 4 A/V Inputs With S-Video Jacks/ 1 A/V Output With S-Video (Y/C)Jack/ 2 Audio Output', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (2, 1, 'Bose 27028 161 Bookshelf Pair Speakers In White - 161WH', 'Bose 161 Bookshelf Speakers In White - 161WH/ Articulated Array Speaker Design/ High-Excursion Twiddler Drivers/ Magnetically Shielded/ Priced Per Pair/ White Finish', 158.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (3, 1, 'Denon Stereo Tuner - TU1500RD', 'Denon Stereo Tuner - TU1500RD/ RDS Radio Data System/ AM-FM 40 Station Random Memory/ Rotary Tuning Knob/ Dot Matrix FL Display/ Optional Remote', 375.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (4, 1, 'Panasonic Integrated Telephone System - KXTS108W', 'Panasonic Integrated Telephone System - KXTS108W/ 16 Digit LCD With Clock/ Hands Free Speakerphone/ Built-In Data Port/ 10-Station One-Touch Dialing/ 3-Step Ringer Volume/ White Finish', 44.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (5, 1, 'Panasonic Hands-Free Headset - KXTCA86', 'Panasonic Hands-Free Headset - KXTCA86/ Comfort Fit And Fold Design/ Noise Cancelling Microphone/ Standard 2.5mm Connection', 14.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (6, 1, 'Panasonic Hands Free Headset - KXTCA92', 'Panasonic Hands Free Headset - KXTCA92/ Comfort Fit With Fold Design/ Noise Cancelling Microphone/ Volume Control/ Mute/ Standard 2.5mm Connection', 25.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (7, 1, 'Cuisinart Convection-Oven-Toaster-Broiler With Exact Heat Sensor - TOB165WH', 'Cuisinart Convection-Oven-Toaster-Broiler With Exact Heat Sensor - TOB165WH/ 0.5 Cubic Foot Oven Capacity/ LED Indicators/ Individual Or Combination Settings/ Always Even Shade Control/ 4 Hour Automatic Shut Off/ Slide-Out Crumb Tray/ Includes Broiling Pan/ White Finish', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (8, 1, 'Frigidaire 24'' White Built-In Dishwasher - FDB130WH', 'Frigidaire 24'' FDB130RGS White Built-In Dishwasher - FDB130WH/ Convection Drying System/ QuietSound Sound Insulation Package/ 2 Wash Levels/ Adjustable Rinse Aid Dispenser/ Self Cleaning Filter/ White Finish', 229.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (9, 1, 'Cuisinart Cordless Electric Kettle - KUA17', 'Cuisinart Cordless Electric Kettle - KUA17/ 1-3/4 Quart Capacity/ Automatic Shut-Off/ Indicator Light/ Splash Guard Spout/ Cord Storage In Base/ Chrome Finish', 70.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (10, 1, 'Omnimount Wall Speaker Mount - 20WLBK', 'Omnimount Wall Speaker Mount - 20WLBK/ Stainless Steel Shafts And All Necessary Hardware Included/ Supports Speakers Up To 20 lbs./ Sold As Single / Black Finish', 39.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (11, 1, 'Omnimount Wall Speaker Mount - 20WLWH', 'Omnimount Wall Speaker Mount - 20WLWH/ Stainless Steel Shafts And All Necessary Hardware Included/ Supports Speakers Up To 20 lbs./ Sold as each / White Finish (Photo Showing Black)', 40.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (12, 1, 'Denon Semi-Automatic Turntable - Black Finish - DP29F', 'Denon Semi-Automatic Turntable - DP29F/ Metal Platter/ Built-In RIAA Equalizer/ DC Servo Motor/ 2 Speed 33 + 45 RPM/ Built-In Phono PreAmp', 150.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (13, 1, 'Escort Passport Radar And Laser Detector - Black Finish - 8500', 'Escort Passport X50 Radar And Laser Detector - 8500/ X-Band, K-Band, Ka-Band Operating Bands/ AlGaAs 280 LED Matrix/Text Display Type/ 3-Level Dimming, Plus Dark Mode/ Auto Mute/ City Mode Sensitivity/ Compact Size/ Red Display', 313.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (14, 1, 'Sony Compact Disc Player/Recorder - RCDW500C', 'Sony Compact Disc Player/Recorder - RCDW500C/ 5-CD/Dual Deck With 4x High Speed Dubbing/ CD, CD-R, CD-RW, MP3 Playback Capable/ Super Bit Mapping Recording/ High Speed Finalizing', 299.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (15, 1, 'Sanus WMS3B Black Weather Resistant Small Speaker Wall Mount - WMS3B', 'Sanus WMS3B Black Small Speaker Wall Mount - WMS3B/ Holds Up To An 8 Pound Speaker/ Multiple Pivot Points/ Weather Resistant For Indoor/Outdoor Use/ Black Finish/ Priced Per Pair', 29.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (16, 1, 'Sanus WMS3S Silver Weather Resistant Small Speaker Wall Mount - WMS3S', 'Sanus WMS3S Silver Small Speaker Wall Mount - WMS3S/ Holds Up To An 8 Pound Speaker/ Multiple Pivot Points/ Weather Resistant For Indoor/Outdoor Use/ Silver Finish/ Priced Per Pair', 29.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (17, 1, 'Sanus Euro Foundations Satellite Speaker Stand - EFSATB', 'Sanus Euro Foundations Satellite Speaker Stand - EFSATB/ Sturdy Base/ Adjustable Pillar And Floor Spikes/ Includes Three Different Speaker Mounting Methods/ Contemporary European Design/ Satin Powder-Coated Black Finish/ Priced Per Pair', 79.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (18, 1, 'Sanus Euro Foundations Satellite Speaker Stand - EFSATS', 'Sanus Euro Foundations Satellite Speaker Stand - EFSATS/ Sturdy Base/ Adjustable Pillar And Floor Spikes/ Includes Three Different Speaker Mounting Methods/ Contemporary European Design/ Satin Powder-Coated Silver Finish/ Priced Per Pair', 79.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (19, 1, 'Escort Cordless Solo Radar Detector - S2E', 'Escort Cordless Solo Radar Detector - S2E/ S2/ 10 Programmable Features/ High-Efficiency Power Management/ Ultra-Performance Laser Protection/ AutoSensitivity Mode/ High Resolution Graphic LCD Display/ Built-In Earphone Jack', 343.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (20, 1, 'Kenwood 6-Disc CD Changer - KDCC669', 'Kenwood 6-Disc CD Changer - KDCC669/ 3-Angle Mounting/ CD, CD-R And CD-RW Playback/ Anti-Vibration Disc Transport/ Compatible With All Kenwood Units With Changer Control', 129.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (21, 1, 'Cuisinart Automatic Brew And Serve Coffeemaker - DTC975BK', 'Cuisinart Automatic Brew And Serve Coffeemaker - DTC975BK/ 12-Cup Double-Wall Insulated Stainless Steel Carafe/ Fully Automatic With 24-Hour Programmability/ Patented Brew-Through And Pour-Through Lid/ Brew Pause Feature/ Automatic Shutoff/ Black And Stainless Steel Finish', 99.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (22, 1, 'Sharp Over The Counter Microwave Oven - R1214SS', 'Sharp Over The Counter Microwave Oven - R1214SS/ 1.5 Cubic Foot Capacity/ 1100 Watts/ 24 Automatic Settings/ 2-Color Lighted LCD/ Smart And Easy Sensor Settings/ Auto-Touch Control Panel/ Stainless Steel Finish', 429.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (23, 1, 'Toshiba Rechargeable 5-Hour Battery Pack - MEDB05LX', 'Toshiba Rechargeable 5-Hour Battery Pack - MEDB05LX/ Works With SDP2500 And SDP2600 Portable DVD Players', 149.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (24, 1, 'Sony Super Audio CD Player - SCDCE595', 'Sony Super Audio CD Player - SCDCE595/ Multi-Channel Super Audio CD Playback Capability/ CD/CD-R/CD-RW Playback Capability/ Multi-Channel Direct Stream Digitial Decoder/ Multi-Channel Management System/ SACD Text/CD Text Capability/ ETA LATE JANUARY 2009', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (25, 1, 'Delonghi Twenty Four Seven Coffee Maker In Black - DC50B', 'Delonghi Twenty Four Seven Coffee Maker - DC50B/ 4-Cup Capacity/ Easy-Access, Washable Filter Basket/ Black Finish', 22.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (26, 1, 'Sanus Silver LCD Television Turntable - TVLCDS', 'Sanus Silver LCD Television Turntable - TVLCDS/ Holds 13''-30'' Size Televisions/ 360 Degree Rotation/ Silver Finish', 29.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (27, 1, 'Delonghi Twenty Four Seven Coffee Maker - DC50W', 'Delonghi Twenty Four Seven Coffee Maker - DC50W/ 4-Cup Capacity/ Easy-Access, Washable Filter Basket/ White Finish', 22.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (28, 1, 'Universal IR/RF Remote - MX350', 'Universal IR/RF Remote - MX350/ Controls Up To 10 Components/ Extensive Macro Programming/ Memory Back-Up/ One Hand Ergonomics', 149.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (29, 1, 'Universal IR/RF Aeros Remote Control- MX850 - MX850', 'Universal IR/RF Aeros Remote Control- MX850/ Laser Etched Buttons/ Centrally Located Joystick/ Memory Back-Up/ One Hand Ergonomics/ Controls Up To 20 Components', 399.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (30, 1, 'Panasonic 5-Pack DVD-RAM Discs - LMAF120LU5', 'Panasonic 5-Pack DVD-RAM Discs - LMAF120LU5/ Slim Cases/ 2-3x Speed/ Single-Sided/ 120 Minute (4.7GB/Non-Cartridge)/ For Video Recording/ 5 Pack', 15.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (31, 1, 'Sanus 13'' - 30'' VisionMount Flat Panel TV Silver Wall Mount - VMFS', 'Sanus 13'' - 30'' VisionMount Flat Panel TV Silver Wall Mount - VMFS/ Supports Up To 40 lbs/ Easy To Install/ Fingertip Virtual Axis Tilting System/ Silver Finish', 39.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (32, 1, 'Weber Performer 22-1/2'' Charcoal Grill - 841001', 'Weber Performer 22-1/2'' Charcoal Grill - 841001/ Push-Button Igniter/ Porcelain-Enameled Bowl And Lid/ Dual-Purpose Themometer/ Crackproof All-Weather Wheels/ Black Lid Finish/ Assembly Required', 329.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (33, 1, 'Sanus 13'' - 30'' Flat Panel TV Black Wall Mount - VM1B', 'Sanus 13'' - 30'' Flat Panel TV Black Wall Mount - VM1B/ Tilt And Swivel Motion/ Rigid Extruded Aluminum Construction/ Supports Up To 50 Lbs/ Black Finish', 69.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (34, 1, 'Sanus 15'' - 40'' Flat Panel TV Silver Wall Mount - VM400S', 'Sanus 15'' - 40'' Flat Panel TV Silver Wall Mount - VM400S/ Virtual Axis Tilt Adjustment System/ Hinged Arm Extend From 3.5'' To 20''/ Durable Powder Coated Silver Finish', 219.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (35, 1, 'Delonghi Oil Filters - FK8', 'Delonghi Oil Filters - FK8/ Made For Use With D895UX/ 3 Pack', 18.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (36, 1, 'Weber Performer 22-1/2'' Charcoal Grill - 848001', 'Weber Performer 22-1/2'' Charcoal Grill - 848001/ Push-Button Igniter/ Porcelain-Enameled Bowl And Lid/ Dual-Purpose Themometer/ Crackproof All-Weather Wheels/ Blue Lid Finish/ Assembly Required', 329.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (37, 1, 'Whirlpool 24'' Built-In Dishwasher - DU1055BK', 'Whirlpool 24'' Built-In Dishwasher - DU1055BK/ 14-Five Piece Place Setting Super Capacity Tub/ 5 Level Direct Feed SheerClean Wash System/ 4 Cycles/ AnyWare Plus Silverware Basket/ Quiet Partner I Sound Package/ Energy Star Qualified/ Black Finish', 397.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (38, 1, 'Whirlpool 24'' Built-In Dishwasher - DU1055SS', 'Whirlpool 24'' Built-In Dishwasher - DU1055SS/ 14-Five Piece Place Setting Super Capacity Tub/ 5 Level Direct Feed SheerClean Wash System/ 4 Cycles/ Soak And Scour Option/ AnyWare Plus Silverware Basket/ Quiet Partner I Sound Package/ Energy Star Qualified/ Black On Stainless Finish', 491.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (39, 1, 'Sony Soft Cyber-Shot Carrying Case - LCSCST', 'Sony Soft Cyber-Shot Carrying Case - LCSCST/ Sturdy Nylon Construction/ Compact And Very Lightweight/ Stylish Black Design', 14.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (40, 1, 'Pioneer XM Digital Satellite Tuner for Pioneer Headunits - GEXP920XM', 'Pioneer XM Digital Satellite Tuner For Pioneer Headunits - GEXP920XM/ SAT Radio Ready/ XM Ready/ Built-In FM Modulator/ 18- Station/ 6- Button Presets/ Magne Mount Installation', 98.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (41, 1, 'Sanus Universal Projector Ceiling Mount - Black Finish - VMPR1B', 'Sanus Universal Projector Ceiling Mount - VMPR1B/ Designed For DLP And LCD Projectors/ Quick Release Mechanism/ 50 Lbs Capacity/ Black Finish', 129.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (42, 1, 'Kenwood iPod Mobile Interface - KCAIP500', 'Kenwood iPod Mobile Interface - KCAIP500/ Compatible With Most Kenwood Receivers/ Text Display, Multiple Search Mode/ Powers And Charges iPod', 49.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (43, 1, 'Pioneer Wired Marine Remote Control Display - CDMR80D', 'Pioneer Wired Marine Remote Control Display - CDMR80D/ Compatible With Pioneer Headunits/ Satellite Radio Text Indications/ ATT (Volume Attenuator) Button', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (44, 1, 'Bose Second Zone Remote - PMC2', 'Bose Second Zone Remote - PMC2/ Controls Lifestyle 38 Or 48 Media Center/ TV, VCR, Cable Box, Satellite Receiver/ Accesses Digitally Stored CDs In UMusic System', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (45, 1, 'Sony DVD-R Recordable Camcorder Media - 3DMR30L1H', 'Sony DVD-R Recordable Camcorder Media 3 Pack - 3DMR30L1H/ 30 Minute, 1.4 GB/ Accucore Technology/ Store Digital Video, Audio And Multimedia Files/ 3 Pack', 9.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (46, 1, 'Sony VAIO Neoprene Laptop Carrying Case - Black Finish - VGPAMC3', 'Sony VAIO Neoprene Laptop Carrying Case - VGPAMC3/ Compatible With VAIO A Series 15'' And FS Series 15.4'' Widescreen Notebooks/ Helps Protect Your Notebook From Scratches, Spills And Dings/ Neoprene Offers Durable And Water-Resistant Protection', 22.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (47, 1, 'Canon Color Ink Tank - CL41CL', 'Canon Color Ink Tank - CL41CL/ Compatible With The Pixma iP1600, MP170 Printers', 24.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (48, 1, 'Canon Cyan Ink Tank - Cyan - CLI8C', 'Canon Cyan Ink Tank - CLI8C/ Compatible With The Pixma iP4200, iP5200, iP5200R, iP6600D, MP500, MP800 Printers', 16.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (49, 1, 'Canon Magenta Ink Tank - Magenta - CLI8M', 'Canon Magenta Ink Tank - CLI8M/ Compatible With The Pixma iP4200, iP5200, iP5200R, iP6600D, MP500, MP800 Printers', 16.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (50, 1, 'Canon Cyan Photo Ink Cartridge - Cyan - CLI8PC', 'Canon Cyan Photo Ink Cartridge - CLI8PC/ Compatible With The Pixma iP6600D Printer', 16.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (51, 1, 'Canon Magenta Photo Ink Cartridge - Magenta - CLI8PM', 'Canon Magenta Photo Ink Cartridge - CLI8PM/ Compatible With The Pixma iP6600D Printer', 16.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (52, 1, 'Canon Yellow Ink Cartridge - Yellow - CLI8Y', 'Canon Yellow Ink Cartridge - CLI8Y/ Compatible With The Pixma iP4200, iP5200, iP5200R, iP6600D, MP500, MP800 Printers', 16.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (53, 1, 'Canon Black Ink Cartridge - Black - PG40BK', 'Canon Black Ink Cartridge - PG40BK/ Compatible With The Pixma iP1600, MP170 Printers', 19.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (54, 1, 'Pioneer Voice Command Pack - Black Finish - CDVC1', 'Pioneer Voice Command Pack - CDVC1/ Microphone And Steering Wheel Remote Control/ Use Your Voice To Control Navigation, Audio, And Video Functions/ Compatible With AVICN2 And AVICN1', 48.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (55, 1, 'Sony VAIO Neoprene Notebook With AC Adapter Case - Black Finish - VGPAMC2', 'Sony VAIO Neoprene Notebook With AC Adapter Case - VGPAMC2/ Helps Protect Your Notebook From Scratches, Spills And Dings/ Neoprene Offers Durable, Water-Resistant Protection/ Fits 17'' Widescreen Notebooks', 24.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (56, 1, 'NetGear ProSafe 24 Port Smart Switch - FS726TP', 'NetGear ProSafe 24 Port Smart Switch - FS726TP/ Two Gigabit Ports Plus Easy Browser/ ProSafe Network Management Software/ Web Based Smart Management Features', 605.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (57, 1, 'Garmin StreetPilot C330 Dash Mount - Black Finish - 0101061300', 'Garmin StreetPilot C330 Dash Mount - 0101061300/ Non-Skid Mount Design/ Fully Portable/ Includes 12/24 Volt Cigarette Lighter Adapter/ Black Finish', 57.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (58, 1, 'Yamaha High Performance Subwoofer - Black Finish - YSTFSW100BK', 'Yamaha High Performance Subwoofer - YSTFSW100BK/ 130 Watts Dynamic Power/ Advanced YST II (Yamaha Active Servo Technology)/ Half Pipe Port/ Powerful 6.5? Multi-Range Driver/ Magnetically Shielded/ 16Hz Ultra Low Frequency Reproduction/ Slim Design/ Black Finish', 150.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (59, 1, 'Netgear ProSafe 16 Port 10/100 Desktop Switch - Purple Finish - FS116P', 'Netgear ProSafe 16 Port 10/100 Desktop Switch - FS116P/ 16 Auto Speed-Sensing 10/100 RJ-45 Ports/ 96 KB Embedded Memory Per Unit', 299.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (60, 1, 'Canon High Capacity Color Ink Cartridge - Color Ink - CL51', 'Canon High Capacity Color Ink Cartridge - CL51/ Compatible With Pixma iP6210D, iP6220D, MP150, MP170 And MP450 Printers', 35.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (61, 1, 'Canon Photo Ink Cartridge - CL52', 'Canon Photo Ink Cartridge - CL52/ Compatible With Pixma iP6210D And iP6220D Printers', 25.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (62, 1, 'Cuisinart Programmable Coffeemaker - Stainless Steel Finish - DCC2000', 'Cuisinart 12-Cup Programmable Coffeemaker - DCC2000/ Fully Programmable/ Removable Coffee Reservoir/ Easy-To-Read Coffee Gauge/ Visible Water Level Indicator/ Removable Drip Tray/ Charcoal Water Filter/ Stainless Steel Finish', 100.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (63, 1, 'Sanus Center Channel Speaker Mount - Black Finish - VMCC1B', 'Sanus Center Channel Speaker Mount - VMCC1B/ Works With Sanus Models VMSA, VMAA18, VMAA26, VMDD26 And VMCM1/ Easy To Install/ Mounting Hardware Included/ Black Finish', 99.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (64, 1, 'Netgear RangeMax Wireless Access Point - White Finish - WPN802NA', 'Netgear RangeMax Wireless Access Point - WPN802NA/ Improves Performance Of Existing Legacy 802.11b And 802.11g Wireless Devices Up To 50 Percent/ Wired Equivalent Privacy (WEP) 64-Bit,128-Bit Encryption/ Wi-Fi Protected Access (WPA, Pre-Shared Key)', 130.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (65, 1, 'Weber Q 300 Liquid Propane Outdoor Grill - 426001', 'Weber Q 300 Liquid Propane Outdoor Grill - 426001/ Liquid Propane Fuel Type/ Two Burners For Direct And Indirect Cooking/ Thermometer Built Into The Lid/ Regulator Hose/ 12-Pound Turkey Capacity/ Cart Included/ Cast Aluminum Finish/ Assembly Required', 349.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (66, 1, 'Sony Lightweight Tripod - Black Finish - VCTR100', 'Sony Lightweight Tripod - VCTR100/ Lightweight And Portable/ Expands From 14'' To 39''/ 3-Way Panhead Function/ Black Finish', 34.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (67, 1, 'Sanus VMAV Black VisionMount Component Wall Shelf VMAVB In Black - VMAVB', 'Sanus VMAV Black VisionMount Component Wall Shelf - VMAVB/ Single Wall Mount Shelf For Audio-Video Component/ Metal V Arm/ Black Finish', 34.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (68, 1, 'Sony PlayStation 2 DUALSHOCK 2 Analog Controller - Emerald Finish - 711719706205', 'Sony PlayStation 2 DUALSHOCK 2 Analog Controller - 711719706205/ Analog Pressure Sensitivity On All Action Buttons/ Built-In DUALSHOCK Vibration Function/ Twin Analog Control Sticks/ Intelligent Self-Calibrating Analog System/ Emerald Finish', 24.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (69, 1, 'Sony PlayStation 2 8MB Memory Card - Black Finish - 711719702702', 'Sony PlayStation 2 8MB Memory Card - 711719702702/ Save And Load High Scores, Positions And Replays/ MagicGate Encryption/ Black Finish', 24.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (70, 1, 'Sony PlayStation 2 8MB Memory Card (2 Pack) - Red/Blue Finish - 711719706700', 'Sony PlayStation 2 8MB Memory Card (2 Pack) - 711719706700/ Save And Load High Scores, Positions And Replays/ MagicGate Encryption/ Red/Blue Finish', 34.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (71, 1, 'Universal RF Series MasterControl Remote Control - RF20', 'Universal RF Series MasterControl Remote Control ? RF20/ Control Up To 10 Components/ 432 MacroPower Buttons/ Customizable LCD Screen/ Pre-Programmed Codes/ Learning Capable/ SimpleSound/ Fully Backlit Keypad/ DVD Guide', 79.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (72, 1, 'Panasonic Network Camera - White Finish - BLC1A', 'Panasonic Network Camera - BLC1A/ Automatic Network Configuration/ Built-In Calendar Timer/ Auto Time Adjustment With NTP/ Up To 10x Digital Zoom/ Multi-Language Interface/ White Finish', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (73, 1, 'Pioneer 6.5'' 2-Way Marine White Speakers - TSMR1640', 'Pioneer 6.5'' 2-Way Marine Speakers - TSMR1640/ 160 Watts Maximum Power Handling (30 Watts Nominal)/ 1-1/8'' Poly-Ether Imide Dome Tweeter With Magnetic Fluid And Equalizer/ Tinsel Lead Wire And Terminals Are Gold-Plated For Extra Protection', 120.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (74, 1, 'Apple USB Modem - White Finish - MA034ZA', 'Apple USB Modem - MA034ZA/ Supports Caller ID, Wake On Ring, Telephone Answering (V.253), Modem On Hold/ V.92 Software Support', 54.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (75, 1, 'Linksys EtherFast 4124 24-Port Ethernet Switch - EF4124', 'Linksys EtherFast 4124 24-Port Ethernet Switch - EF4124/ 24 Autosensing 10/100 Full Duplex, Auto MDI/MDI-X Ports/ Up To 200Mbps/ Address Learning, Aging And Data Flow Control/ Compact Size', 119.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (76, 1, 'Sony DVD Remote Control For PS2 - Black Finish - 711719707608', 'Sony DVD Remote Control For PS2 - 711719707608/ Works As A Full-Featured Standard Controller/ Performs Audio Track Selection, Subtitle Display And Multiangle Options/ Designed To Match The Sleek Look Of PlayStation 2', 19.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (77, 1, 'Nikon 55-200MM Zoom-Nikkor Lens Accessory - 2156', 'Nikon 55-200MM Zoom-Nikkor Lens Accessory - 2156/ 3.6X Zoom/ 55 - 200MM/ Silent Wave Motor/ Two ED Glass Elements/ Focus Mode Switch', 199.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (78, 1, 'Waring Professional Cool-Touch Deep Fryer - Black/Stainless Steel Finish - DF100', 'Waring Professional Cool-Touch Deep Fryer - DF100/ Large Frying Basket/ 60-Minute Timer/ Removable Control Panel/ Unique Heating Element/ Breakaway Cord/ LED Power Indicators', 70.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (79, 1, 'Denon Fully Automatic Analog Turntable - DP300F', 'Denon Fully Automatic Analog Turntable - DP300F/ Removable Headshell/ Automatic Startup/ Built-In Phono Equalizer/ DC Servo Motor And Belt Drive System/ MM Cartridge', 329.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (80, 1, 'Terk Mini Tuner Cartridge For XM Ready Home Products - CNP2000', 'Terk Mini Tuner Cartridge For XM Ready Home Products - CNP2000/ Connects To Any Home Or Portable Audio Product With The XM Ready Logo', 29.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (81, 1, 'Panasonic Plain Paper Fax/Copier With Cordless Phone Answering System - Grey Finish - KXFG2451', 'Panasonic Plain Paper Fax/Copier With Cordless Phone Answering System - KXFG2451/ Automatic Fax/Phone Switching/ 2.4GHz GigaRange Cordless Handset With Handset Speakerphone/ Voice Enhancer Technology/ All-Digital Answering System (18 Min)/ Navigator Key With 2-Line Display', 119.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (82, 1, 'Omnimount Moda 2 Shelf Wall Furniture - MWFS', 'Omnimount Moda 2 Shelf Wall Furniture - MWFS/ Modular Design/ Integrated Cable Management/ Tempered Glass Shelves', 299.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (83, 1, 'Terk Mini Tuner Home Dock For XM Ready Home Products - Black Finish - CNP2000H', 'Terk Mini Tuner Home Dock For XM Ready Home Products - CNP2000H/ Comes Complete With The Docking Station, Protective Cover And A Window Sill Mount Antenna/ Interfaces To Existing And Future XM Ready Products', 30.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (84, 1, 'Denon 5-Disc CD Auto Changer - Black Finish - DCM290', 'Denon 5-Disc CD Auto Changer - DCM290/ CD-R/RW Playback/ Advanced Multilevel Noise Shaping DAC/ Digital Filter/ 3-Mode Random Playback/ Intelligent Disc Scan/ Music Calendar Display/ Black Finish', 249.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (85, 1, 'Denon 5 Disc CD Player - Black Finish - DCM390', 'Denon 5 Disc CD Player - DCM390/ CD-R/RW Playback/ MP3, WMA And HDCD Decoding/ Advanced Multilevel Noise Shaping DAC/ 8 Times Oversampling Digital Filter/ 3 Mode Random Playback/ Intelligent Disc Scan/ 20 Selection Music Calendar Display/ Black Finish', 349.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (86, 1, 'Denon Progressive Scan Universal DVD Player - DVD2930CI', 'Denon Progressive Scan Universal DVD Player - DVD2930CI/ AC 120 Volts/ 60 Hertz/ 45 Watts/ Infrared Pulse Remote Control', 849.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (87, 1, 'Netgear Prosafe 16 Port 10/100 Rackmount Switch - Black Finish - JFS516NA', 'Netgear Prosafe 16 Port 10/100 Rackmount Switch - JFS516NA/ Sixteen Switched Ports Provide Private Bandwidth For PCs, Servers Or Hubs/ Store-And-Forward Packet Switching/ Compatible With All Major Network Software/ Auto Detects Speed And Duplex/ Black Finish', 131.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (88, 1, 'Terk XM Outdoor Home Antenna - Grey Finish - XM6', 'Terk XM Outdoor Home Antenna - XM6/ Universal Mounting Roof, Wall Or Mast/ For Use With Single-Input Receivers/ Connects RG6 Cable For Easy Routing Up To 100 Ft. (Optimal Disatnce 75 Ft.)', 80.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (89, 1, 'Sanus 9'' - 17'' VisionMount Series Under Cabinet Flat Panel TV Silver Wall Mount - VMUC1S', 'Sanus 9'' - 17'' VisionMount Series Under Cabinet Flat Panel TV Silver Wall Mount - VMUC1S/ Tilting Motion/ Swivels Left And Right/ Universal Mounting Bracket/ Easy To Install/ Silver Finish', 99.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (90, 1, 'Sanus 15'' - 40'' VisionMount Flat Panel TV Black Wall Mount - MT25B1', 'Sanus 15'' - 40'' VisionMount Flat Panel TV Black Wall Mount - MT25B1/ Solid Heavy-Gauge Steel Construction/ Durable Powder-Coated Finish/ Virtual Axis Tilt Adjustment System/ Up to 100 Lbs Support/ Black Finish', 99.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (91, 1, 'Garmin GPS Carrying Case - Black Finish - 0101070400', 'Garmin GPS Carrying Case - 0101070400/ Protect Your GPS By Absorbing The Impact From Routine Drops/ Prevent Damage From Scratches And Spills', 30.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (92, 1, 'Tech Craft Avalon Series TV Stand - Black Finish - ABS32', 'Tech Craft Avalon Series TV Stand - ABS32/ 32'' Wide ''Tall Boy'' For Smaller Screen Flat Panels/ Molded Top Gives It An Elegant Appearance/ Framed Doors To Conceal Components/ Black Finish', 249.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (93, 1, 'Tech Craft Avalon Series TV Stand - SWP48', 'Tech Craft Avalon Series TV Stand - SWP48/ 48'' Wide Credenza For Flat Panel TVs And DLPs/ 260 Lbs TV Weight Capacity/ 50 Lbs Shelf Weight Capacity/ Wood Veneer Finish', 299.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (94, 1, 'Sanus 15'' - 40'' VisionMount Flat Panel TV Black Wall Mount - MF110B', 'Sanus 15'' - 40'' VisionMount Flat Panel TV Black Wall Mount - MF110B/ Mounts Within 2.5'' Of Wall/ Holds Up To 100 Lbs/ Powder Coated Black Finish', 179.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (95, 1, 'Garmin Nuvi 360 010-10815-00 Black Replacement Vehicle Suction Cup Mount - 0101081500', 'Garmin Nuvi 360 010-10815-00 Black Replacement Vehicle Suction Cup Mount - 0101081500/ Compatible With The Nuvi 360/ It Is A Replacement/ Black Finish', 39.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (96, 1, 'Garmin Nuvi 360 010-10723-06 Black 12 Volt Adapter Cable - 0101072306', 'Garmin Nuvi 360 010-10723-06 Black 12 Volt Adapter Cable - 0101072306/ Compatible With The Nuvi 350 And 360/ It Is A Replacement/ Black Finish', 47.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (97, 1, 'Garmin Nuvi 660 010-10747-03 Black 12 Volt Adapter Cable - 0101074703', 'Garmin Nuvi 660 010-10747-03 Black 12 Volt Adapter Cable - 0101074703/ Compatible With The Nuvi 660/ Black Finish', 39.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (98, 1, 'Garmin 010-10702-00 Black GA 25MCX Remote GPS Antenna - 0101070200', 'Garmin 010-10702-00 Black GA 25MCX Remote GPS Antenna - 0101070200/ Built-In Magnetic Mount/ Includes A Cable Over 8 Feet Long And MCX Connector', 30.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (99, 1, 'Garmin 010-10823-00 Black Nuvi 660 Vehicle Suction Cup Mount - 0101082300', 'Garmin 010-10823-00 Black Nuvi 660 Vehicle Suction Cup Mount - 0101082300/ Replacement Suction Cup Mount/ Compatible With Nuvi 660/ Black Finish', 46.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (100, 1, 'Universal MRF-350 RF Black Base Station - MRF350', 'Universal MRF-350 RF Black Base Station - MRF350/ No More Pointing/ RF Addressable/ IR Routing/ Expand Operating Range Up To 100 Feet/ Compatible With MX-3000, TX-1000, MX-950 And MX-900 Only/ Black Finish', 250.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (101, 1, 'Bose In-Ear Black Headphones - BOSEIE', 'Bose In-Ear Black Headphones - BOSEIE/ Comfortable In-Ear Design/ TriPort Acoustic Headphone Structure/ S, M And L Removable Silicone Tips/ Carrying Case/ Black Finish', 99.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (102, 1, 'Nyko PlayStation 3 Dual Charger AC - 743840830153', 'Nyko PlayStation 3 Dual Charger AC - 743840830153/ Charge 2 Wireless PS3 Controllers From A Standard Wall Outlet/ Collapsable Prongs For Easy Storage/ Charges Other Mini USB Devices', 24.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (103, 1, 'Nyko PlayStation 3 ChargeLink USB Charging Cable - 743840830009', 'Nyko PlayStation 3 ChargeLink USB Charging Cable - 743840830009/ Charge And Play At The Same Time/ Unique Woven Cable Shielding Improves Cable Durability/ 10 Ft Cable', 14.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (104, 1, 'Linksys Wireless-G VPN Broadband Silver Router - WRV54G', 'Linksys Wireless-G VPN Broadband Silver Router - WRV54G/ Built-In VPN Endpoint Capability/ Securely Connect Up To 50 Remote Or Traveling Users To Your Office Network Via VPN/ Hotspot Ready With Subscriber Registration, Authorization And Authentication Functions/ Silver Finish', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (105, 1, 'Bose SL2 Wireless Black Surround Link - SL2WIRELESS', 'Bose SL2 Wireless Black Surround Link - SL2WIRELESS/ Transmitter And Receiver Work On A Radio Frequency Signal Effective From Up To 30 Feet In The Same Room/ Compatible With All Lifestyle Systems, CD-Based Models And All 5.1-Channel Acoustimass Home Entertainment Systems/ Black Finish', 249.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (106, 1, 'Sony Digital Photo Printer Paper 120 Pack - SVMF120P', 'Sony Digital Photo Printer Paper 120 Pack - SVMF120P/ 4'' x 6'' Print Paper With Snap-Off Edges/ Super Coat 2 Protective Lamination/ Water Damage And Fingerprint Resistant Prints/ 120 Sheets Of Paper And Print Ribbon/ For DPPF Series Digital Photo Printers Only', 35.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (107, 1, 'Canon PGI-5BK Black Ink Tank Cartridge - PGI5BK', 'Canon PGI-5BK Black Ink Tank Cartridge - PGI5BK/ Smudge Resistant/ Resists Smearing Caused By Highlighters/ Smudge Resistant/ Pigment Ink Formulation For Long Lasting Prints', 16.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (108, 1, 'Lowepro SlingShot 200 AW Digital Camera Back Pack - SLINGSHOT200AW', 'Lowepro SlingShot 200 AW Digital Camera Back Pack - SLINGSHOT200AW/ Holds A SLR With Attached Compact Zoom Lens Plus 3-4 Extra Lenses Or Flash Unit/ Water-Resistant Micro Fiber/ Ripstop Nylon/ Includes A Built-In Memory Card Puch, Micro Fiber LCD Cloth And Two Organizer Pockets', 89.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (109, 1, 'Tech Craft ABS48 Antique Black Avalon Series 48'' TV Stand - ABS48', 'Tech Craft ABS48 Antique Black Avalon Series 48'' TV Stand - ABS48/ For Flat Panels And DLP TV?s/ Molded Top And Shaped Skirt/ Framed Doors/ Antique Black Distressed Finish', 299.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (110, 1, 'Garmin 010-10723-03 Nuvi Suction Cup Mount - 0101072303', 'Garmin 010-10723-03 Nuvi Suction Cup Mount - 0101072303/ Replacement Suction Cup Mount/ Compatible With Garmin Nuvi 300/310/350/360 GPS System/ Black Finish', 39.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (111, 1, 'Weber Stainless Steel Summit S-650 Liquid Propane Grill - 1780001', 'Weber Stainless Steel Summit S-650 Liquid Propane Grill - 1780001/ 6 Stainless Steel Burners/ 60,000 BTU-Per-Hour Input/ 12,000 BTU-Per-Hour Input Side Burner/ 10,600 BTU-Per-Hour Rotisserie Burner/ 8,000 BTU-Per-Hour Input Smoker Burner/ Snap-Jet Individual Burner Ignition System/ 3/8-Inch Diameter Stainless Steel Rod Cooking Grates/ Stainless Steel Flavorizer Bars/ Stainless Steel Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 1999.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (112, 1, 'Weber Stainless Steel Genesis S-310 Liquid Propane Grill - 3770001', 'Weber Stainless Steel Genesis S-310 Liquid Propane Grill - 3770001/ 3 Stainless Steel Burners/ 42,000 BTU-Per-Hour Input/ Electronic Crossover Ignition System/ 7MM Diameter Stainless Steel Rod Cooking Grates/ Stainless Steel Flavorizer Bars/ Stainless Steel Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 899.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (113, 1, 'Weber Stainless Steel Genesis S320 LP Grill - 3780001', 'Weber 3780001 Stainless Steel Genesis S-320 Liquid Propane Grill - 3780001/ 3 Stainless Steel Burners/ 42,000 BTU-Per-Hour Input/ 12,000 BTU-Per-Hour Input Side Burner/ Electronic Crossover Ignition System/ 7MM Diameter Stainless Steel Rod Cooking Grates/ Stainless Steel Flavorizer Bars/ Stainless Steel Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 949.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (114, 1, 'Weber Stainless Steel Genesis S320 Natural Gas Grill - 3880001', 'Weber Stainless Steel Genesis S-320 Natural Gas Grill - 3880001/ 3 Stainless Steel Burners/ 42,000 BTU-Per-Hour Input/ 12,000 BTU-Per-Hour Input Side Burner/ Electronic Crossover Ignition System/ 7MM Diameter Stainless Steel Rod Cooking Grates/ Stainless Steel Flavorizer Bars/ Stainless Steel Finish/ Natural Gas Model/ Assembly Required', 969.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (115, 1, 'Kenwood KCA-IP300V iPod Video Direct Cable - KCAIP300V', 'Kenwood KCA-IP300V iPod Video Direct Cable - KCAIP300V/ iPod Video Direct Cable For DNX7100, DDX7019 And KVT719DVD Indash Monitors', 49.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (116, 1, 'Sony SCPH-98046 PlayStation 3 Blu-Ray DVD Remote Control - 711719804604', 'Sony SCPH-98046 PlayStation 3 Blu-Ray DVD Remote Control - 711719804604/ Full Access To The PlayStation 3 Systems Disc Features/ Can Be Used Without Having To Point Directly At The System', 24.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (117, 1, 'Tripp-Lite PV375 PowerVerter 375-Watt Ultra-Compact Inverter - PV375', 'Tripp-Lite PV375 PowerVerter 375-Watt Ultra-Compact Inverter - PV375/ 12V DC Input/ 120V AC Output/ 2 Outlets/ 375 Watts Continuous Output/ 600 Watts Peak Output/ Convenient Cigarette Lighter Plug', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (118, 1, 'Sirius FMDA25 Wired FM Modulation Relay - FMDA25', 'Sirius FMDA25 Wired FM Modulation Relay - FMDA25/ 2 Ft FM Antenna Cable/ 19 Ft 4 In Mini-Jack Cable', 20.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (119, 1, 'Electrolux Oxygen 3 Canister HEPA H12 Filter - EL012A', 'Electrolux Oxygen 3 Canister HEPA H12 Filter - EL012A/ Retains 99.5% Of Dust And Other Irritants/ 1 Filter Per Package', 19.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (120, 1, 'Fellowes Confetti Cut Shredder - W11C', 'Fellowes Confetti Cut Shredder - W11C/ Shreds Up To 11 Sheets Per Pass/ Safely Shreds Staples And Credit Cards/ 9'' Paper Entry Accepts Any Standard Or Legal Size Document/ Safety Interlock Switch Automatically Powers Off When Shredder Head Is Lifted', 79.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (121, 1, 'Sony VAIO VGP-PRSZ1 SZ Series Docking Station - VGPPRSZ1', 'Sony VAIO VGP-PRSZ1 SZ Series Docking Station - VGPPRSZ1/ Compatible With SZ Series Notebooks/ Expand Connectivity To Your Notebook/ 3 USB 2.0, Gigabit Ethernet, VGA, DVI-D And DC In/ Black Finish', 199.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (122, 1, 'Weber Genesis E-310 Liquid Propane Black Outdoor Grill - 3741001', 'Weber Genesis E-310 Liquid Propane Black Outdoor Grill - 3741001/ 3 Stainless Steel Burners/ 42,000 BTU Per-Hour Input/ Electronic Crossover Ignition System/ Porcelain Enameled Cast Iron Cooking Grates/ 2 Stainless Steel Work Surfaces/ Center Mounted Thermometer/ Cast Aluminum End Caps/ Black Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 699.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (123, 1, 'Weber Genesis S-310 Natural Gas Stainless Steel Outdoor Grill - 3870001', 'Weber Genesis S-310 Natural Gas Stainless Steel Outdoor Grill - 3870001/ 3 Stainless Steel Burners/ 42,000 BTU-Per-Hour Input/ Electronic Crossover Ignition System/ Center Mounted Thermometer/ Cast Aluminum End Caps/ 2 Heavy Duty Front Locking Casters/ Stainless Steel Finish/ Assembly Required', 919.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (124, 1, 'DeLonghi Magnifica Super-Automatic Espresso/Coffee Machine - ESAM3300', 'DeLonghi Magnifica Super-Automatic Espresso/Coffee Machine - ESAM3300/ Stainless-Steel Removable Double Boiler/ Instant Reheat/ Removable Water Tank And Bean Container/ Integrated Burr Grinder/ Cappuccino System/ Cup Tray/ Silver Finish', 799.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (125, 1, 'Yamaha Silver USB Powered Stereo Speaker - NXU10SIL', 'Yamaha NX-U10 Silver USB Powered Stereo Speaker - NXU10SIL/ 20 Watts Output Power/ PowerStorage Circuit/ SR-Bass (Swing Radiator Bass) Technology/ Magnetic Shielding/ Mac And Windows Compatible/ Silver Finish', 180.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (126, 1, 'Canon FAX-JX200 Inkjet Fax Machine - FAXJX200', 'Canon FAX-JX200 Inkjet Fax Machine - FAXJX200/ Automatic Document Feeder/ Produce B&W Copies With Clear, Sharp Text/ One-Touch Dialing/ Ultra-High Quality (UHQ) Image Processing Technology/ 600 x 600 Dpi Copy Resolution/ White Finish', 78.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (127, 1, 'Weber Genesis E-310 Natural Gas Black Outdoor Grill - 3841001', 'Weber Genesis E-310 Natural Gas Black Outdoor Grill - 3841001/ 3 Stainless Steel Burners/ 42,000 BTU Per-Hour Input/ Electronic Crossover Ignition System/ Porcelain Enameled Cast Iron Cooking Grates/ 2 Stainless Steel Work Surfaces/ Center Mounted Thermometer/ Cast Aluminum End Caps/ Black Finish/ Assembly Required', 719.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (128, 1, 'Weber 3758301 Blue Genesis EP-320 LP Gas Grill - 3758301', 'Weber 3758301 Blue Genesis EP-320 LP Gas Grill - 3758301/ 3 Seamless Stainless Steel Burners/ 42,000 BTU-Per-Hour Input/ Crossover Ignition System/ Stainless Steel Flavorizer Bars And Grates/ Cast Aluminum End Caps/ Centermounted Thermometer/ Blue Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 749.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (129, 1, 'Panasonic KX-TG6702B 5.8 GHz FHSS GigaRange Expandable Black Cordless Phone System - KXTG6702B', 'Panasonic KX-TG6702B 5.8 GHz FHSS GigaRange Expandable Black Cordless Phone System - KXTG6702B/ All-Digital Answering System/ LCD Call Counter/ Speakerphone/ Navigator Key/ Up To 8 Handsets With Just One Phone Jack/ Line Status Indicator/ Voice Scramble/ Handset Locator/ Volume Control/ Black Finish', 197.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (130, 1, 'Fellowes MicroShred Shredder - MS450CS', 'Fellowes MS-450CS MicroShred Shredder - MS450CS/ 4.5 Gallons Basket Capacity/ Can Shred Paper, CDs, Credit Cards, Staples, Paper Clips/ Motor Reverse/ Interlock Switch/ Safe Sense/ 7 Sheet Capacity', 189.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (131, 1, 'Sony MRW62E/S1/181 17-In-1 External USB Memory Card Reader - MRW62ES1181', 'Sony MRW62E/S1/181 17-In-1 External USB Memory Card Reader - MRW62ES1181/ Supports 17 Different Memory Card Formats/ Works With Macintosh And Windows Computers/ Easy Hi-Speed USB 2.0 Connection/ Black Finish', 29.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (132, 1, 'Griffin Elevator Brushed Aluminum Laptop Stand - 1093CURV2', 'Griffin Elevator Brushed Aluminum Laptop Stand - 1093CURV2/ Elevates Laptop Screen 5.5'' While Providing Valuable Desktop Real Estate For Your Keyboard And Mouse/ Keeps Laptop Cool With 360 Degrees Of Air Circulation/ Compatible With Mac Or PC Laptop', 39.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (133, 1, 'Escort Passport 9500I Radar And Laser Detector - 9500I', 'Escort Passport 9500I Radar And Laser Detector - 9500I/ 360-Degree Radar And Laser Detection/ Blistering All-Band Protection/ GPS-Powered Truelock Filter/ Immune To The VG-2 ''Detector-Detector''/ Built-In Earphone Jack/ Red Display', 449.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (134, 1, 'Panasonic Countertop Microwave Oven In Black - NNSN667BK', 'Panasonic NN-SN667B Countertop Microwave Oven In Black - NNSN667BK/ 1.2 Cubic Foot/ 1300 Watts High Power/ 10 Power Levels/ 5 Cooking Stages/ Quick Minute/ One-Touch Sensor Cooking/ Inverter Turbo Defrost/ Multi-Lingual Menu Action Screen/ Popcorn Key/ Black Finish', 129.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (135, 1, 'Panasonic Countertop Microwave Oven In White - NNSN667WH', 'Panasonic NN-SN667W Countertop Microwave Oven In White - NNSN667WH/ 1.2 Cubic Foot/ 1300 Watts High Power/ 10 Power Levels/ 5 Cooking Stages/ Quick Minute/ One-Touch Sensor Cooking/ Inverter Turbo Defrost/ Multi-Lingual Menu Action Screen/ Popcorn Key/ White Finish', 129.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (136, 1, 'Samsung DLP TV Stand In Black - TR72BX', 'Samsung DLP TV Stand In Black - TR72BX/ Designed To Fit Samsung HLT7288 HLT7288, HL72A650, and HL67A650 Television Sets/ Tempered 6mm Tinted Glass Shelves/ Wide Audio Storage Shelves To Accommodate 4 Or More Components/ Wire Management System/ Easy To Assemble/ High Gloss Black Finish', 369.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (137, 1, 'Sony Black Active Speaker System - SRSA212BK', 'Sony Black Active Speaker System - SRSA212BK/ Designed For Your Portable Audio Or PC/ Built-In Mega Bass/ On/Off Switch With Volume Control/ Magnetically Shielded/ Black Finish', 29.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (138, 1, 'Panasonic Expandable Digital Cordless DECT 6.0 Handset In Silver - KXTGA101S', 'Panasonic Expandable Digital Cordless DECT 6.0 Handset In Silver - KXTGA101S/ Expansion Handset And Charger Select 1000 Series Phone Systems/ Big Buttons/ Built-In Clock With Alarm/ Silver Finish', 39.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (139, 1, 'Tech Craft Dark Cherry Veneto Series TV Stand - SWP60', 'Tech Craft Dark Cherry Veneto Series TV Stand - SWP60/ 60'' Wide Credenza For Flat Panel TV?s And DLP?s/ Center Channel Compartment And Storage/ 260 Lbs TV Capacity/ 50 Lbs Shelf Capacity/ Dark Cherry Wood Veneer Finish', 399.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (140, 1, 'Haier 13'' Silver Tube TV - HTR13', 'Haier 13'' Silver Tube TV - HTR13/ Built-In Atsc/Ntsc Tuner/ Video Noise Reduction/ Multi Picture Modes/ Multilingual Display/ Digital Comb Filter/ Component Video Input/ Front AV Jacks/ Silver Finish', 124.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (141, 1, 'Sony Memory Stick USB Adaptor - MSACUS40', 'Sony Memory Stick USB Adaptor - MSACUS40/ Quickly Transfer Image And Data To A PC/ Transfer Speed Up To 80Mbps/ Compatible With All Memory Stick Media', 29.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (142, 1, 'Sony Clip-On Black Headphones - MDRQ68LW', 'Sony Clip-On Black Headphones - MDRQ68LW/ Lightweight And Thin Body For Stable Fitting/ Retractable Silent Cord/ 3.3 Ft. Cord/ Gold Plated Mini-Plug/ Black Finish', 29.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (143, 1, 'Netgear ProSafe 24-Port Smart Switch - GS724TP', 'Netgear ProSafe 24-Port Smart Switch - GS724TP/ 24 10/100/1000 Ports That Support 802.3af PoE/ 2 Combo Gigabit Copper/SFP Slots/ Web-Based Configuration/ Password Access Control/ Purple Finish', 780.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (144, 1, 'Sharp Over The Counter White Microwave Oven - R1211WH', 'Sharp Over The Counter White Microwave Oven - R1211WH/ 1.5 Cu. Ft. Capacity/ 1100 Watts/ 19 Automatic Settings/ 2-Color Lighted LCD/ Smart And Easy Sensor Settings/ Auto-Touch Control Panel/ White Finish', 269.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (145, 1, 'Monster iFreePlay Cordless Headphones For iPod Shuffle - AISHHPHONE', 'Monster iFreePlay Cordless Headphones For iPod Shuffle - AISHHPHONE/ Wrap-Around Design With No Need For Clips, Armbands Or Pockets/ Easy Access To All iPod Shuffle Controls/ Folds For Compact Storage/ Black With Silver Finish', 48.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (146, 1, 'Canon Black Ink Cartridge - PG50', 'Canon Black Ink Cartridge - PG50/ Pigment Ink Formulation For Long Lasting Prints/ Resists Smearing Caused By Highlighters/ Smudge Resistant/ Ink Remaining Notification Technology/ Crisp Laser Text-Quality Text/ Black Ink', 29.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (147, 1, 'Audiovox Xpress XM Satellite Radio FM Direct Adapter - XMFM1', 'Audiovox Xpress XM Satellite Radio FM Direct Adapter - XMFM1/ Switches Between FM Radio Antenna And Your XM Satellite Radio Receiver', 25.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (148, 1, 'Panasonic NNSD797S Stainless Steel Countertop Microwave Oven - NNSD797SS', 'Panasonic NNSD797S Stainless Steel Countertop Microwave Oven - NNSD797SS/ 1.6 Cu. Ft. Capacity/ 1250W Output Power/ 10 Power Levels/ 5 Cooking Stages/ One-Touch Sensor Cooking Or Heating/ Timer/ Stainless Steel Finish', 199.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (149, 1, 'Apple Mac Mini 1.83GHz Intel Core 2 Duo Computer - MB138LLA', 'Apple Mac Mini 1.83GHz Intel Core 2 Duo Computer - MB138LLA/ 1.83GHz Intel Core 2 Duo/ 1GB Memory/ 80GB Hard Drive/ 24x Combo Drive/ Built-In Speakers/ Four USB 2.0 Ports And One FireWire 400 Port/ Mac OS X v10.5 Leopard', 599.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (150, 1, 'Denon 7.1 Channel Home Theater MultiMedia A/V Receiver With Networking And WiFi - AVR4308CI', 'Denon 7.1 Channel Home Theater MultiMedia AV Receiver With Networking And WiFi In Black - AVR4308CI/ 140 Watts x 7 Channels/ Wi-Fi And Network Capable/ Worlds First Vista Certified Receiver/ HD Radio And XM Ready Tuning/ Dolby TrueHD And DTS-HD Master Audio/ DDSC-HD Digital Dynamic Discrete Surround Circuitry/ Expanded HDMI v1.3a Ports/ Dual Remotes/ Black Finish', 2699.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (151, 1, 'Denon 7.1 Channel Home Theater MultiMedia A/V Receiver With Networking In Black - AVR3808CI', 'Denon 7.1 Channel Home Theater MultiMedia AV Receiver With Networking In Black - AVR3808CI/ 130 Watts x 7 Channels/ Fully Assignable Channels For Bi-Amping/ Rear Panel RS-232C And Ethernet Ports/ Network Capable/ XM Ready Tuning/ Dolby TrueHD And DTS-HD Master Audio/ Expanded HDMI v1.3a Ports/ Dual Remotes/ Black Finish', 1699.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (152, 1, 'Denon X-Space Surround Bar Home Theatre System In Black - DHTFS3', 'Denon X-Space Surround Bar Home Theatre System In Black - DHTFS3/ 22 Watts x 5 (6 Ohms)/ Supports All Audio Formats (Dolby Digital, DTS, Dolby Pro Logic II)/ Slim Design/ Includes Dolby Headphones/ Included Subwoofer Features One-Touch Connection/ Remote Control/ Black Finish', 1199.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (153, 1, 'Apple Wireless Mighty Mouse - MB111LLA', 'Apple Wireless Mighty Mouse - MB111LLA/ Bluetooth Technology/ Laser Tracking Engine/ 360-Degree Innovative Scroll Ball And Button/ Touch-Sensitive Top Shell/ Force-Sensing Side Buttons/ Customizable/ White Finish', 69.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (154, 1, 'Sony PSP 2000 Playstation Portable Gaming System Core 98510 In Piano Black - 711719851004', 'Sony PSP 2000 Playstation Portable Gaming System Core 98510 In Piano Black - 711719851004/ Play Games, Watch Movies On UMD Discs, And Listen To Music All In One Device/ 4.3'' LCD Screen (16:9)/ 480 x 272 Pixel/ Wi-Fi (IEEE 802.11b) For Wireless Networking With Other PSP Owners/ Memory Stick PRO Duo/ 333MHz System Clock Frequency/ Piano Black Finish', 185.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (155, 1, 'Apple Mini-DVI To DVI Adapter - M9321GB', 'Apple Mini-DVI To DVI Adapter - M9321GB/ Compatible With iMac (Intel Core Duo), MacBook And 12'' PowerBook G4/ Connects To An External DVI Monitor Or Projector/ White Finish', 19.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (156, 1, 'Olympus DS40 Digital Voice Recorder - DS40R', 'Olympus DS40 Digital Voice Recorder - DS40R/ 136 Hours 15 Minutes Recording Time In LP Mode/ High-Sensitivity Detachable Stereo Microphone/ Voice Guidance/ Three Modes Of Microphone Sensitivity/ Built-In Variable Control Voice Actuator (VCVA) Function/ Up To 32 Hours Of Continuous Operation', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (157, 1, 'Bose Lifestyle 48 Series IV 43479 Home Entertainment System - LS48IVWH', 'Bose Lifestyle 48 Series IV Home Entertainment System - LS48IVWH/ ADAPTiQ Audio Calibration System/ Acoustimass Module/ Jewel Cube Speakers/ Direct/Reflecting Speaker Technology/ VS-2 Video Enhancer/ Proprietary Videostage 5 Decoding Circuitry/ Digital 5.1 Decoding/ Control Integration/ White Finish', 3999.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (158, 1, 'Sony Black DVD Recorder And VHS Combo Player - RDRVXD655', 'Sony Black DVD Recorder And VHS Combo Player - RDRVXD655/ Multiformat DVD Compatible/ HDMI Output And 720p/1080i Upscaling/ HDTV Tuner/ 4 Video Head Stereo VHS With 19 Micron Heads/ Variable Bit Rate Recording (7 Speeds)/ Progressive Scan Playback/ Dolby Digital And DTS Decoding Playback Compatible/ TV Virtual Surround/ Black Finish', 319.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (159, 1, 'Apple 1GB Silver iPod Shuffle - MB225LLA', 'Apple 1GB Silver 2nd Generation iPod Shuffle - MB225LLA/ Holds Up To 240 Songs/ 12 Hours Of Continuous Playback/ Skip-Free Playback/ Battery Indicator/ Shuffle Switch/ Built-In Clip/ Mac And Windows Compatible/ MB226LLA/ Silver Finish', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (160, 1, 'GE 24'' GSD2400NWW White Built-In Dishwasher - GSD2400WH', 'GE 24'' GSD2400NWW White Built-In Dishwasher - GSD2400WH/ 4-Level PowerScrub Wash System/ HotStart Option/ Piranha Hard Food Disposer/ Heated Dry Option/ Self-Cleaning Filter System/ White Finish', 259.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (161, 1, 'Panasonic Expandable Digital Cordless DECT 6.0 Phone System - KXTG1032S', 'Panasonic Expandable Digital Cordless DECT 6.0 Phone System - KXTG1032S/ Up To 17 Hours Of Talk Time/ Expandable Up To 6 Handsets/ Up To 3-Way Conference Capability/ Light-Up Indicator With Ringer/Message Alert/ Backlit LCD On Handset/ Digital Speakerphone/ 16-Minute All-Digital Answering System/ Silver Finish', 69.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (162, 1, 'Panasonic 2 Line Integrated Corded Phone System - KXTSC14B', 'Panasonic 2 Line Integrated Corded Phone System - KXTSC14B/ 3-Line LCD Display/ Automatic Line Selection/ Call Waiting Caller ID/ 3-Way Conferencing/ Speakerphone/ Navigator Key/ Black Finish', 74.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (163, 1, 'Audiovox XpressEZ XM Satellite Radio Receiver - XMCK5P', 'Audiovox XpressEZ XM Satellite Radio Receiver - XMCK5P/ 10 Programmable Channels/ Universal Connector/ 3-Line Screen Display/ Plug & Play Dock/ Black Finish', 69.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (164, 1, 'Panasonic Integrated White Telephone System With All-Digital Answering System - KXTS620W', 'Panasonic Integrated White Telephone System With All-Digital Answering System - KXTS620W/ 2-Way Recording/ Call Waiting Caller ID/ Speakerphone/ 3-Line LCD/ Data Port/ Ringer Indicator Lamp/ Programmable Tone/Pulse/ Wall Mountable/ White Finish', 69.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (165, 1, 'Tech Craft Veneto Series Black TV Stand - ABS60BK', 'Tech Craft Veneto Series Black TV Stand - ABS60BK/ Supports Up To A 60'' Flat Panel TV/ Molded Top Gives It An Elegant Appearance/ Framed Doors To Conceal Components/ 200 Lbs Top Shelf Capacity/ Black Finish', 399.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (166, 1, 'Skagen Premium Steel Slimline Mesh Womens Watch - 233XSGG', 'Skagen Premium Steel Slimline Mesh Womens Watch - 233XSGG/ Stainless Steel Mesh Band/ Elegant Round Case/ Mother-Of-Pearl Dial/ Chrome Indicators', 110.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (167, 1, 'Canon Color Image Silver Scanner - 8800F', 'Canon Color Image Silver Scanner - 8800F/ Resolution Of Up To 4800 x 9600 Color Dpi/ Enhance Old Photos/ Auto-Image Fix/ USB 2.0 Interface/ Multi-Image Scanning/ Windows And Mac Compatible/ Silver Finish', 199.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (168, 1, 'Sony Black LocationFree Base Station - LFV30', 'Sony Black LocationFree Base Station - LFV30/ Watch TV Wherever You Are/ Compatible With PC Or PSP System/ Programmable On-Screen Home Remote/ Stream Outside Your Home/ User-Friendly/ Black Finish', 199.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (169, 1, 'Linksys Wireless-G Broadband Router - WRT54GL', 'Linksys Wireless-G Broadband Router - WRT54GL/ All-In-One Internet-Sharing Router/ 4-Port Switch/ Push Button Setup Feature/ TKIP And AES Encryption/ Wireless MAC Address Filtering/ Powerful SPI Firewall/ 54Mbps Wireless-G (802.11g) Access Point', 79.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (170, 1, 'Universal RF Base Station - MRF260', 'Universal RF Base Station - MRF260/ Extends The Reception Range Up To 100 Feet Away Through Walls, Floors, Doors, Indoors Or Outdoors/ Programmed To Operate Equipment At Up To 15 Locations/ Black Finish', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (171, 1, 'Chestnut Hill Sound George iPod Music System In White - CHS4001', 'Chestnut Hill Sound George iPod Music System In White - CHS4001/ Playback System For The iPod/ Full Feature Wireless Remote/ Charging Stand Kit/ Bandless AM/FM Radio/ Easy Set Alarm/ Detachable Front Panel/ White Finish/ iPod Sold Separately', 499.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (172, 1, 'Sony Universal Remote Control - RMEZ4', 'Sony Universal Remote Control - RMEZ4/ Easy-To-Use Simplified Functions/ Controls TV And Cable Box/ Compatible With Most Of Major Brands/ Large Buttons For Easy Operation/ 3-Minute Memory Backup/ Comfortable Ergonomic Design/ Silver Finish', 16.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (173, 1, 'Sirius SiriusConnect Home Tuner - SCH1', 'Sirius SiriusConnect Home Tuner - SCH1/ Compact Size/ Analog And Digital Audio Outputs/ Display Indicators/ Connects To Any Sirius-Ready Home Audio Component', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (174, 1, 'Sanus 15'' - 32'' Flat Panel TV Black Wall Mount - MF209B1', 'Sanus 15'' - 32'' Flat Panel TV Black Wall Mount - MF209B1 - MF209B1/ Supports Up To 60 lbs/ Easy To Install/ Virtual Axis 3D Tilting System/ Black Finish', 96.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (175, 1, 'Yamaha High Performance Subwoofer In Black - YSTFSW150BK', 'Yamaha High Performance Subwoofer In Black - YSTFSW150BK/ 130 Watts Dynamic Power/ Advanced YST II (Yamaha Active Servo Technology)/ Linear Port/ Powerful 6.5? Multi-Range Driver/ Magnetically Shielded/ 30 -150 Hz Low Frequency Response/ Down-Firing Active Design/ Best Matching For Front Surround Systems And Micro Component Systems/ Black Finish', 279.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (176, 1, 'Kenwood Sirius Radio Translator For In-Dash Head Units - KCASR50', 'Kenwood Sirius Radio Translator For In-Dash Head Units - KCASR50/ Provides Full Control Of The SIRIUS Radio/ Displays Text On The Stereo And Supplies Power To The Satellite Radio', 60.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (177, 1, 'Linksys Wireless-G PrintServer - WPSM54G', 'Linksys Wireless-G PrintServer - WPSM54G/ Share A Multifunction Printer With Everyone On Your Network (Works With Most USB Printers)/ Allows Full Access To Printing, Faxing, Scanning And Copying Functions/ Connects Your Printer Directly To The Network By 10/100 Wired Ethernet Or 54Mbps Wireless-G', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (178, 1, 'Sirius STILETTO 2 Home Docking Kit - SLH2', 'Sirius STILETTO 2 Home Docking Kit - SLH2/ Stereo Audio Output Connects With Home Audio System Or Speakers/ Headphone Jack/ PC Sync/ Compatible With Stiletto 2 Radios/ Charges Stiletto 2 While Docked/ Black Finish', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (179, 1, 'Microsoft Office Standard 2007 - 02107746', 'Microsoft Office Standard 2007 - 02107746/ Create Documents Faster, More Easily And More Intuitively/ Automatic Document Recovery Tool/ Document Inspector/ Online Tutorials With Step-By-Step Instructions/ Compatible With Windows Vista, Windows XP SP2 And Windows Server 2003 SP1', 399.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (180, 1, 'Jabra Black Bluetooth Headset - BT5010', 'Jabra Black Bluetooth Headset - BT5010/ Up To 10 Hours Of Talk Time And 300 Hours Of Stand-By/ Wind-Noise Reduction Technology/ Vibrating And Visual Alerts/ Colored LED Indicator/ Up To 33-Foot Wireless Range/ Black Finish', 79.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (181, 1, 'Kensington Orbit Optical Trackball Mouse - 64327', 'Kensington Orbit Optical Trackball Mouse - 64327/ DiamondEye Optical Technology For Precise Tracking And Cursor Control/ USB And PS/2 Connectivity For Greater Compatibility/ Windows And Mac Compatible/ Metallic Silver And Black Finish', 38.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (182, 1, 'Sirius Stiletto 2 Vehicle Kit - SLV2', 'Sirius Stiletto 2 Vehicle Kit - SLV2/ Designed For Use With The Sirius Stiletto 2/ Get Direct One-Touch Access To Traffic And Weather/ Built-In FM Transmitter To Play Satellite Radio Through Your Cars Audio System', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (183, 1, 'Denon Networked Audio System With Built-In iPod Dock - S32', 'Denon Networked Audio System With Built-In iPod Dock - S32/ Stream Music Wirelessly/ Buit-In Dock For iPod On Top/ Ability To Decode MP3 And WMA Formats/ High Contrast Graphic LCD/ Multi-Task Jog Wheel On Top/ Built-In Speakers/ Clock With 2 Alarms With Auto Clock Set & Adjust Via Internet/ FM/AM Radio/ WiFi Certified/ Remote Control/ Black Finish', 499.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (184, 1, 'Motorola Portable Bluetooth Car Kit Speaker Phone - T305', 'Motorola Portable Bluetooth Car Kit Speaker Phone - T305/ 2.0 Bluetooth Wireless Technology/ Noise Cancellation Technology/ Loud Sound High Speaker Output/ Convenient Multi-Function Button/ Up To 14 Hours Of Talk Time And 14 Days Of Standby Time/ Mini-USB Connector/ Black Finish', 69.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (185, 1, 'Sony HD-Handycam 3 Meters (10 Feet) HDMI Mini Cable - VMC30MHD', 'Sony HD-Handycam 3 Meters (10 Feet) HDMI Mini Cable - VMC30MHD/ Gold Plating Plug/ HDMI-Compliant High Speed Category 2 Cable/ Support Full HD 1080p/ Digital Audio Transfer/ 3 Meters(10 Feet)/ Black Finish', 69.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (186, 1, 'Klipsch Black Wireless iPod Speaker - ROOMGROOVE', 'Klipsch Black Wireless iPod Speaker - ROOMGROOVE/ Wirelessly Sends CD-Quality Music To/From Other RoomGrooves/ Retractable Dock Charges iPods With 30-Pin Connectors/ Horn-Loaded Technology For Precise High Tones/ Dual High-Output Woofers Deliver Room-Filling Bass/ Black Finish', 299.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (187, 1, 'Logitech QuickCam Communicate STX - 961464', 'Logitech QuickCam Communicate STX - 961464/ 640 x 480 Video Capture/ 1.3 Megapixel Still Image Capture/ Built-In Microphone With RightSound Technology/ 30 Frames Per Second/ Adjustable Base Fits Any Monitor Or Notebook/ USB 2.0 Certified', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (188, 1, 'Sirius Plug And Play Universal Home Kit - SUPH1', 'Sirius Plug And Play Universal Home Kit - SUPH1/ Compatible With All Of The Newest SIRIUS Plug & Play Radios/ Stereo Audio Output For Use Your Home Audio System Or Powered Speakers/ Sleek Compact Design/ High Gloss Black Finish', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (189, 1, 'Belkin Hi-Speed USB 2.0 7-Port Hub - F5U237APLS', 'Belkin Hi-Speed USB 2.0 7-Port Hub - F5U237APLS/ Transfers Data Up To 480Mbps/ Installs Easily With Plug-And-Play Convenience/ Works Seamlessly With All USB 1.1 And USB 2.0 Devices/ Over-Current Detection And Safety/ Mac And PC Compatible/ Silver Finish', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (190, 1, 'Netgear Wireless Access Point - WG102', 'Netgear Wireless Access Point - WG102/ High-Speed IEEE 802.11g, Up To 108 Mbps In Turbo Mode/ Wi-Fi Protected Access (WPA 802.11i-Ready Security)/ Integrated IEEE 802.3af Power Over Ethernet (PoE)/ Block SSID Broadcast/ VPN Pass-Through Support', 186.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (191, 1, 'Logitech diNovo Media Desktop Laser Keyboard And Mouse Combo - 967562', 'Logitech diNovo Media Desktop Laser Keyboard And Mouse Combo - 967562/ Unique Ultra-Flat Keyboard/ Detached Customizable MediaPad/ Precision Rechargeable Laser Mouse/ Tilt Wheel Plus Zoom/ Customizable Hotkeys/ Dedicated Search Buttons/ Bluetooth Wireless Technology Compatible/ Black And Gray Finish', 199.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (192, 1, 'Apple 500GB Time Capsule Wireless Hard Drive - MB276LLA', 'Apple 500GB Time Capsule Wireless Hard Drive - MB276LLA/ 500GB 7200-rpm Serial ATA Server-Grade Hard Disk Drive/ Up To 5x The Performance And 2x The Range With 802.11n/ Wi-Fi Protected Access (WPA/WPA2)/ Wireless Security (WEP) Configurable For 40-Bit And 128-Bit Encryption/ NAT Firewall/ AirPort Utility For Mac And Windows', 299.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (193, 1, 'Apple 1TB Time Capsule Wireless Hard Drive - MB277LLA', 'Apple 1TB Time Capsule Wireless Hard Drive - MB277LLA/ 1TB 7200-rpm Serial ATA Server-Grade Hard Disk Drive/ Up To 5x The Performance And 2x The Range With 802.11n/ Wi-Fi Protected Access (WPA/WPA2)/ Wireless Security (WEP) Configurable For 40-Bit And 128-Bit Encryption/ NAT Firewall/ AirPort Utility For Mac And Windows', 499.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (194, 1, 'Garmin Nuvi Portable Friction Mount - 0101090800', 'Garmin Nuvi Portable Friction Mount - 0101090800/ No Installation Required/ Securely Mounts Your GPS To A Surface In Your Car/ Works With All Garmin Nuvi Portable GPS Units/ Black Finish', 39.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (195, 1, 'Garmin Vehicle Suction Cup Mount - 0101093600', 'Garmin Vehicle Suction Cup Mount - 0101093600/ No Installation Required/ Securely Mounts Your GPS To Dash/ Black Finish', 25.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (196, 1, 'Garmin Suction Cup Mount And 12-Volt Adapter Kit - 0101097900', 'Garmin Suction Cup Mount And 12-Volt Adapter Kit - 0101097900/ Suction Cup Mount And 12-Volt Adapter Included', 30.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (197, 1, 'Pioneer Remote Control With DVD/Audio Controls - CDR55', 'Pioneer Remote Control With DVD/Audio Controls - CDR55/ Hands-Free Wireless Control/ Quick Access For Functions/ Compatible With AVH-P5000DVD, AVH-P4000DVD, AVIC-N4, AVIC-D3, AVH-P4900DVD And AVH-P5900DVD', 19.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (198, 1, 'Pioneer Sirius Bus Interface - CDSB10', 'Pioneer Sirius Bus Interface - CDSB10/ Sirius Connect'' Compatibility/ Replay Function/ Game Alert/ Game Zone', 68.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (199, 1, 'Pioneer HD Radio Tuner - GEXP10HD', 'Pioneer HD Radio Tuner - GEXP10HD/ Compatible With FH-P800BT, FH-P8000BT, DEH-P700BT, DEH-P7000BT, DEH-P600UB, DEH-P6000UB/ ''External Control'' Capable', 100.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (200, 1, 'Sirius Dock And Play Universal Vehicle Kit - SUPV1', 'Sirius Dock And Play Universal Vehicle Kit - SUPV1/ Stereo Audio Output/ Use With Your Home Audio System Or Powered Speakers/ Compatible With Sportster 5, Sportster 4, Sportster 3, Starmate 4, Starmate 3, Stratus 4, Stratus', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (201, 1, 'Electrolux Harmony Series Canister Vacuum - EL6985B', 'Electrolux Harmony Series Canister Vacuum - EL6985B/ Foot-Operated Switch On The Floor Nozel/ Ergonomic Handle Design/ Electronic Dust Bag Indicator/ HEPA H12 Filter/ Telescoping Wand', 299.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (202, 1, 'Sennheiser Rechargeable Nickel-Metal Hydride Battery - BA151', 'Sennheiser Rechargeable Nickel-Metal Hydride Battery - BA151/ Rechargeable Battery For Wireless Sennheiser Headphones', 20.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (203, 1, 'Canon Green Photo Ink Cartridge - CLI8G', 'Canon Green Photo Ink Cartridge - CLI8G/ FINE Technology For Exceptional Sharpness & Detail/ Compatible With Canon Pixma Pro9000', 16.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (204, 1, 'Canon Red Photo Ink Cartridge - CLI8R', 'Canon Red Photo Ink Cartridge - CLI8R/ FINE Technology For Exceptional Sharpness & Detail/ Compatible With Canon Pixma Pro9000', 16.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (205, 1, 'Canon Black Photo Ink Cartridge - CLI8B', 'Canon Black Photo Ink Cartridge - CLI8B/ FINE Technology For Exceptional Sharpness & Detail/ Compatible With Canon Pixma Printers', 16.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (206, 1, 'Netgear ProSafe 5 Port 10/100 Desktop Switch - FS105', 'Netgear ProSafe 5 Port 10/100 Desktop Switch - FS105/ 5 Auto Speed-Sensing 10/100 UTP Ports/ Embedded Memory', 40.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (207, 1, 'Pioneer Premier In-Dash CD/WMA/MP3/AAC Receiver - DEHP400UB', 'Pioneer Premier In-Dash CD/WMA/MP3/AAC Receiver - DEHP400UB/ 50W x 4 Built-In Speaker Power/ 3 RCA Hi-Volt Preouts/ Two-Way Crossover/ Supertuner IIID/ AUX-In Connection/ Rotary Commander Volume Control', 183.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (208, 1, 'Pioneer DEH-2000MP CD/MP3/WMA In-Dash Receiver - DEH2000MP', 'Pioneer DEH-2000MP CD/MP3/WMA In-Dash Receiver - DEH2000MP/ 50W x 4 Built-In Speaker Power/ LED Display/ Built-In Front Auxiliary Input/ Detachable Face Security/ Remote Control/ Rotary Volume Control', 98.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (209, 1, 'Pioneer Premier In-Dash CD/WMA/MP3/AAC Receiver - DEHP500UB', 'Pioneer Premier In-Dash CD/WMA/MP3/AAC Receiver - DEHP500UB/ 50W x 4 Built-In Speaker Power/ 3 RCA Hi-Volt Preouts/ Two-Way Crossover/ Supertuner IIID/ AUX-In Connection/ Rotary Commander Volume Control', 208.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (210, 1, 'Sony 7'' Digital Photo Frame In Black - DPFD70', 'Sony 7'' Digital Photo Frame - DPFD70/ 7'' LCD With 800 x 480 Resolution/ 15:9 Aspect Ratio/ 256MB Internal Memory/ Supports Most Memory Cards/ Variety Of Display Modes/ Auto Image Rotation Feature/ View Mode Button/ Fast Digital Picture Decoding/ Handles Large Data Files/ USB B-Type Connection/ Remote Control/ Black Finish', 139.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (211, 1, 'SIRIUS SiriusConnect Vehicle Kit In Black - SCVDOC1', 'SIRIUS SiriusConnect Vehicle Kit In Black - SCVDOC1/ Compact Design/ Compatible With The Next Generation Of SiriusConnect Interface Adapters/ 3 Interchangeable Adapter Plates/ Black Finish', 59.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (212, 1, 'Linksys Wireless-G Ethernet Bridge - WET54G', 'Linksys Wireless-G Ethernet Bridge - WET54G/ Converts Wired-Ethernet Devices To Wireless-G Network Connectivity/ For Windows, Macintosh, Linux, PlayStation Consoles, Xbox Consoles, Or Anything With An Ethernet Port/ Plug And Play, No Driver Installation Require', 89.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (213, 1, 'Yamaha RX-V363BL 5.1 Channel Digital Home Theater Receiver In Black - RXV363BK', 'Yamaha RX-V363BL 5.1 Channel Digital Home Theater Receiver In Black - RXV363BK/ 500 Watts Powerful Surround Sound (100W x 5)/ iPod And Bluetooth Audio Compatibility/ Dolby Digital, DTS And Dolby Pro Logic II Decoding/ Cinema DSP With 8 DSP Programs/ Compressed Music Enhancer/ 192kHz/24-Bit DACs For All Channels/ Remote Control/ Black Finish', 199.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (214, 1, 'Yamaha All-Weather Pair Speaker System - NSAW390WH', 'Yamaha NS-AW390WH All-Weather Speaker System - NSAW390WH/ 6.5'' High Compliance/ PP Mica Filled Woofers/ Unique Dual 1'' PEI Dome Tweeter Configuration/ Aluminum Speaker Grilles/ Wall Mountable/ White Finish/ Sold As A Pair', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (215, 1, 'Yamaha NS-AW390BL All-Weather Pair Speaker System - NSAW390BK', 'Yamaha NS-AW390BL All-Weather Speaker System - NSAW390BK/ 6.5'' High Compliance/ PP Mica Filled Woofers/ Unique Dual 1'' PEI Dome Tweeter Configuration/ Aluminum Speaker Grilles/ Wall Mountable/ Black Finish/ Sold As A Pair', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (216, 1, 'Yamaha NS-AW190BL All-Weather Pair Speaker System - NSAW190BK', 'Yamaha NS-AW190BL All-Weather Speaker System - NSAW190BK/ 5'' High Compliance/ PP Mica Filled Woofers/ Unique Dual 1/2'' PEI Dome Tweeter Configuration/ Aluminum Speaker Grilles/ Wall Mountable/ Black Finish/ Sold As A Pair', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (217, 1, 'Yamaha 7.2 Channel Black Digital Home Theater Receiver - RXV663BK', 'Yamaha 7.2 Channel Black Digital Home Theater Receiver - RXV663BK/ 4 SCENE Buttons/ XM Ready With XM HD Surround/ SIRIUS Satellite Radio Ready/ YPAO/ iPod Compatibility/ Bluetooth Compatibility/ Multi-Zone Control Compatibility/ On-Screen Display/ Black Finish', 499.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (218, 1, 'Yamaha 7.2 Channel Black Digital Home Theater Receiver - RXV863BK', 'Yamaha 7.2 Channel Black Digital Home Theater Receiver - RXV863BK/ 4 SCENE Buttons/ XM Ready With XM HD Surround/ SIRIUS Satellite Radio Ready/ YPAO/ iPod Compatibility/ Bluetooth Compatibility/ Multi-Zone Control Compatibility/ On-Screen Display/ Black Finish/ CALL FOR LATEST PRICE', 899.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (219, 1, 'Yamaha 5.1 Channel Home Theater In A Box System In Black - YHT390BK', 'Yamaha 5.1 Channel Home Theater In A Box System In Black - YHT390BK/ New Scene, Compressed Music Enhancer/ iPod Compatibility/ 600W Powerful Surround Sound/ Silent Cinema/ 192kHz/24-Bit DACs For All Channels/ Black Finish', 399.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (220, 1, 'Apple MacBook Air SuperDrive - MB397GA', 'Apple MacBook Air SuperDrive - MB397GA/ Compact And Portable Slot-Loading 8x SuperDrive/ Connect To MacBook Air USB Slot/ Play And Burn Both CDs And DVDs/ Watch DVD Movie, Install Software, Or Create Backup Discs', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (221, 1, 'Monster Mini-To-Mini iCable For Car - AICMINIIP3S', 'Monster Mini-To-Mini iCable For Car - AICMINIIP3S/ 3 Ft. Cable/ 1/8 Mini-Jack Input For Car Stereo/ Dual Balanced High-Purity Copper Conductors And 24k Gold/ Xtra Low Noise DoubleHelix Construction/ Compatible With Apple iPod, iPhone, And Portable MP3 Player/ White Finish', 15.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (222, 1, 'TomTom GPS Mount And USB Car Charger - 9N00101', 'TomTom GPS Mount And USB Car Charger - 9N00101/ Extra Holder And Car Charger Convenient For Multi-Vehicles User/ No Need To Transfer Holder From One Car To Another/ Easy Installation/ Compatible With TomTom ONE/ Black Finish', 39.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (223, 1, 'Denon Blu-ray Disc DVD/CD Player - DVD3800BDCI', 'Denon Blu-ray Disc DVD/CD Player - DVD3800BDCI/ 10-Bit Realta HQV Video Processor/ 1080p/24fps Output And Multi-Cadence Detection/ HDMI 1.3a Output With 36-Bit Deep Color Support/ Dual 32-Bit Floating Point DSP/ Multi-Layered Construction With Dual-Layered Top Shields And Triple-Layered Bottom/ Suppress Vibration Hybrid (S.V.H.) Loader/ Black Finish', 1999.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (224, 1, 'TomTom GPS Mount And USB Car Charger - 9S00006', 'TomTom GPS Mount And USB Car Charger - 9S00006/ Extra Holder And Car Charger Convenient For Multi-Vehicles User/ No Need To Transfer Holder From One Car To Another/ Easy Installation/ Compatible With TomTom ONE XL/ Black Finish', 28.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (225, 1, 'Bracketron iPod Docking Kit - IPM202BL', 'Bracketron iPod Docking Kit - IPM202BL/ Compatible With All Generation iPods Including iPod Mini, iPod Nano And Apple iPhone/ Wings Adjustable Up To 2.5''/ Black Finish', 14.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (226, 1, 'Boston Acoustics Solo AM/FM Large Display Clock Radio - HSOLOMDNT', 'Boston Acoustics Solo AM/FM Large Display Clock Radio - HSOLOMDNT/ Rotating Clock Face/ Precision Tuner/ 3 1/2? Full-Range Speaker/ Auxiliary Input/ High Contrast LCD Display/ 360� Snooze Bar/ Grey Finish', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (227, 1, 'Panasonic 5.8 GHz Black Expandable Digital Cordless Phone System - KXTG4323B', 'Panasonic 5.8 GHz Black Expandable Digital Cordless Phone System - KXTG4323B/ Include 3 Handsets/ Expandable Up To 4 Handsets/ Digital Answering Machine System/ Ringer ID/ Call Waiting Caller ID/ Voicemail/ Hold/ Mute/ Clock/ Alarm/ LED Lighting/ Speakerphone/ Intercom/ 11 Days Standby/ 5 Hours Talk Time/ Black Finish', 79.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (228, 1, 'Sony Silver Digital Voice Recorder - ICDB600', 'Sony Silver Digital Voice Recorder - ICDB600/ 512MB Built-In Flash Memory/ Up To 300 Hours Of Recording Time/ 3 Recording Modes/ 4 Message Folders/ Large LCD Display/ Voice Operated Recording/ 250mW Speaker Output/ Date and Time Stamp/ Silver Finish', 39.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (229, 1, 'Motorola MotoRokr Portable Bluetooth Car Kit Speaker Phone - T505', 'Motorola MotoRokr Portable Bluetooth Car Kit Speaker Phone - T505/ 2.0 Bluetooth Wireless Technology/ Noise Cancellation Technology/ Loud Sound High Speaker Output/ Audio CallerID/ StationFinder/ Convenient Multi-Function Button/ Long Battery Life/ Mini-USB Connector/ Black Finish', 129.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (230, 1, 'Samsung Hi Definition Conversion DVD Player - DVD1080P8', 'Samsung Hi Definition Conversion DVD Player - DVD1080P8/ Progressive Scan/ HD Upconversion/ Digital-To-Analog Converter/ Dolby Digital Surround Sound/ Child Protection/ HDMI Output/ Black Finish', 79.90); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (231, 1, 'Boston Acoustics Duo-I AM/FM Clock Radio With iPod Dock - HDUOIMDNT', 'Boston Acoustics Duo-I AM/FM Clock Radio With iPod Dock - HDUOIMDNT/ Integrated iPod Dock/ Precision AM/FM Stereo Tuner/ 3 1/2'' Dual High Performance Full-Range Speakers/ BassTrac Audio Processing/ 2 Auxiliary Inputs/ High Contrast Display/ 10 FM & 5 AM Station Presets/ 360� Snooze Bar/ Remote Control Included/ Grey Finish', 199.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (232, 1, 'Panasonic Black DVD Home Theater Sound System - SCPT660', 'Panasonic Black DVD Home Theater Sound System - SCPT660/ Kelton Subwoofer/ Bamboo Diaphragm Center Speakers/ 1080p Up-Conversion/ Integrated Universal Dock And On-Screen Display For iPod/ iPod Video Playback/ Whisper-Mode Surround/ Built-In Dolby Digital And DTS Decoder/ High Speed 5-DVD/CD Changer/ Black Finish', 289.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (233, 1, 'Weber Summit E-620 Copper Liquid Propane Gas Outdoor Grill - 1752001', 'Weber Summit E-620 Copper Liquid Propane Gas Outdoor Grill - 1752001/ 6 Stainless Steel Burners/ 60,000 BTU-Per-Hour Input/ Snap-Jet Individual Burner Ignition System/ 838 Sq. In. Total Cooking Area/ Porcelain-Enameled Shroud/ Center-Mounted Thermometer/ Copper Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 1899.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (234, 1, 'Logitech Harmony One Advanced Universal Remote Control - HARMONY1', 'Logitech Harmony One Advanced Universal Remote Control - HARMONY1/ One-Touch Access To Your Entertainment/ Replaces Up To 15 Remotes/ Full-Color Touch Screen/ Sculpted, Backlighted Buttons In Logical Zones/ Ergonomic Design/ Rechargeable/ Guided Online Setup/ World?s Largest AV Control Database/915-000035', 249.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (235, 1, 'Z-Line Portland Black TV Stand - ZL2344MU', 'Z-Line Portland Black TV Stand - ZL2344MU/ Accommodates Most Flat Panel LCD/Plasma TVs Up To 50''/ Durable Black Glossy Powder Coat Metal Frame/ Tempered Black Safety Glass Shelves/ Chrome Cylinder Glass Supports/ Swivel Mount/ Wire Management/ Holds 65 lbs Per Shelf/ Distance Between Shelves- 8.25'' (Bottom to Middle) and 7'' (Middle to the bar below the top shelf)/ Black Finish', 399.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (236, 1, 'Sony Black USB Stereo Turntable System - PSLX300USB', 'Sony Black USB Stereo Turntable System - PSLX300USB/ Transfer Classic Vinyl To PC, Walkman, Or MP3 Player/ USB And RCA Audio Output/ 45 Rpm Record Playback/ Belt Drive System/ Dust Cover/ Black Finish', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (237, 1, 'Sony Digital SLR Camera With Lens Kit - DSLRA200W', 'Sony Alpha Digital SLR Camera With Lens Kit - DSLRA200W/ 10.2 Megapixels/ 2.7'' Clear Photo LCD Screen/ Super SteadyShot In-Camera Image Stabilization/ Continuous Burst Mode/ Bionz Image Processor/ ISO Sensitivity/ 9-Point Center Cross AF Sensor/ Scene Selection Modes/ DT 18-70mm f3.5 Zoom Lens And 75-300mm f4.5-5.6 Compact Super Telephoto Zoom Lens Included/ Black Finish', 849.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (238, 1, 'Nyko Charge Base 2 Charger For PlayStation 3 Controller - 743840830535', 'Nyko Charge Base 2 Charger For PlayStation 3 Controller - 743840830535/ Compact Design/ Rapidly Charges Two PS3 Controllers Simultaneously/ Includes Two USB Charge Adaptors', 34.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (239, 1, 'Sony Remote Control Tripod - VCT60AV', 'Sony Remote Control Tripod - VCT60AV/ A/V Remote Connector/ 4 Stage Leg Extension/ Extends From 18.9'' To 57.6'' In Height/ Guide Frame Feature/ Available Vertical Position/ Supplied Carrying Case/ Black Finish', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (240, 1, 'Klipsch Groove PM20 Computer Speakers - GROOVEPM20BK', 'Klipsch Groove PM20 Computer Speakers - GROOVEPM20BK/ 6 Ohms Nominal Impedance/ 3Full-Range 2.5? Fiber Composite Driver/ Overload Protection/ System-Specific Loudness Contour/ Black Finish', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (241, 1, 'Weber Gas Barbecue Rotisserie - 7519', 'Weber Gas Barbecue Rotisserie - 7519/ Fits Genesis E-300, S-300 Gas Grills/ Heavy-Duty Electric Motor/ Counterbalance For Smooth Turning', 80.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (242, 1, 'Weber Cast Iron Griddle - 7531', 'Weber Cast Iron Griddle - 7531/ Heavy-Duty Cast Iron Griddle/ Fits Weber Genesis Silver A & Spirit 500 Gas Grills', 44.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (243, 1, 'Weber Cast Iron Griddle - 7542', 'Weber Cast Iron Griddle - 7542/ Heavy-Duty Cast Iron Griddle/ Two-Sided For Cooking A Variety Of Foods/ Fits Several Weber Grills', 44.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (244, 1, 'Sony 5.1 Channel Black A/V Receiver - STRDG520', 'Sony 5.1 Channel Black A/V Receiver - STRDG520/ 100 Watts X 5 Power/ 1080p HDMI Pass Through/ Accepts 1080/60p And 24p Video Signal Via HDMI/ Dolby Digital, Dolby Pro Logic, Dolby Pro Logic II, Digital Cinema Sound And Dts Decoding/ Black Finish', 199.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (245, 1, 'Sony Alpha DSLR Black Camera Body With 18-70mm Zoom Lens - DSLRA300K', 'Sony Alpha DSLR Black Camera Body With 18-70mm Zoom Lens - DSLRA300K/ 10.2 MP Super HAD CCD/ Tiltable 2.7 Clear Photo LCD Plus Screen/ Smart Teleconverter 2X Zoom/ Expanded ISO Sensitivity/ Super SteadyShot In-Camera Image Stabilization/ Anti-Dust Technology/ 9-Point Center Cross AF Sensor/ Index and Slide Show Display/ Black Finish', 599.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (246, 1, 'Polk Audio CSI A4 Black Center Channel Loudspeaker - CSIA4BK', 'Polk Audio CSI A4 Black Center Channel Loudspeaker - CSIA4BK/ 1'' Silk/Polymer Dome Tweeter/ Dual 5-1/4'' Mid/Woofers/ Magnetic Shielding/ All-MDF Construction/ Acoustically Inert Stamped Driver Baskets/ Floating Anti-Diffraction Grilles/ Dual Bi-Ampable Gold-Plated 5-Way Binding Post Inputs/ Black Finish/ Sold As A Single', 279.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (247, 1, 'Polk Audio CSI A4 Cherry Center Channel Loudspeaker - CSIA4CH', 'Polk Audio CSI A4 Cherry Center Channel Loudspeaker - CSIA4CH/ 1'' Silk/Polymer Dome Tweeter/ Dual 5-1/4'' Mid/Woofers/ Magnetic Shielding/ All-MDF Construction/ Acoustically Inert Stamped Driver Baskets/ Floating Anti-Diffraction Grilles/ Dual Bi-Ampable Gold-Plated 5-Way Binding Post Inputs/ Cherry Finish/ Sold As A Single', 279.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (248, 1, 'Polk Audio CSI A6 Black Center Channel Loudspeaker - CSIA6BK', 'Polk Audio CSI A6 Black Center Channel Loudspeaker - CSIA6BK/ Dual 6-1/2'' Mid/Woofers/ 1'' Silk/Polymer Dome Tweeter/ Dual Rear PowerPort Bass Venting/ Magnetic Shielding/ Mylar Bypass Capacitors/ Acoustic Resonance Control (ARC Port) Technology/ Dual Bi-Ampable Gold-Plated 5-Way Binding Post Inputs/ Butyl Rubber Surrounds/ Floating Anti-Diffraction Grilles/ All-MDF Construction/ Black Finish/ Sold As A Single', 449.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (249, 1, 'Polk Audio 5.1 Channel Black Home Theater Speaker System - RM705BK', 'Polk Audio 5.1 Channel Black Home Theater Speaker System - RM705BK/ Heavy-Duty Non-Resonant Composite Enclosures/ Downward Firing Powered 8'' Subwoofer/ Built-In Subwoofer Power Amp With Active Crossover/ Three-Sided Cabinet Design/ Magnetically Shielded/ Black Finish', 499.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (250, 1, 'Sony 3.1 Channel Home Theater Surround System In Black - HTCT100', 'Sony 3.1 Channel Home Theater Surround System In Black - HTCT100/ HDMI Active Intelligence/ LPCM Playback/ 3.1 Channel/ S-Force Surround/ BRAVIA� Sync/ Digital Media Port/ Black Finish/ ETA MID JANUARY 2009', 299.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (251, 1, 'Polk Audio Black 10'' Powered Subwoofer - PSW110BK', 'Polk Audio PSW110 Black 10'' Powered Subwoofer - PSW110BK/ 100 Watts Continuous Average Output/ 200 Watts Dynamic Power Output/ 10'' Dynamic Balance Composite Woofer Driver/ Klippel Optimized Woofer/ High Current Class A/B Amplifiers/ Downward Firing Port/ Line And Speaker Level Inputs/ Non-Resonant MDF Construction/ Black Finish', 299.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (252, 1, 'Twenty20 VholdR Mount Adhesive - 2200MA', 'Twenty20 VholdR Mount Adhesive - 2200MA/ Removable/ Resists Water, Heat And Cold', 6.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (253, 1, 'Weber Premium Black Grill Cover - 7550', 'Weber Premium Black Grill Cover - 7550/ Heavy-Duty Vinyl/ Compatible With Spirit E-200 Series, Spirit 500 And Genesis Silver A Gas Grills/ Black Finish', 40.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (254, 1, 'Sony Black Earbud Style Headphones - MDREX55BK', 'Sony MDREX55BLK Black Earbud Style Headphones - MDREX55BK/ 9mm EX Driver Provides Comfort Fit And Deep Bass Sound/ Soft Fitting Silicon Housing/ 3 Sizes Earbuds/ Carrying Pouch/ Black Finish', 39.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (255, 1, 'Hoover EmPower Bagless Upright Vacuum - U5269', 'Hoover EmPower Bagless Upright Vacuum - U5269/ Hush Mode/ Power Boost/ No Assembly Required/ Folding Handle For Easy Storage/ Allergen Filter/ 12 Amp Motor/ Tools Included/ Green Finish', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (256, 1, 'Panasonic DECT 6.0 Expandable Digital Cordless Phone With All-Digital Answering System - KXTG9344T', 'Panasonic DECT 6.0 Expandable Digital Cordless Phone With All-Digital Answering System - KXTG9344T/ 4 Handsets System/ Up To 6 Multi-Handset Capability/ Digital Answering Machine System/ Ringer ID/ Call Waiting Caller ID/ Voicemail/ Hold/ Voice Menu/ Marker Message/ Mute/ Clock/ Alarm/ LED Lighting/ Night Mode/ Call Block/ Speakerphone/ 11 Days Standby/ 5 Hours Talk Time/ Black Metallic Finish', 139.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (257, 1, 'LaCie 500GB d2 Quadra External Hard Drive - 301825U', 'LaCie 500GB d2 Quadra External Hard Drive - 301825U/ Quadruple Interface For Full PC And Mac Compatibility/ Interface Bandwidth Up To 3Gbits/s (eSATA)/ Advanced Aluminum Heat Sink Design Cooling System For Quiet Operation/ 7200 Rotational Speed (rpm)/ 16MB Cache/ Compatible With Time Machine', 159.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (258, 1, 'Panasonic DECT 6.0 Black Expandable Digital Cordless Phone - KXTG9361B', 'Panasonic DECT 6.0 Black Expandable Digital Cordless Phone - KXTG9361B/ Drop And Splash Resistant/ Multi-Handset Capability/ Ringer ID/ Call Waiting Caller ID/ Voicemail/ Hold/ Mute/ Clock/ Alarm/ LED Lighting/ Night Mode/ Call Block/ Speakerphone/ 11 Days Standby/ 5 Hours Talk Time/ Black Finish', 48.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (259, 1, 'Sony 1GB Memory Stick PRO Duo Mark 2 Media Card - MSMT1G', 'Sony 1GB Memory Stick PRO Duo Mark 2 Media Card - MSMT1G/ 160 Mbps Transfer Speed/ 940MB Actual Capacity', 19.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (260, 1, 'Sony 2GB Memory Stick PRO Duo Mark 2 Media Card - MSMT2G', 'Sony 2GB Memory Stick PRO Duo Mark 2 Media Card - MSMT2G/ 160 Mbps Transfer Speed/ 1.85GB Actual Capacity', 29.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (261, 1, 'Pioneer Black Premier Single CD Receiver - DEHP700BT', 'Pioneer Black Premier Single CD Receiver - DEHP700BT/ Built-In Bluetooth Solution/ USB Direct Control For iPod/ Advanced Sound Retriever/ 3 RCA Hi-Volt Preouts/ Two-Way Crossover/ Built-In MOSFET 50 W x 4 Amplifier/ Supertuner IIID/ Amplifier Off Mode/ Display Off Mode', 308.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (262, 1, 'TomTom ONE 130S Car GPS Navigation System - 1EE005202', 'TomTom ONE 130S Car GPS Navigation System - 1EE005202/ 3.5'' LCD Anti-Glare Touch Screen/ Pre-Installed Maps/ Internal Lithium-Ion Battery/ Car Speed Linked Volume/ Automatic Day/Night Mode/ QuickGPSfix/ Text-To-Speech Included', 246.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (263, 1, 'TomTom ONE XL 330 Car GPS Navigation System - 1EG005200', 'TomTom ONE XL 330 Car GPS Navigation System - 1EG005200/ 4.3'' LCD Anti-Glare Touch Screen/ Pre-Installed Maps/ Internal Lithium-Ion Battery/ Car Speed Linked Volume/ Automatic Day/Night Mode/ QuickGPSfix', 246.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (264, 1, 'TomTom ONE XL 330S Car GPS Navigation System - 1EG005201', 'TomTom ONE XL 330S Car GPS Navigation System - 1EG005201/ 4.3'' LCD Anti-Glare Touch Screen/ Pre-Installed Maps/ Internal Lithium-Ion Battery/ Car Speed Linked Volume/ Automatic Day/Night Mode/ QuickGPSfix/ Text-To-Speech Included', 296.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (265, 1, 'Sony Black Camcorder Tripod - VCT80AV', 'Sony Black Camcorder Tripod - VCT80AV/ 3 Stage Leg Extension/ Extends From 24.88'' To 65.88'' In Height/ Guide Frame Feature/ Available Vertical Position/ For A/V Remote Connector/ Supplied Carrying Case/ Black Finish', 180.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (266, 1, 'Sony 7.1 Channel Black A/V Receiver - STRDG820', 'Sony 7.1 Channel Black A/V Receiver - STRDG820/ 770 Watts Total Power (110W x 7)/ Accepting Resolutions Up To 1080p Via HDMI/ Digital Cinema Auto Calibration/ BRAVIA Sync/ Digital Cinema Sound/ Dolby Digital, Dolby Digital EX, Dolby Pro Logic II, Dolby Pro Logic IIx, Dts, Dts-ES, Dts 96/24, Dts NEO:6 Decoding/ Black Finish', 399.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (267, 1, 'Sony Splash Resistant Shower Radio - ICFS79W', 'Sony Multi Band Digital Tuner Shower Radio - ICFS79W/ Splash Resistant/ AM/FM/Weather Band Reception/ Easy One Button Weather Band Select/ Built-In Digital Clock/ Selectable Automatic-Off Timer/ Quartz Synthesized Tuner/ Built-In Antennas', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (268, 1, 'Samsung Black Combo DVD/VHS Player - DVDV9800', 'Samsung Black Combo DVD/VHS Player - DVDV9800/ Progressive Scan/ 1080p Up-Conversion Via HDMI/ 10Bit / 54MHz Digital-To-Analog Converter/ 4-Head Hi-Fi VCR/ Black Finish/ No Tuner', 98.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (269, 1, 'Omnimount Stellar Series Audio Tower - G303DARK', 'Omnimount Stellar Series Audio Tower - G303DARK/ Designed For Large Audio Components/ Supports Tabletop Flat Panels/ Three ?Floating? Shelf Design/ Integrated Cable Management/ Black Finish', 299.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (270, 1, 'Weber Q 320 Liquid Propane Table And Outdoor Grill - 586002', 'Weber Q 320 Liquid Propane Table And Outdoor Grill - 586002/ 462 Sq. In. Total Cooking Area/ 21,700 BTU Stainless Steel Burners/ Porcelain-Enameled Cast-Iron Cooking Grate/ Cast-Aluminum Lid And Body/ Electronic Ignition/ Grill Out Handle Light/ Folding Work Tables With Tool Holders/ Removable Catch Pan/ Built-In Thermometer/ Stationary Cart Included/ Black And Aluminum Finish/ Assembly Required', 379.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (271, 1, 'Sony Black Component Home Theater System - HT7200DH', 'Sony Black Component Home Theater System - HT7200DH/ 900 Watts/ 5.1 Channels/ HDMI 1080p Output DVD Player/ HDMI Active Intellegence AV Receiver/ 5 Satellite Speakers/ XM Ready/ Black Finish', 499.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (272, 1, 'TomTom Black Carry Case - 9UEA01700', 'TomTom Black Carry Case - 9UEA01700/ Specifically Designed For TomTom ONE 130 GPS/ Durable And Compact Protective Hardcover Material/ Wrist Strap/ Black Finish', 19.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (273, 1, 'Mitsubishi 835 Diamond Series 73'' 1080p DLP Rear Projection HDTV - WD73835', 'Mitsubishi 835 Diamond Series 73'' 1080p DLP Rear Projection HDTV - WD73835/ 1920 x 1080 Full HD Resolution/ 6-Color Processor/ Smooth 120Hz/ x.v.Color/ Plush1080p 12-Bit Digital Video Processing/ Color 4D Video Noise Reduction/ 3D Ready/ NetCommand/ DeepField Imager/ Black Finish', 3499.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (274, 1, 'Sony Black DVD Recorder And VHS Combo Player - RDRVX560', 'Sony Black DVD Recorder And VHS Combo Player - RDRVX560/ Multiformat DVD Compatible/ HDMI Output With 1080p,1080i,720p Upscaling/ USB One Touch Dubbing/ 4 Video Head Stereo VHS With 19 Micron Heads/ Virtual Surround Sound For DVD With Stereo TV Speakers/ Black Finish', 219.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (275, 1, 'Uniden DECT 6.0 Digital Accessory Handset - DCX300', 'Uniden DECT 6.0 Digital Accessory Handset - DCX300/ DECT 6.0 Interference Free Cordless Frequency/ Large Color Display/ Blue Backlit Keypad/ Handset Speakerphone/ Intercom or Call Transfer Between Handsets/ Polyphonic Ring Tones/ Advanced Phonebook Features/ Last 5 Number Redial/ Piano Black Finish', 34.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (276, 1, 'Sony DVD Recorder In Black - RDRGX360', 'Sony DVD Recorder In Black - RDRGX360/ 1080p/1080i/720p Upscaling For DVD/ USB One Touch Dubbing/ Line Input Recording/ BRAVIA Sync/ DVD+R Double Layer Recording/ Dolby Digital Decoding Playback Compatible/ Black Finish', 179.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (277, 1, 'Sennheisser Hi-Fi Wireless Headphone - RS130', 'Sennheisser Hi-Fi Wireless Headphone - RS130/ Switchable SRS Surround Sound Mode/ Intelligent Auto-Tuning/ Memory Function/ Self-Learning Automatic Level Control/ Black Finish', 159.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (278, 1, 'BlueAnt Black Bluetooth Headset - Z9I', 'BlueAnt Black Bluetooth Headset - Z9I/ Pairs With 5 Devices/ Bluetooth Version 2.0 Technology/ Dual Microphones For Pure Speech/ Revolutionary Voice Isolation Technology/ Automatic Connection And Reconnection With Notification/ Firmware Upgrade Via USB On Your PC/ Up To 5.5 Hours Talk Time/ 200 Hours Standby Time/ Gloss Black Finish', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (279, 1, 'Escort Passport 9500CI Radar Detector - 9500CI', 'Escort Passport 9500CI Radar Detector - 9500CI/ 360 Degree Protection/ Completely Undetectable To All Detector Scanners/ Variable-Speed Radar Performance/ GPS-Powered Truelock Filter/ Adaptive Signal Processing/ Speed Alert/ Crystal-Clear Voice Alerts/ 280 LED Matrix Blue Display/ 5 Levels Of Brightness Control/ Black Finish/ Price Includes Installation', 1995.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (280, 1, 'Sony Black 5.1 Channel Home Theater System - HTDDWG700', 'Sony Black 5.1 Channel Home Theater System - HTDDWG700/ 5.1 Channel/ 900 Watts Power/ Portable Audio Enhancer With Front Audio Input/ iPod Cradle/ Digital Cinema Auto Calibration/ BRAVIA Sync/ Digital Media Port/ Black Finish', 199.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (281, 1, 'Denon Multi-Channel Digital Surround Sound Speaker System - DHTFS5', 'Denon Multi-Channel Digital Surround Sound Speaker System - DHTFS5/ Multiple Amplifier Channels/ Dolby Pro Logic II, Dolby Digital And DTS Surround/ Balanced Loudspeaker Drivers/ X-Space Surround Technology/ Night Mode/ Remote Control Included/ Black Finish', 499.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (282, 1, 'Danby White Countertop Dishwasher - DDW497WH', 'Danby White Countertop Dishwasher - DDW497WH/ 4 Place Settings/ Quick Connect To Any Kitchen Tap/ Automatic Detergent And Rinse Agent Dispenser/ Quiet Operation/ 5 Wash Cycles/ Durable Stainless Steel Spray Arm And Interior/ White Finish', 222.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (283, 1, 'Canon KP-36IP Color Ink & Paper Set - 7737A001', 'Canon KP-36IP Color Ink & Paper Set - 7737A001/ 36 Sheets Of 4'' x 6'' Photo Paper/ Ink Cartridge For Compatible Canon Dye Sublimation Printer', 12.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (284, 1, 'Linksys Ultra RangePlus Wireless-N Broadband Router - WRT160N', 'Linksys Ultra RangePlus Wireless-N Broadband Router - WRT160N/ Internet-Sharing Router/ 4-Port Switch/ Enhanced Wireless Access Point/ MIMO Technology/ Faster Than Wireless-G/ Protected By Wireless Encryption/ Powerful SPI Firewall/ 2 Antennas/ Glossy Black Finish', 79.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (285, 1, 'Pioneer USB iPod Interface Cable - CDIU230V', 'Pioneer USB iPod Interface Cable - CDIU230V/ Compatible With AVIC-F700BT And AVIC-F900BT Navigation Receivers', 48.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (286, 1, 'Canon White Selphy CP760 Compact Photo Printer - 2565B001', 'Canon White Selphy CP760 Compact Photo Printer - 2565B001/ 2.5'' TFT Display/ Portrait Image Optimize/ Print Water-Resistant Photos/ Print Directly From Your Memory Cards Or Bluetooth-Enabled Devices/ Big Buttons/ Automatic Red-Eye Correction/ White Finish', 95.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (287, 1, 'Sony 2GB Memory Stick Micro (M2) - MSA2GU2', 'Sony MSA2GD 2GB Memory Stick Micro (M2) - MSA2GU2/ Ultra-Small Size/ 2GB Storage Capacity With 1.85GB Available/ Designed For Use In Compatible Small Devices Such As Mobile Phone/ Dual Operating Voltage/ M2 Duo Adaptor Included/ Black Finish', 29.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (288, 1, 'Panasonic DECT 6.0 Silver Digital Cordless Handset - KXTGA630S', 'Panasonic DECT 6.0 Silver Digital Cordless Handset - KXTGA630S/ For Use With Panasonic 6300 And 9300 Series Phone Systems/ DECT 6.0 Technology/ 60 Channels/ Call Waiting Caller ID/ 1.4'' Amber Backlit LCD Display/ Wall Mountable/ 11 Days Standby Time/ 5 Hours Talk Time/ Silver Finish', 29.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (289, 1, 'Polk Audio White Round Two-Way In-Wall Loudspeaker - TC60I', 'Polk Audio White Round Two-Way In-Wall Loudspeaker - TC60I/ Dynamic Balance Polymer Composite Driver/ Aimable 1'' Silk Dome Tweeter With Neodymium Magnet/ 15-Degree Offset Drive Unit/ Wide Dispersion Design/ Durable, Moisture Resistant Materials/ Infinite Baffle Tuning/ Paintable, Powder-Coated Aluminum Grilles/ Conveniently Accessible Front Panel Controls/ Each Speaker Sold Seperately/ White Finish', 299.95); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (290, 1, 'Toshiba Black DVD/VCR Combinaton Player - SDV296', 'Toshiba Black DVD/VCR Combinaton Player - SDV296/ Progressive Scan DVD Player/ One Touch Recording For The VCR/ ColorStream Pro Progressive Scan Component Video Outputs/ Simultaneous DVD Playback And VHS Record/ JPEG Viewer/ Black Finish', 89.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (291, 1, 'Samsung 19'' Black Flat Panel Series 6 LCD HDTV - LN19A650', 'Samsung 19'' Black Flat Panel Series 6 LCD HDTV - LN19A650/ 1440 x 900 True 720p Resolution/ 3,000:1 Dynamic Contrast Ratio/ SRS TruSurround XT/ Built-In Digital Tuner (ATSC/Clear QAM)/ Wide Color Enhancer/ 8ms Response Time/ Touch Of Color Design/ Black With Red Finish', 499.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (292, 1, 'Samsung 22'' Black Flat Panel Series 6 LCD HDTV - LN22A650', 'Samsung 22'' Black Flat Panel Series 6 LCD HDTV - LN22A650/ 1680 x 1050 True 720p Resolution/ 5,000:1 Dynamic Contrast Ratio/ SRS TruSurround XT/ Built-In Digital Tuner (ATSC/Clear QAM)/ Wide Color Enhancer/ 8ms Response Time/ Touch Of Color Design/ Black With Red Finish', 599.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (293, 1, 'Canon Deluxe Burgundy Leather Case - 2350B001', 'Canon Deluxe Burgundy Leather Case - 2350B001/ Genuine Leather Case/ Designed For The PowerShot SD770 IS, SD1100 And SD1000/ Burgundy Finish', 18.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (294, 1, 'Canon Deluxe Black Digital Camera Case - 2595B002', 'Canon Deluxe Black Digital Camera Case - 2595B002/ Soft Nylon Case/ Flip-Down Cover/ Belt Loop Attachment For Hands-Free Convenience/ Compatible With Canon PowerShot A Series/ Black Finish', 13.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (295, 1, 'Griffin iPod RoadTrip With SmartScan - 4040RDTRPB', 'Griffin iPod RoadTrip With SmartScan - 4040RDTRPB/ Play Music From Your iPod On Your Car?s Stereo System As It Charges/ Switch Quickly Between Pre-Sets/ SmartSound Plus Technology Delivers Clear Sound Under Real-World Conditions/ Flexible Steel Neck/ Black Finish', 89.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (296, 1, 'Denon Black Home Theater Surround Sound Receiver - AVR1709', 'Denon Black AVR-1709 Home Theater Surround Sound Receiver - AVR1709/ 80 Watts Per Channel/ 7 Channels/ HDMI V1.3A Video Switching/ Dolby Digital Surround EX, Dolby Pro Logic IIx, DTS ES 6.1, DTS Neo:6 Decoding/ Audyssey MultEQ, Dynamic Volume And Dynamic EQ/ Video Up-Conversion/ Black Finish', 449.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (297, 1, 'Denon Black AVR-1609 Home Theater Surround Sound Receiver - AVR1609', 'Denon Black AVR-1609 Home Theater Surround Sound Receiver - AVR1609/ 75 Watts Per Channel/ 7 Channels/ HDMI V1.3A Video Switching/ Dolby Digital Surround EX, Dolby Pro Logic IIx, DTS ES 6.1, DTS Neo:6 Decoding/ Audyssey MultEQ, Dynamic Volume And Dynamic EQ/ Sirius Satellite Radio Ready/ Network And Digital Media Connectivity/ Black Finish', 349.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (298, 1, 'Sony Bud Style Headphones In Silver - MDRED12LPSLV', 'Sony Bud Style Headphones In Silver - MDRED12LPSLV/ 16mm Drivers/ Crisp Sound/ Neodymium Magnets Offer Powerful Sound Reproduction/ Convenient Cord Slider Reduces Tangles/ 3.9 Ft. Cord Length/ Frequency Response Of 8-22,000Hz/ Silver Finish', 14.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (299, 1, 'Sony Bud Style Headphones In Red - MDRED12LPRED', 'Sony Bud Style Headphones In Red - MDRED12LPRED/ 16mm Drivers/ Crisp Sound/ Neodymium Magnets Offer Powerful Sound Reproduction/ Convenient Cord Slider Reduces Tangles/ 3.9 Ft. Cord Length/ Frequency Response Of 8-22,000Hz/ Red Finish', 14.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (300, 1, 'Sony EX Ear Bud Headphones In Black - MDREX32LPBLK', 'Sony EX Ear Bud Headphones In Black - MDREX32LPBLK/ 9mm Drivers/ Deep Bass Sound/ Neodymium (400kJ/m3) Magnets Offer Powerful Bass Sound Reproduction/ 3.9 Ft. Cord Length/ Frequency Response Of 6-23,000Hz/ Black Finish', 24.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (301, 1, 'Sony EX Ear Bud Headphones In White - MDREX32LPWHI', 'Sony EX Ear Bud Headphones In White - MDREX32LPWHI/ 9mm Drivers/ Deep Bass Sound/ Neodymium (400kJ/m3) Magnets Offer Powerful Bass Sound Reproduction/ 3.9 Ft. Cord Length/ Frequency Response Of 6-23,000Hz/ White Finish', 24.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (302, 1, 'Griffin iPhone SmartTalk - 3016SMRTLKB', 'Griffin iPhone SmartTalk - 3016SMRTLKB/ Adds A Microphone And An iPhone Control Button To Your Favorite Earphones/ Play, Pause And Skip Through Your Tunes/ High-Sensitivity Microphone For Crystal-Clear Phone Conversations/ 30'' Cable Sheathed In Nylon Braiding', 19.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (303, 1, 'Logitech Driving Force Pro Steering Wheel With Pedals Set For Sony Playstation 2 - 9632930403', 'Logitech Driving Force Pro Steering Wheel With Pedals Set For Sony Playstation 2 - 9632930403/ Comfortable Soft Full Rubber Wheel/ Realistically Turn Through 2.5 Times Wheel Rotation/ 900 Degrees Of wheel Steering/ State-Of-The-Art Force Feedback Technology/ Stick Shifter/ Responsive Gas And Brake Pedals/ Black Finish', 129.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (304, 1, 'Monster iCarPlay Wireless 250 FM Transmitter With AutoScan for iPod And iPhone - AIPFMCH250', 'Monster iCarPlay Wireless 250 FM Transmitter With AutoScan For iPod And iPhone - AIPFMCH250/ Plays iPod Or iPhone Music Over Any Car Stereo/ Vibrant Sound/ Works With Any FM Car Radio/ 3 Programmable Presets/ FM Stations Range From 88.1 To 107.9/ Easy To Use/ Convenient Charging While You Drive/ Black Finish', 100.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (305, 1, 'D-Link Broadband Cable Modem - DCM202', 'D-Link Broadband Cable Modem - DCM202/ DOCSIS 2.0 CableLabs Certified/ High-Speed Internet Connectivity/ Always On And Always Connected/ Ethernet Or USB Connectivity/ Front Panel LED Indicator Lights/ Grey Finish', 79.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (306, 1, 'LaCie USB 2.0 Floppy Disk Drive - 706018', 'LaCie USB 2.0 Floppy Disk Drive - 706018/ Ultra-Thin Portable Design/ Compatible With Windows And Mac OS/ Plug And Play/ USB Powered/ 250 - 500 kbps Transfer Rate/ Silver Finish', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (307, 1, 'Toshiba XDE Black 1080p Upconversion Extended Detail DVD Player - XDE500', 'Toshiba XDE Black 1080p Upconversion Extended Detail DVD Player - XDE500/ Full 1080p Upconversion With 24 Frames Per Second/ Detail Enhancement/ Intelligent Color/ Contrast Enhancement/ DivX Certified/ Black Finish', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (308, 1, 'Griffin Black iPhone 3G Wave Case - 8227IP2WVB', 'Griffin Black iPhone 3G Wave Case - 8227IP2WVB/ Elegtant Wave-Shaped Closures/ Durable Polycarbonate Protection/ Rigid Touchscreen Protector/ Full Access To All Ports And Controls/ Black Finish', 24.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (309, 1, 'iHome iPod & iPhone Clock Radio & Audio System - IP99BR', 'iHome iP99 iPod & iPhone Clock Radio & Audio System - IP99BR/ Universal Dock For iPhone/ Auto-Set Clock/ Programmable Snooze/ Charges iPod Or iPhone While Docked/ Reason8 Speaker Chambers/ Line In Jack/ Full Function Remote Control Included/ Dual Alarm Clock/ Extra-Large LCD Display/ Black Finish (iPhone Not Included)', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (310, 1, 'Transcend 8GB SDHC Card And Compact Card Reader - TS8GSDHC6S5W', 'Transcend 8GB SDHC Card And Compact Card Reader - TS8GSDHC6S5W/ SDHC Card Is Class 6 Compliant And Compatible With All SDHC-Labeled Host Devices/ Card Reader Is Fully Compatible With Hi Speed USB 2.0, Up To 480Mb/s And Supports SDHC Memory Cards', 26.30); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (311, 1, 'Denon 7.1 Channel AV Receiver With Network Client Compatible D-Dock Port In Black - AVR2809CI', 'Denon 7.1 Channel AV Home Theater Surround Receiver With Network Client Compatible D-Dock Port In Black - AVR2809CI/ 110 Watts x 7 Channels/ 1080p Upscaling/ PC Setup And Control Capability Via RS-232C/ Network Capable/ XM Satellite Radio Ready/ Dolby TrueHD And DTS-HD Master Audio/ HDMI 1.3a Repeater Inputs-Outputs/ Dual Remotes/ Black Finish', 1199.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (312, 1, 'LaCie Little Disk 320GB Black Portable Hard Drive - 301829', 'LaCie Little Disk 320GB Black Portable Hard Drive - 301829/ Compact, Thin And Lightweight Design/ Back Up, Synchronize And Secure Files And Settings/ Extractable Integrated USB Cable And Protective Cap/ Hi-Speed USB 2.0/ PC And Mac Compatible/ Black Finish', 119.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (313, 1, 'LaCie Little Disk 250GB Black Portable Hard Drive - 301278', 'LaCie Little Disk 250GB Black Portable Hard Drive - 301278/ Compact, Thin And Lightweight Design/ Back Up, Synchronize And Secure Files And Settings/ Extractable Integrated USB Cable And Protective Cap/ Hi-Speed USB 2.0/ PC And Mac Compatible/ Black Finish', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (314, 1, 'AppleCare Protection Plan For iPod Touch Or iPod Classic - MB591LLA', 'AppleCare Protection Plan For iPod Touch Or iPod Classic - MB591LLA/ Extends Your Service Coverage To Up To Two Years/ Includes Both Phone And In Store Techinical Support', 59.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (315, 1, 'Nikon CoolPix S610 10 Megapixel Black Digital Camera - COOLPIXS610BK', 'Nikon CoolPix S610 10 Megapixel Black Digital Camera - COOLPIXS610BK/ 10.0 Megapixels/ 4x Zoom-NIKKOR Lens/ 3.0'' High-Resolution Wide-Viewing Angle LCD Monitor/ Scene Auto Selector/ Active Child Mode/ Smile And Food Mode/ Face-Priority AF/ In-Camera Red-Eye Fix/ D-Lighting/ Midnight Black Finish', 249.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (316, 1, 'Sony VAIO Black USB Docking Station - VGPUPR1', 'Sony VAIO Black USB Docking Station - VGPUPR1/ Perfect For The Constant Traveler Or Mobile Professional/ Easily Connect All Of Necessary Peripherals/ VGA Port/ 4 USB Ports/ Ethernet Port/ Headphone And Microphone Ports/ Compatible With VAIO CR Series, FZ Series, FW Series, NR Series And AR Series Notebooks/ Black Finish', 199.99); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (317, 1, 'Nikon SB-900 AF Speedlight In Black - SB900', 'Nikon AF Speedlight In Black - SB900/ Wireless Commander Mode/ Control Up To Three Remote/ 3 Light Distribution Patterns/ Flash Tube Overheat Protection/ Drip-Proof Mounting Foot Cover (Water Guard)/ Color Gel Filter Identification/ Black Finish', 499.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (318, 1, 'Denon D-M37 Black CD/AM/FM Micro System - DM37SBK', 'Denon D-M37 Black CD/AM/FM Micro System - DM37SBK/ 30 Watts x 2 Amplifier/ Precision Burr-Brown Audiophile Quality DACs/ MP3 And WMA Tracks Playback Capability/ European Engineered Loudspeakers/ 120mm Long-Throw D.D.L Double-Layered Cone Woofer/ 25mm Soft Dome Tweeter With Extended Response/ Triadic Noise Reduction Concept/ Portable Player Connectivity/ Black Finish', 399.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (319, 1, 'Griffin iPhone 3G Black Elan Form Hard-Shell Leather Case - 8223IP2EFRMB', 'Griffin iPhone 3G Black Elan Form Hard-Shell Leather Case - 8223IP2EFRMB/ Top-Grain Outer Shell Crafted From Hand-Matched Leather/ Protective Polycarbonate Inner Shell/ Easy Access To Controls/ Includes Stiff Polycarbonate Screen Protector & Premium Cleaning Cloth/ Black Finish (iPhone Not Included)', 24.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (320, 1, 'Speck Black ToughSkin Case For iPhone 3G - IPH3GBLKTS', 'Speck Black ToughSkin Case For iPhone 3G - IPH3GBLKTS/ Tough, Textured And Ruggedized Protection/ Bottom Hinges Open To Allow Docking/ Thicker Corners For Extra Protection/ Removable Rotating Belt Clip/ Lightweight Design/ Easy Access To All Ports & Controls/ Black Finish (iPhone Not Included)', 34.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (321, 1, 'Canon PIXMA iP2600 Photo Printer - IP2600', 'Canon PIXMA Photo Printer - IP2600/ 4800 x 1200 Color dpi/ Spectacular Resolution/ Fast Photo Printing/ FINE Technology/ 1,472 Precision Nozzles/ Auto Image Fix/ Easy-PhotoPrint EX Software/ 4 In 1 Or 2 In 1 Printing/ Energy Star Qualified/ Borderless 4'' x 6'' Print Approx. 55 Seconds/ Windows And Mac Compatible', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (322, 1, 'Klipsch 5.25'' THX Ultra2 In-Ceiling White Loudspeaker - KS7502THX', 'Klipsch 5.25'' THX Ultra2 In-Ceiling White Loudspeaker - KS7502THX/ 100W Continuous/400W Peak Power Handling/ Dual 1'' Titanium Diaphragm Compression Drivers Mated To WDST Tractrix Horn Array/ Dual 5.25'' High-Output Cerametallic Cone Woofers/ MDF And Aluminum Motorboard/ABS Shell Enclosure/ White Finish/ Price Per Speaker', 1000.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (323, 1, 'Canon PIXMA Photo All-In-One Printer - MP620', 'Canon PIXMA Photo All-In-One Printer - MP620/ High Performance Printer And Copier, Scanner/ Easy Scroll Wheel/ Dual Paper Trays/ 2.5'' High Definition LCD Display/ Maximum 9600 x 2400 Color Dpi/ Automatic Image Optimization/ Quick Start/ Wi-Fi Ready/ Built-In Media Card Slot/ ENERGY STAR Qualified', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (324, 1, 'TiVo HD XL Black Digital Video Recorder - TCD658000', 'TiVo HD XL Black Digital Video Recorder - TCD658000/ Search, Record And Watch Shows In HD/ Save Up To 150 Hours Of HD Programming At A Time/ Control Cable TV With Pause, Rewind, Fast-Forward, And Slow-Motion/ Record Two Shows At Once In HD/ Digital Transition Ready/ Backlit Remote Control/ Netflix Instant Streaming/ TiVo Service Required And Sold Separately', 599.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (325, 1, 'Apple 8GB Black 2nd Generation iPod Touch - MB528LLA', 'Apple 8GB Black 2nd Generation iPod Touch - MB528LLA/ Holds Up To 1,750 Songs In 128-Kbps AAC Format, 10,000 iPod-Viewable Photos And 10 Hours Of Video/ Wi-Fi (802.11b/g)/ Nike + iPod Support Built-In/ Maps Location-Based Service/ 3.5'' (Diagonal) Widescreen Multi-Touch Display/ 480x320-Pixel Resolution/ 480p And 576p Component TV Out/ Mac And Windows Compatible/ Black Finish', 229.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (326, 1, 'Apple 16GB Black 2nd Generation iPod Touch - MB531LLA', 'Apple 16GB Black 2nd Generation iPod Touch - MB531LLA/ Holds Up To 3,500 Songs In 128-Kbps AAC Format, 20,000 iPod-Viewable Photos And 20 Hours Of Video/ Wi-Fi (802.11b/g)/ Nike + iPod Support Built-In/ Maps Location-Based Service/ 3.5'' (Diagonal) Widescreen Multi-Touch Display/ 480x320-Pixel Resolution/ 480p And 576p Component TV Out/ Mac And Windows Compatible/ Black Finish', 299.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (327, 1, 'Apple 32GB Black 2nd Generation iPod Touch - MB533LLA', 'Apple 32GB Black 2nd Generation iPod Touch - MB533LLA/ Holds Up To 7,000 Songs In 128-Kbps AAC Format, 25,000 iPod-Viewable Photos And 40 Hours Of Video/ Wi-Fi (802.11b/g)/ Nike + iPod Support Built-In/ Maps Location-Based Service/ 3.5'' (Diagonal) Widescreen Multi-Touch Display/ 480x320-Pixel Resolution/ 480p And 576p Component TV Out/ Mac And Windows Compatible/ Black Finish', 399.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (328, 1, 'Apple 8GB Silver 4th Generation iPod Nano - MB598LLA', 'Apple 8GB Silver 4th Generation iPod Nano - MB598LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Silver Finish', 144.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (329, 1, 'Apple 8GB Blue 4th Generation iPod Nano - MB732LLA', 'Apple 8GB Blue 4th Generation iPod Nano - MB732LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Blue Finish', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (330, 1, 'Apple 8GB Pink 4th Generation iPod Nano - MB735LLA', 'Apple 8GB Pink 4th Generation iPod Nano - MB735LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Pink Finish', 144.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (331, 1, 'Apple 8GB Purple 4th Generation iPod Nano - MB739LLA', 'Apple 8GB Purple 4th Generation iPod Nano - MB739LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Purple Finish', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (332, 1, 'Apple 8GB Green 4th Generation iPod Nano - MB745LLA', 'Apple 8GB Green 4th Generation iPod Nano - MB745LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Green Finish', 149.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (333, 1, 'Apple 8GB Black 4th Generation iPod Nano - MB754LLA', 'Apple 8GB Black 4th Generation iPod Nano - MB754LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Black Finish', 144.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (334, 1, 'Apple 1GB Pink 2nd Generation iPod Shuffle - MB811LLA', 'Apple 1GB Pink 2nd Generation iPod Shuffle - MB811LLA/ Holds Up To 240 Songs In 128-Kbps AAC Format/ 12 Hours Of Continuous Playback/ Skip-Free Playback/ Battery Indicator/ Shuffle Switch/ Built-In Clip/ Mac And Windows Compatible/ Pink Finish', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (335, 1, 'Sony BRAVIA Black SXRD 1080p Home Theater Front Projector - VPLHW10', 'Sony BRAVIA Black SXRD 1080p Home Theater Front Projector - VPLHW10/ SXRD 1920 x 1080p Full HD Panels/ 30,000:1 Dynamic Contrast Ratio/ Fully Digital Signal Processing/ 200Watts Ultra-High-Pressure Lamp/ Whisper-Quiet Fan Noise And Noise Reduction Function/ Two HDMI Inputs/ BRAVIA Theatre Sync/ Remote Commander/ Black Finish', 3499.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (336, 1, 'Canon PIXMA Black Photo Printer - IP4600', 'Canon PIXMA Black Photo Printer - IP4600/ Premium Printer With Individual Ink Tanks And Built-In Auto Duplex/ Print 4'' x 6'' Photo In 20 Seconds/ Dual Paper Trays/ Maximum 9600 x 2400 Color Dpi/ Automatic Image Optimization/ ENERGY STAR Qualified/ Black Finish', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (337, 1, 'Canon PIXMA Photo All-In-One Printer - MP980', 'Canon PIXMA Photo All-In-One Printer - MP980/ High Performance Wireless Printer, Copier And Scanner/ Easy Scroll Wheel/ 3.5'' High Definition LCD Display/ Maximum 9600 x 2400 Color Dpi/ Six Individual Inks Tanks/ Auto Duplex Print/ Smart Copying/ Automatic Image Optimization/ No Warm-Up/ ENERGY STAR Qualified', 299.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (338, 1, 'Nintendo DS Lite Cobalt/Black Portable Gaming System - NDSUSGBMKB', 'Nintendo DS Lite Cobalt/Black Portable Gaming System - NDSUSGBMKB/ Dual 3'' TFT Color LCD Touchscreens/ Slimmer Design/ Dual Slot Compatibility (DS Lite/Game Boy Advance Game Paks)/ Twin Ultra Bright LCD Screens/ Up To 19 Hours Continuous Gameplay/ Nintendo Wi-Fi Connection/ Impressive 3D Graphics/ Dual Stereo Speakers/ Cobalt and Black Finish', 139.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (339, 1, 'Nintendo DS Lite Onyx Black Portable Gaming System - NDSUSGSKB', 'Nintendo DS Lite Onyx Black Portable Gaming System - NDSUSGSKB/ Dual 3'' TFT Color LCD Touchscreens/ Slimmer Design/ Dual Slot Compatibility (DS Lite/Game Boy Advance Game Paks)/ Twin Ultra Bright LCD Screens/ Up To 19 Hours Continuous Gameplay/ Nintendo Wi-Fi Connection/ Impressive 3D Graphics/ Dual Stereo Speakers/ Onyx Black Finish', 139.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (340, 1, 'Nintendo DS Lite Metallic Silver Portable Gaming System - NDSUSGSVB', 'Nintendo DS Lite Metallic Silver Portable Gaming System - NDSUSGSVB/ Dual 3'' TFT Color LCD Touchscreens/ Slimmer Design/ Dual Slot Compatibility (DS Lite/Game Boy Advance Game Paks)/ Twin Ultra Bright LCD Screens/ Up To 19 Hours Continuous Gameplay/ Nintendo Wi-Fi Connection/ Impressive 3D Graphics/ Dual Stereo Speakers/ Metallic Silver Finish', 139.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (341, 1, 'Nintendo DS Lite Metallic Rose Portable Gaming System - NDSUSGSZPB', 'Nintendo DS Lite Metallic Rose Portable Gaming System - NDSUSGSZPB/ Dual 3'' TFT Color LCD Touchscreens/ Slimmer Design/ Dual Slot Compatibility (DS Lite/Game Boy Advance Game Paks)/ Twin Ultra Bright LCD Screens/ Up To 19 Hours Continuous Gameplay/ Nintendo Wi-Fi Connection/ Impressive 3D Graphics/ Dual Stereo Speakers/ Metallic Rose Finish', 139.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (342, 1, 'Case Logic Vertical Universal Leather BlackBerry Case - CLP104BB', 'Case Logic Vertical Universal Leather BlackBerry Case - CLP104BB/ 360 Degree Swivel Belt Clip/ Magnetic Closure/ Soft Internal Lining/ Expandable Elastic Sides/ Compatible With Most BlackBerrys/ Leather Fabric/ Black Finish', 15.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (343, 1, 'Nintendo DS Lite Crimson/Black Portable Gaming System - NDSUSGSRMKB', 'Nintendo DS Lite Crimson/Black Portable Gaming System - NDSUSGSRMKB/ Dual 3'' TFT Color LCD Touchscreens/ Slimmer Design/ Dual Slot Compatibility (DS Lite/Game Boy Advance Game Paks)/ Twin Ultra Bright LCD Screens/ Up To 19 Hours Continuous Gameplay/ Nintendo Wi-Fi Connection/ Impressive 3D Graphics/ Dual Stereo Speakers/ Crimson/Black Finish', 139.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (344, 1, 'BlueAnt Bluetooth Voice Control Headset - V1', 'BlueAnt Bluetooth Voice Control Headset - V1/ Voice Control User Interface/ Voice Isolation Technology/ Dual Microphones/ Pairs With Up To 8 Bluetooth Devices/ Up To 5 Hours Talk-Time/ 3 Charging Options', 119.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (345, 1, 'Netgear Prosafe 5 Port Gigabit Ethernet Desktop Switch - GS105NA', 'Netgear Prosafe 5 Port Gigabit Ethernet Desktop Switch - GS105NA/ Auto-Switching Ethernet Connection/ Supports Windows And Macintosh Platforms/ Dual Color LEDs/ AutoUplink Technology/ Compact Metal Case/ Fanless Design/ Plug-And-Play Installation', 55.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (346, 1, 'Jabra Bluetooth Headset - BT2070', 'Jabra Bluetooth Headset - BT2070/ Up To 5.5 Hours Talk Time/ Up To 200 Hours Standby Time/ Earhook Included/ Bluetooth 2.0+ EDR & eSCO Technology/ Auto-Pairing/ Discreet Light/ Answer/End, Redial And Voice Dial Features/ USB Micro-B, 5-Pin Charging Plug', 49.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (347, 1, 'Canon Printer Ink Cartridge 4 Colors Pack - 2946B004', 'Canon Printer Ink Cartridge 4 Colors Pack - 2946B004/ FINE Technology For Exceptional Sharpness And Detail/ Compatible With PIXMA iP3600, PIXMA iP4600, PIXMA MP620 And PIXMA MP980/ Includes 4 Ink Tanks (Black, Cyan, Magenta, Yellow)', 47.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (348, 1, 'Canon PIXMA Photo All-In-One Printer - MP480', 'Canon PIXMA Photo All-In-One Printer - MP480/ High Performance Printer, Copier And Scanner/ 1.8'' TFT Display/ Maximum 2400 x 4800 Color Dpi/ Smart Scanning/ Quick Start/ Built-In Media Card Slot/ ENERGY STAR Qualified', 99.00); -INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (349, 1, 'Sanus 30'' - 58'' VisionMount Flat Panel TV Black Tilting Wall Mount - LT25B1', 'Sanus 30'' - 58'' VisionMount Flat Panel TV Black Tilting Wall Mount - LT25B1/ Lateral Shift Adjustment/ Virtual Axis/ Height and Level Adjustments/ ClickStand/ ClickFit System/ Open Wall Plate/ Black Finish', 199.00); +-- Products 350 entries from https://github.com/etano/productner/blob/master/Product%20Dataset.csv +-- Original source: Justifying recommendations using distantly-labeled reviews and fined-grained aspects, Jianmo Ni, Jiacheng Li, Julian McAuley, Empirical Methods in Natural Language Processing (EMNLP), 2019ss +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (0, 1, 'Bose Acoustimass 5 Series III Speaker System - AM53BK', 'Bose Acoustimass 5 Series III Speaker System - AM53BK/ 2 Dual Cube Speakers With Two 2-1/2'' Wide-range Drivers In Each Speaker/ Powerful Bass Module With Two 5-1/2'' Woofers/ 200 Watts Max Power/ Black Finish', 399.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (1, 1, 'Sony Switcher - SBV40S', 'Sony Switcher - SBV40S/ Eliminates Disconnecting And Reconnecting Cables/ Compact Design/ 4 A/V Inputs With S-Video Jacks/ 1 A/V Output With S-Video (Y/C)Jack/ 2 Audio Output', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (2, 1, 'Bose 27028 161 Bookshelf Pair Speakers In White - 161WH', 'Bose 161 Bookshelf Speakers In White - 161WH/ Articulated Array Speaker Design/ High-Excursion Twiddler Drivers/ Magnetically Shielded/ Priced Per Pair/ White Finish', 158.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (3, 1, 'Denon Stereo Tuner - TU1500RD', 'Denon Stereo Tuner - TU1500RD/ RDS Radio Data System/ AM-FM 40 Station Random Memory/ Rotary Tuning Knob/ Dot Matrix FL Display/ Optional Remote', 375.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (4, 1, 'Panasonic Integrated Telephone System - KXTS108W', 'Panasonic Integrated Telephone System - KXTS108W/ 16 Digit LCD With Clock/ Hands Free Speakerphone/ Built-In Data Port/ 10-Station One-Touch Dialing/ 3-Step Ringer Volume/ White Finish', 44.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (5, 1, 'Panasonic Hands-Free Headset - KXTCA86', 'Panasonic Hands-Free Headset - KXTCA86/ Comfort Fit And Fold Design/ Noise Cancelling Microphone/ Standard 2.5mm Connection', 14.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (6, 1, 'Panasonic Hands Free Headset - KXTCA92', 'Panasonic Hands Free Headset - KXTCA92/ Comfort Fit With Fold Design/ Noise Cancelling Microphone/ Volume Control/ Mute/ Standard 2.5mm Connection', 25.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (7, 1, 'Cuisinart Convection-Oven-Toaster-Broiler With Exact Heat Sensor - TOB165WH', 'Cuisinart Convection-Oven-Toaster-Broiler With Exact Heat Sensor - TOB165WH/ 0.5 Cubic Foot Oven Capacity/ LED Indicators/ Individual Or Combination Settings/ Always Even Shade Control/ 4 Hour Automatic Shut Off/ Slide-Out Crumb Tray/ Includes Broiling Pan/ White Finish', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (8, 1, 'Frigidaire 24'' White Built-In Dishwasher - FDB130WH', 'Frigidaire 24'' FDB130RGS White Built-In Dishwasher - FDB130WH/ Convection Drying System/ QuietSound Sound Insulation Package/ 2 Wash Levels/ Adjustable Rinse Aid Dispenser/ Self Cleaning Filter/ White Finish', 229.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (9, 1, 'Cuisinart Cordless Electric Kettle - KUA17', 'Cuisinart Cordless Electric Kettle - KUA17/ 1-3/4 Quart Capacity/ Automatic Shut-Off/ Indicator Light/ Splash Guard Spout/ Cord Storage In Base/ Chrome Finish', 70.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (10, 1, 'Omnimount Wall Speaker Mount - 20WLBK', 'Omnimount Wall Speaker Mount - 20WLBK/ Stainless Steel Shafts And All Necessary Hardware Included/ Supports Speakers Up To 20 lbs./ Sold As Single / Black Finish', 39.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (11, 1, 'Omnimount Wall Speaker Mount - 20WLWH', 'Omnimount Wall Speaker Mount - 20WLWH/ Stainless Steel Shafts And All Necessary Hardware Included/ Supports Speakers Up To 20 lbs./ Sold as each / White Finish (Photo Showing Black)', 40.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (12, 1, 'Denon Semi-Automatic Turntable - Black Finish - DP29F', 'Denon Semi-Automatic Turntable - DP29F/ Metal Platter/ Built-In RIAA Equalizer/ DC Servo Motor/ 2 Speed 33 + 45 RPM/ Built-In Phono PreAmp', 150.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (13, 1, 'Escort Passport Radar And Laser Detector - Black Finish - 8500', 'Escort Passport X50 Radar And Laser Detector - 8500/ X-Band, K-Band, Ka-Band Operating Bands/ AlGaAs 280 LED Matrix/Text Display Type/ 3-Level Dimming, Plus Dark Mode/ Auto Mute/ City Mode Sensitivity/ Compact Size/ Red Display', 313.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (14, 1, 'Sony Compact Disc Player/Recorder - RCDW500C', 'Sony Compact Disc Player/Recorder - RCDW500C/ 5-CD/Dual Deck With 4x High Speed Dubbing/ CD, CD-R, CD-RW, MP3 Playback Capable/ Super Bit Mapping Recording/ High Speed Finalizing', 299.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (15, 1, 'Sanus WMS3B Black Weather Resistant Small Speaker Wall Mount - WMS3B', 'Sanus WMS3B Black Small Speaker Wall Mount - WMS3B/ Holds Up To An 8 Pound Speaker/ Multiple Pivot Points/ Weather Resistant For Indoor/Outdoor Use/ Black Finish/ Priced Per Pair', 29.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (16, 1, 'Sanus WMS3S Silver Weather Resistant Small Speaker Wall Mount - WMS3S', 'Sanus WMS3S Silver Small Speaker Wall Mount - WMS3S/ Holds Up To An 8 Pound Speaker/ Multiple Pivot Points/ Weather Resistant For Indoor/Outdoor Use/ Silver Finish/ Priced Per Pair', 29.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (17, 1, 'Sanus Euro Foundations Satellite Speaker Stand - EFSATB', 'Sanus Euro Foundations Satellite Speaker Stand - EFSATB/ Sturdy Base/ Adjustable Pillar And Floor Spikes/ Includes Three Different Speaker Mounting Methods/ Contemporary European Design/ Satin Powder-Coated Black Finish/ Priced Per Pair', 79.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (18, 1, 'Sanus Euro Foundations Satellite Speaker Stand - EFSATS', 'Sanus Euro Foundations Satellite Speaker Stand - EFSATS/ Sturdy Base/ Adjustable Pillar And Floor Spikes/ Includes Three Different Speaker Mounting Methods/ Contemporary European Design/ Satin Powder-Coated Silver Finish/ Priced Per Pair', 79.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (19, 1, 'Escort Cordless Solo Radar Detector - S2E', 'Escort Cordless Solo Radar Detector - S2E/ S2/ 10 Programmable Features/ High-Efficiency Power Management/ Ultra-Performance Laser Protection/ AutoSensitivity Mode/ High Resolution Graphic LCD Display/ Built-In Earphone Jack', 343.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (20, 1, 'Kenwood 6-Disc CD Changer - KDCC669', 'Kenwood 6-Disc CD Changer - KDCC669/ 3-Angle Mounting/ CD, CD-R And CD-RW Playback/ Anti-Vibration Disc Transport/ Compatible With All Kenwood Units With Changer Control', 129.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (21, 1, 'Cuisinart Automatic Brew And Serve Coffeemaker - DTC975BK', 'Cuisinart Automatic Brew And Serve Coffeemaker - DTC975BK/ 12-Cup Double-Wall Insulated Stainless Steel Carafe/ Fully Automatic With 24-Hour Programmability/ Patented Brew-Through And Pour-Through Lid/ Brew Pause Feature/ Automatic Shutoff/ Black And Stainless Steel Finish', 99.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (22, 1, 'Sharp Over The Counter Microwave Oven - R1214SS', 'Sharp Over The Counter Microwave Oven - R1214SS/ 1.5 Cubic Foot Capacity/ 1100 Watts/ 24 Automatic Settings/ 2-Color Lighted LCD/ Smart And Easy Sensor Settings/ Auto-Touch Control Panel/ Stainless Steel Finish', 429.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (23, 1, 'Toshiba Rechargeable 5-Hour Battery Pack - MEDB05LX', 'Toshiba Rechargeable 5-Hour Battery Pack - MEDB05LX/ Works With SDP2500 And SDP2600 Portable DVD Players', 149.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (24, 1, 'Sony Super Audio CD Player - SCDCE595', 'Sony Super Audio CD Player - SCDCE595/ Multi-Channel Super Audio CD Playback Capability/ CD/CD-R/CD-RW Playback Capability/ Multi-Channel Direct Stream Digitial Decoder/ Multi-Channel Management System/ SACD Text/CD Text Capability/ ETA LATE JANUARY 2009', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (25, 1, 'Delonghi Twenty Four Seven Coffee Maker In Black - DC50B', 'Delonghi Twenty Four Seven Coffee Maker - DC50B/ 4-Cup Capacity/ Easy-Access, Washable Filter Basket/ Black Finish', 22.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (26, 1, 'Sanus Silver LCD Television Turntable - TVLCDS', 'Sanus Silver LCD Television Turntable - TVLCDS/ Holds 13''-30'' Size Televisions/ 360 Degree Rotation/ Silver Finish', 29.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (27, 1, 'Delonghi Twenty Four Seven Coffee Maker - DC50W', 'Delonghi Twenty Four Seven Coffee Maker - DC50W/ 4-Cup Capacity/ Easy-Access, Washable Filter Basket/ White Finish', 22.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (28, 1, 'Universal IR/RF Remote - MX350', 'Universal IR/RF Remote - MX350/ Controls Up To 10 Components/ Extensive Macro Programming/ Memory Back-Up/ One Hand Ergonomics', 149.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (29, 1, 'Universal IR/RF Aeros Remote Control- MX850 - MX850', 'Universal IR/RF Aeros Remote Control- MX850/ Laser Etched Buttons/ Centrally Located Joystick/ Memory Back-Up/ One Hand Ergonomics/ Controls Up To 20 Components', 399.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (30, 1, 'Panasonic 5-Pack DVD-RAM Discs - LMAF120LU5', 'Panasonic 5-Pack DVD-RAM Discs - LMAF120LU5/ Slim Cases/ 2-3x Speed/ Single-Sided/ 120 Minute (4.7GB/Non-Cartridge)/ For Video Recording/ 5 Pack', 15.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (31, 1, 'Sanus 13'' - 30'' VisionMount Flat Panel TV Silver Wall Mount - VMFS', 'Sanus 13'' - 30'' VisionMount Flat Panel TV Silver Wall Mount - VMFS/ Supports Up To 40 lbs/ Easy To Install/ Fingertip Virtual Axis Tilting System/ Silver Finish', 39.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (32, 1, 'Weber Performer 22-1/2'' Charcoal Grill - 841001', 'Weber Performer 22-1/2'' Charcoal Grill - 841001/ Push-Button Igniter/ Porcelain-Enameled Bowl And Lid/ Dual-Purpose Themometer/ Crackproof All-Weather Wheels/ Black Lid Finish/ Assembly Required', 329.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (33, 1, 'Sanus 13'' - 30'' Flat Panel TV Black Wall Mount - VM1B', 'Sanus 13'' - 30'' Flat Panel TV Black Wall Mount - VM1B/ Tilt And Swivel Motion/ Rigid Extruded Aluminum Construction/ Supports Up To 50 Lbs/ Black Finish', 69.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (34, 1, 'Sanus 15'' - 40'' Flat Panel TV Silver Wall Mount - VM400S', 'Sanus 15'' - 40'' Flat Panel TV Silver Wall Mount - VM400S/ Virtual Axis Tilt Adjustment System/ Hinged Arm Extend From 3.5'' To 20''/ Durable Powder Coated Silver Finish', 219.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (35, 1, 'Delonghi Oil Filters - FK8', 'Delonghi Oil Filters - FK8/ Made For Use With D895UX/ 3 Pack', 18.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (36, 1, 'Weber Performer 22-1/2'' Charcoal Grill - 848001', 'Weber Performer 22-1/2'' Charcoal Grill - 848001/ Push-Button Igniter/ Porcelain-Enameled Bowl And Lid/ Dual-Purpose Themometer/ Crackproof All-Weather Wheels/ Blue Lid Finish/ Assembly Required', 329.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (37, 1, 'Whirlpool 24'' Built-In Dishwasher - DU1055BK', 'Whirlpool 24'' Built-In Dishwasher - DU1055BK/ 14-Five Piece Place Setting Super Capacity Tub/ 5 Level Direct Feed SheerClean Wash System/ 4 Cycles/ AnyWare Plus Silverware Basket/ Quiet Partner I Sound Package/ Energy Star Qualified/ Black Finish', 397.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (38, 1, 'Whirlpool 24'' Built-In Dishwasher - DU1055SS', 'Whirlpool 24'' Built-In Dishwasher - DU1055SS/ 14-Five Piece Place Setting Super Capacity Tub/ 5 Level Direct Feed SheerClean Wash System/ 4 Cycles/ Soak And Scour Option/ AnyWare Plus Silverware Basket/ Quiet Partner I Sound Package/ Energy Star Qualified/ Black On Stainless Finish', 491.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (39, 1, 'Sony Soft Cyber-Shot Carrying Case - LCSCST', 'Sony Soft Cyber-Shot Carrying Case - LCSCST/ Sturdy Nylon Construction/ Compact And Very Lightweight/ Stylish Black Design', 14.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (40, 1, 'Pioneer XM Digital Satellite Tuner for Pioneer Headunits - GEXP920XM', 'Pioneer XM Digital Satellite Tuner For Pioneer Headunits - GEXP920XM/ SAT Radio Ready/ XM Ready/ Built-In FM Modulator/ 18- Station/ 6- Button Presets/ Magne Mount Installation', 98.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (41, 1, 'Sanus Universal Projector Ceiling Mount - Black Finish - VMPR1B', 'Sanus Universal Projector Ceiling Mount - VMPR1B/ Designed For DLP And LCD Projectors/ Quick Release Mechanism/ 50 Lbs Capacity/ Black Finish', 129.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (42, 1, 'Kenwood iPod Mobile Interface - KCAIP500', 'Kenwood iPod Mobile Interface - KCAIP500/ Compatible With Most Kenwood Receivers/ Text Display, Multiple Search Mode/ Powers And Charges iPod', 49.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (43, 1, 'Pioneer Wired Marine Remote Control Display - CDMR80D', 'Pioneer Wired Marine Remote Control Display - CDMR80D/ Compatible With Pioneer Headunits/ Satellite Radio Text Indications/ ATT (Volume Attenuator) Button', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (44, 1, 'Bose Second Zone Remote - PMC2', 'Bose Second Zone Remote - PMC2/ Controls Lifestyle 38 Or 48 Media Center/ TV, VCR, Cable Box, Satellite Receiver/ Accesses Digitally Stored CDs In UMusic System', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (45, 1, 'Sony DVD-R Recordable Camcorder Media - 3DMR30L1H', 'Sony DVD-R Recordable Camcorder Media 3 Pack - 3DMR30L1H/ 30 Minute, 1.4 GB/ Accucore Technology/ Store Digital Video, Audio And Multimedia Files/ 3 Pack', 9.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (46, 1, 'Sony VAIO Neoprene Laptop Carrying Case - Black Finish - VGPAMC3', 'Sony VAIO Neoprene Laptop Carrying Case - VGPAMC3/ Compatible With VAIO A Series 15'' And FS Series 15.4'' Widescreen Notebooks/ Helps Protect Your Notebook From Scratches, Spills And Dings/ Neoprene Offers Durable And Water-Resistant Protection', 22.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (47, 1, 'Canon Color Ink Tank - CL41CL', 'Canon Color Ink Tank - CL41CL/ Compatible With The Pixma iP1600, MP170 Printers', 24.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (48, 1, 'Canon Cyan Ink Tank - Cyan - CLI8C', 'Canon Cyan Ink Tank - CLI8C/ Compatible With The Pixma iP4200, iP5200, iP5200R, iP6600D, MP500, MP800 Printers', 16.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (49, 1, 'Canon Magenta Ink Tank - Magenta - CLI8M', 'Canon Magenta Ink Tank - CLI8M/ Compatible With The Pixma iP4200, iP5200, iP5200R, iP6600D, MP500, MP800 Printers', 16.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (50, 1, 'Canon Cyan Photo Ink Cartridge - Cyan - CLI8PC', 'Canon Cyan Photo Ink Cartridge - CLI8PC/ Compatible With The Pixma iP6600D Printer', 16.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (51, 1, 'Canon Magenta Photo Ink Cartridge - Magenta - CLI8PM', 'Canon Magenta Photo Ink Cartridge - CLI8PM/ Compatible With The Pixma iP6600D Printer', 16.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (52, 1, 'Canon Yellow Ink Cartridge - Yellow - CLI8Y', 'Canon Yellow Ink Cartridge - CLI8Y/ Compatible With The Pixma iP4200, iP5200, iP5200R, iP6600D, MP500, MP800 Printers', 16.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (53, 1, 'Canon Black Ink Cartridge - Black - PG40BK', 'Canon Black Ink Cartridge - PG40BK/ Compatible With The Pixma iP1600, MP170 Printers', 19.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (54, 1, 'Pioneer Voice Command Pack - Black Finish - CDVC1', 'Pioneer Voice Command Pack - CDVC1/ Microphone And Steering Wheel Remote Control/ Use Your Voice To Control Navigation, Audio, And Video Functions/ Compatible With AVICN2 And AVICN1', 48.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (55, 1, 'Sony VAIO Neoprene Notebook With AC Adapter Case - Black Finish - VGPAMC2', 'Sony VAIO Neoprene Notebook With AC Adapter Case - VGPAMC2/ Helps Protect Your Notebook From Scratches, Spills And Dings/ Neoprene Offers Durable, Water-Resistant Protection/ Fits 17'' Widescreen Notebooks', 24.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (56, 1, 'NetGear ProSafe 24 Port Smart Switch - FS726TP', 'NetGear ProSafe 24 Port Smart Switch - FS726TP/ Two Gigabit Ports Plus Easy Browser/ ProSafe Network Management Software/ Web Based Smart Management Features', 605.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (57, 1, 'Garmin StreetPilot C330 Dash Mount - Black Finish - 0101061300', 'Garmin StreetPilot C330 Dash Mount - 0101061300/ Non-Skid Mount Design/ Fully Portable/ Includes 12/24 Volt Cigarette Lighter Adapter/ Black Finish', 57.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (58, 1, 'Yamaha High Performance Subwoofer - Black Finish - YSTFSW100BK', 'Yamaha High Performance Subwoofer - YSTFSW100BK/ 130 Watts Dynamic Power/ Advanced YST II (Yamaha Active Servo Technology)/ Half Pipe Port/ Powerful 6.5? Multi-Range Driver/ Magnetically Shielded/ 16Hz Ultra Low Frequency Reproduction/ Slim Design/ Black Finish', 150.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (59, 1, 'Netgear ProSafe 16 Port 10/100 Desktop Switch - Purple Finish - FS116P', 'Netgear ProSafe 16 Port 10/100 Desktop Switch - FS116P/ 16 Auto Speed-Sensing 10/100 RJ-45 Ports/ 96 KB Embedded Memory Per Unit', 299.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (60, 1, 'Canon High Capacity Color Ink Cartridge - Color Ink - CL51', 'Canon High Capacity Color Ink Cartridge - CL51/ Compatible With Pixma iP6210D, iP6220D, MP150, MP170 And MP450 Printers', 35.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (61, 1, 'Canon Photo Ink Cartridge - CL52', 'Canon Photo Ink Cartridge - CL52/ Compatible With Pixma iP6210D And iP6220D Printers', 25.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (62, 1, 'Cuisinart Programmable Coffeemaker - Stainless Steel Finish - DCC2000', 'Cuisinart 12-Cup Programmable Coffeemaker - DCC2000/ Fully Programmable/ Removable Coffee Reservoir/ Easy-To-Read Coffee Gauge/ Visible Water Level Indicator/ Removable Drip Tray/ Charcoal Water Filter/ Stainless Steel Finish', 100.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (63, 1, 'Sanus Center Channel Speaker Mount - Black Finish - VMCC1B', 'Sanus Center Channel Speaker Mount - VMCC1B/ Works With Sanus Models VMSA, VMAA18, VMAA26, VMDD26 And VMCM1/ Easy To Install/ Mounting Hardware Included/ Black Finish', 99.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (64, 1, 'Netgear RangeMax Wireless Access Point - White Finish - WPN802NA', 'Netgear RangeMax Wireless Access Point - WPN802NA/ Improves Performance Of Existing Legacy 802.11b And 802.11g Wireless Devices Up To 50 Percent/ Wired Equivalent Privacy (WEP) 64-Bit,128-Bit Encryption/ Wi-Fi Protected Access (WPA, Pre-Shared Key)', 130.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (65, 1, 'Weber Q 300 Liquid Propane Outdoor Grill - 426001', 'Weber Q 300 Liquid Propane Outdoor Grill - 426001/ Liquid Propane Fuel Type/ Two Burners For Direct And Indirect Cooking/ Thermometer Built Into The Lid/ Regulator Hose/ 12-Pound Turkey Capacity/ Cart Included/ Cast Aluminum Finish/ Assembly Required', 349.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (66, 1, 'Sony Lightweight Tripod - Black Finish - VCTR100', 'Sony Lightweight Tripod - VCTR100/ Lightweight And Portable/ Expands From 14'' To 39''/ 3-Way Panhead Function/ Black Finish', 34.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (67, 1, 'Sanus VMAV Black VisionMount Component Wall Shelf VMAVB In Black - VMAVB', 'Sanus VMAV Black VisionMount Component Wall Shelf - VMAVB/ Single Wall Mount Shelf For Audio-Video Component/ Metal V Arm/ Black Finish', 34.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (68, 1, 'Sony PlayStation 2 DUALSHOCK 2 Analog Controller - Emerald Finish - 711719706205', 'Sony PlayStation 2 DUALSHOCK 2 Analog Controller - 711719706205/ Analog Pressure Sensitivity On All Action Buttons/ Built-In DUALSHOCK Vibration Function/ Twin Analog Control Sticks/ Intelligent Self-Calibrating Analog System/ Emerald Finish', 24.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (69, 1, 'Sony PlayStation 2 8MB Memory Card - Black Finish - 711719702702', 'Sony PlayStation 2 8MB Memory Card - 711719702702/ Save And Load High Scores, Positions And Replays/ MagicGate Encryption/ Black Finish', 24.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (70, 1, 'Sony PlayStation 2 8MB Memory Card (2 Pack) - Red/Blue Finish - 711719706700', 'Sony PlayStation 2 8MB Memory Card (2 Pack) - 711719706700/ Save And Load High Scores, Positions And Replays/ MagicGate Encryption/ Red/Blue Finish', 34.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (71, 1, 'Universal RF Series MasterControl Remote Control - RF20', 'Universal RF Series MasterControl Remote Control ? RF20/ Control Up To 10 Components/ 432 MacroPower Buttons/ Customizable LCD Screen/ Pre-Programmed Codes/ Learning Capable/ SimpleSound/ Fully Backlit Keypad/ DVD Guide', 79.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (72, 1, 'Panasonic Network Camera - White Finish - BLC1A', 'Panasonic Network Camera - BLC1A/ Automatic Network Configuration/ Built-In Calendar Timer/ Auto Time Adjustment With NTP/ Up To 10x Digital Zoom/ Multi-Language Interface/ White Finish', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (73, 1, 'Pioneer 6.5'' 2-Way Marine White Speakers - TSMR1640', 'Pioneer 6.5'' 2-Way Marine Speakers - TSMR1640/ 160 Watts Maximum Power Handling (30 Watts Nominal)/ 1-1/8'' Poly-Ether Imide Dome Tweeter With Magnetic Fluid And Equalizer/ Tinsel Lead Wire And Terminals Are Gold-Plated For Extra Protection', 120.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (74, 1, 'Apple USB Modem - White Finish - MA034ZA', 'Apple USB Modem - MA034ZA/ Supports Caller ID, Wake On Ring, Telephone Answering (V.253), Modem On Hold/ V.92 Software Support', 54.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (75, 1, 'Linksys EtherFast 4124 24-Port Ethernet Switch - EF4124', 'Linksys EtherFast 4124 24-Port Ethernet Switch - EF4124/ 24 Autosensing 10/100 Full Duplex, Auto MDI/MDI-X Ports/ Up To 200Mbps/ Address Learning, Aging And Data Flow Control/ Compact Size', 119.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (76, 1, 'Sony DVD Remote Control For PS2 - Black Finish - 711719707608', 'Sony DVD Remote Control For PS2 - 711719707608/ Works As A Full-Featured Standard Controller/ Performs Audio Track Selection, Subtitle Display And Multiangle Options/ Designed To Match The Sleek Look Of PlayStation 2', 19.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (77, 1, 'Nikon 55-200MM Zoom-Nikkor Lens Accessory - 2156', 'Nikon 55-200MM Zoom-Nikkor Lens Accessory - 2156/ 3.6X Zoom/ 55 - 200MM/ Silent Wave Motor/ Two ED Glass Elements/ Focus Mode Switch', 199.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (78, 1, 'Waring Professional Cool-Touch Deep Fryer - Black/Stainless Steel Finish - DF100', 'Waring Professional Cool-Touch Deep Fryer - DF100/ Large Frying Basket/ 60-Minute Timer/ Removable Control Panel/ Unique Heating Element/ Breakaway Cord/ LED Power Indicators', 70.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (79, 1, 'Denon Fully Automatic Analog Turntable - DP300F', 'Denon Fully Automatic Analog Turntable - DP300F/ Removable Headshell/ Automatic Startup/ Built-In Phono Equalizer/ DC Servo Motor And Belt Drive System/ MM Cartridge', 329.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (80, 1, 'Terk Mini Tuner Cartridge For XM Ready Home Products - CNP2000', 'Terk Mini Tuner Cartridge For XM Ready Home Products - CNP2000/ Connects To Any Home Or Portable Audio Product With The XM Ready Logo', 29.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (81, 1, 'Panasonic Plain Paper Fax/Copier With Cordless Phone Answering System - Grey Finish - KXFG2451', 'Panasonic Plain Paper Fax/Copier With Cordless Phone Answering System - KXFG2451/ Automatic Fax/Phone Switching/ 2.4GHz GigaRange Cordless Handset With Handset Speakerphone/ Voice Enhancer Technology/ All-Digital Answering System (18 Min)/ Navigator Key With 2-Line Display', 119.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (82, 1, 'Omnimount Moda 2 Shelf Wall Furniture - MWFS', 'Omnimount Moda 2 Shelf Wall Furniture - MWFS/ Modular Design/ Integrated Cable Management/ Tempered Glass Shelves', 299.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (83, 1, 'Terk Mini Tuner Home Dock For XM Ready Home Products - Black Finish - CNP2000H', 'Terk Mini Tuner Home Dock For XM Ready Home Products - CNP2000H/ Comes Complete With The Docking Station, Protective Cover And A Window Sill Mount Antenna/ Interfaces To Existing And Future XM Ready Products', 30.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (84, 1, 'Denon 5-Disc CD Auto Changer - Black Finish - DCM290', 'Denon 5-Disc CD Auto Changer - DCM290/ CD-R/RW Playback/ Advanced Multilevel Noise Shaping DAC/ Digital Filter/ 3-Mode Random Playback/ Intelligent Disc Scan/ Music Calendar Display/ Black Finish', 249.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (85, 1, 'Denon 5 Disc CD Player - Black Finish - DCM390', 'Denon 5 Disc CD Player - DCM390/ CD-R/RW Playback/ MP3, WMA And HDCD Decoding/ Advanced Multilevel Noise Shaping DAC/ 8 Times Oversampling Digital Filter/ 3 Mode Random Playback/ Intelligent Disc Scan/ 20 Selection Music Calendar Display/ Black Finish', 349.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (86, 1, 'Denon Progressive Scan Universal DVD Player - DVD2930CI', 'Denon Progressive Scan Universal DVD Player - DVD2930CI/ AC 120 Volts/ 60 Hertz/ 45 Watts/ Infrared Pulse Remote Control', 849.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (87, 1, 'Netgear Prosafe 16 Port 10/100 Rackmount Switch - Black Finish - JFS516NA', 'Netgear Prosafe 16 Port 10/100 Rackmount Switch - JFS516NA/ Sixteen Switched Ports Provide Private Bandwidth For PCs, Servers Or Hubs/ Store-And-Forward Packet Switching/ Compatible With All Major Network Software/ Auto Detects Speed And Duplex/ Black Finish', 131.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (88, 1, 'Terk XM Outdoor Home Antenna - Grey Finish - XM6', 'Terk XM Outdoor Home Antenna - XM6/ Universal Mounting Roof, Wall Or Mast/ For Use With Single-Input Receivers/ Connects RG6 Cable For Easy Routing Up To 100 Ft. (Optimal Disatnce 75 Ft.)', 80.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (89, 1, 'Sanus 9'' - 17'' VisionMount Series Under Cabinet Flat Panel TV Silver Wall Mount - VMUC1S', 'Sanus 9'' - 17'' VisionMount Series Under Cabinet Flat Panel TV Silver Wall Mount - VMUC1S/ Tilting Motion/ Swivels Left And Right/ Universal Mounting Bracket/ Easy To Install/ Silver Finish', 99.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (90, 1, 'Sanus 15'' - 40'' VisionMount Flat Panel TV Black Wall Mount - MT25B1', 'Sanus 15'' - 40'' VisionMount Flat Panel TV Black Wall Mount - MT25B1/ Solid Heavy-Gauge Steel Construction/ Durable Powder-Coated Finish/ Virtual Axis Tilt Adjustment System/ Up to 100 Lbs Support/ Black Finish', 99.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (91, 1, 'Garmin GPS Carrying Case - Black Finish - 0101070400', 'Garmin GPS Carrying Case - 0101070400/ Protect Your GPS By Absorbing The Impact From Routine Drops/ Prevent Damage From Scratches And Spills', 30.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (92, 1, 'Tech Craft Avalon Series TV Stand - Black Finish - ABS32', 'Tech Craft Avalon Series TV Stand - ABS32/ 32'' Wide ''Tall Boy'' For Smaller Screen Flat Panels/ Molded Top Gives It An Elegant Appearance/ Framed Doors To Conceal Components/ Black Finish', 249.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (93, 1, 'Tech Craft Avalon Series TV Stand - SWP48', 'Tech Craft Avalon Series TV Stand - SWP48/ 48'' Wide Credenza For Flat Panel TVs And DLPs/ 260 Lbs TV Weight Capacity/ 50 Lbs Shelf Weight Capacity/ Wood Veneer Finish', 299.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (94, 1, 'Sanus 15'' - 40'' VisionMount Flat Panel TV Black Wall Mount - MF110B', 'Sanus 15'' - 40'' VisionMount Flat Panel TV Black Wall Mount - MF110B/ Mounts Within 2.5'' Of Wall/ Holds Up To 100 Lbs/ Powder Coated Black Finish', 179.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (95, 1, 'Garmin Nuvi 360 010-10815-00 Black Replacement Vehicle Suction Cup Mount - 0101081500', 'Garmin Nuvi 360 010-10815-00 Black Replacement Vehicle Suction Cup Mount - 0101081500/ Compatible With The Nuvi 360/ It Is A Replacement/ Black Finish', 39.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (96, 1, 'Garmin Nuvi 360 010-10723-06 Black 12 Volt Adapter Cable - 0101072306', 'Garmin Nuvi 360 010-10723-06 Black 12 Volt Adapter Cable - 0101072306/ Compatible With The Nuvi 350 And 360/ It Is A Replacement/ Black Finish', 47.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (97, 1, 'Garmin Nuvi 660 010-10747-03 Black 12 Volt Adapter Cable - 0101074703', 'Garmin Nuvi 660 010-10747-03 Black 12 Volt Adapter Cable - 0101074703/ Compatible With The Nuvi 660/ Black Finish', 39.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (98, 1, 'Garmin 010-10702-00 Black GA 25MCX Remote GPS Antenna - 0101070200', 'Garmin 010-10702-00 Black GA 25MCX Remote GPS Antenna - 0101070200/ Built-In Magnetic Mount/ Includes A Cable Over 8 Feet Long And MCX Connector', 30.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (99, 1, 'Garmin 010-10823-00 Black Nuvi 660 Vehicle Suction Cup Mount - 0101082300', 'Garmin 010-10823-00 Black Nuvi 660 Vehicle Suction Cup Mount - 0101082300/ Replacement Suction Cup Mount/ Compatible With Nuvi 660/ Black Finish', 46.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (100, 1, 'Universal MRF-350 RF Black Base Station - MRF350', 'Universal MRF-350 RF Black Base Station - MRF350/ No More Pointing/ RF Addressable/ IR Routing/ Expand Operating Range Up To 100 Feet/ Compatible With MX-3000, TX-1000, MX-950 And MX-900 Only/ Black Finish', 250.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (101, 1, 'Bose In-Ear Black Headphones - BOSEIE', 'Bose In-Ear Black Headphones - BOSEIE/ Comfortable In-Ear Design/ TriPort Acoustic Headphone Structure/ S, M And L Removable Silicone Tips/ Carrying Case/ Black Finish', 99.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (102, 1, 'Nyko PlayStation 3 Dual Charger AC - 743840830153', 'Nyko PlayStation 3 Dual Charger AC - 743840830153/ Charge 2 Wireless PS3 Controllers From A Standard Wall Outlet/ Collapsable Prongs For Easy Storage/ Charges Other Mini USB Devices', 24.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (103, 1, 'Nyko PlayStation 3 ChargeLink USB Charging Cable - 743840830009', 'Nyko PlayStation 3 ChargeLink USB Charging Cable - 743840830009/ Charge And Play At The Same Time/ Unique Woven Cable Shielding Improves Cable Durability/ 10 Ft Cable', 14.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (104, 1, 'Linksys Wireless-G VPN Broadband Silver Router - WRV54G', 'Linksys Wireless-G VPN Broadband Silver Router - WRV54G/ Built-In VPN Endpoint Capability/ Securely Connect Up To 50 Remote Or Traveling Users To Your Office Network Via VPN/ Hotspot Ready With Subscriber Registration, Authorization And Authentication Functions/ Silver Finish', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (105, 1, 'Bose SL2 Wireless Black Surround Link - SL2WIRELESS', 'Bose SL2 Wireless Black Surround Link - SL2WIRELESS/ Transmitter And Receiver Work On A Radio Frequency Signal Effective From Up To 30 Feet In The Same Room/ Compatible With All Lifestyle Systems, CD-Based Models And All 5.1-Channel Acoustimass Home Entertainment Systems/ Black Finish', 249.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (106, 1, 'Sony Digital Photo Printer Paper 120 Pack - SVMF120P', 'Sony Digital Photo Printer Paper 120 Pack - SVMF120P/ 4'' x 6'' Print Paper With Snap-Off Edges/ Super Coat 2 Protective Lamination/ Water Damage And Fingerprint Resistant Prints/ 120 Sheets Of Paper And Print Ribbon/ For DPPF Series Digital Photo Printers Only', 35.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (107, 1, 'Canon PGI-5BK Black Ink Tank Cartridge - PGI5BK', 'Canon PGI-5BK Black Ink Tank Cartridge - PGI5BK/ Smudge Resistant/ Resists Smearing Caused By Highlighters/ Smudge Resistant/ Pigment Ink Formulation For Long Lasting Prints', 16.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (108, 1, 'Lowepro SlingShot 200 AW Digital Camera Back Pack - SLINGSHOT200AW', 'Lowepro SlingShot 200 AW Digital Camera Back Pack - SLINGSHOT200AW/ Holds A SLR With Attached Compact Zoom Lens Plus 3-4 Extra Lenses Or Flash Unit/ Water-Resistant Micro Fiber/ Ripstop Nylon/ Includes A Built-In Memory Card Puch, Micro Fiber LCD Cloth And Two Organizer Pockets', 89.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (109, 1, 'Tech Craft ABS48 Antique Black Avalon Series 48'' TV Stand - ABS48', 'Tech Craft ABS48 Antique Black Avalon Series 48'' TV Stand - ABS48/ For Flat Panels And DLP TV?s/ Molded Top And Shaped Skirt/ Framed Doors/ Antique Black Distressed Finish', 299.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (110, 1, 'Garmin 010-10723-03 Nuvi Suction Cup Mount - 0101072303', 'Garmin 010-10723-03 Nuvi Suction Cup Mount - 0101072303/ Replacement Suction Cup Mount/ Compatible With Garmin Nuvi 300/310/350/360 GPS System/ Black Finish', 39.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (111, 1, 'Weber Stainless Steel Summit S-650 Liquid Propane Grill - 1780001', 'Weber Stainless Steel Summit S-650 Liquid Propane Grill - 1780001/ 6 Stainless Steel Burners/ 60,000 BTU-Per-Hour Input/ 12,000 BTU-Per-Hour Input Side Burner/ 10,600 BTU-Per-Hour Rotisserie Burner/ 8,000 BTU-Per-Hour Input Smoker Burner/ Snap-Jet Individual Burner Ignition System/ 3/8-Inch Diameter Stainless Steel Rod Cooking Grates/ Stainless Steel Flavorizer Bars/ Stainless Steel Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 1999.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (112, 1, 'Weber Stainless Steel Genesis S-310 Liquid Propane Grill - 3770001', 'Weber Stainless Steel Genesis S-310 Liquid Propane Grill - 3770001/ 3 Stainless Steel Burners/ 42,000 BTU-Per-Hour Input/ Electronic Crossover Ignition System/ 7MM Diameter Stainless Steel Rod Cooking Grates/ Stainless Steel Flavorizer Bars/ Stainless Steel Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 899.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (113, 1, 'Weber Stainless Steel Genesis S320 LP Grill - 3780001', 'Weber 3780001 Stainless Steel Genesis S-320 Liquid Propane Grill - 3780001/ 3 Stainless Steel Burners/ 42,000 BTU-Per-Hour Input/ 12,000 BTU-Per-Hour Input Side Burner/ Electronic Crossover Ignition System/ 7MM Diameter Stainless Steel Rod Cooking Grates/ Stainless Steel Flavorizer Bars/ Stainless Steel Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 949.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (114, 1, 'Weber Stainless Steel Genesis S320 Natural Gas Grill - 3880001', 'Weber Stainless Steel Genesis S-320 Natural Gas Grill - 3880001/ 3 Stainless Steel Burners/ 42,000 BTU-Per-Hour Input/ 12,000 BTU-Per-Hour Input Side Burner/ Electronic Crossover Ignition System/ 7MM Diameter Stainless Steel Rod Cooking Grates/ Stainless Steel Flavorizer Bars/ Stainless Steel Finish/ Natural Gas Model/ Assembly Required', 969.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (115, 1, 'Kenwood KCA-IP300V iPod Video Direct Cable - KCAIP300V', 'Kenwood KCA-IP300V iPod Video Direct Cable - KCAIP300V/ iPod Video Direct Cable For DNX7100, DDX7019 And KVT719DVD Indash Monitors', 49.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (116, 1, 'Sony SCPH-98046 PlayStation 3 Blu-Ray DVD Remote Control - 711719804604', 'Sony SCPH-98046 PlayStation 3 Blu-Ray DVD Remote Control - 711719804604/ Full Access To The PlayStation 3 Systems Disc Features/ Can Be Used Without Having To Point Directly At The System', 24.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (117, 1, 'Tripp-Lite PV375 PowerVerter 375-Watt Ultra-Compact Inverter - PV375', 'Tripp-Lite PV375 PowerVerter 375-Watt Ultra-Compact Inverter - PV375/ 12V DC Input/ 120V AC Output/ 2 Outlets/ 375 Watts Continuous Output/ 600 Watts Peak Output/ Convenient Cigarette Lighter Plug', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (118, 1, 'Sirius FMDA25 Wired FM Modulation Relay - FMDA25', 'Sirius FMDA25 Wired FM Modulation Relay - FMDA25/ 2 Ft FM Antenna Cable/ 19 Ft 4 In Mini-Jack Cable', 20.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (119, 1, 'Electrolux Oxygen 3 Canister HEPA H12 Filter - EL012A', 'Electrolux Oxygen 3 Canister HEPA H12 Filter - EL012A/ Retains 99.5% Of Dust And Other Irritants/ 1 Filter Per Package', 19.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (120, 1, 'Fellowes Confetti Cut Shredder - W11C', 'Fellowes Confetti Cut Shredder - W11C/ Shreds Up To 11 Sheets Per Pass/ Safely Shreds Staples And Credit Cards/ 9'' Paper Entry Accepts Any Standard Or Legal Size Document/ Safety Interlock Switch Automatically Powers Off When Shredder Head Is Lifted', 79.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (121, 1, 'Sony VAIO VGP-PRSZ1 SZ Series Docking Station - VGPPRSZ1', 'Sony VAIO VGP-PRSZ1 SZ Series Docking Station - VGPPRSZ1/ Compatible With SZ Series Notebooks/ Expand Connectivity To Your Notebook/ 3 USB 2.0, Gigabit Ethernet, VGA, DVI-D And DC In/ Black Finish', 199.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (122, 1, 'Weber Genesis E-310 Liquid Propane Black Outdoor Grill - 3741001', 'Weber Genesis E-310 Liquid Propane Black Outdoor Grill - 3741001/ 3 Stainless Steel Burners/ 42,000 BTU Per-Hour Input/ Electronic Crossover Ignition System/ Porcelain Enameled Cast Iron Cooking Grates/ 2 Stainless Steel Work Surfaces/ Center Mounted Thermometer/ Cast Aluminum End Caps/ Black Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 699.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (123, 1, 'Weber Genesis S-310 Natural Gas Stainless Steel Outdoor Grill - 3870001', 'Weber Genesis S-310 Natural Gas Stainless Steel Outdoor Grill - 3870001/ 3 Stainless Steel Burners/ 42,000 BTU-Per-Hour Input/ Electronic Crossover Ignition System/ Center Mounted Thermometer/ Cast Aluminum End Caps/ 2 Heavy Duty Front Locking Casters/ Stainless Steel Finish/ Assembly Required', 919.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (124, 1, 'DeLonghi Magnifica Super-Automatic Espresso/Coffee Machine - ESAM3300', 'DeLonghi Magnifica Super-Automatic Espresso/Coffee Machine - ESAM3300/ Stainless-Steel Removable Double Boiler/ Instant Reheat/ Removable Water Tank And Bean Container/ Integrated Burr Grinder/ Cappuccino System/ Cup Tray/ Silver Finish', 799.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (125, 1, 'Yamaha Silver USB Powered Stereo Speaker - NXU10SIL', 'Yamaha NX-U10 Silver USB Powered Stereo Speaker - NXU10SIL/ 20 Watts Output Power/ PowerStorage Circuit/ SR-Bass (Swing Radiator Bass) Technology/ Magnetic Shielding/ Mac And Windows Compatible/ Silver Finish', 180.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (126, 1, 'Canon FAX-JX200 Inkjet Fax Machine - FAXJX200', 'Canon FAX-JX200 Inkjet Fax Machine - FAXJX200/ Automatic Document Feeder/ Produce B&W Copies With Clear, Sharp Text/ One-Touch Dialing/ Ultra-High Quality (UHQ) Image Processing Technology/ 600 x 600 Dpi Copy Resolution/ White Finish', 78.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (127, 1, 'Weber Genesis E-310 Natural Gas Black Outdoor Grill - 3841001', 'Weber Genesis E-310 Natural Gas Black Outdoor Grill - 3841001/ 3 Stainless Steel Burners/ 42,000 BTU Per-Hour Input/ Electronic Crossover Ignition System/ Porcelain Enameled Cast Iron Cooking Grates/ 2 Stainless Steel Work Surfaces/ Center Mounted Thermometer/ Cast Aluminum End Caps/ Black Finish/ Assembly Required', 719.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (128, 1, 'Weber 3758301 Blue Genesis EP-320 LP Gas Grill - 3758301', 'Weber 3758301 Blue Genesis EP-320 LP Gas Grill - 3758301/ 3 Seamless Stainless Steel Burners/ 42,000 BTU-Per-Hour Input/ Crossover Ignition System/ Stainless Steel Flavorizer Bars And Grates/ Cast Aluminum End Caps/ Centermounted Thermometer/ Blue Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 749.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (129, 1, 'Panasonic KX-TG6702B 5.8 GHz FHSS GigaRange Expandable Black Cordless Phone System - KXTG6702B', 'Panasonic KX-TG6702B 5.8 GHz FHSS GigaRange Expandable Black Cordless Phone System - KXTG6702B/ All-Digital Answering System/ LCD Call Counter/ Speakerphone/ Navigator Key/ Up To 8 Handsets With Just One Phone Jack/ Line Status Indicator/ Voice Scramble/ Handset Locator/ Volume Control/ Black Finish', 197.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (130, 1, 'Fellowes MicroShred Shredder - MS450CS', 'Fellowes MS-450CS MicroShred Shredder - MS450CS/ 4.5 Gallons Basket Capacity/ Can Shred Paper, CDs, Credit Cards, Staples, Paper Clips/ Motor Reverse/ Interlock Switch/ Safe Sense/ 7 Sheet Capacity', 189.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (131, 1, 'Sony MRW62E/S1/181 17-In-1 External USB Memory Card Reader - MRW62ES1181', 'Sony MRW62E/S1/181 17-In-1 External USB Memory Card Reader - MRW62ES1181/ Supports 17 Different Memory Card Formats/ Works With Macintosh And Windows Computers/ Easy Hi-Speed USB 2.0 Connection/ Black Finish', 29.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (132, 1, 'Griffin Elevator Brushed Aluminum Laptop Stand - 1093CURV2', 'Griffin Elevator Brushed Aluminum Laptop Stand - 1093CURV2/ Elevates Laptop Screen 5.5'' While Providing Valuable Desktop Real Estate For Your Keyboard And Mouse/ Keeps Laptop Cool With 360 Degrees Of Air Circulation/ Compatible With Mac Or PC Laptop', 39.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (133, 1, 'Escort Passport 9500I Radar And Laser Detector - 9500I', 'Escort Passport 9500I Radar And Laser Detector - 9500I/ 360-Degree Radar And Laser Detection/ Blistering All-Band Protection/ GPS-Powered Truelock Filter/ Immune To The VG-2 ''Detector-Detector''/ Built-In Earphone Jack/ Red Display', 449.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (134, 1, 'Panasonic Countertop Microwave Oven In Black - NNSN667BK', 'Panasonic NN-SN667B Countertop Microwave Oven In Black - NNSN667BK/ 1.2 Cubic Foot/ 1300 Watts High Power/ 10 Power Levels/ 5 Cooking Stages/ Quick Minute/ One-Touch Sensor Cooking/ Inverter Turbo Defrost/ Multi-Lingual Menu Action Screen/ Popcorn Key/ Black Finish', 129.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (135, 1, 'Panasonic Countertop Microwave Oven In White - NNSN667WH', 'Panasonic NN-SN667W Countertop Microwave Oven In White - NNSN667WH/ 1.2 Cubic Foot/ 1300 Watts High Power/ 10 Power Levels/ 5 Cooking Stages/ Quick Minute/ One-Touch Sensor Cooking/ Inverter Turbo Defrost/ Multi-Lingual Menu Action Screen/ Popcorn Key/ White Finish', 129.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (136, 1, 'Samsung DLP TV Stand In Black - TR72BX', 'Samsung DLP TV Stand In Black - TR72BX/ Designed To Fit Samsung HLT7288 HLT7288, HL72A650, and HL67A650 Television Sets/ Tempered 6mm Tinted Glass Shelves/ Wide Audio Storage Shelves To Accommodate 4 Or More Components/ Wire Management System/ Easy To Assemble/ High Gloss Black Finish', 369.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (137, 1, 'Sony Black Active Speaker System - SRSA212BK', 'Sony Black Active Speaker System - SRSA212BK/ Designed For Your Portable Audio Or PC/ Built-In Mega Bass/ On/Off Switch With Volume Control/ Magnetically Shielded/ Black Finish', 29.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (138, 1, 'Panasonic Expandable Digital Cordless DECT 6.0 Handset In Silver - KXTGA101S', 'Panasonic Expandable Digital Cordless DECT 6.0 Handset In Silver - KXTGA101S/ Expansion Handset And Charger Select 1000 Series Phone Systems/ Big Buttons/ Built-In Clock With Alarm/ Silver Finish', 39.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (139, 1, 'Tech Craft Dark Cherry Veneto Series TV Stand - SWP60', 'Tech Craft Dark Cherry Veneto Series TV Stand - SWP60/ 60'' Wide Credenza For Flat Panel TV?s And DLP?s/ Center Channel Compartment And Storage/ 260 Lbs TV Capacity/ 50 Lbs Shelf Capacity/ Dark Cherry Wood Veneer Finish', 399.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (140, 1, 'Haier 13'' Silver Tube TV - HTR13', 'Haier 13'' Silver Tube TV - HTR13/ Built-In Atsc/Ntsc Tuner/ Video Noise Reduction/ Multi Picture Modes/ Multilingual Display/ Digital Comb Filter/ Component Video Input/ Front AV Jacks/ Silver Finish', 124.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (141, 1, 'Sony Memory Stick USB Adaptor - MSACUS40', 'Sony Memory Stick USB Adaptor - MSACUS40/ Quickly Transfer Image And Data To A PC/ Transfer Speed Up To 80Mbps/ Compatible With All Memory Stick Media', 29.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (142, 1, 'Sony Clip-On Black Headphones - MDRQ68LW', 'Sony Clip-On Black Headphones - MDRQ68LW/ Lightweight And Thin Body For Stable Fitting/ Retractable Silent Cord/ 3.3 Ft. Cord/ Gold Plated Mini-Plug/ Black Finish', 29.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (143, 1, 'Netgear ProSafe 24-Port Smart Switch - GS724TP', 'Netgear ProSafe 24-Port Smart Switch - GS724TP/ 24 10/100/1000 Ports That Support 802.3af PoE/ 2 Combo Gigabit Copper/SFP Slots/ Web-Based Configuration/ Password Access Control/ Purple Finish', 780.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (144, 1, 'Sharp Over The Counter White Microwave Oven - R1211WH', 'Sharp Over The Counter White Microwave Oven - R1211WH/ 1.5 Cu. Ft. Capacity/ 1100 Watts/ 19 Automatic Settings/ 2-Color Lighted LCD/ Smart And Easy Sensor Settings/ Auto-Touch Control Panel/ White Finish', 269.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (145, 1, 'Monster iFreePlay Cordless Headphones For iPod Shuffle - AISHHPHONE', 'Monster iFreePlay Cordless Headphones For iPod Shuffle - AISHHPHONE/ Wrap-Around Design With No Need For Clips, Armbands Or Pockets/ Easy Access To All iPod Shuffle Controls/ Folds For Compact Storage/ Black With Silver Finish', 48.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (146, 1, 'Canon Black Ink Cartridge - PG50', 'Canon Black Ink Cartridge - PG50/ Pigment Ink Formulation For Long Lasting Prints/ Resists Smearing Caused By Highlighters/ Smudge Resistant/ Ink Remaining Notification Technology/ Crisp Laser Text-Quality Text/ Black Ink', 29.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (147, 1, 'Audiovox Xpress XM Satellite Radio FM Direct Adapter - XMFM1', 'Audiovox Xpress XM Satellite Radio FM Direct Adapter - XMFM1/ Switches Between FM Radio Antenna And Your XM Satellite Radio Receiver', 25.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (148, 1, 'Panasonic NNSD797S Stainless Steel Countertop Microwave Oven - NNSD797SS', 'Panasonic NNSD797S Stainless Steel Countertop Microwave Oven - NNSD797SS/ 1.6 Cu. Ft. Capacity/ 1250W Output Power/ 10 Power Levels/ 5 Cooking Stages/ One-Touch Sensor Cooking Or Heating/ Timer/ Stainless Steel Finish', 199.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (149, 1, 'Apple Mac Mini 1.83GHz Intel Core 2 Duo Computer - MB138LLA', 'Apple Mac Mini 1.83GHz Intel Core 2 Duo Computer - MB138LLA/ 1.83GHz Intel Core 2 Duo/ 1GB Memory/ 80GB Hard Drive/ 24x Combo Drive/ Built-In Speakers/ Four USB 2.0 Ports And One FireWire 400 Port/ Mac OS X v10.5 Leopard', 599.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (150, 1, 'Denon 7.1 Channel Home Theater MultiMedia A/V Receiver With Networking And WiFi - AVR4308CI', 'Denon 7.1 Channel Home Theater MultiMedia AV Receiver With Networking And WiFi In Black - AVR4308CI/ 140 Watts x 7 Channels/ Wi-Fi And Network Capable/ Worlds First Vista Certified Receiver/ HD Radio And XM Ready Tuning/ Dolby TrueHD And DTS-HD Master Audio/ DDSC-HD Digital Dynamic Discrete Surround Circuitry/ Expanded HDMI v1.3a Ports/ Dual Remotes/ Black Finish', 2699.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (151, 1, 'Denon 7.1 Channel Home Theater MultiMedia A/V Receiver With Networking In Black - AVR3808CI', 'Denon 7.1 Channel Home Theater MultiMedia AV Receiver With Networking In Black - AVR3808CI/ 130 Watts x 7 Channels/ Fully Assignable Channels For Bi-Amping/ Rear Panel RS-232C And Ethernet Ports/ Network Capable/ XM Ready Tuning/ Dolby TrueHD And DTS-HD Master Audio/ Expanded HDMI v1.3a Ports/ Dual Remotes/ Black Finish', 1699.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (152, 1, 'Denon X-Space Surround Bar Home Theatre System In Black - DHTFS3', 'Denon X-Space Surround Bar Home Theatre System In Black - DHTFS3/ 22 Watts x 5 (6 Ohms)/ Supports All Audio Formats (Dolby Digital, DTS, Dolby Pro Logic II)/ Slim Design/ Includes Dolby Headphones/ Included Subwoofer Features One-Touch Connection/ Remote Control/ Black Finish', 1199.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (153, 1, 'Apple Wireless Mighty Mouse - MB111LLA', 'Apple Wireless Mighty Mouse - MB111LLA/ Bluetooth Technology/ Laser Tracking Engine/ 360-Degree Innovative Scroll Ball And Button/ Touch-Sensitive Top Shell/ Force-Sensing Side Buttons/ Customizable/ White Finish', 69.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (154, 1, 'Sony PSP 2000 Playstation Portable Gaming System Core 98510 In Piano Black - 711719851004', 'Sony PSP 2000 Playstation Portable Gaming System Core 98510 In Piano Black - 711719851004/ Play Games, Watch Movies On UMD Discs, And Listen To Music All In One Device/ 4.3'' LCD Screen (16:9)/ 480 x 272 Pixel/ Wi-Fi (IEEE 802.11b) For Wireless Networking With Other PSP Owners/ Memory Stick PRO Duo/ 333MHz System Clock Frequency/ Piano Black Finish', 185.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (155, 1, 'Apple Mini-DVI To DVI Adapter - M9321GB', 'Apple Mini-DVI To DVI Adapter - M9321GB/ Compatible With iMac (Intel Core Duo), MacBook And 12'' PowerBook G4/ Connects To An External DVI Monitor Or Projector/ White Finish', 19.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (156, 1, 'Olympus DS40 Digital Voice Recorder - DS40R', 'Olympus DS40 Digital Voice Recorder - DS40R/ 136 Hours 15 Minutes Recording Time In LP Mode/ High-Sensitivity Detachable Stereo Microphone/ Voice Guidance/ Three Modes Of Microphone Sensitivity/ Built-In Variable Control Voice Actuator (VCVA) Function/ Up To 32 Hours Of Continuous Operation', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (157, 1, 'Bose Lifestyle 48 Series IV 43479 Home Entertainment System - LS48IVWH', 'Bose Lifestyle 48 Series IV Home Entertainment System - LS48IVWH/ ADAPTiQ Audio Calibration System/ Acoustimass Module/ Jewel Cube Speakers/ Direct/Reflecting Speaker Technology/ VS-2 Video Enhancer/ Proprietary Videostage 5 Decoding Circuitry/ Digital 5.1 Decoding/ Control Integration/ White Finish', 3999.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (158, 1, 'Sony Black DVD Recorder And VHS Combo Player - RDRVXD655', 'Sony Black DVD Recorder And VHS Combo Player - RDRVXD655/ Multiformat DVD Compatible/ HDMI Output And 720p/1080i Upscaling/ HDTV Tuner/ 4 Video Head Stereo VHS With 19 Micron Heads/ Variable Bit Rate Recording (7 Speeds)/ Progressive Scan Playback/ Dolby Digital And DTS Decoding Playback Compatible/ TV Virtual Surround/ Black Finish', 319.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (159, 1, 'Apple 1GB Silver iPod Shuffle - MB225LLA', 'Apple 1GB Silver 2nd Generation iPod Shuffle - MB225LLA/ Holds Up To 240 Songs/ 12 Hours Of Continuous Playback/ Skip-Free Playback/ Battery Indicator/ Shuffle Switch/ Built-In Clip/ Mac And Windows Compatible/ MB226LLA/ Silver Finish', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (160, 1, 'GE 24'' GSD2400NWW White Built-In Dishwasher - GSD2400WH', 'GE 24'' GSD2400NWW White Built-In Dishwasher - GSD2400WH/ 4-Level PowerScrub Wash System/ HotStart Option/ Piranha Hard Food Disposer/ Heated Dry Option/ Self-Cleaning Filter System/ White Finish', 259.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (161, 1, 'Panasonic Expandable Digital Cordless DECT 6.0 Phone System - KXTG1032S', 'Panasonic Expandable Digital Cordless DECT 6.0 Phone System - KXTG1032S/ Up To 17 Hours Of Talk Time/ Expandable Up To 6 Handsets/ Up To 3-Way Conference Capability/ Light-Up Indicator With Ringer/Message Alert/ Backlit LCD On Handset/ Digital Speakerphone/ 16-Minute All-Digital Answering System/ Silver Finish', 69.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (162, 1, 'Panasonic 2 Line Integrated Corded Phone System - KXTSC14B', 'Panasonic 2 Line Integrated Corded Phone System - KXTSC14B/ 3-Line LCD Display/ Automatic Line Selection/ Call Waiting Caller ID/ 3-Way Conferencing/ Speakerphone/ Navigator Key/ Black Finish', 74.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (163, 1, 'Audiovox XpressEZ XM Satellite Radio Receiver - XMCK5P', 'Audiovox XpressEZ XM Satellite Radio Receiver - XMCK5P/ 10 Programmable Channels/ Universal Connector/ 3-Line Screen Display/ Plug & Play Dock/ Black Finish', 69.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (164, 1, 'Panasonic Integrated White Telephone System With All-Digital Answering System - KXTS620W', 'Panasonic Integrated White Telephone System With All-Digital Answering System - KXTS620W/ 2-Way Recording/ Call Waiting Caller ID/ Speakerphone/ 3-Line LCD/ Data Port/ Ringer Indicator Lamp/ Programmable Tone/Pulse/ Wall Mountable/ White Finish', 69.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (165, 1, 'Tech Craft Veneto Series Black TV Stand - ABS60BK', 'Tech Craft Veneto Series Black TV Stand - ABS60BK/ Supports Up To A 60'' Flat Panel TV/ Molded Top Gives It An Elegant Appearance/ Framed Doors To Conceal Components/ 200 Lbs Top Shelf Capacity/ Black Finish', 399.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (166, 1, 'Skagen Premium Steel Slimline Mesh Womens Watch - 233XSGG', 'Skagen Premium Steel Slimline Mesh Womens Watch - 233XSGG/ Stainless Steel Mesh Band/ Elegant Round Case/ Mother-Of-Pearl Dial/ Chrome Indicators', 110.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (167, 1, 'Canon Color Image Silver Scanner - 8800F', 'Canon Color Image Silver Scanner - 8800F/ Resolution Of Up To 4800 x 9600 Color Dpi/ Enhance Old Photos/ Auto-Image Fix/ USB 2.0 Interface/ Multi-Image Scanning/ Windows And Mac Compatible/ Silver Finish', 199.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (168, 1, 'Sony Black LocationFree Base Station - LFV30', 'Sony Black LocationFree Base Station - LFV30/ Watch TV Wherever You Are/ Compatible With PC Or PSP System/ Programmable On-Screen Home Remote/ Stream Outside Your Home/ User-Friendly/ Black Finish', 199.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (169, 1, 'Linksys Wireless-G Broadband Router - WRT54GL', 'Linksys Wireless-G Broadband Router - WRT54GL/ All-In-One Internet-Sharing Router/ 4-Port Switch/ Push Button Setup Feature/ TKIP And AES Encryption/ Wireless MAC Address Filtering/ Powerful SPI Firewall/ 54Mbps Wireless-G (802.11g) Access Point', 79.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (170, 1, 'Universal RF Base Station - MRF260', 'Universal RF Base Station - MRF260/ Extends The Reception Range Up To 100 Feet Away Through Walls, Floors, Doors, Indoors Or Outdoors/ Programmed To Operate Equipment At Up To 15 Locations/ Black Finish', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (171, 1, 'Chestnut Hill Sound George iPod Music System In White - CHS4001', 'Chestnut Hill Sound George iPod Music System In White - CHS4001/ Playback System For The iPod/ Full Feature Wireless Remote/ Charging Stand Kit/ Bandless AM/FM Radio/ Easy Set Alarm/ Detachable Front Panel/ White Finish/ iPod Sold Separately', 499.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (172, 1, 'Sony Universal Remote Control - RMEZ4', 'Sony Universal Remote Control - RMEZ4/ Easy-To-Use Simplified Functions/ Controls TV And Cable Box/ Compatible With Most Of Major Brands/ Large Buttons For Easy Operation/ 3-Minute Memory Backup/ Comfortable Ergonomic Design/ Silver Finish', 16.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (173, 1, 'Sirius SiriusConnect Home Tuner - SCH1', 'Sirius SiriusConnect Home Tuner - SCH1/ Compact Size/ Analog And Digital Audio Outputs/ Display Indicators/ Connects To Any Sirius-Ready Home Audio Component', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (174, 1, 'Sanus 15'' - 32'' Flat Panel TV Black Wall Mount - MF209B1', 'Sanus 15'' - 32'' Flat Panel TV Black Wall Mount - MF209B1 - MF209B1/ Supports Up To 60 lbs/ Easy To Install/ Virtual Axis 3D Tilting System/ Black Finish', 96.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (175, 1, 'Yamaha High Performance Subwoofer In Black - YSTFSW150BK', 'Yamaha High Performance Subwoofer In Black - YSTFSW150BK/ 130 Watts Dynamic Power/ Advanced YST II (Yamaha Active Servo Technology)/ Linear Port/ Powerful 6.5? Multi-Range Driver/ Magnetically Shielded/ 30 -150 Hz Low Frequency Response/ Down-Firing Active Design/ Best Matching For Front Surround Systems And Micro Component Systems/ Black Finish', 279.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (176, 1, 'Kenwood Sirius Radio Translator For In-Dash Head Units - KCASR50', 'Kenwood Sirius Radio Translator For In-Dash Head Units - KCASR50/ Provides Full Control Of The SIRIUS Radio/ Displays Text On The Stereo And Supplies Power To The Satellite Radio', 60.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (177, 1, 'Linksys Wireless-G PrintServer - WPSM54G', 'Linksys Wireless-G PrintServer - WPSM54G/ Share A Multifunction Printer With Everyone On Your Network (Works With Most USB Printers)/ Allows Full Access To Printing, Faxing, Scanning And Copying Functions/ Connects Your Printer Directly To The Network By 10/100 Wired Ethernet Or 54Mbps Wireless-G', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (178, 1, 'Sirius STILETTO 2 Home Docking Kit - SLH2', 'Sirius STILETTO 2 Home Docking Kit - SLH2/ Stereo Audio Output Connects With Home Audio System Or Speakers/ Headphone Jack/ PC Sync/ Compatible With Stiletto 2 Radios/ Charges Stiletto 2 While Docked/ Black Finish', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (179, 1, 'Microsoft Office Standard 2007 - 02107746', 'Microsoft Office Standard 2007 - 02107746/ Create Documents Faster, More Easily And More Intuitively/ Automatic Document Recovery Tool/ Document Inspector/ Online Tutorials With Step-By-Step Instructions/ Compatible With Windows Vista, Windows XP SP2 And Windows Server 2003 SP1', 399.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (180, 1, 'Jabra Black Bluetooth Headset - BT5010', 'Jabra Black Bluetooth Headset - BT5010/ Up To 10 Hours Of Talk Time And 300 Hours Of Stand-By/ Wind-Noise Reduction Technology/ Vibrating And Visual Alerts/ Colored LED Indicator/ Up To 33-Foot Wireless Range/ Black Finish', 79.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (181, 1, 'Kensington Orbit Optical Trackball Mouse - 64327', 'Kensington Orbit Optical Trackball Mouse - 64327/ DiamondEye Optical Technology For Precise Tracking And Cursor Control/ USB And PS/2 Connectivity For Greater Compatibility/ Windows And Mac Compatible/ Metallic Silver And Black Finish', 38.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (182, 1, 'Sirius Stiletto 2 Vehicle Kit - SLV2', 'Sirius Stiletto 2 Vehicle Kit - SLV2/ Designed For Use With The Sirius Stiletto 2/ Get Direct One-Touch Access To Traffic And Weather/ Built-In FM Transmitter To Play Satellite Radio Through Your Cars Audio System', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (183, 1, 'Denon Networked Audio System With Built-In iPod Dock - S32', 'Denon Networked Audio System With Built-In iPod Dock - S32/ Stream Music Wirelessly/ Buit-In Dock For iPod On Top/ Ability To Decode MP3 And WMA Formats/ High Contrast Graphic LCD/ Multi-Task Jog Wheel On Top/ Built-In Speakers/ Clock With 2 Alarms With Auto Clock Set & Adjust Via Internet/ FM/AM Radio/ WiFi Certified/ Remote Control/ Black Finish', 499.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (184, 1, 'Motorola Portable Bluetooth Car Kit Speaker Phone - T305', 'Motorola Portable Bluetooth Car Kit Speaker Phone - T305/ 2.0 Bluetooth Wireless Technology/ Noise Cancellation Technology/ Loud Sound High Speaker Output/ Convenient Multi-Function Button/ Up To 14 Hours Of Talk Time And 14 Days Of Standby Time/ Mini-USB Connector/ Black Finish', 69.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (185, 1, 'Sony HD-Handycam 3 Meters (10 Feet) HDMI Mini Cable - VMC30MHD', 'Sony HD-Handycam 3 Meters (10 Feet) HDMI Mini Cable - VMC30MHD/ Gold Plating Plug/ HDMI-Compliant High Speed Category 2 Cable/ Support Full HD 1080p/ Digital Audio Transfer/ 3 Meters(10 Feet)/ Black Finish', 69.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (186, 1, 'Klipsch Black Wireless iPod Speaker - ROOMGROOVE', 'Klipsch Black Wireless iPod Speaker - ROOMGROOVE/ Wirelessly Sends CD-Quality Music To/From Other RoomGrooves/ Retractable Dock Charges iPods With 30-Pin Connectors/ Horn-Loaded Technology For Precise High Tones/ Dual High-Output Woofers Deliver Room-Filling Bass/ Black Finish', 299.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (187, 1, 'Logitech QuickCam Communicate STX - 961464', 'Logitech QuickCam Communicate STX - 961464/ 640 x 480 Video Capture/ 1.3 Megapixel Still Image Capture/ Built-In Microphone With RightSound Technology/ 30 Frames Per Second/ Adjustable Base Fits Any Monitor Or Notebook/ USB 2.0 Certified', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (188, 1, 'Sirius Plug And Play Universal Home Kit - SUPH1', 'Sirius Plug And Play Universal Home Kit - SUPH1/ Compatible With All Of The Newest SIRIUS Plug & Play Radios/ Stereo Audio Output For Use Your Home Audio System Or Powered Speakers/ Sleek Compact Design/ High Gloss Black Finish', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (189, 1, 'Belkin Hi-Speed USB 2.0 7-Port Hub - F5U237APLS', 'Belkin Hi-Speed USB 2.0 7-Port Hub - F5U237APLS/ Transfers Data Up To 480Mbps/ Installs Easily With Plug-And-Play Convenience/ Works Seamlessly With All USB 1.1 And USB 2.0 Devices/ Over-Current Detection And Safety/ Mac And PC Compatible/ Silver Finish', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (190, 1, 'Netgear Wireless Access Point - WG102', 'Netgear Wireless Access Point - WG102/ High-Speed IEEE 802.11g, Up To 108 Mbps In Turbo Mode/ Wi-Fi Protected Access (WPA 802.11i-Ready Security)/ Integrated IEEE 802.3af Power Over Ethernet (PoE)/ Block SSID Broadcast/ VPN Pass-Through Support', 186.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (191, 1, 'Logitech diNovo Media Desktop Laser Keyboard And Mouse Combo - 967562', 'Logitech diNovo Media Desktop Laser Keyboard And Mouse Combo - 967562/ Unique Ultra-Flat Keyboard/ Detached Customizable MediaPad/ Precision Rechargeable Laser Mouse/ Tilt Wheel Plus Zoom/ Customizable Hotkeys/ Dedicated Search Buttons/ Bluetooth Wireless Technology Compatible/ Black And Gray Finish', 199.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (192, 1, 'Apple 500GB Time Capsule Wireless Hard Drive - MB276LLA', 'Apple 500GB Time Capsule Wireless Hard Drive - MB276LLA/ 500GB 7200-rpm Serial ATA Server-Grade Hard Disk Drive/ Up To 5x The Performance And 2x The Range With 802.11n/ Wi-Fi Protected Access (WPA/WPA2)/ Wireless Security (WEP) Configurable For 40-Bit And 128-Bit Encryption/ NAT Firewall/ AirPort Utility For Mac And Windows', 299.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (193, 1, 'Apple 1TB Time Capsule Wireless Hard Drive - MB277LLA', 'Apple 1TB Time Capsule Wireless Hard Drive - MB277LLA/ 1TB 7200-rpm Serial ATA Server-Grade Hard Disk Drive/ Up To 5x The Performance And 2x The Range With 802.11n/ Wi-Fi Protected Access (WPA/WPA2)/ Wireless Security (WEP) Configurable For 40-Bit And 128-Bit Encryption/ NAT Firewall/ AirPort Utility For Mac And Windows', 499.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (194, 1, 'Garmin Nuvi Portable Friction Mount - 0101090800', 'Garmin Nuvi Portable Friction Mount - 0101090800/ No Installation Required/ Securely Mounts Your GPS To A Surface In Your Car/ Works With All Garmin Nuvi Portable GPS Units/ Black Finish', 39.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (195, 1, 'Garmin Vehicle Suction Cup Mount - 0101093600', 'Garmin Vehicle Suction Cup Mount - 0101093600/ No Installation Required/ Securely Mounts Your GPS To Dash/ Black Finish', 25.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (196, 1, 'Garmin Suction Cup Mount And 12-Volt Adapter Kit - 0101097900', 'Garmin Suction Cup Mount And 12-Volt Adapter Kit - 0101097900/ Suction Cup Mount And 12-Volt Adapter Included', 30.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (197, 1, 'Pioneer Remote Control With DVD/Audio Controls - CDR55', 'Pioneer Remote Control With DVD/Audio Controls - CDR55/ Hands-Free Wireless Control/ Quick Access For Functions/ Compatible With AVH-P5000DVD, AVH-P4000DVD, AVIC-N4, AVIC-D3, AVH-P4900DVD And AVH-P5900DVD', 19.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (198, 1, 'Pioneer Sirius Bus Interface - CDSB10', 'Pioneer Sirius Bus Interface - CDSB10/ Sirius Connect'' Compatibility/ Replay Function/ Game Alert/ Game Zone', 68.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (199, 1, 'Pioneer HD Radio Tuner - GEXP10HD', 'Pioneer HD Radio Tuner - GEXP10HD/ Compatible With FH-P800BT, FH-P8000BT, DEH-P700BT, DEH-P7000BT, DEH-P600UB, DEH-P6000UB/ ''External Control'' Capable', 100.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (200, 1, 'Sirius Dock And Play Universal Vehicle Kit - SUPV1', 'Sirius Dock And Play Universal Vehicle Kit - SUPV1/ Stereo Audio Output/ Use With Your Home Audio System Or Powered Speakers/ Compatible With Sportster 5, Sportster 4, Sportster 3, Starmate 4, Starmate 3, Stratus 4, Stratus', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (201, 1, 'Electrolux Harmony Series Canister Vacuum - EL6985B', 'Electrolux Harmony Series Canister Vacuum - EL6985B/ Foot-Operated Switch On The Floor Nozel/ Ergonomic Handle Design/ Electronic Dust Bag Indicator/ HEPA H12 Filter/ Telescoping Wand', 299.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (202, 1, 'Sennheiser Rechargeable Nickel-Metal Hydride Battery - BA151', 'Sennheiser Rechargeable Nickel-Metal Hydride Battery - BA151/ Rechargeable Battery For Wireless Sennheiser Headphones', 20.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (203, 1, 'Canon Green Photo Ink Cartridge - CLI8G', 'Canon Green Photo Ink Cartridge - CLI8G/ FINE Technology For Exceptional Sharpness & Detail/ Compatible With Canon Pixma Pro9000', 16.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (204, 1, 'Canon Red Photo Ink Cartridge - CLI8R', 'Canon Red Photo Ink Cartridge - CLI8R/ FINE Technology For Exceptional Sharpness & Detail/ Compatible With Canon Pixma Pro9000', 16.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (205, 1, 'Canon Black Photo Ink Cartridge - CLI8B', 'Canon Black Photo Ink Cartridge - CLI8B/ FINE Technology For Exceptional Sharpness & Detail/ Compatible With Canon Pixma Printers', 16.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (206, 1, 'Netgear ProSafe 5 Port 10/100 Desktop Switch - FS105', 'Netgear ProSafe 5 Port 10/100 Desktop Switch - FS105/ 5 Auto Speed-Sensing 10/100 UTP Ports/ Embedded Memory', 40.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (207, 1, 'Pioneer Premier In-Dash CD/WMA/MP3/AAC Receiver - DEHP400UB', 'Pioneer Premier In-Dash CD/WMA/MP3/AAC Receiver - DEHP400UB/ 50W x 4 Built-In Speaker Power/ 3 RCA Hi-Volt Preouts/ Two-Way Crossover/ Supertuner IIID/ AUX-In Connection/ Rotary Commander Volume Control', 183.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (208, 1, 'Pioneer DEH-2000MP CD/MP3/WMA In-Dash Receiver - DEH2000MP', 'Pioneer DEH-2000MP CD/MP3/WMA In-Dash Receiver - DEH2000MP/ 50W x 4 Built-In Speaker Power/ LED Display/ Built-In Front Auxiliary Input/ Detachable Face Security/ Remote Control/ Rotary Volume Control', 98.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (209, 1, 'Pioneer Premier In-Dash CD/WMA/MP3/AAC Receiver - DEHP500UB', 'Pioneer Premier In-Dash CD/WMA/MP3/AAC Receiver - DEHP500UB/ 50W x 4 Built-In Speaker Power/ 3 RCA Hi-Volt Preouts/ Two-Way Crossover/ Supertuner IIID/ AUX-In Connection/ Rotary Commander Volume Control', 208.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (210, 1, 'Sony 7'' Digital Photo Frame In Black - DPFD70', 'Sony 7'' Digital Photo Frame - DPFD70/ 7'' LCD With 800 x 480 Resolution/ 15:9 Aspect Ratio/ 256MB Internal Memory/ Supports Most Memory Cards/ Variety Of Display Modes/ Auto Image Rotation Feature/ View Mode Button/ Fast Digital Picture Decoding/ Handles Large Data Files/ USB B-Type Connection/ Remote Control/ Black Finish', 139.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (211, 1, 'SIRIUS SiriusConnect Vehicle Kit In Black - SCVDOC1', 'SIRIUS SiriusConnect Vehicle Kit In Black - SCVDOC1/ Compact Design/ Compatible With The Next Generation Of SiriusConnect Interface Adapters/ 3 Interchangeable Adapter Plates/ Black Finish', 59.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (212, 1, 'Linksys Wireless-G Ethernet Bridge - WET54G', 'Linksys Wireless-G Ethernet Bridge - WET54G/ Converts Wired-Ethernet Devices To Wireless-G Network Connectivity/ For Windows, Macintosh, Linux, PlayStation Consoles, Xbox Consoles, Or Anything With An Ethernet Port/ Plug And Play, No Driver Installation Require', 89.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (213, 1, 'Yamaha RX-V363BL 5.1 Channel Digital Home Theater Receiver In Black - RXV363BK', 'Yamaha RX-V363BL 5.1 Channel Digital Home Theater Receiver In Black - RXV363BK/ 500 Watts Powerful Surround Sound (100W x 5)/ iPod And Bluetooth Audio Compatibility/ Dolby Digital, DTS And Dolby Pro Logic II Decoding/ Cinema DSP With 8 DSP Programs/ Compressed Music Enhancer/ 192kHz/24-Bit DACs For All Channels/ Remote Control/ Black Finish', 199.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (214, 1, 'Yamaha All-Weather Pair Speaker System - NSAW390WH', 'Yamaha NS-AW390WH All-Weather Speaker System - NSAW390WH/ 6.5'' High Compliance/ PP Mica Filled Woofers/ Unique Dual 1'' PEI Dome Tweeter Configuration/ Aluminum Speaker Grilles/ Wall Mountable/ White Finish/ Sold As A Pair', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (215, 1, 'Yamaha NS-AW390BL All-Weather Pair Speaker System - NSAW390BK', 'Yamaha NS-AW390BL All-Weather Speaker System - NSAW390BK/ 6.5'' High Compliance/ PP Mica Filled Woofers/ Unique Dual 1'' PEI Dome Tweeter Configuration/ Aluminum Speaker Grilles/ Wall Mountable/ Black Finish/ Sold As A Pair', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (216, 1, 'Yamaha NS-AW190BL All-Weather Pair Speaker System - NSAW190BK', 'Yamaha NS-AW190BL All-Weather Speaker System - NSAW190BK/ 5'' High Compliance/ PP Mica Filled Woofers/ Unique Dual 1/2'' PEI Dome Tweeter Configuration/ Aluminum Speaker Grilles/ Wall Mountable/ Black Finish/ Sold As A Pair', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (217, 1, 'Yamaha 7.2 Channel Black Digital Home Theater Receiver - RXV663BK', 'Yamaha 7.2 Channel Black Digital Home Theater Receiver - RXV663BK/ 4 SCENE Buttons/ XM Ready With XM HD Surround/ SIRIUS Satellite Radio Ready/ YPAO/ iPod Compatibility/ Bluetooth Compatibility/ Multi-Zone Control Compatibility/ On-Screen Display/ Black Finish', 499.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (218, 1, 'Yamaha 7.2 Channel Black Digital Home Theater Receiver - RXV863BK', 'Yamaha 7.2 Channel Black Digital Home Theater Receiver - RXV863BK/ 4 SCENE Buttons/ XM Ready With XM HD Surround/ SIRIUS Satellite Radio Ready/ YPAO/ iPod Compatibility/ Bluetooth Compatibility/ Multi-Zone Control Compatibility/ On-Screen Display/ Black Finish/ CALL FOR LATEST PRICE', 899.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (219, 1, 'Yamaha 5.1 Channel Home Theater In A Box System In Black - YHT390BK', 'Yamaha 5.1 Channel Home Theater In A Box System In Black - YHT390BK/ New Scene, Compressed Music Enhancer/ iPod Compatibility/ 600W Powerful Surround Sound/ Silent Cinema/ 192kHz/24-Bit DACs For All Channels/ Black Finish', 399.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (220, 1, 'Apple MacBook Air SuperDrive - MB397GA', 'Apple MacBook Air SuperDrive - MB397GA/ Compact And Portable Slot-Loading 8x SuperDrive/ Connect To MacBook Air USB Slot/ Play And Burn Both CDs And DVDs/ Watch DVD Movie, Install Software, Or Create Backup Discs', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (221, 1, 'Monster Mini-To-Mini iCable For Car - AICMINIIP3S', 'Monster Mini-To-Mini iCable For Car - AICMINIIP3S/ 3 Ft. Cable/ 1/8 Mini-Jack Input For Car Stereo/ Dual Balanced High-Purity Copper Conductors And 24k Gold/ Xtra Low Noise DoubleHelix Construction/ Compatible With Apple iPod, iPhone, And Portable MP3 Player/ White Finish', 15.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (222, 1, 'TomTom GPS Mount And USB Car Charger - 9N00101', 'TomTom GPS Mount And USB Car Charger - 9N00101/ Extra Holder And Car Charger Convenient For Multi-Vehicles User/ No Need To Transfer Holder From One Car To Another/ Easy Installation/ Compatible With TomTom ONE/ Black Finish', 39.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (223, 1, 'Denon Blu-ray Disc DVD/CD Player - DVD3800BDCI', 'Denon Blu-ray Disc DVD/CD Player - DVD3800BDCI/ 10-Bit Realta HQV Video Processor/ 1080p/24fps Output And Multi-Cadence Detection/ HDMI 1.3a Output With 36-Bit Deep Color Support/ Dual 32-Bit Floating Point DSP/ Multi-Layered Construction With Dual-Layered Top Shields And Triple-Layered Bottom/ Suppress Vibration Hybrid (S.V.H.) Loader/ Black Finish', 1999.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (224, 1, 'TomTom GPS Mount And USB Car Charger - 9S00006', 'TomTom GPS Mount And USB Car Charger - 9S00006/ Extra Holder And Car Charger Convenient For Multi-Vehicles User/ No Need To Transfer Holder From One Car To Another/ Easy Installation/ Compatible With TomTom ONE XL/ Black Finish', 28.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (225, 1, 'Bracketron iPod Docking Kit - IPM202BL', 'Bracketron iPod Docking Kit - IPM202BL/ Compatible With All Generation iPods Including iPod Mini, iPod Nano And Apple iPhone/ Wings Adjustable Up To 2.5''/ Black Finish', 14.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (226, 1, 'Boston Acoustics Solo AM/FM Large Display Clock Radio - HSOLOMDNT', 'Boston Acoustics Solo AM/FM Large Display Clock Radio - HSOLOMDNT/ Rotating Clock Face/ Precision Tuner/ 3 1/2? Full-Range Speaker/ Auxiliary Input/ High Contrast LCD Display/ 360� Snooze Bar/ Grey Finish', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (227, 1, 'Panasonic 5.8 GHz Black Expandable Digital Cordless Phone System - KXTG4323B', 'Panasonic 5.8 GHz Black Expandable Digital Cordless Phone System - KXTG4323B/ Include 3 Handsets/ Expandable Up To 4 Handsets/ Digital Answering Machine System/ Ringer ID/ Call Waiting Caller ID/ Voicemail/ Hold/ Mute/ Clock/ Alarm/ LED Lighting/ Speakerphone/ Intercom/ 11 Days Standby/ 5 Hours Talk Time/ Black Finish', 79.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (228, 1, 'Sony Silver Digital Voice Recorder - ICDB600', 'Sony Silver Digital Voice Recorder - ICDB600/ 512MB Built-In Flash Memory/ Up To 300 Hours Of Recording Time/ 3 Recording Modes/ 4 Message Folders/ Large LCD Display/ Voice Operated Recording/ 250mW Speaker Output/ Date and Time Stamp/ Silver Finish', 39.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (229, 1, 'Motorola MotoRokr Portable Bluetooth Car Kit Speaker Phone - T505', 'Motorola MotoRokr Portable Bluetooth Car Kit Speaker Phone - T505/ 2.0 Bluetooth Wireless Technology/ Noise Cancellation Technology/ Loud Sound High Speaker Output/ Audio CallerID/ StationFinder/ Convenient Multi-Function Button/ Long Battery Life/ Mini-USB Connector/ Black Finish', 129.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (230, 1, 'Samsung Hi Definition Conversion DVD Player - DVD1080P8', 'Samsung Hi Definition Conversion DVD Player - DVD1080P8/ Progressive Scan/ HD Upconversion/ Digital-To-Analog Converter/ Dolby Digital Surround Sound/ Child Protection/ HDMI Output/ Black Finish', 79.90); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (231, 1, 'Boston Acoustics Duo-I AM/FM Clock Radio With iPod Dock - HDUOIMDNT', 'Boston Acoustics Duo-I AM/FM Clock Radio With iPod Dock - HDUOIMDNT/ Integrated iPod Dock/ Precision AM/FM Stereo Tuner/ 3 1/2'' Dual High Performance Full-Range Speakers/ BassTrac Audio Processing/ 2 Auxiliary Inputs/ High Contrast Display/ 10 FM & 5 AM Station Presets/ 360� Snooze Bar/ Remote Control Included/ Grey Finish', 199.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (232, 1, 'Panasonic Black DVD Home Theater Sound System - SCPT660', 'Panasonic Black DVD Home Theater Sound System - SCPT660/ Kelton Subwoofer/ Bamboo Diaphragm Center Speakers/ 1080p Up-Conversion/ Integrated Universal Dock And On-Screen Display For iPod/ iPod Video Playback/ Whisper-Mode Surround/ Built-In Dolby Digital And DTS Decoder/ High Speed 5-DVD/CD Changer/ Black Finish', 289.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (233, 1, 'Weber Summit E-620 Copper Liquid Propane Gas Outdoor Grill - 1752001', 'Weber Summit E-620 Copper Liquid Propane Gas Outdoor Grill - 1752001/ 6 Stainless Steel Burners/ 60,000 BTU-Per-Hour Input/ Snap-Jet Individual Burner Ignition System/ 838 Sq. In. Total Cooking Area/ Porcelain-Enameled Shroud/ Center-Mounted Thermometer/ Copper Finish/ Liquid Propane Model (LP Tank Not Included)/ Assembly Required', 1899.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (234, 1, 'Logitech Harmony One Advanced Universal Remote Control - HARMONY1', 'Logitech Harmony One Advanced Universal Remote Control - HARMONY1/ One-Touch Access To Your Entertainment/ Replaces Up To 15 Remotes/ Full-Color Touch Screen/ Sculpted, Backlighted Buttons In Logical Zones/ Ergonomic Design/ Rechargeable/ Guided Online Setup/ World?s Largest AV Control Database/915-000035', 249.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (235, 1, 'Z-Line Portland Black TV Stand - ZL2344MU', 'Z-Line Portland Black TV Stand - ZL2344MU/ Accommodates Most Flat Panel LCD/Plasma TVs Up To 50''/ Durable Black Glossy Powder Coat Metal Frame/ Tempered Black Safety Glass Shelves/ Chrome Cylinder Glass Supports/ Swivel Mount/ Wire Management/ Holds 65 lbs Per Shelf/ Distance Between Shelves- 8.25'' (Bottom to Middle) and 7'' (Middle to the bar below the top shelf)/ Black Finish', 399.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (236, 1, 'Sony Black USB Stereo Turntable System - PSLX300USB', 'Sony Black USB Stereo Turntable System - PSLX300USB/ Transfer Classic Vinyl To PC, Walkman, Or MP3 Player/ USB And RCA Audio Output/ 45 Rpm Record Playback/ Belt Drive System/ Dust Cover/ Black Finish', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (237, 1, 'Sony Digital SLR Camera With Lens Kit - DSLRA200W', 'Sony Alpha Digital SLR Camera With Lens Kit - DSLRA200W/ 10.2 Megapixels/ 2.7'' Clear Photo LCD Screen/ Super SteadyShot In-Camera Image Stabilization/ Continuous Burst Mode/ Bionz Image Processor/ ISO Sensitivity/ 9-Point Center Cross AF Sensor/ Scene Selection Modes/ DT 18-70mm f3.5 Zoom Lens And 75-300mm f4.5-5.6 Compact Super Telephoto Zoom Lens Included/ Black Finish', 849.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (238, 1, 'Nyko Charge Base 2 Charger For PlayStation 3 Controller - 743840830535', 'Nyko Charge Base 2 Charger For PlayStation 3 Controller - 743840830535/ Compact Design/ Rapidly Charges Two PS3 Controllers Simultaneously/ Includes Two USB Charge Adaptors', 34.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (239, 1, 'Sony Remote Control Tripod - VCT60AV', 'Sony Remote Control Tripod - VCT60AV/ A/V Remote Connector/ 4 Stage Leg Extension/ Extends From 18.9'' To 57.6'' In Height/ Guide Frame Feature/ Available Vertical Position/ Supplied Carrying Case/ Black Finish', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (240, 1, 'Klipsch Groove PM20 Computer Speakers - GROOVEPM20BK', 'Klipsch Groove PM20 Computer Speakers - GROOVEPM20BK/ 6 Ohms Nominal Impedance/ 3Full-Range 2.5? Fiber Composite Driver/ Overload Protection/ System-Specific Loudness Contour/ Black Finish', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (241, 1, 'Weber Gas Barbecue Rotisserie - 7519', 'Weber Gas Barbecue Rotisserie - 7519/ Fits Genesis E-300, S-300 Gas Grills/ Heavy-Duty Electric Motor/ Counterbalance For Smooth Turning', 80.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (242, 1, 'Weber Cast Iron Griddle - 7531', 'Weber Cast Iron Griddle - 7531/ Heavy-Duty Cast Iron Griddle/ Fits Weber Genesis Silver A & Spirit 500 Gas Grills', 44.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (243, 1, 'Weber Cast Iron Griddle - 7542', 'Weber Cast Iron Griddle - 7542/ Heavy-Duty Cast Iron Griddle/ Two-Sided For Cooking A Variety Of Foods/ Fits Several Weber Grills', 44.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (244, 1, 'Sony 5.1 Channel Black A/V Receiver - STRDG520', 'Sony 5.1 Channel Black A/V Receiver - STRDG520/ 100 Watts X 5 Power/ 1080p HDMI Pass Through/ Accepts 1080/60p And 24p Video Signal Via HDMI/ Dolby Digital, Dolby Pro Logic, Dolby Pro Logic II, Digital Cinema Sound And Dts Decoding/ Black Finish', 199.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (245, 1, 'Sony Alpha DSLR Black Camera Body With 18-70mm Zoom Lens - DSLRA300K', 'Sony Alpha DSLR Black Camera Body With 18-70mm Zoom Lens - DSLRA300K/ 10.2 MP Super HAD CCD/ Tiltable 2.7 Clear Photo LCD Plus Screen/ Smart Teleconverter 2X Zoom/ Expanded ISO Sensitivity/ Super SteadyShot In-Camera Image Stabilization/ Anti-Dust Technology/ 9-Point Center Cross AF Sensor/ Index and Slide Show Display/ Black Finish', 599.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (246, 1, 'Polk Audio CSI A4 Black Center Channel Loudspeaker - CSIA4BK', 'Polk Audio CSI A4 Black Center Channel Loudspeaker - CSIA4BK/ 1'' Silk/Polymer Dome Tweeter/ Dual 5-1/4'' Mid/Woofers/ Magnetic Shielding/ All-MDF Construction/ Acoustically Inert Stamped Driver Baskets/ Floating Anti-Diffraction Grilles/ Dual Bi-Ampable Gold-Plated 5-Way Binding Post Inputs/ Black Finish/ Sold As A Single', 279.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (247, 1, 'Polk Audio CSI A4 Cherry Center Channel Loudspeaker - CSIA4CH', 'Polk Audio CSI A4 Cherry Center Channel Loudspeaker - CSIA4CH/ 1'' Silk/Polymer Dome Tweeter/ Dual 5-1/4'' Mid/Woofers/ Magnetic Shielding/ All-MDF Construction/ Acoustically Inert Stamped Driver Baskets/ Floating Anti-Diffraction Grilles/ Dual Bi-Ampable Gold-Plated 5-Way Binding Post Inputs/ Cherry Finish/ Sold As A Single', 279.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (248, 1, 'Polk Audio CSI A6 Black Center Channel Loudspeaker - CSIA6BK', 'Polk Audio CSI A6 Black Center Channel Loudspeaker - CSIA6BK/ Dual 6-1/2'' Mid/Woofers/ 1'' Silk/Polymer Dome Tweeter/ Dual Rear PowerPort Bass Venting/ Magnetic Shielding/ Mylar Bypass Capacitors/ Acoustic Resonance Control (ARC Port) Technology/ Dual Bi-Ampable Gold-Plated 5-Way Binding Post Inputs/ Butyl Rubber Surrounds/ Floating Anti-Diffraction Grilles/ All-MDF Construction/ Black Finish/ Sold As A Single', 449.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (249, 1, 'Polk Audio 5.1 Channel Black Home Theater Speaker System - RM705BK', 'Polk Audio 5.1 Channel Black Home Theater Speaker System - RM705BK/ Heavy-Duty Non-Resonant Composite Enclosures/ Downward Firing Powered 8'' Subwoofer/ Built-In Subwoofer Power Amp With Active Crossover/ Three-Sided Cabinet Design/ Magnetically Shielded/ Black Finish', 499.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (250, 1, 'Sony 3.1 Channel Home Theater Surround System In Black - HTCT100', 'Sony 3.1 Channel Home Theater Surround System In Black - HTCT100/ HDMI Active Intelligence/ LPCM Playback/ 3.1 Channel/ S-Force Surround/ BRAVIA� Sync/ Digital Media Port/ Black Finish/ ETA MID JANUARY 2009', 299.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (251, 1, 'Polk Audio Black 10'' Powered Subwoofer - PSW110BK', 'Polk Audio PSW110 Black 10'' Powered Subwoofer - PSW110BK/ 100 Watts Continuous Average Output/ 200 Watts Dynamic Power Output/ 10'' Dynamic Balance Composite Woofer Driver/ Klippel Optimized Woofer/ High Current Class A/B Amplifiers/ Downward Firing Port/ Line And Speaker Level Inputs/ Non-Resonant MDF Construction/ Black Finish', 299.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (252, 1, 'Twenty20 VholdR Mount Adhesive - 2200MA', 'Twenty20 VholdR Mount Adhesive - 2200MA/ Removable/ Resists Water, Heat And Cold', 6.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (253, 1, 'Weber Premium Black Grill Cover - 7550', 'Weber Premium Black Grill Cover - 7550/ Heavy-Duty Vinyl/ Compatible With Spirit E-200 Series, Spirit 500 And Genesis Silver A Gas Grills/ Black Finish', 40.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (254, 1, 'Sony Black Earbud Style Headphones - MDREX55BK', 'Sony MDREX55BLK Black Earbud Style Headphones - MDREX55BK/ 9mm EX Driver Provides Comfort Fit And Deep Bass Sound/ Soft Fitting Silicon Housing/ 3 Sizes Earbuds/ Carrying Pouch/ Black Finish', 39.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (255, 1, 'Hoover EmPower Bagless Upright Vacuum - U5269', 'Hoover EmPower Bagless Upright Vacuum - U5269/ Hush Mode/ Power Boost/ No Assembly Required/ Folding Handle For Easy Storage/ Allergen Filter/ 12 Amp Motor/ Tools Included/ Green Finish', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (256, 1, 'Panasonic DECT 6.0 Expandable Digital Cordless Phone With All-Digital Answering System - KXTG9344T', 'Panasonic DECT 6.0 Expandable Digital Cordless Phone With All-Digital Answering System - KXTG9344T/ 4 Handsets System/ Up To 6 Multi-Handset Capability/ Digital Answering Machine System/ Ringer ID/ Call Waiting Caller ID/ Voicemail/ Hold/ Voice Menu/ Marker Message/ Mute/ Clock/ Alarm/ LED Lighting/ Night Mode/ Call Block/ Speakerphone/ 11 Days Standby/ 5 Hours Talk Time/ Black Metallic Finish', 139.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (257, 1, 'LaCie 500GB d2 Quadra External Hard Drive - 301825U', 'LaCie 500GB d2 Quadra External Hard Drive - 301825U/ Quadruple Interface For Full PC And Mac Compatibility/ Interface Bandwidth Up To 3Gbits/s (eSATA)/ Advanced Aluminum Heat Sink Design Cooling System For Quiet Operation/ 7200 Rotational Speed (rpm)/ 16MB Cache/ Compatible With Time Machine', 159.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (258, 1, 'Panasonic DECT 6.0 Black Expandable Digital Cordless Phone - KXTG9361B', 'Panasonic DECT 6.0 Black Expandable Digital Cordless Phone - KXTG9361B/ Drop And Splash Resistant/ Multi-Handset Capability/ Ringer ID/ Call Waiting Caller ID/ Voicemail/ Hold/ Mute/ Clock/ Alarm/ LED Lighting/ Night Mode/ Call Block/ Speakerphone/ 11 Days Standby/ 5 Hours Talk Time/ Black Finish', 48.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (259, 1, 'Sony 1GB Memory Stick PRO Duo Mark 2 Media Card - MSMT1G', 'Sony 1GB Memory Stick PRO Duo Mark 2 Media Card - MSMT1G/ 160 Mbps Transfer Speed/ 940MB Actual Capacity', 19.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (260, 1, 'Sony 2GB Memory Stick PRO Duo Mark 2 Media Card - MSMT2G', 'Sony 2GB Memory Stick PRO Duo Mark 2 Media Card - MSMT2G/ 160 Mbps Transfer Speed/ 1.85GB Actual Capacity', 29.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (261, 1, 'Pioneer Black Premier Single CD Receiver - DEHP700BT', 'Pioneer Black Premier Single CD Receiver - DEHP700BT/ Built-In Bluetooth Solution/ USB Direct Control For iPod/ Advanced Sound Retriever/ 3 RCA Hi-Volt Preouts/ Two-Way Crossover/ Built-In MOSFET 50 W x 4 Amplifier/ Supertuner IIID/ Amplifier Off Mode/ Display Off Mode', 308.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (262, 1, 'TomTom ONE 130S Car GPS Navigation System - 1EE005202', 'TomTom ONE 130S Car GPS Navigation System - 1EE005202/ 3.5'' LCD Anti-Glare Touch Screen/ Pre-Installed Maps/ Internal Lithium-Ion Battery/ Car Speed Linked Volume/ Automatic Day/Night Mode/ QuickGPSfix/ Text-To-Speech Included', 246.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (263, 1, 'TomTom ONE XL 330 Car GPS Navigation System - 1EG005200', 'TomTom ONE XL 330 Car GPS Navigation System - 1EG005200/ 4.3'' LCD Anti-Glare Touch Screen/ Pre-Installed Maps/ Internal Lithium-Ion Battery/ Car Speed Linked Volume/ Automatic Day/Night Mode/ QuickGPSfix', 246.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (264, 1, 'TomTom ONE XL 330S Car GPS Navigation System - 1EG005201', 'TomTom ONE XL 330S Car GPS Navigation System - 1EG005201/ 4.3'' LCD Anti-Glare Touch Screen/ Pre-Installed Maps/ Internal Lithium-Ion Battery/ Car Speed Linked Volume/ Automatic Day/Night Mode/ QuickGPSfix/ Text-To-Speech Included', 296.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (265, 1, 'Sony Black Camcorder Tripod - VCT80AV', 'Sony Black Camcorder Tripod - VCT80AV/ 3 Stage Leg Extension/ Extends From 24.88'' To 65.88'' In Height/ Guide Frame Feature/ Available Vertical Position/ For A/V Remote Connector/ Supplied Carrying Case/ Black Finish', 180.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (266, 1, 'Sony 7.1 Channel Black A/V Receiver - STRDG820', 'Sony 7.1 Channel Black A/V Receiver - STRDG820/ 770 Watts Total Power (110W x 7)/ Accepting Resolutions Up To 1080p Via HDMI/ Digital Cinema Auto Calibration/ BRAVIA Sync/ Digital Cinema Sound/ Dolby Digital, Dolby Digital EX, Dolby Pro Logic II, Dolby Pro Logic IIx, Dts, Dts-ES, Dts 96/24, Dts NEO:6 Decoding/ Black Finish', 399.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (267, 1, 'Sony Splash Resistant Shower Radio - ICFS79W', 'Sony Multi Band Digital Tuner Shower Radio - ICFS79W/ Splash Resistant/ AM/FM/Weather Band Reception/ Easy One Button Weather Band Select/ Built-In Digital Clock/ Selectable Automatic-Off Timer/ Quartz Synthesized Tuner/ Built-In Antennas', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (268, 1, 'Samsung Black Combo DVD/VHS Player - DVDV9800', 'Samsung Black Combo DVD/VHS Player - DVDV9800/ Progressive Scan/ 1080p Up-Conversion Via HDMI/ 10Bit / 54MHz Digital-To-Analog Converter/ 4-Head Hi-Fi VCR/ Black Finish/ No Tuner', 98.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (269, 1, 'Omnimount Stellar Series Audio Tower - G303DARK', 'Omnimount Stellar Series Audio Tower - G303DARK/ Designed For Large Audio Components/ Supports Tabletop Flat Panels/ Three ?Floating? Shelf Design/ Integrated Cable Management/ Black Finish', 299.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (270, 1, 'Weber Q 320 Liquid Propane Table And Outdoor Grill - 586002', 'Weber Q 320 Liquid Propane Table And Outdoor Grill - 586002/ 462 Sq. In. Total Cooking Area/ 21,700 BTU Stainless Steel Burners/ Porcelain-Enameled Cast-Iron Cooking Grate/ Cast-Aluminum Lid And Body/ Electronic Ignition/ Grill Out Handle Light/ Folding Work Tables With Tool Holders/ Removable Catch Pan/ Built-In Thermometer/ Stationary Cart Included/ Black And Aluminum Finish/ Assembly Required', 379.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (271, 1, 'Sony Black Component Home Theater System - HT7200DH', 'Sony Black Component Home Theater System - HT7200DH/ 900 Watts/ 5.1 Channels/ HDMI 1080p Output DVD Player/ HDMI Active Intellegence AV Receiver/ 5 Satellite Speakers/ XM Ready/ Black Finish', 499.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (272, 1, 'TomTom Black Carry Case - 9UEA01700', 'TomTom Black Carry Case - 9UEA01700/ Specifically Designed For TomTom ONE 130 GPS/ Durable And Compact Protective Hardcover Material/ Wrist Strap/ Black Finish', 19.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (273, 1, 'Mitsubishi 835 Diamond Series 73'' 1080p DLP Rear Projection HDTV - WD73835', 'Mitsubishi 835 Diamond Series 73'' 1080p DLP Rear Projection HDTV - WD73835/ 1920 x 1080 Full HD Resolution/ 6-Color Processor/ Smooth 120Hz/ x.v.Color/ Plush1080p 12-Bit Digital Video Processing/ Color 4D Video Noise Reduction/ 3D Ready/ NetCommand/ DeepField Imager/ Black Finish', 3499.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (274, 1, 'Sony Black DVD Recorder And VHS Combo Player - RDRVX560', 'Sony Black DVD Recorder And VHS Combo Player - RDRVX560/ Multiformat DVD Compatible/ HDMI Output With 1080p,1080i,720p Upscaling/ USB One Touch Dubbing/ 4 Video Head Stereo VHS With 19 Micron Heads/ Virtual Surround Sound For DVD With Stereo TV Speakers/ Black Finish', 219.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (275, 1, 'Uniden DECT 6.0 Digital Accessory Handset - DCX300', 'Uniden DECT 6.0 Digital Accessory Handset - DCX300/ DECT 6.0 Interference Free Cordless Frequency/ Large Color Display/ Blue Backlit Keypad/ Handset Speakerphone/ Intercom or Call Transfer Between Handsets/ Polyphonic Ring Tones/ Advanced Phonebook Features/ Last 5 Number Redial/ Piano Black Finish', 34.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (276, 1, 'Sony DVD Recorder In Black - RDRGX360', 'Sony DVD Recorder In Black - RDRGX360/ 1080p/1080i/720p Upscaling For DVD/ USB One Touch Dubbing/ Line Input Recording/ BRAVIA Sync/ DVD+R Double Layer Recording/ Dolby Digital Decoding Playback Compatible/ Black Finish', 179.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (277, 1, 'Sennheisser Hi-Fi Wireless Headphone - RS130', 'Sennheisser Hi-Fi Wireless Headphone - RS130/ Switchable SRS Surround Sound Mode/ Intelligent Auto-Tuning/ Memory Function/ Self-Learning Automatic Level Control/ Black Finish', 159.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (278, 1, 'BlueAnt Black Bluetooth Headset - Z9I', 'BlueAnt Black Bluetooth Headset - Z9I/ Pairs With 5 Devices/ Bluetooth Version 2.0 Technology/ Dual Microphones For Pure Speech/ Revolutionary Voice Isolation Technology/ Automatic Connection And Reconnection With Notification/ Firmware Upgrade Via USB On Your PC/ Up To 5.5 Hours Talk Time/ 200 Hours Standby Time/ Gloss Black Finish', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (279, 1, 'Escort Passport 9500CI Radar Detector - 9500CI', 'Escort Passport 9500CI Radar Detector - 9500CI/ 360 Degree Protection/ Completely Undetectable To All Detector Scanners/ Variable-Speed Radar Performance/ GPS-Powered Truelock Filter/ Adaptive Signal Processing/ Speed Alert/ Crystal-Clear Voice Alerts/ 280 LED Matrix Blue Display/ 5 Levels Of Brightness Control/ Black Finish/ Price Includes Installation', 1995.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (280, 1, 'Sony Black 5.1 Channel Home Theater System - HTDDWG700', 'Sony Black 5.1 Channel Home Theater System - HTDDWG700/ 5.1 Channel/ 900 Watts Power/ Portable Audio Enhancer With Front Audio Input/ iPod Cradle/ Digital Cinema Auto Calibration/ BRAVIA Sync/ Digital Media Port/ Black Finish', 199.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (281, 1, 'Denon Multi-Channel Digital Surround Sound Speaker System - DHTFS5', 'Denon Multi-Channel Digital Surround Sound Speaker System - DHTFS5/ Multiple Amplifier Channels/ Dolby Pro Logic II, Dolby Digital And DTS Surround/ Balanced Loudspeaker Drivers/ X-Space Surround Technology/ Night Mode/ Remote Control Included/ Black Finish', 499.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (282, 1, 'Danby White Countertop Dishwasher - DDW497WH', 'Danby White Countertop Dishwasher - DDW497WH/ 4 Place Settings/ Quick Connect To Any Kitchen Tap/ Automatic Detergent And Rinse Agent Dispenser/ Quiet Operation/ 5 Wash Cycles/ Durable Stainless Steel Spray Arm And Interior/ White Finish', 222.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (283, 1, 'Canon KP-36IP Color Ink & Paper Set - 7737A001', 'Canon KP-36IP Color Ink & Paper Set - 7737A001/ 36 Sheets Of 4'' x 6'' Photo Paper/ Ink Cartridge For Compatible Canon Dye Sublimation Printer', 12.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (284, 1, 'Linksys Ultra RangePlus Wireless-N Broadband Router - WRT160N', 'Linksys Ultra RangePlus Wireless-N Broadband Router - WRT160N/ Internet-Sharing Router/ 4-Port Switch/ Enhanced Wireless Access Point/ MIMO Technology/ Faster Than Wireless-G/ Protected By Wireless Encryption/ Powerful SPI Firewall/ 2 Antennas/ Glossy Black Finish', 79.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (285, 1, 'Pioneer USB iPod Interface Cable - CDIU230V', 'Pioneer USB iPod Interface Cable - CDIU230V/ Compatible With AVIC-F700BT And AVIC-F900BT Navigation Receivers', 48.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (286, 1, 'Canon White Selphy CP760 Compact Photo Printer - 2565B001', 'Canon White Selphy CP760 Compact Photo Printer - 2565B001/ 2.5'' TFT Display/ Portrait Image Optimize/ Print Water-Resistant Photos/ Print Directly From Your Memory Cards Or Bluetooth-Enabled Devices/ Big Buttons/ Automatic Red-Eye Correction/ White Finish', 95.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (287, 1, 'Sony 2GB Memory Stick Micro (M2) - MSA2GU2', 'Sony MSA2GD 2GB Memory Stick Micro (M2) - MSA2GU2/ Ultra-Small Size/ 2GB Storage Capacity With 1.85GB Available/ Designed For Use In Compatible Small Devices Such As Mobile Phone/ Dual Operating Voltage/ M2 Duo Adaptor Included/ Black Finish', 29.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (288, 1, 'Panasonic DECT 6.0 Silver Digital Cordless Handset - KXTGA630S', 'Panasonic DECT 6.0 Silver Digital Cordless Handset - KXTGA630S/ For Use With Panasonic 6300 And 9300 Series Phone Systems/ DECT 6.0 Technology/ 60 Channels/ Call Waiting Caller ID/ 1.4'' Amber Backlit LCD Display/ Wall Mountable/ 11 Days Standby Time/ 5 Hours Talk Time/ Silver Finish', 29.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (289, 1, 'Polk Audio White Round Two-Way In-Wall Loudspeaker - TC60I', 'Polk Audio White Round Two-Way In-Wall Loudspeaker - TC60I/ Dynamic Balance Polymer Composite Driver/ Aimable 1'' Silk Dome Tweeter With Neodymium Magnet/ 15-Degree Offset Drive Unit/ Wide Dispersion Design/ Durable, Moisture Resistant Materials/ Infinite Baffle Tuning/ Paintable, Powder-Coated Aluminum Grilles/ Conveniently Accessible Front Panel Controls/ Each Speaker Sold Seperately/ White Finish', 299.95); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (290, 1, 'Toshiba Black DVD/VCR Combinaton Player - SDV296', 'Toshiba Black DVD/VCR Combinaton Player - SDV296/ Progressive Scan DVD Player/ One Touch Recording For The VCR/ ColorStream Pro Progressive Scan Component Video Outputs/ Simultaneous DVD Playback And VHS Record/ JPEG Viewer/ Black Finish', 89.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (291, 1, 'Samsung 19'' Black Flat Panel Series 6 LCD HDTV - LN19A650', 'Samsung 19'' Black Flat Panel Series 6 LCD HDTV - LN19A650/ 1440 x 900 True 720p Resolution/ 3,000:1 Dynamic Contrast Ratio/ SRS TruSurround XT/ Built-In Digital Tuner (ATSC/Clear QAM)/ Wide Color Enhancer/ 8ms Response Time/ Touch Of Color Design/ Black With Red Finish', 499.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (292, 1, 'Samsung 22'' Black Flat Panel Series 6 LCD HDTV - LN22A650', 'Samsung 22'' Black Flat Panel Series 6 LCD HDTV - LN22A650/ 1680 x 1050 True 720p Resolution/ 5,000:1 Dynamic Contrast Ratio/ SRS TruSurround XT/ Built-In Digital Tuner (ATSC/Clear QAM)/ Wide Color Enhancer/ 8ms Response Time/ Touch Of Color Design/ Black With Red Finish', 599.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (293, 1, 'Canon Deluxe Burgundy Leather Case - 2350B001', 'Canon Deluxe Burgundy Leather Case - 2350B001/ Genuine Leather Case/ Designed For The PowerShot SD770 IS, SD1100 And SD1000/ Burgundy Finish', 18.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (294, 1, 'Canon Deluxe Black Digital Camera Case - 2595B002', 'Canon Deluxe Black Digital Camera Case - 2595B002/ Soft Nylon Case/ Flip-Down Cover/ Belt Loop Attachment For Hands-Free Convenience/ Compatible With Canon PowerShot A Series/ Black Finish', 13.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (295, 1, 'Griffin iPod RoadTrip With SmartScan - 4040RDTRPB', 'Griffin iPod RoadTrip With SmartScan - 4040RDTRPB/ Play Music From Your iPod On Your Car?s Stereo System As It Charges/ Switch Quickly Between Pre-Sets/ SmartSound Plus Technology Delivers Clear Sound Under Real-World Conditions/ Flexible Steel Neck/ Black Finish', 89.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (296, 1, 'Denon Black Home Theater Surround Sound Receiver - AVR1709', 'Denon Black AVR-1709 Home Theater Surround Sound Receiver - AVR1709/ 80 Watts Per Channel/ 7 Channels/ HDMI V1.3A Video Switching/ Dolby Digital Surround EX, Dolby Pro Logic IIx, DTS ES 6.1, DTS Neo:6 Decoding/ Audyssey MultEQ, Dynamic Volume And Dynamic EQ/ Video Up-Conversion/ Black Finish', 449.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (297, 1, 'Denon Black AVR-1609 Home Theater Surround Sound Receiver - AVR1609', 'Denon Black AVR-1609 Home Theater Surround Sound Receiver - AVR1609/ 75 Watts Per Channel/ 7 Channels/ HDMI V1.3A Video Switching/ Dolby Digital Surround EX, Dolby Pro Logic IIx, DTS ES 6.1, DTS Neo:6 Decoding/ Audyssey MultEQ, Dynamic Volume And Dynamic EQ/ Sirius Satellite Radio Ready/ Network And Digital Media Connectivity/ Black Finish', 349.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (298, 1, 'Sony Bud Style Headphones In Silver - MDRED12LPSLV', 'Sony Bud Style Headphones In Silver - MDRED12LPSLV/ 16mm Drivers/ Crisp Sound/ Neodymium Magnets Offer Powerful Sound Reproduction/ Convenient Cord Slider Reduces Tangles/ 3.9 Ft. Cord Length/ Frequency Response Of 8-22,000Hz/ Silver Finish', 14.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (299, 1, 'Sony Bud Style Headphones In Red - MDRED12LPRED', 'Sony Bud Style Headphones In Red - MDRED12LPRED/ 16mm Drivers/ Crisp Sound/ Neodymium Magnets Offer Powerful Sound Reproduction/ Convenient Cord Slider Reduces Tangles/ 3.9 Ft. Cord Length/ Frequency Response Of 8-22,000Hz/ Red Finish', 14.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (300, 1, 'Sony EX Ear Bud Headphones In Black - MDREX32LPBLK', 'Sony EX Ear Bud Headphones In Black - MDREX32LPBLK/ 9mm Drivers/ Deep Bass Sound/ Neodymium (400kJ/m3) Magnets Offer Powerful Bass Sound Reproduction/ 3.9 Ft. Cord Length/ Frequency Response Of 6-23,000Hz/ Black Finish', 24.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (301, 1, 'Sony EX Ear Bud Headphones In White - MDREX32LPWHI', 'Sony EX Ear Bud Headphones In White - MDREX32LPWHI/ 9mm Drivers/ Deep Bass Sound/ Neodymium (400kJ/m3) Magnets Offer Powerful Bass Sound Reproduction/ 3.9 Ft. Cord Length/ Frequency Response Of 6-23,000Hz/ White Finish', 24.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (302, 1, 'Griffin iPhone SmartTalk - 3016SMRTLKB', 'Griffin iPhone SmartTalk - 3016SMRTLKB/ Adds A Microphone And An iPhone Control Button To Your Favorite Earphones/ Play, Pause And Skip Through Your Tunes/ High-Sensitivity Microphone For Crystal-Clear Phone Conversations/ 30'' Cable Sheathed In Nylon Braiding', 19.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (303, 1, 'Logitech Driving Force Pro Steering Wheel With Pedals Set For Sony Playstation 2 - 9632930403', 'Logitech Driving Force Pro Steering Wheel With Pedals Set For Sony Playstation 2 - 9632930403/ Comfortable Soft Full Rubber Wheel/ Realistically Turn Through 2.5 Times Wheel Rotation/ 900 Degrees Of wheel Steering/ State-Of-The-Art Force Feedback Technology/ Stick Shifter/ Responsive Gas And Brake Pedals/ Black Finish', 129.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (304, 1, 'Monster iCarPlay Wireless 250 FM Transmitter With AutoScan for iPod And iPhone - AIPFMCH250', 'Monster iCarPlay Wireless 250 FM Transmitter With AutoScan For iPod And iPhone - AIPFMCH250/ Plays iPod Or iPhone Music Over Any Car Stereo/ Vibrant Sound/ Works With Any FM Car Radio/ 3 Programmable Presets/ FM Stations Range From 88.1 To 107.9/ Easy To Use/ Convenient Charging While You Drive/ Black Finish', 100.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (305, 1, 'D-Link Broadband Cable Modem - DCM202', 'D-Link Broadband Cable Modem - DCM202/ DOCSIS 2.0 CableLabs Certified/ High-Speed Internet Connectivity/ Always On And Always Connected/ Ethernet Or USB Connectivity/ Front Panel LED Indicator Lights/ Grey Finish', 79.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (306, 1, 'LaCie USB 2.0 Floppy Disk Drive - 706018', 'LaCie USB 2.0 Floppy Disk Drive - 706018/ Ultra-Thin Portable Design/ Compatible With Windows And Mac OS/ Plug And Play/ USB Powered/ 250 - 500 kbps Transfer Rate/ Silver Finish', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (307, 1, 'Toshiba XDE Black 1080p Upconversion Extended Detail DVD Player - XDE500', 'Toshiba XDE Black 1080p Upconversion Extended Detail DVD Player - XDE500/ Full 1080p Upconversion With 24 Frames Per Second/ Detail Enhancement/ Intelligent Color/ Contrast Enhancement/ DivX Certified/ Black Finish', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (308, 1, 'Griffin Black iPhone 3G Wave Case - 8227IP2WVB', 'Griffin Black iPhone 3G Wave Case - 8227IP2WVB/ Elegtant Wave-Shaped Closures/ Durable Polycarbonate Protection/ Rigid Touchscreen Protector/ Full Access To All Ports And Controls/ Black Finish', 24.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (309, 1, 'iHome iPod & iPhone Clock Radio & Audio System - IP99BR', 'iHome iP99 iPod & iPhone Clock Radio & Audio System - IP99BR/ Universal Dock For iPhone/ Auto-Set Clock/ Programmable Snooze/ Charges iPod Or iPhone While Docked/ Reason8 Speaker Chambers/ Line In Jack/ Full Function Remote Control Included/ Dual Alarm Clock/ Extra-Large LCD Display/ Black Finish (iPhone Not Included)', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (310, 1, 'Transcend 8GB SDHC Card And Compact Card Reader - TS8GSDHC6S5W', 'Transcend 8GB SDHC Card And Compact Card Reader - TS8GSDHC6S5W/ SDHC Card Is Class 6 Compliant And Compatible With All SDHC-Labeled Host Devices/ Card Reader Is Fully Compatible With Hi Speed USB 2.0, Up To 480Mb/s And Supports SDHC Memory Cards', 26.30); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (311, 1, 'Denon 7.1 Channel AV Receiver With Network Client Compatible D-Dock Port In Black - AVR2809CI', 'Denon 7.1 Channel AV Home Theater Surround Receiver With Network Client Compatible D-Dock Port In Black - AVR2809CI/ 110 Watts x 7 Channels/ 1080p Upscaling/ PC Setup And Control Capability Via RS-232C/ Network Capable/ XM Satellite Radio Ready/ Dolby TrueHD And DTS-HD Master Audio/ HDMI 1.3a Repeater Inputs-Outputs/ Dual Remotes/ Black Finish', 1199.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (312, 1, 'LaCie Little Disk 320GB Black Portable Hard Drive - 301829', 'LaCie Little Disk 320GB Black Portable Hard Drive - 301829/ Compact, Thin And Lightweight Design/ Back Up, Synchronize And Secure Files And Settings/ Extractable Integrated USB Cable And Protective Cap/ Hi-Speed USB 2.0/ PC And Mac Compatible/ Black Finish', 119.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (313, 1, 'LaCie Little Disk 250GB Black Portable Hard Drive - 301278', 'LaCie Little Disk 250GB Black Portable Hard Drive - 301278/ Compact, Thin And Lightweight Design/ Back Up, Synchronize And Secure Files And Settings/ Extractable Integrated USB Cable And Protective Cap/ Hi-Speed USB 2.0/ PC And Mac Compatible/ Black Finish', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (314, 1, 'AppleCare Protection Plan For iPod Touch Or iPod Classic - MB591LLA', 'AppleCare Protection Plan For iPod Touch Or iPod Classic - MB591LLA/ Extends Your Service Coverage To Up To Two Years/ Includes Both Phone And In Store Techinical Support', 59.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (315, 1, 'Nikon CoolPix S610 10 Megapixel Black Digital Camera - COOLPIXS610BK', 'Nikon CoolPix S610 10 Megapixel Black Digital Camera - COOLPIXS610BK/ 10.0 Megapixels/ 4x Zoom-NIKKOR Lens/ 3.0'' High-Resolution Wide-Viewing Angle LCD Monitor/ Scene Auto Selector/ Active Child Mode/ Smile And Food Mode/ Face-Priority AF/ In-Camera Red-Eye Fix/ D-Lighting/ Midnight Black Finish', 249.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (316, 1, 'Sony VAIO Black USB Docking Station - VGPUPR1', 'Sony VAIO Black USB Docking Station - VGPUPR1/ Perfect For The Constant Traveler Or Mobile Professional/ Easily Connect All Of Necessary Peripherals/ VGA Port/ 4 USB Ports/ Ethernet Port/ Headphone And Microphone Ports/ Compatible With VAIO CR Series, FZ Series, FW Series, NR Series And AR Series Notebooks/ Black Finish', 199.99); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (317, 1, 'Nikon SB-900 AF Speedlight In Black - SB900', 'Nikon AF Speedlight In Black - SB900/ Wireless Commander Mode/ Control Up To Three Remote/ 3 Light Distribution Patterns/ Flash Tube Overheat Protection/ Drip-Proof Mounting Foot Cover (Water Guard)/ Color Gel Filter Identification/ Black Finish', 499.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (318, 1, 'Denon D-M37 Black CD/AM/FM Micro System - DM37SBK', 'Denon D-M37 Black CD/AM/FM Micro System - DM37SBK/ 30 Watts x 2 Amplifier/ Precision Burr-Brown Audiophile Quality DACs/ MP3 And WMA Tracks Playback Capability/ European Engineered Loudspeakers/ 120mm Long-Throw D.D.L Double-Layered Cone Woofer/ 25mm Soft Dome Tweeter With Extended Response/ Triadic Noise Reduction Concept/ Portable Player Connectivity/ Black Finish', 399.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (319, 1, 'Griffin iPhone 3G Black Elan Form Hard-Shell Leather Case - 8223IP2EFRMB', 'Griffin iPhone 3G Black Elan Form Hard-Shell Leather Case - 8223IP2EFRMB/ Top-Grain Outer Shell Crafted From Hand-Matched Leather/ Protective Polycarbonate Inner Shell/ Easy Access To Controls/ Includes Stiff Polycarbonate Screen Protector & Premium Cleaning Cloth/ Black Finish (iPhone Not Included)', 24.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (320, 1, 'Speck Black ToughSkin Case For iPhone 3G - IPH3GBLKTS', 'Speck Black ToughSkin Case For iPhone 3G - IPH3GBLKTS/ Tough, Textured And Ruggedized Protection/ Bottom Hinges Open To Allow Docking/ Thicker Corners For Extra Protection/ Removable Rotating Belt Clip/ Lightweight Design/ Easy Access To All Ports & Controls/ Black Finish (iPhone Not Included)', 34.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (321, 1, 'Canon PIXMA iP2600 Photo Printer - IP2600', 'Canon PIXMA Photo Printer - IP2600/ 4800 x 1200 Color dpi/ Spectacular Resolution/ Fast Photo Printing/ FINE Technology/ 1,472 Precision Nozzles/ Auto Image Fix/ Easy-PhotoPrint EX Software/ 4 In 1 Or 2 In 1 Printing/ Energy Star Qualified/ Borderless 4'' x 6'' Print Approx. 55 Seconds/ Windows And Mac Compatible', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (322, 1, 'Klipsch 5.25'' THX Ultra2 In-Ceiling White Loudspeaker - KS7502THX', 'Klipsch 5.25'' THX Ultra2 In-Ceiling White Loudspeaker - KS7502THX/ 100W Continuous/400W Peak Power Handling/ Dual 1'' Titanium Diaphragm Compression Drivers Mated To WDST Tractrix Horn Array/ Dual 5.25'' High-Output Cerametallic Cone Woofers/ MDF And Aluminum Motorboard/ABS Shell Enclosure/ White Finish/ Price Per Speaker', 1000.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (323, 1, 'Canon PIXMA Photo All-In-One Printer - MP620', 'Canon PIXMA Photo All-In-One Printer - MP620/ High Performance Printer And Copier, Scanner/ Easy Scroll Wheel/ Dual Paper Trays/ 2.5'' High Definition LCD Display/ Maximum 9600 x 2400 Color Dpi/ Automatic Image Optimization/ Quick Start/ Wi-Fi Ready/ Built-In Media Card Slot/ ENERGY STAR Qualified', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (324, 1, 'TiVo HD XL Black Digital Video Recorder - TCD658000', 'TiVo HD XL Black Digital Video Recorder - TCD658000/ Search, Record And Watch Shows In HD/ Save Up To 150 Hours Of HD Programming At A Time/ Control Cable TV With Pause, Rewind, Fast-Forward, And Slow-Motion/ Record Two Shows At Once In HD/ Digital Transition Ready/ Backlit Remote Control/ Netflix Instant Streaming/ TiVo Service Required And Sold Separately', 599.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (325, 1, 'Apple 8GB Black 2nd Generation iPod Touch - MB528LLA', 'Apple 8GB Black 2nd Generation iPod Touch - MB528LLA/ Holds Up To 1,750 Songs In 128-Kbps AAC Format, 10,000 iPod-Viewable Photos And 10 Hours Of Video/ Wi-Fi (802.11b/g)/ Nike + iPod Support Built-In/ Maps Location-Based Service/ 3.5'' (Diagonal) Widescreen Multi-Touch Display/ 480x320-Pixel Resolution/ 480p And 576p Component TV Out/ Mac And Windows Compatible/ Black Finish', 229.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (326, 1, 'Apple 16GB Black 2nd Generation iPod Touch - MB531LLA', 'Apple 16GB Black 2nd Generation iPod Touch - MB531LLA/ Holds Up To 3,500 Songs In 128-Kbps AAC Format, 20,000 iPod-Viewable Photos And 20 Hours Of Video/ Wi-Fi (802.11b/g)/ Nike + iPod Support Built-In/ Maps Location-Based Service/ 3.5'' (Diagonal) Widescreen Multi-Touch Display/ 480x320-Pixel Resolution/ 480p And 576p Component TV Out/ Mac And Windows Compatible/ Black Finish', 299.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (327, 1, 'Apple 32GB Black 2nd Generation iPod Touch - MB533LLA', 'Apple 32GB Black 2nd Generation iPod Touch - MB533LLA/ Holds Up To 7,000 Songs In 128-Kbps AAC Format, 25,000 iPod-Viewable Photos And 40 Hours Of Video/ Wi-Fi (802.11b/g)/ Nike + iPod Support Built-In/ Maps Location-Based Service/ 3.5'' (Diagonal) Widescreen Multi-Touch Display/ 480x320-Pixel Resolution/ 480p And 576p Component TV Out/ Mac And Windows Compatible/ Black Finish', 399.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (328, 1, 'Apple 8GB Silver 4th Generation iPod Nano - MB598LLA', 'Apple 8GB Silver 4th Generation iPod Nano - MB598LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Silver Finish', 144.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (329, 1, 'Apple 8GB Blue 4th Generation iPod Nano - MB732LLA', 'Apple 8GB Blue 4th Generation iPod Nano - MB732LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Blue Finish', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (330, 1, 'Apple 8GB Pink 4th Generation iPod Nano - MB735LLA', 'Apple 8GB Pink 4th Generation iPod Nano - MB735LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Pink Finish', 144.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (331, 1, 'Apple 8GB Purple 4th Generation iPod Nano - MB739LLA', 'Apple 8GB Purple 4th Generation iPod Nano - MB739LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Purple Finish', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (332, 1, 'Apple 8GB Green 4th Generation iPod Nano - MB745LLA', 'Apple 8GB Green 4th Generation iPod Nano - MB745LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Green Finish', 149.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (333, 1, 'Apple 8GB Black 4th Generation iPod Nano - MB754LLA', 'Apple 8GB Black 4th Generation iPod Nano - MB754LLA/ Holds Up To 2,000 Songs In 128-Kbps AAC Format, 7,000 iPod-Viewable Photos And 8 Hours Of Video/ 2'' (Diagonal) Liquid Crystal Display With Blue-White LED Backlight/ 320-By-240-Pixel Resolution/ Give It A Shake To Shuffle Your Music/ Turn It Sideways To View Cover Flow/ Mac And Windows Compatible/ Black Finish', 144.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (334, 1, 'Apple 1GB Pink 2nd Generation iPod Shuffle - MB811LLA', 'Apple 1GB Pink 2nd Generation iPod Shuffle - MB811LLA/ Holds Up To 240 Songs In 128-Kbps AAC Format/ 12 Hours Of Continuous Playback/ Skip-Free Playback/ Battery Indicator/ Shuffle Switch/ Built-In Clip/ Mac And Windows Compatible/ Pink Finish', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (335, 1, 'Sony BRAVIA Black SXRD 1080p Home Theater Front Projector - VPLHW10', 'Sony BRAVIA Black SXRD 1080p Home Theater Front Projector - VPLHW10/ SXRD 1920 x 1080p Full HD Panels/ 30,000:1 Dynamic Contrast Ratio/ Fully Digital Signal Processing/ 200Watts Ultra-High-Pressure Lamp/ Whisper-Quiet Fan Noise And Noise Reduction Function/ Two HDMI Inputs/ BRAVIA Theatre Sync/ Remote Commander/ Black Finish', 3499.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (336, 1, 'Canon PIXMA Black Photo Printer - IP4600', 'Canon PIXMA Black Photo Printer - IP4600/ Premium Printer With Individual Ink Tanks And Built-In Auto Duplex/ Print 4'' x 6'' Photo In 20 Seconds/ Dual Paper Trays/ Maximum 9600 x 2400 Color Dpi/ Automatic Image Optimization/ ENERGY STAR Qualified/ Black Finish', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (337, 1, 'Canon PIXMA Photo All-In-One Printer - MP980', 'Canon PIXMA Photo All-In-One Printer - MP980/ High Performance Wireless Printer, Copier And Scanner/ Easy Scroll Wheel/ 3.5'' High Definition LCD Display/ Maximum 9600 x 2400 Color Dpi/ Six Individual Inks Tanks/ Auto Duplex Print/ Smart Copying/ Automatic Image Optimization/ No Warm-Up/ ENERGY STAR Qualified', 299.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (338, 1, 'Nintendo DS Lite Cobalt/Black Portable Gaming System - NDSUSGBMKB', 'Nintendo DS Lite Cobalt/Black Portable Gaming System - NDSUSGBMKB/ Dual 3'' TFT Color LCD Touchscreens/ Slimmer Design/ Dual Slot Compatibility (DS Lite/Game Boy Advance Game Paks)/ Twin Ultra Bright LCD Screens/ Up To 19 Hours Continuous Gameplay/ Nintendo Wi-Fi Connection/ Impressive 3D Graphics/ Dual Stereo Speakers/ Cobalt and Black Finish', 139.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (339, 1, 'Nintendo DS Lite Onyx Black Portable Gaming System - NDSUSGSKB', 'Nintendo DS Lite Onyx Black Portable Gaming System - NDSUSGSKB/ Dual 3'' TFT Color LCD Touchscreens/ Slimmer Design/ Dual Slot Compatibility (DS Lite/Game Boy Advance Game Paks)/ Twin Ultra Bright LCD Screens/ Up To 19 Hours Continuous Gameplay/ Nintendo Wi-Fi Connection/ Impressive 3D Graphics/ Dual Stereo Speakers/ Onyx Black Finish', 139.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (340, 1, 'Nintendo DS Lite Metallic Silver Portable Gaming System - NDSUSGSVB', 'Nintendo DS Lite Metallic Silver Portable Gaming System - NDSUSGSVB/ Dual 3'' TFT Color LCD Touchscreens/ Slimmer Design/ Dual Slot Compatibility (DS Lite/Game Boy Advance Game Paks)/ Twin Ultra Bright LCD Screens/ Up To 19 Hours Continuous Gameplay/ Nintendo Wi-Fi Connection/ Impressive 3D Graphics/ Dual Stereo Speakers/ Metallic Silver Finish', 139.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (341, 1, 'Nintendo DS Lite Metallic Rose Portable Gaming System - NDSUSGSZPB', 'Nintendo DS Lite Metallic Rose Portable Gaming System - NDSUSGSZPB/ Dual 3'' TFT Color LCD Touchscreens/ Slimmer Design/ Dual Slot Compatibility (DS Lite/Game Boy Advance Game Paks)/ Twin Ultra Bright LCD Screens/ Up To 19 Hours Continuous Gameplay/ Nintendo Wi-Fi Connection/ Impressive 3D Graphics/ Dual Stereo Speakers/ Metallic Rose Finish', 139.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (342, 1, 'Case Logic Vertical Universal Leather BlackBerry Case - CLP104BB', 'Case Logic Vertical Universal Leather BlackBerry Case - CLP104BB/ 360 Degree Swivel Belt Clip/ Magnetic Closure/ Soft Internal Lining/ Expandable Elastic Sides/ Compatible With Most BlackBerrys/ Leather Fabric/ Black Finish', 15.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (343, 1, 'Nintendo DS Lite Crimson/Black Portable Gaming System - NDSUSGSRMKB', 'Nintendo DS Lite Crimson/Black Portable Gaming System - NDSUSGSRMKB/ Dual 3'' TFT Color LCD Touchscreens/ Slimmer Design/ Dual Slot Compatibility (DS Lite/Game Boy Advance Game Paks)/ Twin Ultra Bright LCD Screens/ Up To 19 Hours Continuous Gameplay/ Nintendo Wi-Fi Connection/ Impressive 3D Graphics/ Dual Stereo Speakers/ Crimson/Black Finish', 139.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (344, 1, 'BlueAnt Bluetooth Voice Control Headset - V1', 'BlueAnt Bluetooth Voice Control Headset - V1/ Voice Control User Interface/ Voice Isolation Technology/ Dual Microphones/ Pairs With Up To 8 Bluetooth Devices/ Up To 5 Hours Talk-Time/ 3 Charging Options', 119.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (345, 1, 'Netgear Prosafe 5 Port Gigabit Ethernet Desktop Switch - GS105NA', 'Netgear Prosafe 5 Port Gigabit Ethernet Desktop Switch - GS105NA/ Auto-Switching Ethernet Connection/ Supports Windows And Macintosh Platforms/ Dual Color LEDs/ AutoUplink Technology/ Compact Metal Case/ Fanless Design/ Plug-And-Play Installation', 55.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (346, 1, 'Jabra Bluetooth Headset - BT2070', 'Jabra Bluetooth Headset - BT2070/ Up To 5.5 Hours Talk Time/ Up To 200 Hours Standby Time/ Earhook Included/ Bluetooth 2.0+ EDR & eSCO Technology/ Auto-Pairing/ Discreet Light/ Answer/End, Redial And Voice Dial Features/ USB Micro-B, 5-Pin Charging Plug', 49.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (347, 1, 'Canon Printer Ink Cartridge 4 Colors Pack - 2946B004', 'Canon Printer Ink Cartridge 4 Colors Pack - 2946B004/ FINE Technology For Exceptional Sharpness And Detail/ Compatible With PIXMA iP3600, PIXMA iP4600, PIXMA MP620 And PIXMA MP980/ Includes 4 Ink Tanks (Black, Cyan, Magenta, Yellow)', 47.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (348, 1, 'Canon PIXMA Photo All-In-One Printer - MP480', 'Canon PIXMA Photo All-In-One Printer - MP480/ High Performance Printer, Copier And Scanner/ 1.8'' TFT Display/ Maximum 2400 x 4800 Color Dpi/ Smart Scanning/ Quick Start/ Built-In Media Card Slot/ ENERGY STAR Qualified', 99.00); +INSERT INTO Product(id, modificationCounter, title, description, price) VALUES (349, 1, 'Sanus 30'' - 58'' VisionMount Flat Panel TV Black Tilting Wall Mount - LT25B1', 'Sanus 30'' - 58'' VisionMount Flat Panel TV Black Tilting Wall Mount - LT25B1/ Lateral Shift Adjustment/ Virtual Axis/ Height and Level Adjustments/ ClickStand/ ClickFit System/ Open Wall Plate/ Black Finish', 199.00); diff --git a/src/test/java/com/devonfw/demoquarkus/service/v1/ProductRestServiceTest.java b/src/test/java/com/devonfw/demoquarkus/service/v1/ProductRestServiceTest.java new file mode 100644 index 00000000..56c63b05 --- /dev/null +++ b/src/test/java/com/devonfw/demoquarkus/service/v1/ProductRestServiceTest.java @@ -0,0 +1,96 @@ +package com.devonfw.demoquarkus.service.v1; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.nullValue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import java.math.BigDecimal; +import java.util.LinkedHashMap; +import java.util.List; + +import javax.ws.rs.core.MediaType; + +import org.junit.jupiter.api.Test; +import org.tkit.quarkus.test.WithDBData; +import org.tkit.quarkus.test.docker.DockerComposeTestResource; + +import com.devonfw.quarkus.productmanagement.service.v1.model.ProductDto; + +import io.quarkus.test.common.QuarkusTestResource; +import io.quarkus.test.junit.QuarkusTest; +import io.restassured.response.Response; + +//Before you run this test, tkit-test extension starts docker containers from resources/docker-compose.yaml +//we get a real postgresdb for our tests which will be stopped after tests. No manual test setup is needed. +@QuarkusTest +@QuarkusTestResource(DockerComposeTestResource.class) +class ProductRestServiceTest {// extends AbstractTest { + + @Test + // we also started a micro container, that can populated DB with data from excel + // annotating class or method with @WithDBData allows us to scope data for each test even if we use the same DB + @WithDBData(value = "data/product.xls", deleteBeforeInsert = true) + void getAll() { + + Response response = given().when().contentType(MediaType.APPLICATION_JSON).get("/products").then().statusCode(200) + .extract().response(); + + int products = Integer.valueOf(response.jsonPath().getString("totalElements")); + assertEquals(2, products); + } + + @Test + void getNonExistingTest() { + + Response response = given().when().contentType(MediaType.APPLICATION_JSON).get("/products/doesnoexist").then().log() + .all().statusCode(500).extract().response(); + } + + @Test + @WithDBData(value = "data/empty.xls", deleteBeforeInsert = true) + void createNewProduct() { + + ProductDto product = new ProductDto(); + product.setTitle("HP Notebook"); + product.setDescription("ZBook"); + product.setPrice(BigDecimal.valueOf(1)); + + Response response = given().when().body(product).contentType(MediaType.APPLICATION_JSON).post("/products").then() + .log().all().statusCode(200).header("Location", nullValue()).extract().response(); + + assertEquals(200, response.statusCode()); + + response = given().when().contentType(MediaType.APPLICATION_JSON).get("/products").then().log().all() + .statusCode(200).extract().response(); + + int products = Integer.valueOf(response.jsonPath().getString("totalElements")); + assertEquals(1, products); + List> created = response.jsonPath().getList("content"); + assertNotNull(created); + assertEquals(product.getTitle(), created.get(0).get("title")); + } + + @Test + @WithDBData(value = "data/product.xls", deleteBeforeInsert = true) + public void testGetById() { + + given().when().log().all().contentType(MediaType.APPLICATION_JSON).get("/products/1").then().statusCode(200) + .body("description", equalTo("Apple Notebook")); + } + + @Test + @WithDBData(value = "data/product.xls", deleteBeforeInsert = true) + public void deleteById() { + + // delete + given().when().log().all().contentType(MediaType.APPLICATION_JSON).delete("/products/1").then().statusCode(200) + .body("title", equalTo("MacBook Pro")); + + // after deletion it should be deleted + given().when().log().all().contentType(MediaType.APPLICATION_JSON).get("/products/1").then().statusCode(500); + + } + +} \ No newline at end of file diff --git a/src/test/resources/data/empty.xls b/src/test/resources/data/empty.xls index 1ee268f00cf0b9d53e2849c1288d524fee56c9f3..739015dcedc7ee1cff35b0f2e79e9d9eae5c9a39 100644 GIT binary patch delta 570 zcmZpe!qhNjG5IX_!zlnk0 zC$Z#k76cyp&$IJ7qwVBUmS(0f+sVIJviLUC8~_UjFoPr~7qJ$>g$%YH1POg&ZDLfO zT*~$yE&)-yxrlu=Gvl|(4%~`3NQue&xH-Xc5|bZ5Sz?oTxWPhVJd6yS411V>4rF2g znIgu+#30Tvfe|VYzymQ>ginW&k--dErO4zJJiHJ?CZB;CCo%a057aI$6ND)a+!9* z8pF&WBM9L$F!2FJ85lr*g;>DBBmiMgj&~PT1&RL!nhR0^(E;Hx0eK*Boq>(PZt`1q m6Fvc;$skn%K*+;0S>NO2Ca;Uu95?5JBb9mbL>Bc$Z7cwLhnXq> delta 846 zcmZ{iJ#5oZ5Xb-T*-o6qNg9-f3nSdh{$ZHwi^X6VN>;N^~c;a!Cth+=HXt$0+OkR=+i6rv zomuR*t=1e+cPe((Hm4c?NN!dbaGITU$6TWx{H$q?N(!UqPwsq9so=egR0*@(2q4jEpRnW-kAg)0J<^v9c<}d=* zsoO%zWAFr31>6hqPC@7NA<{qRi7biZKB7`g%KcapLsGux5hrp7^hhC6rlbq&F5-Hh)Aw`RGaijKO+s%>R%a(urvSw diff --git a/src/test/resources/data/product.xls b/src/test/resources/data/product.xls index cbc649157f160f95c35eef7e5d17b21520d26943..8738a93d555662ed897cb7503e92d86c6612d954 100644 GIT binary patch delta 633 zcmZ{iF-ROi6o&tq-P3b-Zdc?u7cA5!35SYBBFbI#AZNT2V~%)WN)ZthEW9!hl@!*O zj7?IBSO^xmWJ!@AVyA_THrHxnCmd-)gpjOHDStxb7fNRsYGa^ zPa``|H&issdVJ@Svpp-@EP3qMo!MN1r@Tw_Q>^jXKTj;B#YdeTE?ckBN|)iS<;ar< zHjp2mdG@MUDi>c)$AEINJT*=aDCYmdLL8q40Oe1PoT!%1S>Vf4-+OKe_c-a&6M?r- zFktA_iOzL{bX>Mm1hF1|G$7o7vG|{He>3|-1Nn2&LNQc=6x}LPl9WkmOCLaNlV_QD Q$71jk8T!5XaA(u}2SkU9KL7v# delta 908 zcmZ{j&ui0Q7{|Zwo3u%j^oO&p1t-*t8{)5nNWtk^yRO8!cC6jSlb}5)f~D-LEgp6h z_1$U5fjFGtFjpCZ2R(REgkJX-h$tcoL!T!JZ4^w%n|!|C=hvH%!MYr*%bgo~s`c&I z^#wH)#SJ5OWLx$0H90Y>e(ASTgH4T;q1fAx`%bJkl3u@H$@?1XiIEnBc|BuW6Q5Ms zKKh@vpmyzq?-kTu_>_O_*uIo^1QK{90Z4F_yd!Z44@D>}IYHTM>VyzD7mduSEhiZi zQSZZY1@*-Vds%14Rmyh3nu#K}ogEjumgFw?lP782;b-q-^5${zSl}7`}9% zzT(c&tx;L5ky2f*RoZT|F;{6vaivvT&H#(eId|Tzjw1e%ILZK;OYJMo>OumzRB5?Y zw=v&L0hMm|cBk05v)WNlOVbB`V*(~NP6czw)4;0tz4XqB>lc8ni{6`>CHfCCX?lsk zT^d%S^I3#-9zHwvV~7E{F&i-OHsYJqZt_6jL()KWX#Q%_YD(G*-%;cb1&B1vK8Z|! ziKOvJQEeX` - - "test.property.quarkus.datasource.jdbc.url=jdbc:postgresql://$${host:demo-db}:$${port:demo-db:5432}/demo?sslmode=disable" - # simple DB import app, that allows import of data from Excel files - dbimport: - container_name: dbimport - image: quay.io/tkit/dbimport:master - environment: - DB_URL: "jdbc:postgresql://demo-db:5432/demo?sslmode=disable" - DB_USERNAME: "demo" - DB_PASSWORD: "demo" - labels: - - "test.Wait.forLogMessage.regex=.*Installed features:.*" - - "test.Wait.forLogMessage.times=1" - - "test.log=true" - - "test.property.tkit.test.dbimport.url=$${url:dbimport:8080}" - +version: '3.9' +services: + demo-db: + container_name: demo-db + image: postgres:11.5 + environment: + POSTGRES_DB: "demo" + POSTGRES_USER: "demo" + POSTGRES_PASSWORD: "demo" + labels: + - "test.priority=90" + - "test.Wait.forLogMessage.regex=.*database system is ready to accept connections.*\\s" + - "test.Wait.forLogMessage.times=2" + - "test.log=true" + # we can modify Quarkus test profile apps using labels in form `test.property.` + - "test.property.quarkus.datasource.jdbc.url=jdbc:postgresql://$${host:demo-db}:$${port:demo-db:5432}/demo?sslmode=disable" + # simple DB import app, that allows import of data from Excel files + dbimport: + container_name: dbimport + image: quay.io/tkit/dbimport:master + environment: + DB_URL: "jdbc:postgresql://demo-db:5432/demo?sslmode=disable" + DB_USERNAME: "demo" + DB_PASSWORD: "demo" + labels: + - "test.Wait.forLogMessage.regex=.*Installed features:.*" + - "test.Wait.forLogMessage.times=1" + - "test.log=true" + - "test.property.tkit.test.dbimport.url=$${url:dbimport:8080}" + diff --git a/vMetrics.yaml b/vMetrics.yaml index 85205f6f..ff948c02 100644 --- a/vMetrics.yaml +++ b/vMetrics.yaml @@ -1,9 +1,9 @@ -scrape_configs: - #- job_name: 'otel-collector' - - job_name: "demo_quarkus" - scrape_interval: 10s - metrics_path: "/q/metrics" - static_configs: - - targets: ["host.docker.internal:8080"] - #- targets: ['otel-collector:8889'] +scrape_configs: + #- job_name: 'otel-collector' + - job_name: "demo_quarkus" + scrape_interval: 10s + metrics_path: "/q/metrics" + static_configs: + - targets: ["host.docker.internal:8080"] + #- targets: ['otel-collector:8889'] #- targets: ['otel-collector:8888'] \ No newline at end of file From 6be41a9310a7462949b2229e8e7dec4898ba7cf6 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 29 Nov 2021 08:44:37 +0530 Subject: [PATCH 45/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 4599b4c1..32cd0881 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -89,7 +89,7 @@ Change the directory in to `Helm Release Provider`. Here we need to follow same steps as above process to deploy helm charts in to AKS cluster (Example: terraform init and terraform apply). -*Note*: You need to change helm charts path location in `terraform-helm-deploy/helm_release.tf` file. +*Note*: You need to change `terraform-remote-state` path and `helm charts` path in `terraform-helm-deploy/helm_release.tf` file. == Terraform initialize and apply using Script From f8d9a798bf64718dca935d9125c0d70b9bbb77fd Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 29 Nov 2021 17:08:25 +0530 Subject: [PATCH 46/72] Update helm_release.tf --- azure-terraform/terraform-helm-deploy/helm_release.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-terraform/terraform-helm-deploy/helm_release.tf b/azure-terraform/terraform-helm-deploy/helm_release.tf index 730512ca..74abd0e7 100644 --- a/azure-terraform/terraform-helm-deploy/helm_release.tf +++ b/azure-terraform/terraform-helm-deploy/helm_release.tf @@ -1,7 +1,7 @@ data "terraform_remote_state" "aks" { backend = "local" config = { - path = "/root/quarkus-opentelemetry-example/azure-terraform/terraform-aks-setup/terraform.tfstate" + path = "../quarkus-opentelemetry-example/azure-terraform/terraform-aks-setup/terraform.tfstate" } } From 7836c58926a9945402931e75225920564e670793 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Mon, 29 Nov 2021 17:10:05 +0530 Subject: [PATCH 47/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 32cd0881..1fec3d71 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -11,7 +11,7 @@ :url-terraform: https://learn.hashicorp.com/tutorials/terraform/install-cli -:url-repo-code: https://github.com/devon4quarkus-reference/azure-terraform +:url-repo-code: https://github.com/devonfw-sample/devon4quarkus-reference/azure-terraform The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing and scaling containerized applications on Azure. @@ -25,7 +25,7 @@ The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for dep *Setup using Script* -Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/initial_setup_script.sh` +Install all Prerequisites using an automated script, you can find this script in `https://github.com/devonfw-sample/devon4quarkus-reference/azure-terraform/initial_setup_script.sh` *Usage* @@ -43,7 +43,7 @@ az account set --subscription $SUBSCRIPTION In your terminal, clone the following {url-repo-code}[repository] code. -`$ git clone https://github.com/devon4quarkus-reference` +`$ git clone https://github.com/devonfw-sample/devon4quarkus-reference` You can explore this repository by changing the directories. @@ -93,7 +93,7 @@ Here we need to follow same steps as above process to deploy helm charts in to A == Terraform initialize and apply using Script -Install all Prerequisites using an automated script, you can find this script in `https://github.com/devon4quarkus-reference/azure-terraform/script_execute.sh` +Install all Prerequisites using an automated script, you can find this script in `https://github.com/devonfw-sample/devon4quarkus-reference/azure-terraform/script_execute.sh` == Usage From 7e062c9f414e51621f17c688a083ea963c516e8a Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Tue, 30 Nov 2021 13:19:24 +0530 Subject: [PATCH 48/72] Delete zipkin-all-in-one-deployment.yaml --- .../zipkin-all-in-one-deployment.yaml | 45 ------------------- 1 file changed, 45 deletions(-) delete mode 100644 charts/helm/templates/zipkin-all-in-one-deployment.yaml diff --git a/charts/helm/templates/zipkin-all-in-one-deployment.yaml b/charts/helm/templates/zipkin-all-in-one-deployment.yaml deleted file mode 100644 index f6bb0cc1..00000000 --- a/charts/helm/templates/zipkin-all-in-one-deployment.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: zipkin-all-in-one - labels: - component: zipkin-all-in-one -spec: - selector: - matchLabels: - component: zipkin-all-in-one - minReadySeconds: 5 - progressDeadlineSeconds: 120 - replicas: 1 - template: - metadata: - labels: - component: zipkin-all-in-one - spec: - containers: - - name: zipkin-all-in-one - image: openzipkin/zipkin:latest - ports: - - containerPort: 9411 - ---- - -apiVersion: v1 -kind: Service -metadata: - name: zipkin-all-in-one - labels: - component: zipkin-all-in-one -spec: - selector: - component: zipkin-all-in-one - ports: - - name: zipkin - protocol: TCP - port: 9411 - targetPort: 9411 - selector: - component: jaeger-all-in-one - type: LoadBalancer #ClusterIP -status: - loadBalancer: {} From cf7c42131fb01686e7777244ce3531c3888de85e Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Tue, 30 Nov 2021 13:19:36 +0530 Subject: [PATCH 49/72] Delete vmagent-deployment.yaml --- charts/helm/templates/vmagent-deployment.yaml | 53 ------------------- 1 file changed, 53 deletions(-) delete mode 100644 charts/helm/templates/vmagent-deployment.yaml diff --git a/charts/helm/templates/vmagent-deployment.yaml b/charts/helm/templates/vmagent-deployment.yaml deleted file mode 100644 index 7d13f5d3..00000000 --- a/charts/helm/templates/vmagent-deployment.yaml +++ /dev/null @@ -1,53 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: vmagent - name: vmagent -spec: - replicas: 1 - selector: - matchLabels: - component: vmagent - strategy: - type: Recreate - template: - metadata: - labels: - component: vmagent - spec: - containers: - - args: - - --promscrape.config=/conf/vMetrics.yaml - - --remoteWrite.url=http://victoriametrics:8428/api/v1/write - image: victoriametrics/vmagent - name: vmagent - ports: - - containerPort: 8429 - volumeMounts: - - mountPath: /conf - name: vmetrics-config - restartPolicy: Always - volumes: - - configMap: - items: - - key: vMetrics.yaml - path: vMetrics.yaml - name: vmetrics-config - name: vmetrics-config - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: vmagent - name: vmagent -spec: - ports: - - name: "8429" - port: 8429 - targetPort: 8429 - selector: - component: vmagent From 188ddd0ac0f231f9208b1445152a05da570354bb Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Tue, 30 Nov 2021 13:19:50 +0530 Subject: [PATCH 50/72] Delete victoriametrics-deployment.yaml --- .../templates/victoriametrics-deployment.yaml | 77 ------------------- 1 file changed, 77 deletions(-) delete mode 100644 charts/helm/templates/victoriametrics-deployment.yaml diff --git a/charts/helm/templates/victoriametrics-deployment.yaml b/charts/helm/templates/victoriametrics-deployment.yaml deleted file mode 100644 index 3819e880..00000000 --- a/charts/helm/templates/victoriametrics-deployment.yaml +++ /dev/null @@ -1,77 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - labels: - component: victoriametrics - name: victoriametrics -spec: - replicas: 1 - selector: - matchLabels: - component: victoriametrics - strategy: - type: Recreate - template: - metadata: - labels: - component: victoriametrics - spec: - containers: - - args: - - --promscrape.config=/conf/vMetrics.yaml - image: victoriametrics/victoria-metrics - name: victoriametrics - ports: - - containerPort: 8428 - - containerPort: 8089 - - containerPort: 8089 - protocol: UDP - - containerPort: 2003 - - containerPort: 2003 - protocol: UDP - - containerPort: 4242 - resources: {} - volumeMounts: - - mountPath: /conf - name: vmetrics-config - restartPolicy: Always - volumes: - - configMap: - items: - - key: vMetrics.yaml - path: vMetrics.yaml - name: vmetrics-config - name: vmetrics-config - ---- - -apiVersion: v1 -kind: Service -metadata: - labels: - component: victoriametrics - name: victoriametrics -spec: - ports: - - name: "8428" - port: 8428 - targetPort: 8428 - - name: "8089" - port: 8089 - targetPort: 8089 - - name: 8089-udp - port: 8089 - protocol: UDP - targetPort: 8089 - - name: "2003" - port: 2003 - targetPort: 2003 - - name: 2003-udp - port: 2003 - protocol: UDP - targetPort: 2003 - - name: "4242" - port: 4242 - targetPort: 4242 - selector: - component: victoriametrics From 2f3dc12da003c0dd5750af8029b5369ac68c0a86 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 13:01:10 +0530 Subject: [PATCH 51/72] Add files via upload From 53bd42289f604656a7252eb2b9e2b0485a4b8f12 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 13:03:25 +0530 Subject: [PATCH 52/72] Add files via upload --- azure-terraform/installation_setup_linux.sh | 55 +++ .../installation_setup_windows.ps1 | 73 ++++ azure-terraform/terraform-aks-setup/output.tf | 3 +- .../terraform-aks-setup/terraform.tfstate | 229 +++++++++++ .../terraform.tfstate.backup | 29 ++ .../terraform-aks-setup/terraform.tfvars | 2 +- .../terraform-helm-deploy/helm_release.tf | 10 +- .../terraform-helm-deploy/output.tf | 7 + .../terraform-helm-deploy/terraform.tfstate | 365 ++++++++++++++++++ .../terraform.tfstate.backup | 365 ++++++++++++++++++ .../terraform-helm-deploy/terraform.tfvars | 3 + .../terraform-helm-deploy/variables.tf | 23 ++ azure-terraform/terraform_doc.asciidoc | 26 +- 13 files changed, 1178 insertions(+), 12 deletions(-) create mode 100644 azure-terraform/installation_setup_linux.sh create mode 100644 azure-terraform/installation_setup_windows.ps1 create mode 100644 azure-terraform/terraform-aks-setup/terraform.tfstate create mode 100644 azure-terraform/terraform-aks-setup/terraform.tfstate.backup create mode 100644 azure-terraform/terraform-helm-deploy/output.tf create mode 100644 azure-terraform/terraform-helm-deploy/terraform.tfstate create mode 100644 azure-terraform/terraform-helm-deploy/terraform.tfstate.backup create mode 100644 azure-terraform/terraform-helm-deploy/terraform.tfvars create mode 100644 azure-terraform/terraform-helm-deploy/variables.tf diff --git a/azure-terraform/installation_setup_linux.sh b/azure-terraform/installation_setup_linux.sh new file mode 100644 index 00000000..298efa69 --- /dev/null +++ b/azure-terraform/installation_setup_linux.sh @@ -0,0 +1,55 @@ +#!/bin/bash + + echo "Install Azure CLI...." + #Get packages needed for the install process: + sudo apt-get update + sudo apt-get install ca-certificates curl apt-transport-https lsb-release gnupg + + #Download and install the Microsoft signing key: + curl -sL https://packages.microsoft.com/keys/microsoft.asc | + gpg --dearmor | + sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null + + #Add the Azure CLI software repository + AZ_REPO=$(lsb_release -cs) + echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | + sudo tee /etc/apt/sources.list.d/azure-cli.list + + #Update repository information and install the azure-cli package + sudo apt-get update + sudo apt-get install azure-cli + + echo "az version" + az --version + + echo "Install the Kubectl...." + + az aks install-cli + kubectl version --client + + #echo "Connect to the cluster Using CLI" + #az aks get-credentials --resource-group myResourceGroup --name myAKSCluster + #kubectl get nodes + + echo "Install helm package..." + curl https://baltocdn.com/helm/signing.asc | sudo apt-key add - + sudo apt-get install apt-transport-https --yes + echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list + sudo apt-get update + sudo apt-get install helm + sudo helm version + + #terraform Installation + echo "Install Terraform..." + sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl + curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - + sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" + sudo apt-get update && sudo apt-get install terraform + + #terraform -help + terraform version + + touch ~/.bashrc + terraform -install-autocomplete + source ~/.bashrc + \ No newline at end of file diff --git a/azure-terraform/installation_setup_windows.ps1 b/azure-terraform/installation_setup_windows.ps1 new file mode 100644 index 00000000..3dc4f580 --- /dev/null +++ b/azure-terraform/installation_setup_windows.ps1 @@ -0,0 +1,73 @@ + +echo "Install Azure cli..." +$ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest -Uri https://aka.ms/installazurecliwindows -OutFile .\AzureCLI.msi; Start-Process msiexec.exe -Wait -ArgumentList '/I AzureCLI.msi /quiet'; rm .\AzureCLI.msi + +echo "az version" +az --version + +echo "Install Chocolatey package " +#Install Chocolatey package before helm install +Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) +#Verify choco installation +choco + +echo "Install Kubectl.." +Install-AzAksKubectl + +#echo "Install kubectl using choco" +#choco install kubernetes-cli +#kubectl version --client + + + +echo "Install Helm package" +#Install Helm +choco install kubernetes-helm +#Verify helm installation +helm + +echo "Install Terraform.." +Function Install-Terraform +{ + # Ensure to run the function with administrator privilege + if (-not (New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) + { Write-Host -ForegroundColor Red -Object "!!! Please run as Administrator !!!"; return } + + # Terrafrom download Url + $Url = 'https://www.terraform.io/downloads.html' + + # Local path to download the terraform zip file + $DownloadPath = 'C:\Terraform\' + + # Reg Key to set the persistent PATH + $RegPathKey = 'HKLM:\System\CurrentControlSet\Control\Session Manager\Environment' + + # Create the local folder if it doesn't exist + if ((Test-Path -Path $DownloadPath) -eq $false) { $null = New-Item -Path $DownloadPath -ItemType Directory -Force } + + # Download the Terraform exe in zip format + $Web = Invoke-WebRequest -Uri $Url + $FileInfo = $Web.Links | Where-Object href -match windows_amd64 + $DownloadLink = $FileInfo.href + $FileName = Split-Path -Path $DownloadLink -Leaf + $DownloadFile = [string]::Concat( $DownloadPath, $FileName ) + Invoke-RestMethod -Method Get -Uri $DownloadLink -OutFile $DownloadFile + + # Extract & delete the zip file + Expand-Archive -Path $DownloadFile -DestinationPath $DownloadPath -Force + Remove-Item -Path $DownloadFile -Force + + # Setting the persistent path in the registry if it is not set already + if ($DownloadPath -notin $($ENV:Path -split ';')) + { + $PathString = (Get-ItemProperty -Path $RegPathKey -Name PATH).Path + $PathString += ";$DownloadPath" + Set-ItemProperty -Path $RegPathKey -Name PATH -Value $PathString + + # Setting the path for the current session + $ENV:Path += ";$DownloadPath" + } + + # Verify the download + Invoke-Expression -Command "terraform version" +} diff --git a/azure-terraform/terraform-aks-setup/output.tf b/azure-terraform/terraform-aks-setup/output.tf index 4a7be7e5..5140c09c 100644 --- a/azure-terraform/terraform-aks-setup/output.tf +++ b/azure-terraform/terraform-aks-setup/output.tf @@ -16,7 +16,7 @@ output "aks_fqdn" { output "host" { value = azurerm_kubernetes_cluster.aks.kube_config.0.host } - +/* output "client_key" { value = azurerm_kubernetes_cluster.aks.kube_config.0.client_key } @@ -37,3 +37,4 @@ output "cluster_username" { output "cluster_password" { value = azurerm_kubernetes_cluster.aks.kube_config.0.password } +*/ \ No newline at end of file diff --git a/azure-terraform/terraform-aks-setup/terraform.tfstate b/azure-terraform/terraform-aks-setup/terraform.tfstate new file mode 100644 index 00000000..a33db5e8 --- /dev/null +++ b/azure-terraform/terraform-aks-setup/terraform.tfstate @@ -0,0 +1,229 @@ +{ + "version": 4, + "terraform_version": "1.0.10", + "serial": 22, + "lineage": "e46716e1-e29c-5f8a-26eb-86f32d0f91c0", + "outputs": { + "aks_fqdn": { + "value": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", + "type": "string" + }, + "aks_id": { + "value": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", + "type": "string" + }, + "aks_node_rg": { + "value": "MC_AKSRG104_k8s-cluster_westeurope", + "type": "string" + }, + "host": { + "value": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", + "type": "string" + }, + "kubernetes_cluster_name": { + "value": "k8s-cluster", + "type": "string" + } + }, + "resources": [ + { + "mode": "managed", + "type": "azurerm_kubernetes_cluster", + "name": "aks", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "addon_profile": [ + { + "aci_connector_linux": [ + { + "enabled": false, + "subnet_name": "" + } + ], + "azure_policy": [ + { + "enabled": false + } + ], + "http_application_routing": [ + { + "enabled": false, + "http_application_routing_zone_name": "" + } + ], + "ingress_application_gateway": [ + { + "effective_gateway_id": "", + "enabled": false, + "gateway_id": "", + "gateway_name": "", + "ingress_application_gateway_identity": [], + "subnet_cidr": "", + "subnet_id": "" + } + ], + "kube_dashboard": [ + { + "enabled": false + } + ], + "oms_agent": [ + { + "enabled": false, + "log_analytics_workspace_id": "", + "oms_agent_identity": [] + } + ] + } + ], + "api_server_authorized_ip_ranges": null, + "auto_scaler_profile": [], + "automatic_channel_upgrade": "", + "default_node_pool": [ + { + "availability_zones": [ + "1", + "2", + "3" + ], + "enable_auto_scaling": false, + "enable_host_encryption": false, + "enable_node_public_ip": false, + "fips_enabled": false, + "kubelet_config": [], + "kubelet_disk_type": "OS", + "linux_os_config": [], + "max_count": 0, + "max_pods": 110, + "min_count": 0, + "name": "system", + "node_count": 2, + "node_labels": null, + "node_public_ip_prefix_id": "", + "node_taints": null, + "only_critical_addons_enabled": false, + "orchestrator_version": "1.19.13", + "os_disk_size_gb": 128, + "os_disk_type": "Managed", + "proximity_placement_group_id": "", + "tags": null, + "type": "VirtualMachineScaleSets", + "upgrade_settings": [], + "vm_size": "Standard_DS2_v2", + "vnet_subnet_id": "" + } + ], + "disk_encryption_set_id": "", + "dns_prefix": "k8s-cluster", + "dns_prefix_private_cluster": "", + "enable_pod_security_policy": false, + "fqdn": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", + "id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", + "identity": [ + { + "principal_id": "41b13c82-2850-4c60-997e-6097d9204199", + "tenant_id": "76a2ae5a-9f00-4f6b-95ed-5d33d77c4d61", + "type": "SystemAssigned", + "user_assigned_identity_id": "" + } + ], + "kube_admin_config": [], + "kube_admin_config_raw": "", + "kube_config": [ + { + "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "host": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", + "password": "5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e", + "username": "clusterUser_AKSRG104_k8s-cluster" + } + ], + "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K\n server: https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443\n name: k8s-cluster\ncontexts:\n- context:\n cluster: k8s-cluster\n user: clusterUser_AKSRG104_k8s-cluster\n name: k8s-cluster\ncurrent-context: k8s-cluster\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_AKSRG104_k8s-cluster\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e\n", + "kubelet_identity": [ + { + "client_id": "95a95bd6-731b-4022-b018-fbad9ea9fe15", + "object_id": "10e189c1-4f75-4b4b-a66b-d29f672818cb", + "user_assigned_identity_id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/MC_AKSRG104_k8s-cluster_westeurope/providers/Microsoft.ManagedIdentity/userAssignedIdentities/k8s-cluster-agentpool" + } + ], + "kubernetes_version": "1.19.13", + "linux_profile": [], + "location": "westeurope", + "name": "k8s-cluster", + "network_profile": [ + { + "dns_service_ip": "10.0.0.10", + "docker_bridge_cidr": "172.17.0.1/16", + "load_balancer_profile": [ + { + "effective_outbound_ips": [ + "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/MC_AKSRG104_k8s-cluster_westeurope/providers/Microsoft.Network/publicIPAddresses/4d1c40b7-9de0-486b-ab1a-0df42ce74dc2" + ], + "idle_timeout_in_minutes": 0, + "managed_outbound_ip_count": 1, + "outbound_ip_address_ids": [], + "outbound_ip_prefix_ids": [], + "outbound_ports_allocated": 0 + } + ], + "load_balancer_sku": "Standard", + "network_mode": "", + "network_plugin": "kubenet", + "network_policy": "", + "outbound_type": "loadBalancer", + "pod_cidr": "10.244.0.0/16", + "service_cidr": "10.0.0.0/16" + } + ], + "node_resource_group": "MC_AKSRG104_k8s-cluster_westeurope", + "private_cluster_enabled": false, + "private_dns_zone_id": "", + "private_fqdn": "", + "private_link_enabled": false, + "resource_group_name": "AKSRG104", + "role_based_access_control": [ + { + "azure_active_directory": [], + "enabled": false + } + ], + "service_principal": [], + "sku_tier": "Free", + "tags": null, + "timeouts": null, + "windows_profile": [] + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjo1NDAwMDAwMDAwMDAwfX0=", + "dependencies": [ + "azurerm_resource_group.aks-rg" + ] + } + ] + }, + { + "mode": "managed", + "type": "azurerm_resource_group", + "name": "aks-rg", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/AKSRG104", + "location": "westeurope", + "name": "AKSRG104", + "tags": {}, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjo1NDAwMDAwMDAwMDAwfX0=" + } + ] + } + ] +} diff --git a/azure-terraform/terraform-aks-setup/terraform.tfstate.backup b/azure-terraform/terraform-aks-setup/terraform.tfstate.backup new file mode 100644 index 00000000..2f613bd6 --- /dev/null +++ b/azure-terraform/terraform-aks-setup/terraform.tfstate.backup @@ -0,0 +1,29 @@ +{ + "version": 4, + "terraform_version": "1.0.10", + "serial": 20, + "lineage": "e46716e1-e29c-5f8a-26eb-86f32d0f91c0", + "outputs": {}, + "resources": [ + { + "mode": "managed", + "type": "azurerm_resource_group", + "name": "aks-rg", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/AKSRG104", + "location": "westeurope", + "name": "AKSRG104", + "tags": {}, + "timeouts": null + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjo1NDAwMDAwMDAwMDAwfX0=" + } + ] + } + ] +} diff --git a/azure-terraform/terraform-aks-setup/terraform.tfvars b/azure-terraform/terraform-aks-setup/terraform.tfvars index 313c9331..b339991a 100644 --- a/azure-terraform/terraform-aks-setup/terraform.tfvars +++ b/azure-terraform/terraform-aks-setup/terraform.tfvars @@ -1,4 +1,4 @@ -resource_group_name = "AKSRG103" +resource_group_name = "AKSRG104" location = "West Europe" cluster_name = "k8s-cluster" kubernetes_version = "1.19.13" diff --git a/azure-terraform/terraform-helm-deploy/helm_release.tf b/azure-terraform/terraform-helm-deploy/helm_release.tf index 74abd0e7..86d98910 100644 --- a/azure-terraform/terraform-helm-deploy/helm_release.tf +++ b/azure-terraform/terraform-helm-deploy/helm_release.tf @@ -1,13 +1,13 @@ data "terraform_remote_state" "aks" { backend = "local" config = { - path = "../quarkus-opentelemetry-example/azure-terraform/terraform-aks-setup/terraform.tfstate" + path = "../../azure-terraform/terraform-aks-setup/terraform.tfstate" } } data "azurerm_kubernetes_cluster" "aks" { - name = "k8s-cluster" - resource_group_name = "AKSRG103" + name = var.cluster_name + resource_group_name = var.resource_group_name } provider "kubernetes" { @@ -34,7 +34,7 @@ resource helm_release otel-release { name = "otel-release-controller" # repository = "https://github.com/prathibhapadma/quarkus-otel-test-repo/tree/master/charts" - chart = "../devon4quarkus-reference/helm-charts/opentelementry" + chart = "../../helm-charts/opentelementry" set { name = "service.type" @@ -46,7 +46,7 @@ resource helm_release quarkus-app-release { name = "quarkus-app-controller" #repository = "https://github.com/prathibhapadma/quarkus-otel-test-repo/tree/master/charts" - chart = "../devon4quarkus-reference/helm-charts/demo-quarkus" + chart = "../../helm-charts/demo-quarkus" set { name = "service.type" diff --git a/azure-terraform/terraform-helm-deploy/output.tf b/azure-terraform/terraform-helm-deploy/output.tf new file mode 100644 index 00000000..97bc1110 --- /dev/null +++ b/azure-terraform/terraform-helm-deploy/output.tf @@ -0,0 +1,7 @@ +output "Helm-charts" { + value = helm_release.otel-release.name +} + +output "Helm-Charts" { + value = helm_release.quarkus-app-release.name +} diff --git a/azure-terraform/terraform-helm-deploy/terraform.tfstate b/azure-terraform/terraform-helm-deploy/terraform.tfstate new file mode 100644 index 00000000..76cf63a0 --- /dev/null +++ b/azure-terraform/terraform-helm-deploy/terraform.tfstate @@ -0,0 +1,365 @@ +{ + "version": 4, + "terraform_version": "1.0.10", + "serial": 9, + "lineage": "0f6288af-326c-61f5-6dfb-c92c42cc65d0", + "outputs": { + "Helm-Charts": { + "value": "quarkus-app-controller", + "type": "string" + }, + "Helm-charts": { + "value": "otel-release-controller", + "type": "string" + } + }, + "resources": [ + { + "mode": "data", + "type": "azurerm_kubernetes_cluster", + "name": "aks", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "addon_profile": [ + { + "azure_policy": [ + { + "enabled": false + } + ], + "http_application_routing": [ + { + "enabled": false, + "http_application_routing_zone_name": "" + } + ], + "ingress_application_gateway": [ + { + "effective_gateway_id": "", + "enabled": false, + "gateway_id": "", + "ingress_application_gateway_identity": [], + "subnet_cidr": "", + "subnet_id": "" + } + ], + "kube_dashboard": [ + { + "enabled": false + } + ], + "oms_agent": [ + { + "enabled": false, + "log_analytics_workspace_id": "", + "oms_agent_identity": [] + } + ] + } + ], + "agent_pool_profile": [ + { + "availability_zones": [ + "1", + "2", + "3" + ], + "count": 2, + "enable_auto_scaling": false, + "enable_node_public_ip": false, + "max_count": 0, + "max_pods": 110, + "min_count": 0, + "name": "system", + "node_labels": {}, + "node_public_ip_prefix_id": "", + "node_taints": [], + "orchestrator_version": "1.19.13", + "os_disk_size_gb": 128, + "os_type": "Linux", + "tags": {}, + "type": "VirtualMachineScaleSets", + "upgrade_settings": [], + "vm_size": "Standard_DS2_v2", + "vnet_subnet_id": "" + } + ], + "api_server_authorized_ip_ranges": [], + "disk_encryption_set_id": "", + "dns_prefix": "k8s-cluster", + "fqdn": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", + "id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", + "identity": [ + { + "principal_id": "41b13c82-2850-4c60-997e-6097d9204199", + "tenant_id": "76a2ae5a-9f00-4f6b-95ed-5d33d77c4d61", + "type": "SystemAssigned", + "user_assigned_identity_id": "" + } + ], + "kube_admin_config": [], + "kube_admin_config_raw": "", + "kube_config": [ + { + "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "host": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", + "password": "5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e", + "username": "clusterUser_AKSRG104_k8s-cluster" + } + ], + "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K\n server: https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443\n name: k8s-cluster\ncontexts:\n- context:\n cluster: k8s-cluster\n user: clusterUser_AKSRG104_k8s-cluster\n name: k8s-cluster\ncurrent-context: k8s-cluster\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_AKSRG104_k8s-cluster\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e\n", + "kubelet_identity": [ + { + "client_id": "95a95bd6-731b-4022-b018-fbad9ea9fe15", + "object_id": "10e189c1-4f75-4b4b-a66b-d29f672818cb", + "user_assigned_identity_id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/MC_AKSRG104_k8s-cluster_westeurope/providers/Microsoft.ManagedIdentity/userAssignedIdentities/k8s-cluster-agentpool" + } + ], + "kubernetes_version": "1.19.13", + "linux_profile": [ + { + "admin_username": "", + "ssh_key": [] + } + ], + "location": "westeurope", + "name": "k8s-cluster", + "network_profile": [ + { + "dns_service_ip": "10.0.0.10", + "docker_bridge_cidr": "172.17.0.1/16", + "load_balancer_sku": "Standard", + "network_plugin": "kubenet", + "network_policy": "", + "pod_cidr": "10.244.0.0/16", + "service_cidr": "10.0.0.0/16" + } + ], + "node_resource_group": "MC_AKSRG104_k8s-cluster_westeurope", + "private_cluster_enabled": false, + "private_fqdn": "", + "private_link_enabled": false, + "resource_group_name": "AKSRG104", + "role_based_access_control": [ + { + "azure_active_directory": [], + "enabled": false + } + ], + "service_principal": [ + { + "client_id": "msi" + } + ], + "tags": {}, + "timeouts": null, + "windows_profile": [] + }, + "sensitive_attributes": [] + } + ] + }, + { + "mode": "data", + "type": "terraform_remote_state", + "name": "aks", + "provider": "provider[\"terraform.io/builtin/terraform\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "backend": "local", + "config": { + "value": { + "path": "../../azure-terraform/terraform-aks-setup/terraform.tfstate" + }, + "type": [ + "object", + { + "path": "string" + } + ] + }, + "defaults": null, + "outputs": { + "value": { + "aks_fqdn": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", + "aks_id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", + "aks_node_rg": "MC_AKSRG104_k8s-cluster_westeurope", + "host": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", + "kubernetes_cluster_name": "k8s-cluster" + }, + "type": [ + "object", + { + "aks_fqdn": "string", + "aks_id": "string", + "aks_node_rg": "string", + "host": "string", + "kubernetes_cluster_name": "string" + } + ] + }, + "workspace": null + }, + "sensitive_attributes": [] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "otel-release", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "../../helm-charts/opentelementry", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "otel-release-controller", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.0.0", + "chart": "OpenTelemetry Helm template", + "name": "otel-release-controller", + "namespace": "default", + "revision": 2, + "values": "{\"service\":{\"type\":\"LoadBalancer\"}}", + "version": "1.0.0" + } + ], + "name": "otel-release-controller", + "namespace": "default", + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": null, + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "service.type", + "type": "", + "value": "LoadBalancer" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "1.0.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "data.azurerm_kubernetes_cluster.aks" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "quarkus-app-release", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "../../helm-charts/demo-quarkus", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "quarkus-app-controller", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "v1", + "chart": "helm-app", + "name": "quarkus-app-controller", + "namespace": "default", + "revision": 2, + "values": "{\"service\":{\"type\":\"LoadBalancer\"}}", + "version": "0.1.0" + } + ], + "name": "quarkus-app-controller", + "namespace": "default", + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": null, + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "service.type", + "type": "", + "value": "LoadBalancer" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "0.1.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "data.azurerm_kubernetes_cluster.aks" + ] + } + ] + } + ] +} diff --git a/azure-terraform/terraform-helm-deploy/terraform.tfstate.backup b/azure-terraform/terraform-helm-deploy/terraform.tfstate.backup new file mode 100644 index 00000000..c756277a --- /dev/null +++ b/azure-terraform/terraform-helm-deploy/terraform.tfstate.backup @@ -0,0 +1,365 @@ +{ + "version": 4, + "terraform_version": "1.0.10", + "serial": 6, + "lineage": "0f6288af-326c-61f5-6dfb-c92c42cc65d0", + "outputs": { + "Helm-Charts": { + "value": "quarkus-app-controller", + "type": "string" + }, + "Helm-charts": { + "value": "otel-release-controller", + "type": "string" + } + }, + "resources": [ + { + "mode": "data", + "type": "azurerm_kubernetes_cluster", + "name": "aks", + "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "addon_profile": [ + { + "azure_policy": [ + { + "enabled": false + } + ], + "http_application_routing": [ + { + "enabled": false, + "http_application_routing_zone_name": "" + } + ], + "ingress_application_gateway": [ + { + "effective_gateway_id": "", + "enabled": false, + "gateway_id": "", + "ingress_application_gateway_identity": [], + "subnet_cidr": "", + "subnet_id": "" + } + ], + "kube_dashboard": [ + { + "enabled": false + } + ], + "oms_agent": [ + { + "enabled": false, + "log_analytics_workspace_id": "", + "oms_agent_identity": [] + } + ] + } + ], + "agent_pool_profile": [ + { + "availability_zones": [ + "1", + "2", + "3" + ], + "count": 2, + "enable_auto_scaling": false, + "enable_node_public_ip": false, + "max_count": 0, + "max_pods": 110, + "min_count": 0, + "name": "system", + "node_labels": {}, + "node_public_ip_prefix_id": "", + "node_taints": [], + "orchestrator_version": "1.19.13", + "os_disk_size_gb": 128, + "os_type": "Linux", + "tags": {}, + "type": "VirtualMachineScaleSets", + "upgrade_settings": [], + "vm_size": "Standard_DS2_v2", + "vnet_subnet_id": "" + } + ], + "api_server_authorized_ip_ranges": [], + "disk_encryption_set_id": "", + "dns_prefix": "k8s-cluster", + "fqdn": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", + "id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", + "identity": [ + { + "principal_id": "41b13c82-2850-4c60-997e-6097d9204199", + "tenant_id": "76a2ae5a-9f00-4f6b-95ed-5d33d77c4d61", + "type": "SystemAssigned", + "user_assigned_identity_id": "" + } + ], + "kube_admin_config": [], + "kube_admin_config_raw": "", + "kube_config": [ + { + "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "host": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", + "password": "5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e", + "username": "clusterUser_AKSRG104_k8s-cluster" + } + ], + "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K\n server: https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443\n name: k8s-cluster\ncontexts:\n- context:\n cluster: k8s-cluster\n user: clusterUser_AKSRG104_k8s-cluster\n name: k8s-cluster\ncurrent-context: k8s-cluster\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_AKSRG104_k8s-cluster\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e\n", + "kubelet_identity": [ + { + "client_id": "95a95bd6-731b-4022-b018-fbad9ea9fe15", + "object_id": "10e189c1-4f75-4b4b-a66b-d29f672818cb", + "user_assigned_identity_id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/MC_AKSRG104_k8s-cluster_westeurope/providers/Microsoft.ManagedIdentity/userAssignedIdentities/k8s-cluster-agentpool" + } + ], + "kubernetes_version": "1.19.13", + "linux_profile": [ + { + "admin_username": "", + "ssh_key": [] + } + ], + "location": "westeurope", + "name": "k8s-cluster", + "network_profile": [ + { + "dns_service_ip": "10.0.0.10", + "docker_bridge_cidr": "172.17.0.1/16", + "load_balancer_sku": "Standard", + "network_plugin": "kubenet", + "network_policy": "", + "pod_cidr": "10.244.0.0/16", + "service_cidr": "10.0.0.0/16" + } + ], + "node_resource_group": "MC_AKSRG104_k8s-cluster_westeurope", + "private_cluster_enabled": false, + "private_fqdn": "", + "private_link_enabled": false, + "resource_group_name": "AKSRG104", + "role_based_access_control": [ + { + "azure_active_directory": [], + "enabled": false + } + ], + "service_principal": [ + { + "client_id": "msi" + } + ], + "tags": {}, + "timeouts": null, + "windows_profile": [] + }, + "sensitive_attributes": [] + } + ] + }, + { + "mode": "data", + "type": "terraform_remote_state", + "name": "aks", + "provider": "provider[\"terraform.io/builtin/terraform\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "backend": "local", + "config": { + "value": { + "path": "C:/Users/ppadma/Documents/devon4quarkus-reference/azure-terraform/terraform-aks-setup/terraform.tfstate" + }, + "type": [ + "object", + { + "path": "string" + } + ] + }, + "defaults": null, + "outputs": { + "value": { + "aks_fqdn": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", + "aks_id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", + "aks_node_rg": "MC_AKSRG104_k8s-cluster_westeurope", + "host": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", + "kubernetes_cluster_name": "k8s-cluster" + }, + "type": [ + "object", + { + "aks_fqdn": "string", + "aks_id": "string", + "aks_node_rg": "string", + "host": "string", + "kubernetes_cluster_name": "string" + } + ] + }, + "workspace": null + }, + "sensitive_attributes": [] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "otel-release", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "C:/Users/ppadma/Documents/devon4quarkus-reference/helm-charts/opentelementry", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "otel-release-controller", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "1.0.0", + "chart": "OpenTelemetry Helm template", + "name": "otel-release-controller", + "namespace": "default", + "revision": 1, + "values": "{\"service\":{\"type\":\"LoadBalancer\"}}", + "version": "1.0.0" + } + ], + "name": "otel-release-controller", + "namespace": "default", + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": null, + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "service.type", + "type": "", + "value": "LoadBalancer" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "1.0.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "data.azurerm_kubernetes_cluster.aks" + ] + } + ] + }, + { + "mode": "managed", + "type": "helm_release", + "name": "quarkus-app-release", + "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "atomic": false, + "chart": "C:/Users/ppadma/Documents/devon4quarkus-reference/helm-charts/demo-quarkus", + "cleanup_on_fail": false, + "create_namespace": false, + "dependency_update": false, + "description": null, + "devel": null, + "disable_crd_hooks": false, + "disable_openapi_validation": false, + "disable_webhooks": false, + "force_update": false, + "id": "quarkus-app-controller", + "keyring": null, + "lint": false, + "manifest": null, + "max_history": 0, + "metadata": [ + { + "app_version": "v1", + "chart": "helm-app", + "name": "quarkus-app-controller", + "namespace": "default", + "revision": 1, + "values": "{\"service\":{\"type\":\"LoadBalancer\"}}", + "version": "0.1.0" + } + ], + "name": "quarkus-app-controller", + "namespace": "default", + "postrender": [], + "recreate_pods": false, + "render_subchart_notes": true, + "replace": false, + "repository": null, + "repository_ca_file": null, + "repository_cert_file": null, + "repository_key_file": null, + "repository_password": null, + "repository_username": null, + "reset_values": false, + "reuse_values": false, + "set": [ + { + "name": "service.type", + "type": "", + "value": "LoadBalancer" + } + ], + "set_sensitive": [], + "skip_crds": false, + "status": "deployed", + "timeout": 300, + "values": null, + "verify": false, + "version": "0.1.0", + "wait": true, + "wait_for_jobs": false + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "data.azurerm_kubernetes_cluster.aks" + ] + } + ] + } + ] +} diff --git a/azure-terraform/terraform-helm-deploy/terraform.tfvars b/azure-terraform/terraform-helm-deploy/terraform.tfvars new file mode 100644 index 00000000..58adcfd7 --- /dev/null +++ b/azure-terraform/terraform-helm-deploy/terraform.tfvars @@ -0,0 +1,3 @@ +resource_group_name = "AKSRG104" +cluster_name = "k8s-cluster" + diff --git a/azure-terraform/terraform-helm-deploy/variables.tf b/azure-terraform/terraform-helm-deploy/variables.tf new file mode 100644 index 00000000..32153c45 --- /dev/null +++ b/azure-terraform/terraform-helm-deploy/variables.tf @@ -0,0 +1,23 @@ +variable "resource_group_name" { + type = string + description = "RG name in Azure" +} +variable "cluster_name" { + type = string + description = "AKS cluster_name in Azure" +} +/* +variable "Otel_name" { + type = string + description = "Deloyed Helm chart Name" +} +variable "App_name" { + type = string + description = "Deloyed Helm chart Name" +} + +variable "service_type" { + type = string + description = "Helm Release Service Type" +} +*/ diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 1fec3d71..8d1b8214 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -13,6 +13,10 @@ :url-repo-code: https://github.com/devonfw-sample/devon4quarkus-reference/azure-terraform +:url-script-linux: https://github.com/devonfw-sample/devon4quarkus-reference/azure-terraform/installation_setup_linux.sh + +:url-script-windows: https://github.com/devonfw-sample/devon4quarkus-reference/azure-terraform/installation_setup_windows.ps1 + The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for deploying, managing and scaling containerized applications on Azure. == *Prerequisites:* @@ -23,13 +27,25 @@ The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for dep . Install the {url-helm}[Helm]. . Install the {url-terraform}[Terraform]. -*Setup using Script* +== *Install the Prerequisites using Script* +Install all Prerequisites using an Automated script for Windows and Linux. + +*Linux* + +You can find the script to Linux {url-script-linux}[here]. + +`bash installation_setup_linux.sh` -Install all Prerequisites using an automated script, you can find this script in `https://github.com/devonfw-sample/devon4quarkus-reference/azure-terraform/initial_setup_script.sh` +*Windows* + +You can find the script to wndows {url-script-windows}[here]. + +``` +. .\installation_setup_windows.ps1 +installation_setup_windows +``` -*Usage* -`bash initial_setup_script.sh` == *Login to Azure Account* @@ -89,7 +105,7 @@ Change the directory in to `Helm Release Provider`. Here we need to follow same steps as above process to deploy helm charts in to AKS cluster (Example: terraform init and terraform apply). -*Note*: You need to change `terraform-remote-state` path and `helm charts` path in `terraform-helm-deploy/helm_release.tf` file. +*Note*: According to your working directory, you need to change `terraform-remote-state` path and `Helm Charts` path in `terraform-helm-deploy/helm_release.tf` file. == Terraform initialize and apply using Script From f2a24d128546cf84f0c8cf9b4ec05c472df6da12 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 13:03:52 +0530 Subject: [PATCH 53/72] Delete initial_setup_script.sh --- azure-terraform/initial_setup_script.sh | 1 - 1 file changed, 1 deletion(-) delete mode 100644 azure-terraform/initial_setup_script.sh diff --git a/azure-terraform/initial_setup_script.sh b/azure-terraform/initial_setup_script.sh deleted file mode 100644 index a836439d..00000000 --- a/azure-terraform/initial_setup_script.sh +++ /dev/null @@ -1 +0,0 @@ -In progress From 568f520721b8d58334763b36780defee48a0eae5 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 13:04:29 +0530 Subject: [PATCH 54/72] Delete terraform.tfstate --- .../terraform-helm-deploy/terraform.tfstate | 365 ------------------ 1 file changed, 365 deletions(-) delete mode 100644 azure-terraform/terraform-helm-deploy/terraform.tfstate diff --git a/azure-terraform/terraform-helm-deploy/terraform.tfstate b/azure-terraform/terraform-helm-deploy/terraform.tfstate deleted file mode 100644 index 76cf63a0..00000000 --- a/azure-terraform/terraform-helm-deploy/terraform.tfstate +++ /dev/null @@ -1,365 +0,0 @@ -{ - "version": 4, - "terraform_version": "1.0.10", - "serial": 9, - "lineage": "0f6288af-326c-61f5-6dfb-c92c42cc65d0", - "outputs": { - "Helm-Charts": { - "value": "quarkus-app-controller", - "type": "string" - }, - "Helm-charts": { - "value": "otel-release-controller", - "type": "string" - } - }, - "resources": [ - { - "mode": "data", - "type": "azurerm_kubernetes_cluster", - "name": "aks", - "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "addon_profile": [ - { - "azure_policy": [ - { - "enabled": false - } - ], - "http_application_routing": [ - { - "enabled": false, - "http_application_routing_zone_name": "" - } - ], - "ingress_application_gateway": [ - { - "effective_gateway_id": "", - "enabled": false, - "gateway_id": "", - "ingress_application_gateway_identity": [], - "subnet_cidr": "", - "subnet_id": "" - } - ], - "kube_dashboard": [ - { - "enabled": false - } - ], - "oms_agent": [ - { - "enabled": false, - "log_analytics_workspace_id": "", - "oms_agent_identity": [] - } - ] - } - ], - "agent_pool_profile": [ - { - "availability_zones": [ - "1", - "2", - "3" - ], - "count": 2, - "enable_auto_scaling": false, - "enable_node_public_ip": false, - "max_count": 0, - "max_pods": 110, - "min_count": 0, - "name": "system", - "node_labels": {}, - "node_public_ip_prefix_id": "", - "node_taints": [], - "orchestrator_version": "1.19.13", - "os_disk_size_gb": 128, - "os_type": "Linux", - "tags": {}, - "type": "VirtualMachineScaleSets", - "upgrade_settings": [], - "vm_size": "Standard_DS2_v2", - "vnet_subnet_id": "" - } - ], - "api_server_authorized_ip_ranges": [], - "disk_encryption_set_id": "", - "dns_prefix": "k8s-cluster", - "fqdn": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", - "id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", - "identity": [ - { - "principal_id": "41b13c82-2850-4c60-997e-6097d9204199", - "tenant_id": "76a2ae5a-9f00-4f6b-95ed-5d33d77c4d61", - "type": "SystemAssigned", - "user_assigned_identity_id": "" - } - ], - "kube_admin_config": [], - "kube_admin_config_raw": "", - "kube_config": [ - { - "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", - "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", - "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "host": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", - "password": "5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e", - "username": "clusterUser_AKSRG104_k8s-cluster" - } - ], - "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K\n server: https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443\n name: k8s-cluster\ncontexts:\n- context:\n cluster: k8s-cluster\n user: clusterUser_AKSRG104_k8s-cluster\n name: k8s-cluster\ncurrent-context: k8s-cluster\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_AKSRG104_k8s-cluster\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e\n", - "kubelet_identity": [ - { - "client_id": "95a95bd6-731b-4022-b018-fbad9ea9fe15", - "object_id": "10e189c1-4f75-4b4b-a66b-d29f672818cb", - "user_assigned_identity_id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/MC_AKSRG104_k8s-cluster_westeurope/providers/Microsoft.ManagedIdentity/userAssignedIdentities/k8s-cluster-agentpool" - } - ], - "kubernetes_version": "1.19.13", - "linux_profile": [ - { - "admin_username": "", - "ssh_key": [] - } - ], - "location": "westeurope", - "name": "k8s-cluster", - "network_profile": [ - { - "dns_service_ip": "10.0.0.10", - "docker_bridge_cidr": "172.17.0.1/16", - "load_balancer_sku": "Standard", - "network_plugin": "kubenet", - "network_policy": "", - "pod_cidr": "10.244.0.0/16", - "service_cidr": "10.0.0.0/16" - } - ], - "node_resource_group": "MC_AKSRG104_k8s-cluster_westeurope", - "private_cluster_enabled": false, - "private_fqdn": "", - "private_link_enabled": false, - "resource_group_name": "AKSRG104", - "role_based_access_control": [ - { - "azure_active_directory": [], - "enabled": false - } - ], - "service_principal": [ - { - "client_id": "msi" - } - ], - "tags": {}, - "timeouts": null, - "windows_profile": [] - }, - "sensitive_attributes": [] - } - ] - }, - { - "mode": "data", - "type": "terraform_remote_state", - "name": "aks", - "provider": "provider[\"terraform.io/builtin/terraform\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "backend": "local", - "config": { - "value": { - "path": "../../azure-terraform/terraform-aks-setup/terraform.tfstate" - }, - "type": [ - "object", - { - "path": "string" - } - ] - }, - "defaults": null, - "outputs": { - "value": { - "aks_fqdn": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", - "aks_id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", - "aks_node_rg": "MC_AKSRG104_k8s-cluster_westeurope", - "host": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", - "kubernetes_cluster_name": "k8s-cluster" - }, - "type": [ - "object", - { - "aks_fqdn": "string", - "aks_id": "string", - "aks_node_rg": "string", - "host": "string", - "kubernetes_cluster_name": "string" - } - ] - }, - "workspace": null - }, - "sensitive_attributes": [] - } - ] - }, - { - "mode": "managed", - "type": "helm_release", - "name": "otel-release", - "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "atomic": false, - "chart": "../../helm-charts/opentelementry", - "cleanup_on_fail": false, - "create_namespace": false, - "dependency_update": false, - "description": null, - "devel": null, - "disable_crd_hooks": false, - "disable_openapi_validation": false, - "disable_webhooks": false, - "force_update": false, - "id": "otel-release-controller", - "keyring": null, - "lint": false, - "manifest": null, - "max_history": 0, - "metadata": [ - { - "app_version": "1.0.0", - "chart": "OpenTelemetry Helm template", - "name": "otel-release-controller", - "namespace": "default", - "revision": 2, - "values": "{\"service\":{\"type\":\"LoadBalancer\"}}", - "version": "1.0.0" - } - ], - "name": "otel-release-controller", - "namespace": "default", - "postrender": [], - "recreate_pods": false, - "render_subchart_notes": true, - "replace": false, - "repository": null, - "repository_ca_file": null, - "repository_cert_file": null, - "repository_key_file": null, - "repository_password": null, - "repository_username": null, - "reset_values": false, - "reuse_values": false, - "set": [ - { - "name": "service.type", - "type": "", - "value": "LoadBalancer" - } - ], - "set_sensitive": [], - "skip_crds": false, - "status": "deployed", - "timeout": 300, - "values": null, - "verify": false, - "version": "1.0.0", - "wait": true, - "wait_for_jobs": false - }, - "sensitive_attributes": [], - "private": "bnVsbA==", - "dependencies": [ - "data.azurerm_kubernetes_cluster.aks" - ] - } - ] - }, - { - "mode": "managed", - "type": "helm_release", - "name": "quarkus-app-release", - "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "atomic": false, - "chart": "../../helm-charts/demo-quarkus", - "cleanup_on_fail": false, - "create_namespace": false, - "dependency_update": false, - "description": null, - "devel": null, - "disable_crd_hooks": false, - "disable_openapi_validation": false, - "disable_webhooks": false, - "force_update": false, - "id": "quarkus-app-controller", - "keyring": null, - "lint": false, - "manifest": null, - "max_history": 0, - "metadata": [ - { - "app_version": "v1", - "chart": "helm-app", - "name": "quarkus-app-controller", - "namespace": "default", - "revision": 2, - "values": "{\"service\":{\"type\":\"LoadBalancer\"}}", - "version": "0.1.0" - } - ], - "name": "quarkus-app-controller", - "namespace": "default", - "postrender": [], - "recreate_pods": false, - "render_subchart_notes": true, - "replace": false, - "repository": null, - "repository_ca_file": null, - "repository_cert_file": null, - "repository_key_file": null, - "repository_password": null, - "repository_username": null, - "reset_values": false, - "reuse_values": false, - "set": [ - { - "name": "service.type", - "type": "", - "value": "LoadBalancer" - } - ], - "set_sensitive": [], - "skip_crds": false, - "status": "deployed", - "timeout": 300, - "values": null, - "verify": false, - "version": "0.1.0", - "wait": true, - "wait_for_jobs": false - }, - "sensitive_attributes": [], - "private": "bnVsbA==", - "dependencies": [ - "data.azurerm_kubernetes_cluster.aks" - ] - } - ] - } - ] -} From 26ebfdbd4d46efb310474f5f19d97c2768273edd Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 13:04:37 +0530 Subject: [PATCH 55/72] Delete terraform.tfstate.backup --- .../terraform.tfstate.backup | 365 ------------------ 1 file changed, 365 deletions(-) delete mode 100644 azure-terraform/terraform-helm-deploy/terraform.tfstate.backup diff --git a/azure-terraform/terraform-helm-deploy/terraform.tfstate.backup b/azure-terraform/terraform-helm-deploy/terraform.tfstate.backup deleted file mode 100644 index c756277a..00000000 --- a/azure-terraform/terraform-helm-deploy/terraform.tfstate.backup +++ /dev/null @@ -1,365 +0,0 @@ -{ - "version": 4, - "terraform_version": "1.0.10", - "serial": 6, - "lineage": "0f6288af-326c-61f5-6dfb-c92c42cc65d0", - "outputs": { - "Helm-Charts": { - "value": "quarkus-app-controller", - "type": "string" - }, - "Helm-charts": { - "value": "otel-release-controller", - "type": "string" - } - }, - "resources": [ - { - "mode": "data", - "type": "azurerm_kubernetes_cluster", - "name": "aks", - "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "addon_profile": [ - { - "azure_policy": [ - { - "enabled": false - } - ], - "http_application_routing": [ - { - "enabled": false, - "http_application_routing_zone_name": "" - } - ], - "ingress_application_gateway": [ - { - "effective_gateway_id": "", - "enabled": false, - "gateway_id": "", - "ingress_application_gateway_identity": [], - "subnet_cidr": "", - "subnet_id": "" - } - ], - "kube_dashboard": [ - { - "enabled": false - } - ], - "oms_agent": [ - { - "enabled": false, - "log_analytics_workspace_id": "", - "oms_agent_identity": [] - } - ] - } - ], - "agent_pool_profile": [ - { - "availability_zones": [ - "1", - "2", - "3" - ], - "count": 2, - "enable_auto_scaling": false, - "enable_node_public_ip": false, - "max_count": 0, - "max_pods": 110, - "min_count": 0, - "name": "system", - "node_labels": {}, - "node_public_ip_prefix_id": "", - "node_taints": [], - "orchestrator_version": "1.19.13", - "os_disk_size_gb": 128, - "os_type": "Linux", - "tags": {}, - "type": "VirtualMachineScaleSets", - "upgrade_settings": [], - "vm_size": "Standard_DS2_v2", - "vnet_subnet_id": "" - } - ], - "api_server_authorized_ip_ranges": [], - "disk_encryption_set_id": "", - "dns_prefix": "k8s-cluster", - "fqdn": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", - "id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", - "identity": [ - { - "principal_id": "41b13c82-2850-4c60-997e-6097d9204199", - "tenant_id": "76a2ae5a-9f00-4f6b-95ed-5d33d77c4d61", - "type": "SystemAssigned", - "user_assigned_identity_id": "" - } - ], - "kube_admin_config": [], - "kube_admin_config_raw": "", - "kube_config": [ - { - "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", - "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", - "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "host": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", - "password": "5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e", - "username": "clusterUser_AKSRG104_k8s-cluster" - } - ], - "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K\n server: https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443\n name: k8s-cluster\ncontexts:\n- context:\n cluster: k8s-cluster\n user: clusterUser_AKSRG104_k8s-cluster\n name: k8s-cluster\ncurrent-context: k8s-cluster\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_AKSRG104_k8s-cluster\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e\n", - "kubelet_identity": [ - { - "client_id": "95a95bd6-731b-4022-b018-fbad9ea9fe15", - "object_id": "10e189c1-4f75-4b4b-a66b-d29f672818cb", - "user_assigned_identity_id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/MC_AKSRG104_k8s-cluster_westeurope/providers/Microsoft.ManagedIdentity/userAssignedIdentities/k8s-cluster-agentpool" - } - ], - "kubernetes_version": "1.19.13", - "linux_profile": [ - { - "admin_username": "", - "ssh_key": [] - } - ], - "location": "westeurope", - "name": "k8s-cluster", - "network_profile": [ - { - "dns_service_ip": "10.0.0.10", - "docker_bridge_cidr": "172.17.0.1/16", - "load_balancer_sku": "Standard", - "network_plugin": "kubenet", - "network_policy": "", - "pod_cidr": "10.244.0.0/16", - "service_cidr": "10.0.0.0/16" - } - ], - "node_resource_group": "MC_AKSRG104_k8s-cluster_westeurope", - "private_cluster_enabled": false, - "private_fqdn": "", - "private_link_enabled": false, - "resource_group_name": "AKSRG104", - "role_based_access_control": [ - { - "azure_active_directory": [], - "enabled": false - } - ], - "service_principal": [ - { - "client_id": "msi" - } - ], - "tags": {}, - "timeouts": null, - "windows_profile": [] - }, - "sensitive_attributes": [] - } - ] - }, - { - "mode": "data", - "type": "terraform_remote_state", - "name": "aks", - "provider": "provider[\"terraform.io/builtin/terraform\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "backend": "local", - "config": { - "value": { - "path": "C:/Users/ppadma/Documents/devon4quarkus-reference/azure-terraform/terraform-aks-setup/terraform.tfstate" - }, - "type": [ - "object", - { - "path": "string" - } - ] - }, - "defaults": null, - "outputs": { - "value": { - "aks_fqdn": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", - "aks_id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", - "aks_node_rg": "MC_AKSRG104_k8s-cluster_westeurope", - "host": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", - "kubernetes_cluster_name": "k8s-cluster" - }, - "type": [ - "object", - { - "aks_fqdn": "string", - "aks_id": "string", - "aks_node_rg": "string", - "host": "string", - "kubernetes_cluster_name": "string" - } - ] - }, - "workspace": null - }, - "sensitive_attributes": [] - } - ] - }, - { - "mode": "managed", - "type": "helm_release", - "name": "otel-release", - "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "atomic": false, - "chart": "C:/Users/ppadma/Documents/devon4quarkus-reference/helm-charts/opentelementry", - "cleanup_on_fail": false, - "create_namespace": false, - "dependency_update": false, - "description": null, - "devel": null, - "disable_crd_hooks": false, - "disable_openapi_validation": false, - "disable_webhooks": false, - "force_update": false, - "id": "otel-release-controller", - "keyring": null, - "lint": false, - "manifest": null, - "max_history": 0, - "metadata": [ - { - "app_version": "1.0.0", - "chart": "OpenTelemetry Helm template", - "name": "otel-release-controller", - "namespace": "default", - "revision": 1, - "values": "{\"service\":{\"type\":\"LoadBalancer\"}}", - "version": "1.0.0" - } - ], - "name": "otel-release-controller", - "namespace": "default", - "postrender": [], - "recreate_pods": false, - "render_subchart_notes": true, - "replace": false, - "repository": null, - "repository_ca_file": null, - "repository_cert_file": null, - "repository_key_file": null, - "repository_password": null, - "repository_username": null, - "reset_values": false, - "reuse_values": false, - "set": [ - { - "name": "service.type", - "type": "", - "value": "LoadBalancer" - } - ], - "set_sensitive": [], - "skip_crds": false, - "status": "deployed", - "timeout": 300, - "values": null, - "verify": false, - "version": "1.0.0", - "wait": true, - "wait_for_jobs": false - }, - "sensitive_attributes": [], - "private": "bnVsbA==", - "dependencies": [ - "data.azurerm_kubernetes_cluster.aks" - ] - } - ] - }, - { - "mode": "managed", - "type": "helm_release", - "name": "quarkus-app-release", - "provider": "provider[\"registry.terraform.io/hashicorp/helm\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "atomic": false, - "chart": "C:/Users/ppadma/Documents/devon4quarkus-reference/helm-charts/demo-quarkus", - "cleanup_on_fail": false, - "create_namespace": false, - "dependency_update": false, - "description": null, - "devel": null, - "disable_crd_hooks": false, - "disable_openapi_validation": false, - "disable_webhooks": false, - "force_update": false, - "id": "quarkus-app-controller", - "keyring": null, - "lint": false, - "manifest": null, - "max_history": 0, - "metadata": [ - { - "app_version": "v1", - "chart": "helm-app", - "name": "quarkus-app-controller", - "namespace": "default", - "revision": 1, - "values": "{\"service\":{\"type\":\"LoadBalancer\"}}", - "version": "0.1.0" - } - ], - "name": "quarkus-app-controller", - "namespace": "default", - "postrender": [], - "recreate_pods": false, - "render_subchart_notes": true, - "replace": false, - "repository": null, - "repository_ca_file": null, - "repository_cert_file": null, - "repository_key_file": null, - "repository_password": null, - "repository_username": null, - "reset_values": false, - "reuse_values": false, - "set": [ - { - "name": "service.type", - "type": "", - "value": "LoadBalancer" - } - ], - "set_sensitive": [], - "skip_crds": false, - "status": "deployed", - "timeout": 300, - "values": null, - "verify": false, - "version": "0.1.0", - "wait": true, - "wait_for_jobs": false - }, - "sensitive_attributes": [], - "private": "bnVsbA==", - "dependencies": [ - "data.azurerm_kubernetes_cluster.aks" - ] - } - ] - } - ] -} From 6975c9fb0d9feaf72f7e319fcfa822f4142fad01 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 13:04:59 +0530 Subject: [PATCH 56/72] Delete terraform.tfstate --- .../terraform-aks-setup/terraform.tfstate | 229 ------------------ 1 file changed, 229 deletions(-) delete mode 100644 azure-terraform/terraform-aks-setup/terraform.tfstate diff --git a/azure-terraform/terraform-aks-setup/terraform.tfstate b/azure-terraform/terraform-aks-setup/terraform.tfstate deleted file mode 100644 index a33db5e8..00000000 --- a/azure-terraform/terraform-aks-setup/terraform.tfstate +++ /dev/null @@ -1,229 +0,0 @@ -{ - "version": 4, - "terraform_version": "1.0.10", - "serial": 22, - "lineage": "e46716e1-e29c-5f8a-26eb-86f32d0f91c0", - "outputs": { - "aks_fqdn": { - "value": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", - "type": "string" - }, - "aks_id": { - "value": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", - "type": "string" - }, - "aks_node_rg": { - "value": "MC_AKSRG104_k8s-cluster_westeurope", - "type": "string" - }, - "host": { - "value": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", - "type": "string" - }, - "kubernetes_cluster_name": { - "value": "k8s-cluster", - "type": "string" - } - }, - "resources": [ - { - "mode": "managed", - "type": "azurerm_kubernetes_cluster", - "name": "aks", - "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "addon_profile": [ - { - "aci_connector_linux": [ - { - "enabled": false, - "subnet_name": "" - } - ], - "azure_policy": [ - { - "enabled": false - } - ], - "http_application_routing": [ - { - "enabled": false, - "http_application_routing_zone_name": "" - } - ], - "ingress_application_gateway": [ - { - "effective_gateway_id": "", - "enabled": false, - "gateway_id": "", - "gateway_name": "", - "ingress_application_gateway_identity": [], - "subnet_cidr": "", - "subnet_id": "" - } - ], - "kube_dashboard": [ - { - "enabled": false - } - ], - "oms_agent": [ - { - "enabled": false, - "log_analytics_workspace_id": "", - "oms_agent_identity": [] - } - ] - } - ], - "api_server_authorized_ip_ranges": null, - "auto_scaler_profile": [], - "automatic_channel_upgrade": "", - "default_node_pool": [ - { - "availability_zones": [ - "1", - "2", - "3" - ], - "enable_auto_scaling": false, - "enable_host_encryption": false, - "enable_node_public_ip": false, - "fips_enabled": false, - "kubelet_config": [], - "kubelet_disk_type": "OS", - "linux_os_config": [], - "max_count": 0, - "max_pods": 110, - "min_count": 0, - "name": "system", - "node_count": 2, - "node_labels": null, - "node_public_ip_prefix_id": "", - "node_taints": null, - "only_critical_addons_enabled": false, - "orchestrator_version": "1.19.13", - "os_disk_size_gb": 128, - "os_disk_type": "Managed", - "proximity_placement_group_id": "", - "tags": null, - "type": "VirtualMachineScaleSets", - "upgrade_settings": [], - "vm_size": "Standard_DS2_v2", - "vnet_subnet_id": "" - } - ], - "disk_encryption_set_id": "", - "dns_prefix": "k8s-cluster", - "dns_prefix_private_cluster": "", - "enable_pod_security_policy": false, - "fqdn": "k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io", - "id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourcegroups/AKSRG104/providers/Microsoft.ContainerService/managedClusters/k8s-cluster", - "identity": [ - { - "principal_id": "41b13c82-2850-4c60-997e-6097d9204199", - "tenant_id": "76a2ae5a-9f00-4f6b-95ed-5d33d77c4d61", - "type": "SystemAssigned", - "user_assigned_identity_id": "" - } - ], - "kube_admin_config": [], - "kube_admin_config_raw": "", - "kube_config": [ - { - "client_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", - "client_key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", - "cluster_ca_certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", - "host": "https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443", - "password": "5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e", - "username": "clusterUser_AKSRG104_k8s-cluster" - } - ], - "kube_config_raw": "apiVersion: v1\nclusters:\n- cluster:\n certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUU2RENDQXRDZ0F3SUJBZ0lRVFlTQlBudTRlRWh3U2ZLa3V2M1pTekFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWdGdzB5TVRFeU1ERXdOREU0TWpWYUdBOHlNRFV4TVRJd01UQTBNamd5TlZvdwpEVEVMTUFrR0ExVUVBeE1DWTJFd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUURICjd0THBscDlMeG8vbEpkZXpGTG9sSlBVR2JoejlCVlFHemN2QlIyNlJPZUFwZ1c5UTU4UDBuUUI2R0ZiYUQxUncKRU4zbGhiMFVrSythRnZ0MlFoYjBpNmo5ZCs0djZtdVBuYVhzMTZXZHZhRlVuMW1aQlhJS3ZWakh3VkJob29iVQpzTm8wRzRCalorZXZQOExsR1JBcDlJNFZPMUdUQUg3NTdLNzFDckZmejN1ZDNreEhkRmd4SE9UOGl5QXRmMEFLCmZxWVl2VVBoTkZBNGFyWENXYWxjOUhQTVhMT3lPYk9JcVlDS2w0MDk5aGJZY09Fc0tBRlZNR1ZZSTlRZExET20KSnpIZ25zdmJXYjBDcEJrRWRJTFE1a0NpZlpPOW8yVSt1aCtubHN6UGNRcTZqMDFpUXh4MlB0NHlyUEtXR3U0QgplRGtlYlFYSENMOUc3RHE3bXd6Sjc1Nko4eDR6NlNwTWhBMTZJSTJsVS9JajI5NVZ5Y05FSUJQbHFJTnJtV3dvCmFDQUthMW1QV3BZcm85MUh3MzMyelNwa01Ockd6TGpkTjBscWloU2UyYTdLd2VyS2lwM1lnOElzYzllUStLZGIKbThuNGRobFgvVEVyZlRPUFBGSWFzT3AwVXhuV09GZmZHcFgyTHEwNTRjUDR1Zzd6L3lHKzg5anZHZnpsZjZiKwo0OFlwa1pLNXpqMlNqN1VTMVJxVkYxTmdxNnlyNEM5Wmp0K05pL1NKMjkxcWZtR3F1NHhtb20rbWdiUHhkcVE2CmhrUnJNSm1pc3Q0TnVBRFJCRk9mUm0zY0dNazZyUngzdHJxV0UzbmpiMjJxUzBqcHB3Q2dJZy9OK1kzOGlEL3AKTWdkWkRldTlNbkpIaThGVUg5ckt0YVA0ZGRTTFg5TnJ0a3BwcnZuZlB3SURBUUFCbzBJd1FEQU9CZ05WSFE4QgpBZjhFQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVnL0xTVm1ZRCtSS20zeWMzCm1pVVV0UWorLzR3d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFBMld3dEpLakRzRi9JS1BuQXJDYWF4cnNxOTQKZ2cwbEJ1WjZPVzkzY2I2aVlNMHlDTklSekl2bmIrRmZiTTFtZXhGVVVYNm5BYlJSdE1yK3A4T1J5QmNVM1ZxSAowQ1lsV2pQbXc2TkpZWDY4WVpPY3NQLzFlZktwTjNXekozSjBDY2VUdU93MzVtb1B3Zlp2QUpKdzhDckdaa1pVCjVROTJIcWVPRW9JMEhXWWM5VGNlZWx4a2lwdHZQRVFGRHBJTW5MLzF4QUlkS2k1M2xVdW9pUUMySHJEQWhCQlIKYm55cUVXT0lmUkt0VTNDYVV3eVR3MVR6b0dtdlArWDRvUUxQZjRtb0tGeEp6VmE0N2ROT29HM0FHZms0ekFZbgpoZUpjSnFyUG5YQmo2L0wzem0wSDFSOENnWlJ0akhhZ0dBUC93aElXMGc1cDh1b2NINC9qR0hUZDRPREdxQmlYCjgzU1N0OWsxUlVqZ3NOc2RJK1UyN3hOZHJwc2pEcVlFTy92eHpwYi9laG9FZThjNTVnNS83SC9LWDZ5akNvSmIKS3YwM2hJbGg1ZjJiVDVYTGFnRUVzZ1pkeUV5R3JJYXRienlhS044eHE0YjFhamlWQTUyeCtHUGIva3crYlZBdgp3OEhZSWw4Y1Yvd3lFZ1ZjekhCMnZSL2t4dmhiRWE3S3dYekE1ZHJENDYxTnNTUnMvZ0pnRmlsZEFuL0JqenFvCnJ6LzdBbm9kUHhtaWpqUmJ5cmF6R3pQOGx5OTA2NVhud0VTZ2VpME5XMitFRFJPM2tsU2M4UHA1eTgxNHdYREUKN1Fjb2lLOWFqazNGaEl2cXpGazFnc1hMMlZ5cUNHc0MxdXJOSGxxekJISlkvdGM0TjJRL1FyM2lPd2lYYlVLVQpoMThQanZvYUZrS2Z2L0NCCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K\n server: https://k8s-cluster-7cd4fb1a.hcp.westeurope.azmk8s.io:443\n name: k8s-cluster\ncontexts:\n- context:\n cluster: k8s-cluster\n user: clusterUser_AKSRG104_k8s-cluster\n name: k8s-cluster\ncurrent-context: k8s-cluster\nkind: Config\npreferences: {}\nusers:\n- name: clusterUser_AKSRG104_k8s-cluster\n user:\n client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZIVENDQXdXZ0F3SUJBZ0lRWldDN1hFckVKOWNtRTFadFUzUzhjakFOQmdrcWhraUc5dzBCQVFzRkFEQU4KTVFzd0NRWURWUVFERXdKallUQWVGdzB5TVRFeU1ERXdOREU0TWpWYUZ3MHlNekV5TURFd05ESTRNalZhTURBeApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1SVXdFd1lEVlFRREV3eHRZWE4wWlhKamJHbGxiblF3CmdnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUNEd0F3Z2dJS0FvSUNBUUQwcERNUzcyeDY4R2ljanR2eVNZSlIKV0xqTEVqN1l4UGJGb0k5K3I2Tnk4K0xaZ3o3bTRaTHozcGEzb2trdU1XMHRXVFhRa0JYbWhWMXJ1YzZqYkk5TApuU2lvNC9WQ3RONmpncURocHlWRzJwaElmc0pucVJ1VmNVZ1pxeDh3THBOdjB2dDZUYkFVNVRZQTVHdUFjb3FWClhUUHdMZ1JzTUpmOXRFS2EybXB4elNza1kzQVY5ekJyOTd0Vm5XejNwelhqazhjRE92ZXZWVHBUbzAya0RINk0KejBTckJjclVLY3pLS2xKZkxuUHdlSXM0QlpCclIzbnVKZng0OUxOdFhuZ3RockZEN3FYUlphMG91SUUxeTFRYgpEcmpic2VIY0x4UVZxYjIwWlNqR3htdC9uTlN2NitCQVFTQzg3ODNzaVkwQUdWN0FXZG5xMmpmWTNUcUFOVVhUCmpIMnBHQlpsdkhGeTNFZkt5Z2FRZUlXSDgyMHU5ZVBrcFRhc2FEZ2dVa1ZvYzI4M2xJaEJsYzlZQmg4QXJOOWwKSVRvdW9RRjcrNkVwenFLY2J4Zzl0TU9pZUJEbWlwczFmK2o2M2pJMnprZUFDdlBobjJ0MlV5L1dnOGpXRVRSTQpIYUI5RG5vT2w2Z1FvbjhJQUZsYVVEMndzS3ZzY3VoM1VsRUNRaXllb3NMVGhYcnFKSEgwaWZxT3BIaUEwcW5mCkRpZHNZOUgrVjBTT1BtcWdwY01LVXdLd1ZEbE1VN3lpWWszbitLeHp2RlJEWlBxMXFITFU0bmhpdmlFZGs0dDUKbFh1aUFjek1xVThkbVllMEJLNnNoR2JDUDBsSnNuRytjelFRUXEyUEZMTnUyc3BleGc1dVo3NVZGekNHWEtCTwpvcHExQ3JCTUFlZndpbkdwa0VzQ053SURBUUFCbzFZd1ZEQU9CZ05WSFE4QkFmOEVCQU1DQmFBd0V3WURWUjBsCkJBd3dDZ1lJS3dZQkJRVUhBd0l3REFZRFZSMFRBUUgvQkFJd0FEQWZCZ05WSFNNRUdEQVdnQlNEOHRKV1pnUDUKRXFiZkp6ZWFKUlMxQ1A3L2pEQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FnRUFVOTRFVmRZZnFWU2M3U0x5dXdGcQphNHFvaCtyUnB0VEJEQVo1clNoQTN3cW84NHJKcUdCMitibW5wR3Rsb3kvazJ1MUlrWEhhdHZtZ2RiTUd2TWJZCnppYXBtV3I4MkwvVkNJa1hYTmZqSUh1Ymp6QkhjdWxYei9hOCthMGlpKzc1T1pzdnVNSFlYOXYzWDNndkVyTmUKZG96bkQ0eVRuWnVZYjQ3NzNBc2JkdUJKLzg3Wi9uSnFVZXB1N0k0eGFuRExMRzBkVmxRTzhWUjZ6cXB2MHhkMApxMzhlVThyTzFUR2Y3aGJsWkxjUTBmMElHUC9Ha2JKc3h0cm1adWNIRUMzV3BieU5RN091TTBXZXl6Uk5NeDI4CkJ1VklzMnBZcUJWdFZKNGExRHQrUTg0THBhRFdTYUZKdmVXMDNRK1g4WFZiN0VLU1BXZmFua0xtSjNwc3lvVkoKVzM4aFlDSlEwZUlGWkNrTEh4NU9iV3kyeW5UcTZWUUVWTURMUEpzWEVGLzZGeWwzL3p5aVoxKy9Rd0tQdnRKQwpmMFdDUExIK1VvbVd4aDdvdzZxMEFaWmova0gvS242LzNCM0NqejEyclFFNW9YS3VqeUlzR29kaVp5dWE5UXZuCi9GalBHWXdHeVkrYXZMQ2FtV3VML1pCMlBpbXBET0xnT05PdGpKdG04MSttVkRFQkplTG9TWGF1SGtFSlpPd0kKcUpZYVB3OWJjSEtaSzVDdUF3ZUFyY2FlTXF3WHQxenFMUTJuVG52b29ScVo4OUF5THJuSjZKeFg1OXBBSEM4dQpoczc5ZjVyajA3OWFLTVBGUkNsSjlpbnptbURWR01nMVZNSnZMNXo5WU8vTEUzZTlUcFNBcnZLYWJTRU5vaGZKCk5xRWw0VGdaN2duUkYxMU9XTWVLOHVzPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==\n client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOUtRekV1OXNldkJvbkk3YjhrbUNVVmk0eXhJKzJNVDJ4YUNQZnEramN2UGkyWU0rCjV1R1M4OTZXdDZKSkxqRnRMVmsxMEpBVjVvVmRhN25PbzJ5UFM1MG9xT1AxUXJUZW80S2c0YWNsUnRxWVNIN0MKWjZrYmxYRklHYXNmTUM2VGI5TDdlazJ3Rk9VMkFPUnJnSEtLbFYwejhDNEViRENYL2JSQ210cHFjYzBySkdOdwpGZmN3YS9lN1ZaMXM5NmMxNDVQSEF6cjNyMVU2VTZOTnBBeCtqTTlFcXdYSzFDbk15aXBTWHk1ejhIaUxPQVdRCmEwZDU3aVg4ZVBTemJWNTRMWWF4USs2bDBXV3RLTGlCTmN0VUd3NjQyN0hoM0M4VUZhbTl0R1VveHNacmY1elUKcit2Z1FFRWd2Ty9ON0ltTkFCbGV3Rm5aNnRvMzJOMDZnRFZGMDR4OXFSZ1daYnh4Y3R4SHlzb0drSGlGaC9OdApMdlhqNUtVMnJHZzRJRkpGYUhOdk41U0lRWlhQV0FZZkFLemZaU0U2THFFQmUvdWhLYzZpbkc4WVBiVERvbmdRCjVvcWJOWC9vK3Q0eU5zNUhnQXJ6NFo5cmRsTXYxb1BJMWhFMFRCMmdmUTU2RHBlb0VLSi9DQUJaV2xBOXNMQ3IKN0hMb2QxSlJBa0lzbnFMQzA0VjY2aVJ4OUluNmpxUjRnTktwM3c0bmJHUFIvbGRFamo1cW9LWERDbE1Dc0ZRNQpURk84b21KTjUvaXNjN3hVUTJUNnRhaHkxT0o0WXI0aEhaT0xlWlY3b2dITXpLbFBIWm1IdEFTdXJJUm13ajlKClNiSnh2bk0wRUVLdGp4U3pidHJLWHNZT2JtZStWUmN3aGx5Z1RxS2F0UXF3VEFIbjhJcHhxWkJMQWpjQ0F3RUEKQVFLQ0FnQjBCSXJVS0FkaUpqRDJUaW13dFh1LzZEdDYwcVJMV04xT3k5NUJUanBOZ2F2TFM1ckJFNmtGVGtKYgp3L0xBbldBUmFZVkQ2NUQzU2JnTUpvb0Fwck11UU5IUGhvd0JucFVYSmhQMTc3YVY2NFRjbklERmVFVkVrZnlICmI4ZlNxY1B4L0RTV3c5RUZsODRNamtjTkcwVHRvTTNJMFluM1pQUXZ0UlVCS3lQZjVGVFpaTzc2KzhkUzdLRkMKOE8yRVpTQUJWVXZFRkdyeUU1RWRxUXhoQ0N2YnkwL2RhMW5OVkNWeW1xK0Z4Qm5ucU1NZFJrWS9HaDZRK2lMSgptZ0tkazNlYTM0MmhrY1BCa2w2VU9Tdk52eWVielZlTm1NWnNEVWVSSG5hQTNwaC83QWwrODNsS0ZLcTh6aVlnCmMvbE1lODhLaFAyU2F3b1ZmbmVOdVJ6TlFIWmo5NUtBb1pESUNiTncrREFCZW96VjdLT0JnaWxEdGZWS0J6UVMKYmpKYzRPUFptS2h2T09QczBWaklIR0dTNjNFTFNvZm9IYlpCUFBvQ3FKRzZrMmtXRnFIVituMnBKQmhTd3lucgpmaWJQTXE2UENXSk9KRXhhZ2JJZEppeEQ5ZSsrOG94NmUwQVlod3VYb1lVSnZQMDJXSS9NTGRXU1J5MTB4TSs4CnluWmhJQmdhdnM3bDN4NXlnZFdsU0F1bkVCNURvSTdpZkkwQkFJUmpPVkV6eEtJaTF1QnIwdjE0K3FRQ2swc1oKbUhMbWxTQXM5UC8vR3FsV3A0dkJvZWJESEtDczdDcmlQWXdtQnZUQVNqd1l5dWZiUnltdjRuWHZ2MjdOSkxpNgpJbS9QUC90dUJSQVFMSU5qNG1SaVM2b1ZZdmp5RDZGTVBWZDNBN3l0QWNiZ25ZcTdRUUtDQVFFQS9WOEVQRTFIClc0Z0N4NTBEdWg4aTB1bC9TVDdCYkp2WVBUWXJ0RDZzTnl5TnlVeHdlREZXUG1WZ2lxNHBWdXlGcUZITkl1UEQKcm9oQmV6bUFQOWNjdWpwTHdURlFTK0FVYmJHZlh3VCsrMUtaUVBHZ1NnUjc3cDJMQTFvQndQVmZnWjh3N3pteAoraFVPWVZZYkNjZTVHK1lMSnVhVllHV2oyMWRoYWFKa0wyK2pzNC9DT0VMcGFoZ1JCZ1VDVzlCZVNldTdQR1ZzCnQ0aDhucytJcnYrU3pPSERuNDBJMXB2QU5uMXJyaDBnZ00wUmFTaUx6ZWtNVW5mUUx6VGpYTnVqQUNyM2g4MkIKVk5NcUJxSURzUkZzM2liUXZMUUlaNllEblQ1aTQ5WmFuV0N0WlRoNERsSEd4RkR2Y0lqWFVNa1FhZ2pVNGJobgpudVBqYUFFZ01YajJGUUtDQVFFQTl5Mys1eHVhOXV6R3hKam9EZUFMVWZwSE44UUduWkdXT0hFYVdhalcydGdQCk5oUTNVV3l1OEU4UjNRUkF1YjhHUVROWTBHNkQ0M0VUeTRBRDlZQXRiMTQwclZySGxlVzAxLzRzRFZ1aExWRUMKQVFVRzFMQ1hrVFc1QkJRVE9YdFBLeXBmd3NlK2FQVGZmRzBxWEMvUW1kWExwUWxvZnNjZ1IyMlc0SzlNSDI1Zwp1UDgzR0R0SlU1eFNCQTEvS0hVTWlkUjU1L2pQK3dVZGIvNWF6SG4vdUM1NkJYTG5HcE03dWp0Q21yZGxuZXMwCnRXZWs3REc4MDNWVDZYVmczYUhiRnhBYU91STBraU4ySG4zUWJPbVJ3eElXdE5BRHhMWm9nU3ZKTjcvTWE2TkwKa2V1Yk94bmthVTVqV0NOOXBrK29HOC9xbFNMemhDRmVRMnUwNCtaV0d3S0NBUUVBc0hDb2ZHMjhVV3RIdEVZTgpRR0ZLV09HdGVBNHhtRFoyd1RtbCthRGpRSkRRTSt2OUxsWDlIdnB0M21VbCtKaEJBMVBqckhZNzRLQ1dLUCtECjVmRWcyamFhWm5DMjMvK3RlaTRGTTZCQkNEY2U3ZkRWbEhYRzhBWFp0bjNKVnR3SXBEVjlXRG92VEYyNVkrTVkKZFJrV09PMWJ1cjA4TEtMYkZuV2xLbkNobjc3NG1xUnp0Y1l5MFdUdEJlb2JHR0RrS0VuMld6cXVHS2o5VDRKcQpScU5IVVZHdWJyOUI5bUVEMjI0L3ZFSWdUbEYvM0dFVjZsQnQra2ZoTzk1eXJrbHRHMExRbVV0czB1c3lDdWhyCjliU1N3YWo2RjA2dnc2NENPbEFsZ1UvV1RsM3lvZGhQRW5tMEZ5WGRkOXB6UnBpZHk1bFcxZEVhcDdVK3VVQi8KY0xReGVRS0NBUUIwd2ZCUFlKWFJuOFRBWnUzdVorOVErT1VkTFdabWxiZWN6NmcvdytaQmw1K1B6dnJXWm4wNApIRkYyMGlSMDJRdnVUbi9jYk9lMXp0c24zRCtDZnRwM2FjdCtPNHhkZlJUd2xpcGU0UEtBZ214czZOL3lKYnhpCnBqclA5MStoWG1MbUkrejZCL29rZjg3MWFtZUJCa0VGK1p4cFI4bHBZVXdaRVdZY21oRmVJM2hpeW9OTzJlcG8KS1VZQWpoT0xtOGFoY0pGcEJ2blBPL3BNeFp4RVREaUQyc2hldklqMzM2WnQ4TUlrYlE3K0NuVnFYeHZqU2hkRQoxMzRjb0FweWhwc0VDT0lyQUdFT3l0dG55Y3hqTmUxWmRManZEZmRKdTFRZjkvdmpicUQwRXoyR0h3SERhQmFoCnU1cG5ydFFTZER3WGJ4NEM5bkNLOEd3amNzUU9odVlUQW9JQkFCNUViVkF1V3o4OHhJUWFJR0FRU2lIdU5Ic1AKOUZWbEV1blduNUtoUU9zeHZwWmM4SkZQWFJ2eWh3ZHhnMUF0WDVJZ0ZuMFlWRXRtdjRsZUlKQU1YWjN3RFYydQpMVzI1cUI5eWlweXZUbGw0RDVIaVBObko1b0ZnM2NSaWIrSUFOOUU0cHAxM01tTkJvK0NIQWk4eEpLOGZWTzk0CkcyTExRVGtNckF4S0FUMDRyZ202dVVMMVhabjVMMlUzNHZZMmVNMDUxeldWV2NSL0t1bC9KcXdnYXpmRUoxMEMKcTlaSHYxYmlDSVFaR1RHWVBJUXdRZ3Iyd1NiTE4venBqMVMrc3g1RndDVGtoWEV5ZUxPWXdHQnlVOGc5eUR5KwpuYkx5QU1PUnlGU1Y5NC8xUEdHclRWaXUzYWUwd2x0Zi9UdkNCSVJabjB2ckFzUHBBSHRJaVZjb2dQUT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K\n token: 5c2350837f8cdc5180d7c308f7abcbf3d5ea445fc2f16e44a548d364d8dfd8116e5074b0eb37312717213c86c5408045e24241b9cae187e73beb06937811ae2e\n", - "kubelet_identity": [ - { - "client_id": "95a95bd6-731b-4022-b018-fbad9ea9fe15", - "object_id": "10e189c1-4f75-4b4b-a66b-d29f672818cb", - "user_assigned_identity_id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/MC_AKSRG104_k8s-cluster_westeurope/providers/Microsoft.ManagedIdentity/userAssignedIdentities/k8s-cluster-agentpool" - } - ], - "kubernetes_version": "1.19.13", - "linux_profile": [], - "location": "westeurope", - "name": "k8s-cluster", - "network_profile": [ - { - "dns_service_ip": "10.0.0.10", - "docker_bridge_cidr": "172.17.0.1/16", - "load_balancer_profile": [ - { - "effective_outbound_ips": [ - "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/MC_AKSRG104_k8s-cluster_westeurope/providers/Microsoft.Network/publicIPAddresses/4d1c40b7-9de0-486b-ab1a-0df42ce74dc2" - ], - "idle_timeout_in_minutes": 0, - "managed_outbound_ip_count": 1, - "outbound_ip_address_ids": [], - "outbound_ip_prefix_ids": [], - "outbound_ports_allocated": 0 - } - ], - "load_balancer_sku": "Standard", - "network_mode": "", - "network_plugin": "kubenet", - "network_policy": "", - "outbound_type": "loadBalancer", - "pod_cidr": "10.244.0.0/16", - "service_cidr": "10.0.0.0/16" - } - ], - "node_resource_group": "MC_AKSRG104_k8s-cluster_westeurope", - "private_cluster_enabled": false, - "private_dns_zone_id": "", - "private_fqdn": "", - "private_link_enabled": false, - "resource_group_name": "AKSRG104", - "role_based_access_control": [ - { - "azure_active_directory": [], - "enabled": false - } - ], - "service_principal": [], - "sku_tier": "Free", - "tags": null, - "timeouts": null, - "windows_profile": [] - }, - "sensitive_attributes": [], - "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjo1NDAwMDAwMDAwMDAwfX0=", - "dependencies": [ - "azurerm_resource_group.aks-rg" - ] - } - ] - }, - { - "mode": "managed", - "type": "azurerm_resource_group", - "name": "aks-rg", - "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/AKSRG104", - "location": "westeurope", - "name": "AKSRG104", - "tags": {}, - "timeouts": null - }, - "sensitive_attributes": [], - "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjo1NDAwMDAwMDAwMDAwfX0=" - } - ] - } - ] -} From 8d58f8149ee31d5fc18b84c62c510363cb1ef64c Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 13:05:07 +0530 Subject: [PATCH 57/72] Delete terraform.tfstate.backup --- .../terraform.tfstate.backup | 29 ------------------- 1 file changed, 29 deletions(-) delete mode 100644 azure-terraform/terraform-aks-setup/terraform.tfstate.backup diff --git a/azure-terraform/terraform-aks-setup/terraform.tfstate.backup b/azure-terraform/terraform-aks-setup/terraform.tfstate.backup deleted file mode 100644 index 2f613bd6..00000000 --- a/azure-terraform/terraform-aks-setup/terraform.tfstate.backup +++ /dev/null @@ -1,29 +0,0 @@ -{ - "version": 4, - "terraform_version": "1.0.10", - "serial": 20, - "lineage": "e46716e1-e29c-5f8a-26eb-86f32d0f91c0", - "outputs": {}, - "resources": [ - { - "mode": "managed", - "type": "azurerm_resource_group", - "name": "aks-rg", - "provider": "provider[\"registry.terraform.io/hashicorp/azurerm\"]", - "instances": [ - { - "schema_version": 0, - "attributes": { - "id": "/subscriptions/2faa1d53-3e83-4e77-bbf1-c4d758ab4dfa/resourceGroups/AKSRG104", - "location": "westeurope", - "name": "AKSRG104", - "tags": {}, - "timeouts": null - }, - "sensitive_attributes": [], - "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo1NDAwMDAwMDAwMDAwLCJkZWxldGUiOjU0MDAwMDAwMDAwMDAsInJlYWQiOjMwMDAwMDAwMDAwMCwidXBkYXRlIjo1NDAwMDAwMDAwMDAwfX0=" - } - ] - } - ] -} From 4ae2094bc8bdb279c3ba2be117fcbc5e7b29478c Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 16:55:06 +0530 Subject: [PATCH 58/72] Update installation_setup_windows.ps1 --- .../installation_setup_windows.ps1 | 46 +------------------ 1 file changed, 2 insertions(+), 44 deletions(-) diff --git a/azure-terraform/installation_setup_windows.ps1 b/azure-terraform/installation_setup_windows.ps1 index 3dc4f580..e0daba98 100644 --- a/azure-terraform/installation_setup_windows.ps1 +++ b/azure-terraform/installation_setup_windows.ps1 @@ -27,47 +27,5 @@ choco install kubernetes-helm helm echo "Install Terraform.." -Function Install-Terraform -{ - # Ensure to run the function with administrator privilege - if (-not (New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) - { Write-Host -ForegroundColor Red -Object "!!! Please run as Administrator !!!"; return } - - # Terrafrom download Url - $Url = 'https://www.terraform.io/downloads.html' - - # Local path to download the terraform zip file - $DownloadPath = 'C:\Terraform\' - - # Reg Key to set the persistent PATH - $RegPathKey = 'HKLM:\System\CurrentControlSet\Control\Session Manager\Environment' - - # Create the local folder if it doesn't exist - if ((Test-Path -Path $DownloadPath) -eq $false) { $null = New-Item -Path $DownloadPath -ItemType Directory -Force } - - # Download the Terraform exe in zip format - $Web = Invoke-WebRequest -Uri $Url - $FileInfo = $Web.Links | Where-Object href -match windows_amd64 - $DownloadLink = $FileInfo.href - $FileName = Split-Path -Path $DownloadLink -Leaf - $DownloadFile = [string]::Concat( $DownloadPath, $FileName ) - Invoke-RestMethod -Method Get -Uri $DownloadLink -OutFile $DownloadFile - - # Extract & delete the zip file - Expand-Archive -Path $DownloadFile -DestinationPath $DownloadPath -Force - Remove-Item -Path $DownloadFile -Force - - # Setting the persistent path in the registry if it is not set already - if ($DownloadPath -notin $($ENV:Path -split ';')) - { - $PathString = (Get-ItemProperty -Path $RegPathKey -Name PATH).Path - $PathString += ";$DownloadPath" - Set-ItemProperty -Path $RegPathKey -Name PATH -Value $PathString - - # Setting the path for the current session - $ENV:Path += ";$DownloadPath" - } - - # Verify the download - Invoke-Expression -Command "terraform version" -} +. .\Install-Terraform.ps1 +Install-Terraform From 1b74d09932ac7cb005f1884c547f807656817a06 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 16:55:45 +0530 Subject: [PATCH 59/72] Add files via upload --- azure-terraform/Install-Terraform.ps1 | 45 +++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 azure-terraform/Install-Terraform.ps1 diff --git a/azure-terraform/Install-Terraform.ps1 b/azure-terraform/Install-Terraform.ps1 new file mode 100644 index 00000000..694431cd --- /dev/null +++ b/azure-terraform/Install-Terraform.ps1 @@ -0,0 +1,45 @@ + +Function Install-Terraform +{ + # Ensure to run the function with administrator privilege + if (-not (New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) + { Write-Host -ForegroundColor Red -Object "!!! Please run as Administrator !!!"; return } + + # Terrafrom download Url + $Url = 'https://www.terraform.io/downloads.html' + + # Local path to download the terraform zip file + $DownloadPath = 'C:\Terraform\' + + # Reg Key to set the persistent PATH + $RegPathKey = 'HKLM:\System\CurrentControlSet\Control\Session Manager\Environment' + + # Create the local folder if it doesn't exist + if ((Test-Path -Path $DownloadPath) -eq $false) { $null = New-Item -Path $DownloadPath -ItemType Directory -Force } + + # Download the Terraform exe in zip format + $Web = Invoke-WebRequest -Uri $Url + $FileInfo = $Web.Links | Where-Object href -match windows_amd64 + $DownloadLink = $FileInfo.href + $FileName = Split-Path -Path $DownloadLink -Leaf + $DownloadFile = [string]::Concat( $DownloadPath, $FileName ) + Invoke-RestMethod -Method Get -Uri $DownloadLink -OutFile $DownloadFile + + # Extract & delete the zip file + Expand-Archive -Path $DownloadFile -DestinationPath $DownloadPath -Force + Remove-Item -Path $DownloadFile -Force + + # Setting the persistent path in the registry if it is not set already + if ($DownloadPath -notin $($ENV:Path -split ';')) + { + $PathString = (Get-ItemProperty -Path $RegPathKey -Name PATH).Path + $PathString += ";$DownloadPath" + Set-ItemProperty -Path $RegPathKey -Name PATH -Value $PathString + + # Setting the path for the current session + $ENV:Path += ";$DownloadPath" + } + + # Verify the download + Invoke-Expression -Command "terraform version" +} From 1ded6410d795351c33e2e459ef519306865b5d97 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 16:58:55 +0530 Subject: [PATCH 60/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 8d1b8214..726b44cb 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -34,7 +34,7 @@ Install all Prerequisites using an Automated script for Windows and Linux. You can find the script to Linux {url-script-linux}[here]. -`bash installation_setup_linux.sh` +`.\installation_setup_linux.sh` *Windows* From 3eb33df5b49eb4389e314d674af35969022492e6 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 17:07:26 +0530 Subject: [PATCH 61/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 726b44cb..fae8069c 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -30,23 +30,17 @@ The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for dep == *Install the Prerequisites using Script* Install all Prerequisites using an Automated script for Windows and Linux. -*Linux* - -You can find the script to Linux {url-script-linux}[here]. +- You can find the script to Linux {url-script-linux}[here]. `.\installation_setup_linux.sh` -*Windows* - -You can find the script to wndows {url-script-windows}[here]. +- You can find the script to windows {url-script-windows}[here]. ``` . .\installation_setup_windows.ps1 installation_setup_windows ``` - - == *Login to Azure Account* Before the terraform implementation we need to login Azure account through `Azure CLI`. From 350a9b45586d61eeec69bc803d5117db8ace50f4 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 17:07:51 +0530 Subject: [PATCH 62/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index fae8069c..43b3075b 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -30,11 +30,11 @@ The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for dep == *Install the Prerequisites using Script* Install all Prerequisites using an Automated script for Windows and Linux. -- You can find the script to Linux {url-script-linux}[here]. +. You can find the script to Linux {url-script-linux}[here]. `.\installation_setup_linux.sh` -- You can find the script to windows {url-script-windows}[here]. +. You can find the script to windows {url-script-windows}[here]. ``` . .\installation_setup_windows.ps1 From 02b7be4c2349b15769b3805cdb416b6b5922b20e Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Wed, 1 Dec 2021 17:08:35 +0530 Subject: [PATCH 63/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 43b3075b..8521229a 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -30,11 +30,11 @@ The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for dep == *Install the Prerequisites using Script* Install all Prerequisites using an Automated script for Windows and Linux. -. You can find the script to Linux {url-script-linux}[here]. +1. You can find the script to Linux {url-script-linux}[here]. -`.\installation_setup_linux.sh` + `.\installation_setup_linux.sh` -. You can find the script to windows {url-script-windows}[here]. +2. You can find the script to windows {url-script-windows}[here]. ``` . .\installation_setup_windows.ps1 From 65d0c196d4114b665f7e94572e0aa6a4620ec457 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Thu, 2 Dec 2021 09:21:36 +0530 Subject: [PATCH 64/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 8521229a..fef92f61 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -30,11 +30,11 @@ The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for dep == *Install the Prerequisites using Script* Install all Prerequisites using an Automated script for Windows and Linux. -1. You can find the script to Linux {url-script-linux}[here]. +1. You can find the script to Linux {url-script-linux}[here] and use below command to execute. `.\installation_setup_linux.sh` -2. You can find the script to windows {url-script-windows}[here]. +2. You can find the script to windows {url-script-windows}[here], Follow the below steps to execute the script. ``` . .\installation_setup_windows.ps1 @@ -43,13 +43,13 @@ installation_setup_windows == *Login to Azure Account* -Before the terraform implementation we need to login Azure account through `Azure CLI`. +Before the Terraform Implementation we need to login Azure account through `Azure CLI`. ``` az login -az account set --subscription $SUBSCRIPTION +az account set --subscription $SUBSCRIPTION-ID ``` -== *Set-Up And Initialize Terraform Workspace* +== *Set-Up and Initialize Terraform Workspace* In your terminal, clone the following {url-repo-code}[repository] code. @@ -59,7 +59,7 @@ You can explore this repository by changing the directories. `cd azure-terraform/terraform-aks-setup` -List of the files used to provision the AKS Cluster. +List of the files used to Provision the AKS Cluster. . `aks-cluster.tf` provisions a Resource Group and AKS Cluster. The default node pool defines the number of VMs and the VM type cluster uses. From edb59bf7d87b4ce547ada3eefd27383a9362b910 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Thu, 2 Dec 2021 11:33:39 +0530 Subject: [PATCH 65/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index fef92f61..652b33b1 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -34,12 +34,9 @@ Install all Prerequisites using an Automated script for Windows and Linux. `.\installation_setup_linux.sh` -2. You can find the script to windows {url-script-windows}[here], Follow the below steps to execute the script. +2. You can find the script to windows {url-script-windows}[here], Follow the command to execute the script. -``` -. .\installation_setup_windows.ps1 -installation_setup_windows -``` +`.\installation_setup_windows.ps1` == *Login to Azure Account* From 9d7be2b973670ef6c6f9a2b23b06d1734c014727 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Thu, 2 Dec 2021 11:34:12 +0530 Subject: [PATCH 66/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 652b33b1..75ddb272 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -32,7 +32,7 @@ Install all Prerequisites using an Automated script for Windows and Linux. 1. You can find the script to Linux {url-script-linux}[here] and use below command to execute. - `.\installation_setup_linux.sh` +`.\installation_setup_linux.sh` 2. You can find the script to windows {url-script-windows}[here], Follow the command to execute the script. From 0ad380a8f6b9757d3481a2203c7e297cca3ef476 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Thu, 2 Dec 2021 11:34:46 +0530 Subject: [PATCH 67/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 75ddb272..4f07ebda 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -32,11 +32,11 @@ Install all Prerequisites using an Automated script for Windows and Linux. 1. You can find the script to Linux {url-script-linux}[here] and use below command to execute. -`.\installation_setup_linux.sh` + `.\installation_setup_linux.sh` 2. You can find the script to windows {url-script-windows}[here], Follow the command to execute the script. -`.\installation_setup_windows.ps1` + `.\installation_setup_windows.ps1` == *Login to Azure Account* From 5182fe89bcd8be20ade112e19ca62e5fffa41136 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Thu, 2 Dec 2021 11:35:20 +0530 Subject: [PATCH 68/72] Update terraform_doc.asciidoc --- azure-terraform/terraform_doc.asciidoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 4f07ebda..75ddb272 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -32,11 +32,11 @@ Install all Prerequisites using an Automated script for Windows and Linux. 1. You can find the script to Linux {url-script-linux}[here] and use below command to execute. - `.\installation_setup_linux.sh` +`.\installation_setup_linux.sh` 2. You can find the script to windows {url-script-windows}[here], Follow the command to execute the script. - `.\installation_setup_windows.ps1` +`.\installation_setup_windows.ps1` == *Login to Azure Account* From b047852f48fceef354707e8c11eb06345c10369f Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Thu, 2 Dec 2021 13:23:01 +0530 Subject: [PATCH 69/72] Updated --- azure-terraform/terraform_doc.asciidoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index 75ddb272..af869028 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -32,7 +32,7 @@ Install all Prerequisites using an Automated script for Windows and Linux. 1. You can find the script to Linux {url-script-linux}[here] and use below command to execute. -`.\installation_setup_linux.sh` +`./installation_setup_linux.sh` 2. You can find the script to windows {url-script-windows}[here], Follow the command to execute the script. From 76269994a94c420afa7befcec17592cc76a6bf48 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Thu, 2 Dec 2021 13:23:28 +0530 Subject: [PATCH 70/72] updated --- azure-terraform/installation_setup_linux.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/azure-terraform/installation_setup_linux.sh b/azure-terraform/installation_setup_linux.sh index 298efa69..a409d511 100644 --- a/azure-terraform/installation_setup_linux.sh +++ b/azure-terraform/installation_setup_linux.sh @@ -49,7 +49,4 @@ #terraform -help terraform version - touch ~/.bashrc - terraform -install-autocomplete - source ~/.bashrc - \ No newline at end of file + From f37f7bb0a6a68cee1551261ae6d52614cf5ea4be Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Thu, 2 Dec 2021 13:25:10 +0530 Subject: [PATCH 71/72] updated --- azure-terraform/installation_setup_linux.sh | 25 +++++++++++---------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/azure-terraform/installation_setup_linux.sh b/azure-terraform/installation_setup_linux.sh index a409d511..c9c54404 100644 --- a/azure-terraform/installation_setup_linux.sh +++ b/azure-terraform/installation_setup_linux.sh @@ -1,28 +1,28 @@ #!/bin/bash - echo "Install Azure CLI...." + echo "Install Azure CLI...." #Get packages needed for the install process: sudo apt-get update - sudo apt-get install ca-certificates curl apt-transport-https lsb-release gnupg + sudo apt-get install ca-certificates curl apt-transport-https lsb-release gnupg #Download and install the Microsoft signing key: curl -sL https://packages.microsoft.com/keys/microsoft.asc | - gpg --dearmor | - sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null + gpg --dearmor | + sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null #Add the Azure CLI software repository AZ_REPO=$(lsb_release -cs) - echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | - sudo tee /etc/apt/sources.list.d/azure-cli.list + echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | + sudo tee /etc/apt/sources.list.d/azure-cli.list #Update repository information and install the azure-cli package sudo apt-get update - sudo apt-get install azure-cli + sudo apt-get install azure-cli echo "az version" az --version - echo "Install the Kubectl...." + echo "Install the Kubectl...." az aks install-cli kubectl version --client @@ -31,7 +31,7 @@ #az aks get-credentials --resource-group myResourceGroup --name myAKSCluster #kubectl get nodes - echo "Install helm package..." + echo "Install helm package..." curl https://baltocdn.com/helm/signing.asc | sudo apt-key add - sudo apt-get install apt-transport-https --yes echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list @@ -39,14 +39,15 @@ sudo apt-get install helm sudo helm version - #terraform Installation - echo "Install Terraform..." + + echo "Install Terraform..." sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" sudo apt-get update && sudo apt-get install terraform - #terraform -help + echo "terraform Version" terraform version + #terraform -help From eaad1c95285e0f288f95a0a72a5addb38d61e989 Mon Sep 17 00:00:00 2001 From: prathibhapadma <90541284+prathibhapadma@users.noreply.github.com> Date: Fri, 3 Dec 2021 11:16:40 +0530 Subject: [PATCH 72/72] Add files via upload --- azure-terraform/installation_setup_linux.sh | 96 ++++++++++----------- azure-terraform/terraform_doc.asciidoc | 27 ++---- 2 files changed, 55 insertions(+), 68 deletions(-) diff --git a/azure-terraform/installation_setup_linux.sh b/azure-terraform/installation_setup_linux.sh index c9c54404..ef13acfc 100644 --- a/azure-terraform/installation_setup_linux.sh +++ b/azure-terraform/installation_setup_linux.sh @@ -1,53 +1,51 @@ #!/bin/bash - echo "Install Azure CLI...." - #Get packages needed for the install process: - sudo apt-get update - sudo apt-get install ca-certificates curl apt-transport-https lsb-release gnupg - - #Download and install the Microsoft signing key: - curl -sL https://packages.microsoft.com/keys/microsoft.asc | - gpg --dearmor | - sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null - - #Add the Azure CLI software repository - AZ_REPO=$(lsb_release -cs) - echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | - sudo tee /etc/apt/sources.list.d/azure-cli.list - - #Update repository information and install the azure-cli package - sudo apt-get update - sudo apt-get install azure-cli +echo "Install Azure CLI...." +#Get packages needed for the install process: +sudo apt-get update +sudo apt-get install ca-certificates curl apt-transport-https lsb-release gnupg + +#Download and install the Microsoft signing key: +curl -sL https://packages.microsoft.com/keys/microsoft.asc | +gpg --dearmor | +sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null + +#Add the Azure CLI software repository +AZ_REPO=$(lsb_release -cs) +echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" | +sudo tee /etc/apt/sources.list.d/azure-cli.list + +#Update repository information and install the azure-cli package +sudo apt-get update +sudo apt-get install azure-cli - echo "az version" - az --version +echo "az version" +az --version - echo "Install the Kubectl...." - - az aks install-cli - kubectl version --client - - #echo "Connect to the cluster Using CLI" - #az aks get-credentials --resource-group myResourceGroup --name myAKSCluster - #kubectl get nodes - - echo "Install helm package..." - curl https://baltocdn.com/helm/signing.asc | sudo apt-key add - - sudo apt-get install apt-transport-https --yes - echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list - sudo apt-get update - sudo apt-get install helm - sudo helm version - - - echo "Install Terraform..." - sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl - curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - - sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" - sudo apt-get update && sudo apt-get install terraform - - echo "terraform Version" - terraform version - #terraform -help - - +echo "Install the Kubectl...." + +az aks install-cli +kubectl version --client + +echo "Install helm package..." +curl https://baltocdn.com/helm/signing.asc | sudo apt-key add - +sudo apt-get install apt-transport-https --yes +echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list +sudo apt-get update +sudo apt-get install helm +sudo helm version + +#terraform Installation +echo "Install Terraform..." +sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl +curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - +sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" +sudo apt-get update && sudo apt-get install terraform + +#terraform -help +terraform version + +#terraform destroy +#terraform destroy --auto-approve + + \ No newline at end of file diff --git a/azure-terraform/terraform_doc.asciidoc b/azure-terraform/terraform_doc.asciidoc index af869028..b9ef8dd2 100644 --- a/azure-terraform/terraform_doc.asciidoc +++ b/azure-terraform/terraform_doc.asciidoc @@ -28,25 +28,19 @@ The Azure Kubernetes Service (AKS) is a fully managed Kubernetes service for dep . Install the {url-terraform}[Terraform]. == *Install the Prerequisites using Script* -Install all Prerequisites using an Automated script for Windows and Linux. +Install all Prerequisites using an Automated script for Windows and Linux, as shown below. -1. You can find the script to Linux {url-script-linux}[here] and use below command to execute. - -`./installation_setup_linux.sh` - -2. You can find the script to windows {url-script-windows}[here], Follow the command to execute the script. - -`.\installation_setup_windows.ps1` +* The script located for Linux `devon4quarkus-reference/azure-terraform/installation_setup_linux.sh` and windows `devon4quarkus-reference/azure-terraform/installation_setup_windows.ps1`. == *Login to Azure Account* -Before the Terraform Implementation we need to login Azure account through `Azure CLI`. +Before the terraform implementation we need to login Azure account through `Azure CLI`. ``` az login -az account set --subscription $SUBSCRIPTION-ID +az account set --subscription $SUBSCRIPTION ``` -== *Set-Up and Initialize Terraform Workspace* +== *Set-Up And Initialize Terraform Workspace* In your terminal, clone the following {url-repo-code}[repository] code. @@ -56,7 +50,7 @@ You can explore this repository by changing the directories. `cd azure-terraform/terraform-aks-setup` -List of the files used to Provision the AKS Cluster. +List of the files used to provision the AKS Cluster. . `aks-cluster.tf` provisions a Resource Group and AKS Cluster. The default node pool defines the number of VMs and the VM type cluster uses. @@ -95,16 +89,11 @@ Change the directory in to `Helm Release Provider`. Here we need to follow same steps as above process to deploy helm charts in to AKS cluster (Example: terraform init and terraform apply). - *Note*: According to your working directory, you need to change `terraform-remote-state` path and `Helm Charts` path in `terraform-helm-deploy/helm_release.tf` file. -== Terraform initialize and apply using Script - -Install all Prerequisites using an automated script, you can find this script in `https://github.com/devonfw-sample/devon4quarkus-reference/azure-terraform/script_execute.sh` - -== Usage +== *Creating Terraform Plan using provided script* -`bash script_execute.sh` +Terraform initialize and apply automated way using the provided script, the script located in `/devon4quarkus-reference/azure-terraform/script_execute.sh` == *Configure kubectl*