Add new pod for accessing local files over HTTP
After this change we can access any files under /localdist/{designer,loadbuild} using an environment variable for the URL: curl $BUILDER_FILES_URL/localdisk/designer/some/file This change is required by docker build scripts in starlingx/root for projects that use Loci and have MIRROR_LOCAL set to "yes". This change requires one to restart the environment (stx-init-env). CHANGES ======= * New k8s deployment "stx-builder-files-http". Includes a single pod based on the open source "nginx" image. Serves all files under /localdisk/{designer,loadbuild} on port 8088. * k8s.py: fixed problem with distinguishing a pod name that is a prefix of another pod name, eg "builder" vs "builder-files-http" TESTS ===== * Re-build & re-deploy the helm chart using "stx-init-env" * Create a dummy docker image recipe that uses Loci and MIRROR_LOCAL and make sure it does not fail when cloning Story: 2010294 Task: 47307 Signed-off-by: Davlet Panech <davlet.panech@windriver.com> Change-Id: I04e5c6237930fb75a8acbfd65a6479bc06fa6194
This commit is contained in:
parent
4fdc291540
commit
16dd9d0a78
@ -23,7 +23,7 @@ from stx import utils
|
|||||||
logger = logging.getLogger('STX-Config')
|
logger = logging.getLogger('STX-Config')
|
||||||
utils.set_logger(logger)
|
utils.set_logger(logger)
|
||||||
|
|
||||||
ALL_CONTAINER_NAMES = ['builder', 'pkgbuilder', 'lat', 'docker', 'repomgr']
|
ALL_CONTAINER_NAMES = ['builder', 'builder-files-http', 'pkgbuilder', 'lat', 'docker', 'repomgr']
|
||||||
|
|
||||||
|
|
||||||
def require_env(var):
|
def require_env(var):
|
||||||
@ -125,6 +125,10 @@ class Config:
|
|||||||
"""Container network MTU value"""
|
"""Container network MTU value"""
|
||||||
return self._container_mtu
|
return self._container_mtu
|
||||||
|
|
||||||
|
@property
|
||||||
|
def project_name(self):
|
||||||
|
return self.get('project', 'name')
|
||||||
|
|
||||||
def _init_kubectl_cmd(self):
|
def _init_kubectl_cmd(self):
|
||||||
# helm
|
# helm
|
||||||
self.helm_cmd = 'helm'
|
self.helm_cmd = 'helm'
|
||||||
|
@ -54,8 +54,11 @@ class KubeHelper:
|
|||||||
def get_pod_name(self, dockername):
|
def get_pod_name(self, dockername):
|
||||||
'''get the detailed pod name from the four pods.'''
|
'''get the detailed pod name from the four pods.'''
|
||||||
|
|
||||||
cmd = self.config.kubectl() + ' get pods | grep Running | ' + \
|
selector = 'app.kubernetes.io/instance=%s,app.kubernetes.io/name=%s' \
|
||||||
'grep stx-' + dockername + ' | awk \'{print $1}\' '
|
% (self.config.project_name, 'stx-' + dockername)
|
||||||
|
cmd = self.config.kubectl() + f" get pods --selector '{selector}'" + \
|
||||||
|
" | tail -n +2 | awk '{print $1}'"
|
||||||
|
logger.info('Running: %s', cmd)
|
||||||
output = subprocess.check_output(cmd, shell=True)
|
output = subprocess.check_output(cmd, shell=True)
|
||||||
podname = str(output.decode('utf8').strip())
|
podname = str(output.decode('utf8').strip())
|
||||||
|
|
||||||
|
@ -64,8 +64,9 @@ task.\t\teg: [start|enter|stop|status|upgrade]')
|
|||||||
containers.\n\n')
|
containers.\n\n')
|
||||||
control_subparser.add_argument('--dockername',
|
control_subparser.add_argument('--dockername',
|
||||||
help='[ builder|pkgbuilder|repomgr|' +
|
help='[ builder|pkgbuilder|repomgr|' +
|
||||||
'lat|docker ]: container name to ' +
|
'lat|docker|builder-files-http ]: ' +
|
||||||
'enter, default: builder\n\n',
|
'container name to enter, ' +
|
||||||
|
'default: builder\n\n',
|
||||||
required=False)
|
required=False)
|
||||||
control_subparser.set_defaults(handle=self.handlecontrol.handleControl)
|
control_subparser.set_defaults(handle=self.handlecontrol.handleControl)
|
||||||
|
|
||||||
@ -157,7 +158,7 @@ remove_repo|search_pkg|upload_pkg|delete_pkg ]')
|
|||||||
action='store_const', const=True)
|
action='store_const', const=True)
|
||||||
shell_subparser.add_argument(
|
shell_subparser.add_argument(
|
||||||
'--container',
|
'--container',
|
||||||
metavar='builder|pkgbuilder|lat|repomgr|docker',
|
metavar='builder|pkgbuilder|lat|repomgr|docker|builder-files-http',
|
||||||
help='Container name (default: builder)')
|
help='Container name (default: builder)')
|
||||||
shell_subparser.set_defaults(handle=self.handleshell.cmd_shell)
|
shell_subparser.set_defaults(handle=self.handleshell.cmd_shell)
|
||||||
|
|
||||||
|
@ -36,3 +36,6 @@ dependencies:
|
|||||||
- name: stx-docker
|
- name: stx-docker
|
||||||
version: "0.1.0"
|
version: "0.1.0"
|
||||||
repository: "file://dependency_chart/stx-docker"
|
repository: "file://dependency_chart/stx-docker"
|
||||||
|
- name: stx-builder-files-http
|
||||||
|
version: "0.1.0"
|
||||||
|
repository: "file://dependency_chart/stx-builder-files-http"
|
||||||
|
@ -66,3 +66,5 @@ export DEBIAN_DISTRIBUTION="@DEBIAN_DISTRIBUTION@"
|
|||||||
export DEBIAN_VERSION="@DEBIAN_VERSION@"
|
export DEBIAN_VERSION="@DEBIAN_VERSION@"
|
||||||
|
|
||||||
export MAX_CPUS=@MAX_CPUS@
|
export MAX_CPUS=@MAX_CPUS@
|
||||||
|
|
||||||
|
export BUILDER_FILES_URL="http://@PROJECT@-stx-builder-files-http:8088"
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
# Patterns to ignore when building packages.
|
||||||
|
# This supports shell glob matching, relative path matching, and
|
||||||
|
# negation (prefixed with !). Only one pattern per line.
|
||||||
|
.DS_Store
|
||||||
|
# Common VCS dirs
|
||||||
|
.git/
|
||||||
|
.gitignore
|
||||||
|
.bzr/
|
||||||
|
.bzrignore
|
||||||
|
.hg/
|
||||||
|
.hgignore
|
||||||
|
.svn/
|
||||||
|
# Common backup files
|
||||||
|
*.swp
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
*.orig
|
||||||
|
*~
|
||||||
|
# Various IDEs
|
||||||
|
.project
|
||||||
|
.idea/
|
||||||
|
*.tmproj
|
||||||
|
.vscode/
|
@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v2
|
||||||
|
name: stx-builder-files-http
|
||||||
|
description: A Helm chart for the HTTP server for acessing builder files
|
||||||
|
|
||||||
|
# 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.
|
||||||
|
appVersion: 1.16.0
|
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
# Update/replace config files provided in the image
|
||||||
|
\cp -f -v /configmap/nginx-default.conf /etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
|
# Call entrypoint script provided by the image
|
||||||
|
exec /docker-entrypoint.sh "$@"
|
@ -0,0 +1,44 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
#access_log /var/log/nginx/host.access.log main;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html index.htm;
|
||||||
|
autoindex on;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_page 404 /404.html;
|
||||||
|
|
||||||
|
# redirect server error pages to the static page /50x.html
|
||||||
|
#
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
location = /50x.html {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
}
|
||||||
|
|
||||||
|
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
|
||||||
|
#
|
||||||
|
#location ~ \.php$ {
|
||||||
|
# proxy_pass http://127.0.0.1;
|
||||||
|
#}
|
||||||
|
|
||||||
|
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
|
||||||
|
#
|
||||||
|
#location ~ \.php$ {
|
||||||
|
# root html;
|
||||||
|
# fastcgi_pass 127.0.0.1:9000;
|
||||||
|
# fastcgi_index index.php;
|
||||||
|
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
|
||||||
|
# include fastcgi_params;
|
||||||
|
#}
|
||||||
|
|
||||||
|
# deny access to .htaccess files, if Apache's document root
|
||||||
|
# concurs with nginx's one
|
||||||
|
#
|
||||||
|
#location ~ /\.ht {
|
||||||
|
# deny all;
|
||||||
|
#}
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "stx-builder-files-http.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "stx-builder-files-http.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride }}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||||
|
{{- if contains $name .Release.Name }}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "stx-builder-files-http.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "stx-builder-files-http.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "stx-builder-files-http.chart" . }}
|
||||||
|
{{ include "stx-builder-files-http.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "stx-builder-files-http.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "stx-builder-files-http.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "stx-builder-files-http.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
{{- default (include "stx-builder-files-http.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else }}
|
||||||
|
{{- default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: configmap
|
||||||
|
data:
|
||||||
|
{{ (.Files.Glob "configmap/*").AsConfig | indent 2 }}
|
@ -0,0 +1,78 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ include "stx-builder-files-http.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "stx-builder-files-http.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
{{- if not .Values.autoscaling.enabled }}
|
||||||
|
replicas: {{ .Values.replicaCount }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "stx-builder-files-http.selectorLabels" . | nindent 6 }}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
{{- with .Values.podAnnotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "stx-builder-files-http.selectorLabels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.podSecurityContext | nindent 8 }}
|
||||||
|
containers:
|
||||||
|
- name: {{ .Chart.Name }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml .Values.securityContext | nindent 12 }}
|
||||||
|
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
tty: true
|
||||||
|
env:
|
||||||
|
command: [ "/configmap/entrypoint.sh" ]
|
||||||
|
args: [ "nginx", "-g", "daemon off;" ]
|
||||||
|
volumeMounts:
|
||||||
|
- name: localdisk-designer
|
||||||
|
mountPath: {{ .Values.volumes.localdiskDesigner.mountPath }}
|
||||||
|
readOnly: true
|
||||||
|
- name: localdisk-loadbuild
|
||||||
|
mountPath: {{ .Values.volumes.localdiskLoadbuild.mountPath }}
|
||||||
|
readOnly: true
|
||||||
|
- name: configmap
|
||||||
|
mountPath: /configmap
|
||||||
|
readOnly: true
|
||||||
|
resources:
|
||||||
|
{{- toYaml .Values.resources | nindent 12 }}
|
||||||
|
|
||||||
|
dnsConfig:
|
||||||
|
{{- toYaml .Values.dnsConfig | nindent 8 }}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- name: localdisk-designer
|
||||||
|
hostPath:
|
||||||
|
path: {{ .Values.global.hostDir }}{{ .Values.volumes.localdiskDesigner.hostPath }}
|
||||||
|
- name: localdisk-loadbuild
|
||||||
|
hostPath:
|
||||||
|
path: {{ .Values.global.hostDir }}{{ .Values.volumes.localdiskLoadbuild.hostPath }}
|
||||||
|
- name: configmap
|
||||||
|
configMap:
|
||||||
|
name: configmap
|
||||||
|
defaultMode: 0700
|
||||||
|
{{- with .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ include "stx-builder-files-http.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "stx-builder-files-http.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
type: {{ .Values.services.builderFilesHttpService.type }}
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.services.builderFilesHttpService.port }}
|
||||||
|
targetPort: 80
|
||||||
|
protocol: TCP
|
||||||
|
name: http
|
||||||
|
selector:
|
||||||
|
{{- include "stx-builder-files-http.selectorLabels" . | nindent 4 }}
|
@ -0,0 +1,69 @@
|
|||||||
|
---
|
||||||
|
replicaCount: 1
|
||||||
|
|
||||||
|
image:
|
||||||
|
repository: nginx
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
# Overrides the image tag whose default is the chart appVersion.
|
||||||
|
tag: "1.23.3"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
localdiskDesigner:
|
||||||
|
mountPath: /usr/share/nginx/html/localdisk/designer
|
||||||
|
hostPath: /localdisk/designer
|
||||||
|
localdiskLoadbuild:
|
||||||
|
mountPath: /usr/share/nginx/html/localdisk/loadbuild
|
||||||
|
hostPath: /localdisk/loadbuild
|
||||||
|
|
||||||
|
services:
|
||||||
|
builderFilesHttpService:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 8088
|
||||||
|
|
||||||
|
dnsConfig:
|
||||||
|
options:
|
||||||
|
- name: ndots
|
||||||
|
value: "1"
|
||||||
|
|
||||||
|
imagePullSecrets: []
|
||||||
|
nameOverride: ""
|
||||||
|
fullnameOverride: ""
|
||||||
|
|
||||||
|
podAnnotations: {}
|
||||||
|
|
||||||
|
podSecurityContext: {}
|
||||||
|
# fsGroup: 2000
|
||||||
|
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
# capabilities:
|
||||||
|
# drop:
|
||||||
|
# - ALL
|
||||||
|
# readOnlyRootFilesystem: true
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# runAsUser: 1000
|
||||||
|
|
||||||
|
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: {}
|
Loading…
x
Reference in New Issue
Block a user