From 0f711b8687d3853a6cfc3823a0897c83ee931dcc Mon Sep 17 00:00:00 2001 From: Praveen Gostu Date: Tue, 26 Jul 2022 16:40:10 +0530 Subject: [PATCH 1/4] cli-helper and remove templates zip --- README.md | 11 ++-- cli-helper/Readme.md | 57 ++++++++++++++++++ .../create_agent_infra_workspace.json | 0 .../create_agent_service_workspace.json | 0 tarfiles/Readme.md | 13 ---- tarfiles/templates.zip | Bin 60554 -> 0 bytes 6 files changed, 61 insertions(+), 20 deletions(-) create mode 100644 cli-helper/Readme.md rename {tarfiles => cli-helper}/create_agent_infra_workspace.json (100%) rename {tarfiles => cli-helper}/create_agent_service_workspace.json (100%) delete mode 100644 tarfiles/Readme.md delete mode 100644 tarfiles/templates.zip diff --git a/README.md b/README.md index d528066..7b3f73f 100644 --- a/README.md +++ b/README.md @@ -43,13 +43,13 @@ This repository has `.tf` configuration for the deployment of Agent infrastructu ## Using tar files -The respository contains the solution templates in the form of `tar` files to install the `Agent infrastructure` and deploy the `Agent service`. Perform following steps to use the `tar` file. +The release contains the solution templates in the form of `tar` files to install the `Agent infrastructure` and deploy the `Agent service`. Perform following steps to use the `tar` file. -- Download the `/templates/templates.zip` file to your local system. -- From your terminal extract the content of `zip` file using the command. `unzip templates.zip` +- Download the schematics-agents release to your local system. +- From your terminal extract the content of `schematics-agents.tgz` - The templates as TAR files should now be available as - The `agent-infrastructure-templates.tar` for setting up the VPC, IKS cluster, and LogDNA services infrastructure. - - The `agent-service-templates.tar` to deploy the Agent service into your infrastructure. + - The `agent-service-templates.tar` to deploy the Agent service into your infrastructure. ## Infrastructure @@ -76,17 +76,14 @@ Click [here](https://cloud.ibm.com/docs/schematics?topic=schematics-agents-setup | ---------- | -------- | -------------- | ---------- | ----------- | ----------- | | agent_prefix | You will use this prefix, for `vpc`, `cluster`, and `observability`. (Maximum length 27 chars) | | | my-project | | | location | Location of the Agent infrastructure. Note: For Beta, the Agent must be deployed in a freshly provisioned `VPC`, `IKS Cluster`, `Log Analysis` instances. | | | `us-south` | | -| resource_group_name | Name of resource group used where Agent infrastructure was provisioned. | string | ✓ | | | | tags | A list of tags for the Agent infrastructure | list(string) | | my-project:agent | | | ibmcloud_api_key | The IBM Cloud API Key used to provision the schematics Agent infrastructure resources. If not provided, then resources will be provisioned in currently logged in user account. | string | | | ✓ | | agent_name | Name of the agent. | string | | my-project | | | location| Location of the agent services. It must be the same as the agent infrastructure/cluster location. | string | | us-south | | -| resource_group_name | Name of resource group used where agent infrastructure was provisioned. | string | ✓ | | | | profile_id | The IBM Cloud IAM Trusted Profile ID which provides authorization for agents to process jobs. More info can be found [here](https://cloud.ibm.com/docs/account?topic=account-create-trusted-profile&interface=ui) | string | ✓ | | ✓ | | schematics_endpoint_location | Location of the schematics endpoint. This location is used to connect your agent with schematics service. The valid locations are us/eu/us-south/us-east/eu-de/eu-gb | string | | `us-south` | | | cluster_id | ID of the cluster used to run the agent service. | string | ✓ | | | | logdna_name | Name of the IBM Log Analysis service instance, used to send the agent logs. | string | ✓ | | | -| ibmcloud_api_key | The IBM Cloud API Key used to deploy the schematics agent resources. If not provided, resources will be deployed using the logged in user credentials. | string | | | ✓ | ## Outputs diff --git a/cli-helper/Readme.md b/cli-helper/Readme.md new file mode 100644 index 0000000..9c46778 --- /dev/null +++ b/cli-helper/Readme.md @@ -0,0 +1,57 @@ +# schematics-agents-CLI + +Use ibmcloud schematics CLI to create workspace and upload agent tar files. + +## Create Agent Infrastructure Workspace + +Use create_agent_infra_workspace.json with ibmcloud schematics cli to create workspace for infrastructure. Edit the json to update the inputs. + +#### Inputs + +| name | description | type | required | default | sensitive | +| ---------- | -------- | -------------- | ---------- | ----------- | ----------- | +| agent_prefix | You will use this prefix, for `vpc`, `cluster`, and `observability`. (Maximum length 27 chars) | | | my-project | | +| location | Location of the Agent infrastructure. Note: For Beta, the Agent must be deployed in a freshly provisioned `VPC`, `IKS Cluster`, `Log Analysis` instances. | | | `us-south` | | +| resource_group_name | Name of resource group used where Agent infrastructure was provisioned. | string | ✓ | | | +| tags | A list of tags for the Agent infrastructure | list(string) | | my-project:agent | | + +#### Example + +``` +ibmcloud schematics workspace create new --file create_agent_infra_workspace.json +``` + +## Create Agent Services Workspace + +Use create_agent_service_workspace.json with ibmcloud schematics cli to deploy services on the provisioned Agent Infrastructure. Edit the json to update the inputs. + +| name | description | type | required | default | sensitive | +| ---------- | -------- | -------------- | ---------- | ----------- | ----------- | +| ibmcloud_api_key | The IBM Cloud API Key used to provision the schematics Agent infrastructure resources. If not provided, then resources will be provisioned in currently logged in user account. | string | | | ✓ | +| agent_name | Name of the agent. | string | | my-project | | +| location| Location of the agent services. It must be the same as the agent infrastructure/cluster location. | string | | us-south | | +| resource_group_name | Name of resource group used where agent infrastructure was provisioned. | string | ✓ | | | +| profile_id | The IBM Cloud IAM Trusted Profile ID which provides authorization for agents to process jobs. More info can be found [here](https://cloud.ibm.com/docs/account?topic=account-create-trusted-profile&interface=ui) | string | ✓ | | ✓ | +| schematics_endpoint_location | Location of the schematics endpoint. This location is used to connect your agent with schematics service. The valid locations are us/eu/us-south/us-east/eu-de/eu-gb | string | | `us-south` | | +| cluster_id | ID of the cluster used to run the agent service. | string | ✓ | | | +| logdna_name | Name of the IBM Log Analysis service instance, used to send the agent logs. | string | ✓ | | | + + +#### Example + +``` +ibmcloud schematics workspace create new --file create_agent_service_workspace.json +``` + +## Next Steps + +Download the schematics-agents release to your local system. +- From your terminal extract the schematics-agents.tgz +- The templates as TAR files should now be available as + - The `agent-infrastructure-templates.tar` for setting up the VPC, IKS cluster, and LogDNA services infrastructure. + - The `agent-service-templates.tar` to deploy the Agent service into your infrastructure. +- Use ibmcloud schematics cli to upload the tar files to respective workspace +``` +ex: +ibmcloud schematics workspace upload --id us-east.workspace.schematics-remote-service-workspace.f3c5bfe2 --file ./agent-service-templates.tar -tid 9bfe4530-cfb2-41 +``` \ No newline at end of file diff --git a/tarfiles/create_agent_infra_workspace.json b/cli-helper/create_agent_infra_workspace.json similarity index 100% rename from tarfiles/create_agent_infra_workspace.json rename to cli-helper/create_agent_infra_workspace.json diff --git a/tarfiles/create_agent_service_workspace.json b/cli-helper/create_agent_service_workspace.json similarity index 100% rename from tarfiles/create_agent_service_workspace.json rename to cli-helper/create_agent_service_workspace.json diff --git a/tarfiles/Readme.md b/tarfiles/Readme.md deleted file mode 100644 index fce1fcf..0000000 --- a/tarfiles/Readme.md +++ /dev/null @@ -1,13 +0,0 @@ -# schematics-agents-tarfiles -Solution Templates for Schematics Agent - Templates as TAR files. - -Download the `templates.zip` file to your local system. - -Extract the content of zip file using the command - ` unzip templates.zip` - -The templates as TAR files should now be available as - -i. `agent-infrastructure-templates.tar` - -ii. `agent-service-templates.tar` - diff --git a/tarfiles/templates.zip b/tarfiles/templates.zip deleted file mode 100644 index a285588d1ed4ce97ad6934c1aba3e91c17a7926d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60554 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%0DX4$0!EnFQA?$5+p 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

@Fv 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 z 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 From 135ebc7309b85422618449ca3ecec6b287a034ab Mon Sep 17 00:00:00 2001 From: Praveen Gostu Date: Tue, 9 Aug 2022 19:29:23 +0530 Subject: [PATCH 2/4] Runtime ansible Job deployment template --- templates/service/runtime-ansible-job.tf | 249 +++++++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100755 templates/service/runtime-ansible-job.tf diff --git a/templates/service/runtime-ansible-job.tf b/templates/service/runtime-ansible-job.tf new file mode 100755 index 0000000..5e33322 --- /dev/null +++ b/templates/service/runtime-ansible-job.tf @@ -0,0 +1,249 @@ +############################################################################### +# IBM Confidential +# OCO Source Materials +# IBM Cloud Schematics +# (C) Copyright IBM Corp. 2022 All Rights Reserved. +# The source code for this program is not published or otherwise divested of +# its trade secrets, irrespective of what has been deposited with +# the U.S. Copyright Office. +############################################################################### + +############################################################################## +# Job 12 blocks +############################################################################## + +resource "kubernetes_config_map" "runtime_ansible_job_configmap" { + metadata { + name = "schematics-runtime-ansible-job-config" + namespace = "schematics-runtime" + } + + data = { + ANSIBLE_JOB_HTTPADDR = "" + ANSIBLE_JOB_HTTPPORT = 3006 + ANSIBLE_JOB_KEEPWORKFILES = true + ANSIBLE_JOB_SINGLEACTIONMODE = true + ANSIBLE_JOB_LOGGERLEVEL = "0" + ANSIBLE_JOB_ATLOGGERLEVEL = "-1" + ANSIBLE_JOB_EXTLOGGERLEVEL = "-1" + ANSIBLE_JOB_EXTLOGPATH = "/var/log/schematics/%s.log" + ANSIBLE_JOB_WHITELISTEXTN = ".tf,.tfvars,.md,.yaml,.sh,.txt,.yml,.html,.gitignore,.tf.json,license,.js,.pub,.service,_rsa,.py,.json,.tpl,.cfg,.ps1,.j2,.zip,.conf,.crt,.key,.der,.jacl,.properties,.cer,.pem,.tmpl,.netrc" + ANSIBLE_JOB_ANSIBLEACTIONWHITELISTEXTN = ".tf,.tfvars,.md,.yaml,.sh,.txt,.yml,.html,.gitignore,.tf.json,license,.js,.pub,.service,_rsa,.py,.json,.tpl,.cfg,.ps1,.j2,.zip,.conf,.crt,.key,.der,.cer,.pem,.bash,.tmpl" + ANSIBLE_JOB_BLACKLISTEXTN = ".php5,.pht,.phtml,.shtml,.asa,.asax,.swf,.xap,.tfstate,.tfstate.backup,.exe" + IBMCLOUD_ACCOUNT_MANAGEMENT_API_ENDPOINT = "" + IBMCLOUD_CF_API_ENDPOINT = "" + IBMCLOUD_CS_API_ENDPOINT = "" + IBMCLOUD_CR_API_ENDPOINT = "" + IBMCLOUD_CIS_API_ENDPOINT = "" + IBMCLOUD_GS_API_ENDPOINT = "" + IBMCLOUD_GT_API_ENDPOINT = "" + IBMCLOUD_IAM_API_ENDPOINT = "" + IBMCLOUD_IAMPAP_API_ENDPOINT = "" + IBMCLOUD_ICD_API_ENDPOINT = "" + IBMCLOUD_MCCP_API_ENDPOINT = "" + IBMCLOUD_RESOURCE_MANAGEMENT_API_ENDPOINT = "" + IBMCLOUD_RESOURCE_CONTROLLER_API_ENDPOINT = "" + IBMCLOUD_RESOURCE_CATALOG_API_ENDPOINT = "" + IBMCLOUD_UAA_ENDPOINT = "" + IBMCLOUD_CSE_ENDPOINT = "" + IBMCLOUD_IS_API_ENDPOINT = "" + IBMCLOUD_IS_NG_API_ENDPOINT = "" + IBMCLOUD_COS_CONFIG_ENDPOINT = "" + IBMCLOUD_API_GATEWAY_ENDPOINT = "" + IBMCLOUD_DL_API_ENDPOINT = "" + IBMCLOUD_DL_PROVIDER_API_ENDPOINT = "" + IBMCLOUD_TG_API_ENDPOINT = "" + IBMCLOUD_HPCS_API_ENDPOINT = "" + IBMCLOUD_FUNCTIONS_API_ENDPOINT = "" + IBMCLOUD_SATELLITE_API_ENDPOINT = "" + IBMCLOUD_ENTERPRISE_API_ENDPOINT = "" + IBMCLOUD_PUSH_API_ENDPOINT = "" + IBMCLOUD_CATALOG_MANAGEMENT_API_ENDPOINT = "" + IBMCLOUD_HPCS_TKE_ENDPOINT = "" + ANSIBLE_JOB_ENABLETLS = "True" + ANSIBLE_JOB_OPPONENTSCA = "" + ANSIBLE_JOB_CERTPEM = "" + ANSIBLE_JOB_KEYPEM = "" + ADAPTER_HTTPPORT = "4001" + ADAPTER_MAXRETRIES = "" + ADAPTER_LOCATION = "us-south" + ADAPTER_LOGGERLEVEL = "-1" + ADAPTER_ATLOGGERLEVEL = "-1" + ADAPTER_EXTLOGGERLEVEL = "-1" + ADAPTER_EXTLOGPATH = "/var/log/schematics/%s.log" + ADAPTER_PLUGINHOME = "/go/src/github.ibm.com/blueprint/schematics-data-adapter/plugins" + } + + depends_on = [kubernetes_namespace.namespace] + +} + +resource "kubernetes_service" "ansible_job_service" { + metadata { + name = "ansible-job-service" + namespace = "schematics-runtime" + } + + spec { + port { + name = "grpc-job" + port = 3006 + target_port = "grpc-job" + } + + selector = { + app = "runtime-ansible-job" + } + + type = "ClusterIP" + } + + depends_on = [kubernetes_namespace.namespace] +} + + + +resource "kubernetes_deployment" "runtime_ansible_job" { + timeouts { + create = "60m" + delete = "60m" + } + metadata { + name = "runtime-ansible-job" + namespace = "schematics-runtime" + + + labels = { + app = "runtime-ansible-job" + } + + annotations = { + "kubernetes.io/change-cause" = "schematics-ansible-job_{IMAGE_TAG}" + } + } + + spec { + replicas = 3 + + selector { + match_labels = { + app = "runtime-ansible-job" + } + } + + template { + metadata { + labels = { + app = "runtime-ansible-job" + + build = "ansible-job-{IMAGE_TAG}" + } + } + + spec { + volume { + name = "at-events" + + host_path { + path = "/var/log/at" + } + } + + volume { + name = "ext-logs" + + host_path { + path = "/var/log/schematics" + } + } + + init_container { + name = "fix-permissions" + image = "icr.io/schematics-remote/ubi-minimal:8.6" + command = ["sh", "-c", "chmod -R a+rwx /var/log/at"] + + volume_mount { + name = "at-events" + mount_path = "/var/log/at" + } + } + + init_container { + name = "fix-permissions-extlog" + image = "icr.io/schematics-remote/ubi-minimal:8.6" + command = ["sh", "-c", "chmod -R a+rwx /var/log/schematics"] + + volume_mount { + name = "ext-logs" + mount_path = "/var/log/schematics" + } + } + + image_pull_secrets { + name = "schematics-runtime-job-image-secret" + } + + container { + name = "runtime-job" + image = local.schematics_runtime_job_image + + port { + name = "grpc-job" + container_port = 3002 + } + + env_from { + config_map_ref { + name = "schematics-runtime-ansible-job-config" + } + } + + resources { + limits = { + cpu = "500m" + memory = "1Gi" + } + + requests = { + cpu = "500m" + memory = "1Gi" + } + } + + volume_mount { + name = "at-events" + mount_path = "/var/log/at" + } + + volume_mount { + name = "ext-logs" + mount_path = "/var/log/schematics" + } + + lifecycle { + pre_stop { + exec { + command = ["/home/nobody/scripts/pre-stop.sh"] + } + } + } + + security_context { + run_as_user = 1001 + run_as_group = 1001 + run_as_non_root = true + } + } + + restart_policy = "Always" + termination_grace_period_seconds = 180000 + } + } + + revision_history_limit = 5 + } + + depends_on = [kubernetes_service.job_service, kubernetes_config_map.runtime_ansible_job_configmap, kubernetes_namespace.namespace, kubernetes_secret.schematics-job-secret] +} + +############################################################################## \ No newline at end of file From b2d540fa84cc345549938375c004e22a0642082b Mon Sep 17 00:00:00 2001 From: Praveen Gostu Date: Tue, 9 Aug 2022 19:29:23 +0530 Subject: [PATCH 3/4] Runtime ansible Job deployment template --- templates/service/locals.tf | 2 + templates/service/runtime-ansible-job.tf | 248 +++++++++++++++++++++++ 2 files changed, 250 insertions(+) create mode 100755 templates/service/runtime-ansible-job.tf diff --git a/templates/service/locals.tf b/templates/service/locals.tf index d97fde5..bc295c3 100644 --- a/templates/service/locals.tf +++ b/templates/service/locals.tf @@ -21,6 +21,8 @@ locals { schematics_jobrunner_image = "icr.io/schematics-remote/schematics-job-runner:eb8ca280-179" #Schematics agent job12 image ID schematics_runtime_job_image = "icr.io/schematics-remote/schematics-agent-ws-job-20220704:60824f4e-276" + #Schematics agent ansible image ID + schematics_runtime_ansible_job_image = "us.icr.io/schematics/schematics-ansible-job:b164f614-171" #schematics_sandbox_image schematics_sandbox_image = "icr.io/schematics-remote/schematics-sandbox:9bdc3645-283" #Schematics environment (dev|stage|prod) diff --git a/templates/service/runtime-ansible-job.tf b/templates/service/runtime-ansible-job.tf new file mode 100755 index 0000000..905bd34 --- /dev/null +++ b/templates/service/runtime-ansible-job.tf @@ -0,0 +1,248 @@ +############################################################################### +# IBM Confidential +# OCO Source Materials +# IBM Cloud Schematics +# (C) Copyright IBM Corp. 2022 All Rights Reserved. +# The source code for this program is not published or otherwise divested of +# its trade secrets, irrespective of what has been deposited with +# the U.S. Copyright Office. +############################################################################### + +############################################################################## +# Job 12 blocks +############################################################################## + +resource "kubernetes_config_map" "runtime_ansible_job_configmap" { + metadata { + name = "schematics-runtime-ansible-job-config" + namespace = "schematics-runtime" + } + + data = { + ANSIBLE_JOB_HTTPADDR = "" + ANSIBLE_JOB_HTTPPORT = 3006 + ANSIBLE_JOB_KEEPWORKFILES = true + ANSIBLE_JOB_SINGLEACTIONMODE = true + ANSIBLE_JOB_LOGGERLEVEL = "0" + ANSIBLE_JOB_ATLOGGERLEVEL = "-1" + ANSIBLE_JOB_EXTLOGGERLEVEL = "-1" + ANSIBLE_JOB_EXTLOGPATH = "/var/log/schematics/%s.log" + ANSIBLE_JOB_WHITELISTEXTN = ".tf,.tfvars,.md,.yaml,.sh,.txt,.yml,.html,.gitignore,.tf.json,license,.js,.pub,.service,_rsa,.py,.json,.tpl,.cfg,.ps1,.j2,.zip,.conf,.crt,.key,.der,.jacl,.properties,.cer,.pem,.tmpl,.netrc" + ANSIBLE_JOB_ANSIBLEACTIONWHITELISTEXTN = ".tf,.tfvars,.md,.yaml,.sh,.txt,.yml,.html,.gitignore,.tf.json,license,.js,.pub,.service,_rsa,.py,.json,.tpl,.cfg,.ps1,.j2,.zip,.conf,.crt,.key,.der,.cer,.pem,.bash,.tmpl" + ANSIBLE_JOB_BLACKLISTEXTN = ".php5,.pht,.phtml,.shtml,.asa,.asax,.swf,.xap,.tfstate,.tfstate.backup,.exe" + IBMCLOUD_ACCOUNT_MANAGEMENT_API_ENDPOINT = "" + IBMCLOUD_CF_API_ENDPOINT = "" + IBMCLOUD_CS_API_ENDPOINT = "" + IBMCLOUD_CR_API_ENDPOINT = "" + IBMCLOUD_CIS_API_ENDPOINT = "" + IBMCLOUD_GS_API_ENDPOINT = "" + IBMCLOUD_GT_API_ENDPOINT = "" + IBMCLOUD_IAM_API_ENDPOINT = "" + IBMCLOUD_IAMPAP_API_ENDPOINT = "" + IBMCLOUD_ICD_API_ENDPOINT = "" + IBMCLOUD_MCCP_API_ENDPOINT = "" + IBMCLOUD_RESOURCE_MANAGEMENT_API_ENDPOINT = "" + IBMCLOUD_RESOURCE_CONTROLLER_API_ENDPOINT = "" + IBMCLOUD_RESOURCE_CATALOG_API_ENDPOINT = "" + IBMCLOUD_UAA_ENDPOINT = "" + IBMCLOUD_CSE_ENDPOINT = "" + IBMCLOUD_IS_API_ENDPOINT = "" + IBMCLOUD_IS_NG_API_ENDPOINT = "" + IBMCLOUD_COS_CONFIG_ENDPOINT = "" + IBMCLOUD_API_GATEWAY_ENDPOINT = "" + IBMCLOUD_DL_API_ENDPOINT = "" + IBMCLOUD_DL_PROVIDER_API_ENDPOINT = "" + IBMCLOUD_TG_API_ENDPOINT = "" + IBMCLOUD_HPCS_API_ENDPOINT = "" + IBMCLOUD_FUNCTIONS_API_ENDPOINT = "" + IBMCLOUD_SATELLITE_API_ENDPOINT = "" + IBMCLOUD_ENTERPRISE_API_ENDPOINT = "" + IBMCLOUD_PUSH_API_ENDPOINT = "" + IBMCLOUD_CATALOG_MANAGEMENT_API_ENDPOINT = "" + IBMCLOUD_HPCS_TKE_ENDPOINT = "" + ANSIBLE_JOB_ENABLETLS = false + ANSIBLE_JOB_OPPONENTSCA = "" + #ANSIBLE_JOB_CERTPEM = "" + #ANSIBLE_JOB_KEYPEM = "" + ADAPTER_HTTPPORT = "4001" + ADAPTER_MAXRETRIES = "" + ADAPTER_LOCATION = "us-south" + ADAPTER_LOGGERLEVEL = "-1" + ADAPTER_ATLOGGERLEVEL = "-1" + ADAPTER_EXTLOGGERLEVEL = "-1" + ADAPTER_EXTLOGPATH = "/var/log/schematics/%s.log" + ADAPTER_PLUGINHOME = "/go/src/github.ibm.com/blueprint/schematics-data-adapter/plugins" + } + + depends_on = [kubernetes_namespace.namespace] + +} + +resource "kubernetes_service" "ansible_job_service" { + metadata { + name = "ansible-job-service" + namespace = "schematics-runtime" + } + + spec { + port { + name = "grpc-job" + port = 3006 + target_port = "grpc-job" + } + + selector = { + app = "runtime-ansible-job" + } + + type = "ClusterIP" + } + + depends_on = [kubernetes_namespace.namespace] +} + + +resource "kubernetes_deployment" "runtime_ansible_job" { + timeouts { + create = "60m" + delete = "60m" + } + metadata { + name = "runtime-ansible-job" + namespace = "schematics-runtime" + + + labels = { + app = "runtime-ansible-job" + } + + annotations = { + "kubernetes.io/change-cause" = "schematics-ansible-job_1338" + } + } + + spec { + replicas = 3 + + selector { + match_labels = { + app = "runtime-ansible-job" + } + } + + template { + metadata { + labels = { + app = "runtime-ansible-job" + + build = "ansible-job-1338" + } + } + + spec { + volume { + name = "at-events" + + host_path { + path = "/var/log/at" + } + } + + volume { + name = "ext-logs" + + host_path { + path = "/var/log/schematics" + } + } + + init_container { + name = "fix-permissions" + image = "icr.io/schematics-remote/ubi-minimal:8.6" + command = ["sh", "-c", "chmod -R a+rwx /var/log/at"] + + volume_mount { + name = "at-events" + mount_path = "/var/log/at" + } + } + + init_container { + name = "fix-permissions-extlog" + image = "icr.io/schematics-remote/ubi-minimal:8.6" + command = ["sh", "-c", "chmod -R a+rwx /var/log/schematics"] + + volume_mount { + name = "ext-logs" + mount_path = "/var/log/schematics" + } + } + + image_pull_secrets { + name = "schematics-runtime-job-image-secret" + } + + container { + name = "runtime-job" + image = local.schematics_runtime_ansible_job_image + + port { + name = "grpc-job" + container_port = 3002 + } + + env_from { + config_map_ref { + name = "schematics-runtime-ansible-job-config" + } + } + + resources { + limits = { + cpu = "500m" + memory = "1Gi" + } + + requests = { + cpu = "500m" + memory = "1Gi" + } + } + + volume_mount { + name = "at-events" + mount_path = "/var/log/at" + } + + volume_mount { + name = "ext-logs" + mount_path = "/var/log/schematics" + } + + lifecycle { + pre_stop { + exec { + command = ["/home/nobody/scripts/pre-stop.sh"] + } + } + } + + security_context { + run_as_user = 1001 + run_as_group = 1001 + run_as_non_root = true + } + } + + restart_policy = "Always" + termination_grace_period_seconds = 180000 + } + } + + revision_history_limit = 5 + } + + depends_on = [kubernetes_service.job_service, kubernetes_config_map.runtime_ansible_job_configmap, kubernetes_namespace.namespace] +} + +############################################################################## \ No newline at end of file From 7b815b477fea9471b27d69b77b6f742e7e4b74ca Mon Sep 17 00:00:00 2001 From: Praveen Gostu Date: Fri, 16 Sep 2022 09:32:32 +0530 Subject: [PATCH 4/4] Adapter Image deployment --- templates/service/locals.tf | 2 + templates/service/runtime-ansible-job.tf | 71 +++++++++++++++++++++++- 2 files changed, 72 insertions(+), 1 deletion(-) diff --git a/templates/service/locals.tf b/templates/service/locals.tf index bc295c3..acf93f4 100644 --- a/templates/service/locals.tf +++ b/templates/service/locals.tf @@ -23,6 +23,8 @@ locals { schematics_runtime_job_image = "icr.io/schematics-remote/schematics-agent-ws-job-20220704:60824f4e-276" #Schematics agent ansible image ID schematics_runtime_ansible_job_image = "us.icr.io/schematics/schematics-ansible-job:b164f614-171" + #Schematics agent adapter image ID + schematics_runtime_adapter_job_image = "us.icr.io/schematics/schematics-data-adapter:48537ed2-62" #schematics_sandbox_image schematics_sandbox_image = "icr.io/schematics-remote/schematics-sandbox:9bdc3645-283" #Schematics environment (dev|stage|prod) diff --git a/templates/service/runtime-ansible-job.tf b/templates/service/runtime-ansible-job.tf index 905bd34..57a96cb 100755 --- a/templates/service/runtime-ansible-job.tf +++ b/templates/service/runtime-ansible-job.tf @@ -78,6 +78,27 @@ resource "kubernetes_config_map" "runtime_ansible_job_configmap" { } +resource "kubernetes_config_map" "runtime_adapter_job_configmap" { + metadata { + name = "schematics-runtime-ansible-job-config" + namespace = "schematics-runtime" + } + + data = { + ADAPTER_HTTPPORT = "4001" + ADAPTER_MAXRETRIES = "" + ADAPTER_LOCATION = "us-south" + ADAPTER_LOGGERLEVEL = "-1" + ADAPTER_ATLOGGERLEVEL = "-1" + ADAPTER_EXTLOGGERLEVEL = "-1" + ADAPTER_EXTLOGPATH = "/var/log/schematics/%s.log" + ADAPTER_PLUGINHOME = "/go/src/github.ibm.com/blueprint/schematics-data-adapter/plugins" + } + + depends_on = [kubernetes_namespace.namespace] + +} + resource "kubernetes_service" "ansible_job_service" { metadata { name = "ansible-job-service" @@ -234,15 +255,63 @@ resource "kubernetes_deployment" "runtime_ansible_job" { } } + container { + name = "adapter" + image = "us.icr.io/$${CR_NAMESPACE}/schematics-data-adapter:$${ADAPTER_IMAGE_TAG}" + + env_from { + config_map_ref { + name = "schematics-runtime-adapter-job-config" + } + } + + port { + name = "http-adapter" + container_port = 4001 + } + resources { + limits = { + cpu = "500m" + memory = "1Gi" + } + + requests = { + cpu = "500m" + memory = "1Gi" + } + } + + volume_mount { + name = "at-events" + mount_path = "/var/log/at" + } + + volume_mount { + name = "ext-logs" + mount_path = "/var/log/schematics" + } + } + restart_policy = "Always" termination_grace_period_seconds = 180000 } } + strategy { + type = "RollingUpdate" + + rolling_update { + max_unavailable = "1" + max_surge = "1" + } + } + revision_history_limit = 5 } - depends_on = [kubernetes_service.job_service, kubernetes_config_map.runtime_ansible_job_configmap, kubernetes_namespace.namespace] + depends_on = [kubernetes_service.job_service, kubernetes_config_map.runtime_ansible_job_configmap,kubernetes_config_map.runtime_adapter_job_configmap, kubernetes_namespace.namespace] } + + ############################################################################## \ No newline at end of file