Merge pull request #25 from giolekva/bazel
Improve dev environment
#7
diff --git "a/archive/argo/\043argo-events-crds-install.yaml\043" "b/archive/argo/\043argo-events-crds-install.yaml\043"
deleted file mode 100644
index 92b812a..0000000
--- "a/archive/argo/\043argo-events-crds-install.yaml\043"
+++ /dev/null
@@ -1,221 +0,0 @@
-oapiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: gateways.argoproj.io
-spec:
- group: argoproj.io
- names:
- kind: Gateway
- listKind: GatewayList
- plural: gateways
- singular: gateway
- shortNames:
- - gw
- scope: Namespaced
- version: "v1alpha1"
----
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: sensors.argoproj.io
-spec:
- group: argoproj.io
- names:
- kind: Sensor
- listKind: SensorList
- plural: sensors
- singular: sensor
- shortNames:
- - sn
- scope: Namespaced
- version: "v1alpha1"
----
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: eventsources.argoproj.io
-spec:
- group: argoproj.io
- scope: Namespaced
- names:
- kind: EventSource
- plural: eventsources
- singular: eventsource
- listKind: EventSourceList
- shortNames:
- - es
- version: "v1alpha1"
----
-# apiVersion: v1
-# kind: Namespace
-# metadata:
-# name: argo-events
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: argo-events-sa
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: argo-events-role-binding
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: argo-events-role
-subjects:
- - kind: ServiceAccount
- name: argo-events-sa
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: argo-events-role
-rules:
- - apiGroups:
- - argoproj.io
- verbs:
- - create
- - delete
- - deletecollection
- - get
- - list
- - patch
- - update
- - watch
- resources:
- - workflows
- - workflows/finalizers
- - workflowtemplates
- - workflowtemplates/finalizers
- - gateways
- - gateways/finalizers
- - sensors
- - sensors/finalizers
- - eventsources
- - eventsources/finalizers
- - apiGroups:
- - ""
- resources:
- - pods
- - pods/exec
- - configmaps
- - secrets
- - services
- - events
- - persistentvolumeclaims
- verbs:
- - create
- - get
- - list
- - watch
- - update
- - patch
- - delete
- - apiGroups:
- - "batch"
- resources:
- - jobs
- verbs:
- - create
- - get
- - list
- - watch
- - update
- - patch
- - delete
- - apiGroups:
- - "apps"
- resources:
- - deployments
- verbs:
- - create
- - get
- - list
- - watch
- - update
- - patch
- - delete
----
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: gateway-controller-configmap
- namespace: kube-system
-data:
- config: |
- instanceID: argo-events
- namespace: kube-system
----
-# The gateway-controller listens for changes on the gateway CRD and creates gateway
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: gateway-controller
- namespace: kube-system
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: gateway-controller
- template:
- metadata:
- labels:
- app: gateway-controller
- spec:
- serviceAccountName: argo-events-sa
- containers:
- - name: gateway-controller
- image: argoproj/gateway-controller:v0.13.0
- imagePullPolicy: Always
- env:
- - name: NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: CONTROLLER_CONFIG_MAP
- value: gateway-controller-configmap
----
-# The sensor-controller configmap includes configuration information for the sensor-controller
-# To watch sensors created in different namespace than the controller is deployed in, remove the namespace: kube-system.
-# Similarly to watch sensors created in specific namespace, change to namespace: <your_namespace>
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: sensor-controller-configmap
- namespace: kube-system
-data:
- config: |
- instanceID: argo-events
- namespace: kube-system
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: sensor-controller
- namespace: kube-system
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: sensor-controller
- template:
- metadata:
- labels:
- app: sensor-controller
- spec:
- serviceAccountName: argo-events-sa
- containers:
- - name: sensor-controller
- image: argoproj/sensor-controller:v0.13.0
- imagePullPolicy: Always
- env:
- - name: NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: CONTROLLER_CONFIG_MAP
- value: sensor-controller-configmap
diff --git a/archive/argo/argo-events-crds-install.yaml b/archive/argo/argo-events-crds-install.yaml
deleted file mode 100644
index c746479..0000000
--- a/archive/argo/argo-events-crds-install.yaml
+++ /dev/null
@@ -1,221 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: gateways.argoproj.io
-spec:
- group: argoproj.io
- names:
- kind: Gateway
- listKind: GatewayList
- plural: gateways
- singular: gateway
- shortNames:
- - gw
- scope: Namespaced
- version: "v1alpha1"
----
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: sensors.argoproj.io
-spec:
- group: argoproj.io
- names:
- kind: Sensor
- listKind: SensorList
- plural: sensors
- singular: sensor
- shortNames:
- - sn
- scope: Namespaced
- version: "v1alpha1"
----
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: eventsources.argoproj.io
-spec:
- group: argoproj.io
- scope: Namespaced
- names:
- kind: EventSource
- plural: eventsources
- singular: eventsource
- listKind: EventSourceList
- shortNames:
- - es
- version: "v1alpha1"
----
-# apiVersion: v1
-# kind: Namespace
-# metadata:
-# name: argo-events
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: argo-events-sa
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: argo-events-role-binding
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: argo-events-role
-subjects:
- - kind: ServiceAccount
- name: argo-events-sa
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: argo-events-role
-rules:
- - apiGroups:
- - argoproj.io
- verbs:
- - create
- - delete
- - deletecollection
- - get
- - list
- - patch
- - update
- - watch
- resources:
- - workflows
- - workflows/finalizers
- - workflowtemplates
- - workflowtemplates/finalizers
- - gateways
- - gateways/finalizers
- - sensors
- - sensors/finalizers
- - eventsources
- - eventsources/finalizers
- - apiGroups:
- - ""
- resources:
- - pods
- - pods/exec
- - configmaps
- - secrets
- - services
- - events
- - persistentvolumeclaims
- verbs:
- - create
- - get
- - list
- - watch
- - update
- - patch
- - delete
- - apiGroups:
- - "batch"
- resources:
- - jobs
- verbs:
- - create
- - get
- - list
- - watch
- - update
- - patch
- - delete
- - apiGroups:
- - "apps"
- resources:
- - deployments
- verbs:
- - create
- - get
- - list
- - watch
- - update
- - patch
- - delete
----
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: gateway-controller-configmap
- namespace: kube-system
-data:
- config: |
- instanceID: argo-events
- namespace: kube-system
----
-# The gateway-controller listens for changes on the gateway CRD and creates gateway
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: gateway-controller
- namespace: kube-system
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: gateway-controller
- template:
- metadata:
- labels:
- app: gateway-controller
- spec:
- serviceAccountName: argo-events-sa
- containers:
- - name: gateway-controller
- image: argoproj/gateway-controller:v0.13.0
- imagePullPolicy: Always
- env:
- - name: NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: CONTROLLER_CONFIG_MAP
- value: gateway-controller-configmap
----
-# The sensor-controller configmap includes configuration information for the sensor-controller
-# To watch sensors created in different namespace than the controller is deployed in, remove the namespace: kube-system.
-# Similarly to watch sensors created in specific namespace, change to namespace: <your_namespace>
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: sensor-controller-configmap
- namespace: kube-system
-data:
- config: |
- instanceID: argo-events
- namespace: kube-system
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: sensor-controller
- namespace: kube-system
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: sensor-controller
- template:
- metadata:
- labels:
- app: sensor-controller
- spec:
- serviceAccountName: argo-events-sa
- containers:
- - name: sensor-controller
- image: argoproj/sensor-controller:v0.13.0
- imagePullPolicy: Always
- env:
- - name: NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: CONTROLLER_CONFIG_MAP
- value: sensor-controller-configmap
diff --git a/archive/argo/event-source.yaml b/archive/argo/event-source.yaml
deleted file mode 100644
index 23ec5ed..0000000
--- a/archive/argo/event-source.yaml
+++ /dev/null
@@ -1,48 +0,0 @@
-apiVersion: argoproj.io/v1alpha1
-kind: EventSource
-metadata:
- name: nats-event-source
-spec:
- type: nats
- nats:
- example:
- # url of the nats service
- url: nats://nats.svc:4222
- # jsonBody specifies that all event body payload coming from this
- # source will be JSON
- jsonBody: true
- # subject name
- subject: input-objects
- # optional backoff time for connection retries.
- # if not provided, default connection backoff time will be used.
- connectionBackoff:
- # duration in nanoseconds. following value is 10 seconds
- duration: 10000000000
- # how many backoffs
- steps: 5
- # factor to increase on each step.
- # setting factor > 1 makes backoff exponential.
- factor: 2
- jitter: 0.2
-
-# apiVersion: argoproj.io/v1alpha1
-# kind: EventSource
-# metadata:
-# name: minio-event-source
-# spec:
-# type: "minio"
-# minio:
-# example:
-# bucket:
-# name: input
-# endpoint: mio-minio.default.svc:9000
-# events:
-# - s3:ObjectCreated:Put
-# - s3:ObjectRemoved:Delete
-# insecure: true
-# accessKey:
-# key: accesskey
-# name: artifacts-minio
-# secretKey:
-# key: secretkey
-# name: artifacts-minio
\ No newline at end of file
diff --git a/archive/argo/gateway.yaml b/archive/argo/gateway.yaml
deleted file mode 100644
index b98baf4..0000000
--- a/archive/argo/gateway.yaml
+++ /dev/null
@@ -1,61 +0,0 @@
-apiVersion: argoproj.io/v1alpha1
-kind: Gateway
-metadata:
- name: nats-gateway
- labels:
- # gateway controller with instanceId "argo-events" will process this gateway
- gateways.argoproj.io/gateway-controller-instanceid: argo-events
-spec:
- type: nats
- eventSourceRef:
- name: nats-event-source
- template:
- metadata:
- name: nats-gateway
- labels:
- gateway-name: nats-gateway
- spec:
- containers:
- - name: gateway-client
- image: argoproj/gateway-client:v0.14.0
- imagePullPolicy: IfNotPresent
- command: ["/bin/gateway-client"]
- - name: nats-events
- image: argoproj/nats-gateway:v0.14.0
- imagePullPolicy: IfNotPresent
- command: ["/bin/nats-gateway"]
- serviceAccountName: argo-events-sa
- subscribers:
- http:
- - "http://nats-sensor.svc:9300/"
-
-
-# apiVersion: argoproj.io/v1alpha1
-# kind: Gateway
-# metadata:
-# name: minio-gateway
-# labels:
-# # gateway controller with instanceId "argo-events" will process this gateway
-# gateways.argoproj.io/gateway-controller-instanceid: argo-events
-# spec:
-# type: minio
-# eventSourceRef:
-# name: minio-event-source
-# template:
-# metadata:
-# name: minio-gateway
-# labels:
-# gateway-name: minio-gateway
-# spec:
-# containers:
-# - name: gateway-client
-# image: argoproj/gateway-client:v0.13.0
-# imagePullPolicy: Always
-# command: ["/bin/gateway-client"]
-# - name: minio-events
-# image: argoproj/artifact-gateway:v0.13.0
-# imagePullPolicy: Always
-# serviceAccountName: argo-events-sa
-# subscribers:
-# http:
-# - "http://minio-sensor.kube-system.svc:9300/"
diff --git a/archive/argo/install.yaml b/archive/argo/install.yaml
deleted file mode 100644
index c800f6a..0000000
--- a/archive/argo/install.yaml
+++ /dev/null
@@ -1,408 +0,0 @@
-# This is an auto-generated file. DO NOT EDIT
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: cronworkflows.argoproj.io
-spec:
- group: argoproj.io
- names:
- kind: CronWorkflow
- plural: cronworkflows
- shortNames:
- - cronwf
- - cwf
- scope: Namespaced
- version: v1alpha1
----
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: workflows.argoproj.io
-spec:
- additionalPrinterColumns:
- - JSONPath: .status.phase
- description: Status of the workflow
- name: Status
- type: string
- - JSONPath: .status.startedAt
- description: When the workflow was started
- format: date-time
- name: Age
- type: date
- group: argoproj.io
- names:
- kind: Workflow
- plural: workflows
- shortNames:
- - wf
- scope: Namespaced
- version: v1alpha1
----
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: workflowtemplates.argoproj.io
-spec:
- group: argoproj.io
- names:
- kind: WorkflowTemplate
- plural: workflowtemplates
- shortNames:
- - wftmpl
- scope: Namespaced
- version: v1alpha1
-# ---
-# apiVersion: v1
-# kind: ServiceAccount
-# metadata:
-# name: argo
-# ---
-# apiVersion: v1
-# kind: ServiceAccount
-# metadata:
-# name: argo-server
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
- name: argo-role
-rules:
-- apiGroups:
- - ""
- resources:
- - secrets
- verbs:
- - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- name: argo-aggregate-to-admin
-rules:
-- apiGroups:
- - argoproj.io
- resources:
- - workflows
- - workflows/finalizers
- - workflowtemplates
- - workflowtemplates/finalizers
- - cronworkflows
- - cronworkflows/finalizers
- verbs:
- - create
- - delete
- - deletecollection
- - get
- - list
- - patch
- - update
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: argo-aggregate-to-edit
-rules:
-- apiGroups:
- - argoproj.io
- resources:
- - workflows
- - workflows/finalizers
- - workflowtemplates
- - workflowtemplates/finalizers
- - cronworkflows
- - cronworkflows/finalizers
- verbs:
- - create
- - delete
- - deletecollection
- - get
- - list
- - patch
- - update
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: argo-aggregate-to-view
-rules:
-- apiGroups:
- - argoproj.io
- resources:
- - workflows
- - workflows/finalizers
- - workflowtemplates
- - workflowtemplates/finalizers
- - cronworkflows
- - cronworkflows/finalizers
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: argo-cluster-role
-rules:
-- apiGroups:
- - ""
- resources:
- - pods
- - pods/exec
- verbs:
- - create
- - get
- - list
- - watch
- - update
- - patch
- - delete
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - persistentvolumeclaims
- verbs:
- - create
- - delete
-- apiGroups:
- - argoproj.io
- resources:
- - workflows
- - workflows/finalizers
- verbs:
- - get
- - list
- - watch
- - update
- - patch
- - delete
- - create
-- apiGroups:
- - argoproj.io
- resources:
- - workflowtemplates
- - workflowtemplates/finalizers
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resources:
- - serviceaccounts
- verbs:
- - get
- - list
-- apiGroups:
- - argoproj.io
- resources:
- - cronworkflows
- - cronworkflows/finalizers
- verbs:
- - get
- - list
- - watch
- - update
- - patch
- - delete
-- apiGroups:
- - ""
- resources:
- - events
- verbs:
- - create
-- apiGroups:
- - policy
- resources:
- - poddisruptionbudgets
- verbs:
- - create
- - get
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- name: argo-server-cluster-role
-rules:
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - secrets
- verbs:
- - get
-- apiGroups:
- - ""
- resources:
- - pods
- - pods/exec
- - pods/log
- verbs:
- - get
- - list
- - watch
- - delete
-- apiGroups:
- - ""
- resources:
- - secrets
- verbs:
- - get
-- apiGroups:
- - argoproj.io
- resources:
- - workflows
- - workflowtemplates
- - cronworkflows
- verbs:
- - create
- - get
- - list
- - watch
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
-metadata:
- name: argo-binding
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: Role
- name: argo-role
-subjects:
-- kind: ServiceAccount
- name: default
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: argo-binding
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: argo-cluster-role
-subjects:
-- kind: ServiceAccount
- name: default
- namespace: pcloud
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- name: argo-server-binding
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: argo-server-cluster-role
-subjects:
-- kind: ServiceAccount
- name: default
- namespace: pcloud
----
-apiVersion: v1
-kind: ConfigMap
-metadata:
- name: workflow-controller-configmap
----
-apiVersion: v1
-kind: Service
-metadata:
- name: argo-server
-spec:
- ports:
- - port: 2746
- targetPort: 2746
- selector:
- app: argo-server
----
-apiVersion: v1
-kind: Service
-metadata:
- name: workflow-controller-metrics
-spec:
- ports:
- - port: 9090
- protocol: TCP
- targetPort: 9090
- selector:
- app: workflow-controller
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: argo-server
-spec:
- selector:
- matchLabels:
- app: argo-server
- template:
- metadata:
- labels:
- app: argo-server
- spec:
- containers:
- - args:
- - server
- image: argoproj/argocli:v2.7.4
- name: argo-server
- ports:
- - containerPort: 2746
- readinessProbe:
- httpGet:
- path: /
- port: 2746
- scheme: HTTP
- initialDelaySeconds: 10
- periodSeconds: 20
- serviceAccountName: default
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: workflow-controller
-spec:
- selector:
- matchLabels:
- app: workflow-controller
- template:
- metadata:
- labels:
- app: workflow-controller
- spec:
- containers:
- - args:
- - --configmap
- - workflow-controller-configmap
- - --executor-image
- - argoproj/argoexec:v2.7.4
- command:
- - workflow-controller
- image: argoproj/workflow-controller:v2.7.4
- name: workflow-controller
- serviceAccountName: default
\ No newline at end of file
diff --git a/archive/argo/mio-minio-secrets.yaml b/archive/argo/mio-minio-secrets.yaml
deleted file mode 100644
index c48d5ef..0000000
--- a/archive/argo/mio-minio-secrets.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-apiVersion: v1
-kind: Secret
-metadata:
- name: minio-credentials
-data:
- # base64 of minio
- accesskey: bWluaW8K
- # base64 of minio123
- secretkey: bWluaW8xMjMK
diff --git a/archive/argo/sensor.yaml b/archive/argo/sensor.yaml
deleted file mode 100644
index 6918bd5..0000000
--- a/archive/argo/sensor.yaml
+++ /dev/null
@@ -1,138 +0,0 @@
-apiVersion: argoproj.io/v1alpha1
-kind: Sensor
-metadata:
- name: nats-sensor
- labels:
- sensors.argoproj.io/sensor-controller-instanceid: argo-events
-spec:
- template:
- spec:
- containers:
- - name: sensor
- image: argoproj/sensor:v0.14.0
- imagePullPolicy: IfNotPresent
- serviceAccountName: argo-events-sa
- subscription:
- http:
- port: 9300
- dependencies:
- - name: test-dep
- gatewayName: nats-gateway
- eventName: example
- triggers:
- - template:
- name: nats-workflow-trigger
- k8s:
- group: argoproj.io
- version: v1alpha1
- resource: workflows
- operation: create
- source:
- resource:
- apiVersion: argoproj.io/v1alpha1
- kind: Workflow
- metadata:
- generateName: nats-workflow-
- spec:
- entrypoint: whalesay
- arguments:
- parameters:
- - name: message
- value: WILL_BE_REPLACED
- templates:
- - name: whalesay
- inputs:
- parameters:
- - name: message
- container:
- image: docker/whalesay:latest
- imagePyllPolicy: IfNotPresent
- command: [cowsay]
- args: ["{{inputs.parameters.message}}"]
- parameters:
- - src:
- dependencyName: test-dep
- dest: spec.arguments.parameters.0.value
-
-
-# apiVersion: argoproj.io/v1alpha1
-# kind: Sensor
-# metadata:
-# name: minio-sensor
-# labels:
-# # sensor controller with instanceId "argo-events" will process this sensor
-# sensors.argoproj.io/sensor-controller-instanceid: argo-events
-# spec:
-# template:
-# spec:
-# containers:
-# - name: sensor
-# image: argoproj/sensor:v0.13.0
-# imagePullPolicy: Always
-# serviceAccountName: argo-events-sa
-# subscription:
-# http:
-# port: 9300
-# dependencies:
-# - name: test-dep
-# gatewayName: minio-gateway
-# eventName: example
-# triggers:
-# - template:
-# name: minio-workflow-trigger
-# k8s:
-# group: argoproj.io
-# version: v1alpha1
-# resource: workflows
-# operation: create
-# source:
-# resource:
-# apiVersion: argoproj.io/v1alpha1
-# kind: Workflow
-# metadata:
-# generateName: artifact-workflow-2-
-# spec:
-# entrypoint: detect
-# templates:
-# - name: detect
-# inputs:
-# artifacts:
-# - name: input-image
-# path: /input
-# s3:
-# # endpoint: mio-minio.default.svc:9000
-# # bucket: input # change
-# key: harry.jpg
-# # insecure: true
-# # accessKeySecret:
-# # key: accessKey
-# # name: artifacts-minio
-# # secretKeySecret:
-# # key: secretKey
-# # name: artifacts-minio
-# # useSDKCreds: true
-# # outputs:
-# # artifacts:
-# # - name: output-image
-# # path: /output
-# # s3:
-# # endpoint: mio-minio.default.svc:9000
-# # bucket: output # change
-# # key: PARAMETER
-# # insecure: true
-# # accessKeySecret:
-# # key: accessKey
-# # name: artifacts-minio
-# # secretKeySecret:
-# # key: secretKey
-# # name: artifacts-minio
-# # useSDKCreds: true
-# container:
-# image: face:latest
-# command: [python face.py]
-# args: ["/input", "/output"]
-# # parameters:
-# # - src:
-# # dependencyName: test-dep
-# # dataKey: notification.0.s3.object.key
-# # dest: spec.templates.0.inputs.artifacts.0.s3.key
diff --git a/archive/argo/setup.sh b/archive/argo/setup.sh
deleted file mode 100644
index 7d6cc53..0000000
--- a/archive/argo/setup.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/bin/sh
-
-# kubectl create namespace argo
-kubectl apply -n pcloud -f install.yaml
-
-# kubectl apply -n kube-system -f mio-minio-secrets.yaml
-
-
-# helm repo add argo https://argoproj.github.io/argo-helm
-# helm install my-argo --namespace kube-system argo/argo
-# read -s
-# kubectl -n kube-system port-forward deployment/my-argo-server 2746 &
-# read -s
-
-#kubectl apply -n kube-system -f argo-events-crds-install.yaml
-#read -s
-
-
-#kubectl apply -n kube-system -f event-source.yaml
-#kubectl apply -n kube-system -f gateway.yaml
-#kubectl apply -n kube-system -f sensor.yaml
diff --git a/archive/nats/deployment.yaml b/archive/nats/deployment.yaml
deleted file mode 100644
index 66418cb..0000000
--- a/archive/nats/deployment.yaml
+++ /dev/null
@@ -1,15 +0,0 @@
----
-apiVersion: "nats.io/v1alpha2"
-kind: "NatsCluster"
-metadata:
- name: "nats"
-spec:
- size: 1
----
-apiVersion: "streaming.nats.io/v1alpha1"
-kind: "NatsStreamingCluster"
-metadata:
- name: "nats-streaming"
-spec:
- size: 2
- natsSvc: "nats"
\ No newline at end of file
diff --git a/archive/nats/setup.sh b/archive/nats/setup.sh
deleted file mode 100644
index e988ea3..0000000
--- a/archive/nats/setup.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-# kubectl apply -f https://github.com/nats-io/nats-operator/releases/download/v0.5.0/00-prereqs.yaml
-# kubectl apply -f https://github.com/nats-io/nats-operator/releases/download/v0.5.0/10-deployment.yaml
-
-# # Install NATS Streaming Operator on default namespace
-# kubectl apply -f https://raw.githubusercontent.com/nats-io/nats-streaming-operator/master/deploy/default-rbac.yaml
-
-# kubectl apply -f https://raw.githubusercontent.com/nats-io/nats-streaming-operator/master/deploy/deployment.yaml
-
-# sleep 10
-
-kubectl apply -f deployment.yaml
diff --git a/archive/pfs/Dockerfile b/archive/pfs/Dockerfile
deleted file mode 100644
index 5984a5f..0000000
--- a/archive/pfs/Dockerfile
+++ /dev/null
@@ -1,30 +0,0 @@
-FROM ubuntu:latest
-
-RUN apt-get update --fix-missing
-RUN apt-get -y upgrade
-RUN apt-get -y install wget git bash unzip
-
-WORKDIR /tmp
-RUN wget https://dl.google.com/go/go1.14.linux-amd64.tar.gz
-RUN tar -xvf go1.14.linux-amd64.tar.gz
-RUN mv go /usr/local
-RUN rm go1.14.linux-amd64.tar.gz
-
-ENV GOROOT=/usr/local/go
-ENV GOPATH=/src/go
-ENV GOBIN=$GOPATH/bin
-ENV PATH=$GOBIN:$GOROOT/bin:$PATH
-
-RUN go get -u google.golang.org/grpc
-
-WORKDIR /src/protoc
-RUN wget https://github.com/protocolbuffers/protobuf/releases/download/v3.11.4/protoc-3.11.4-linux-x86_64.zip
-RUN unzip protoc-3.11.4-linux-x86_64.zip
-RUN rm protoc-3.11.4-linux-x86_64.zip
-ENV PATH=/src/protoc/bin:$PATH
-
-RUN go get -u github.com/golang/protobuf/protoc-gen-go
-RUN go get -u google.golang.org/protobuf/encoding/prototext
-RUN go get -u github.com/google/uuid
-
-WORKDIR /src/go/src/github.com/giolekva/pcloud/pfs
diff --git a/archive/pfs/api/api.proto b/archive/pfs/api/api.proto
deleted file mode 100644
index 56a8e9e..0000000
--- a/archive/pfs/api/api.proto
+++ /dev/null
@@ -1,132 +0,0 @@
-syntax = "proto3";
-
-package pcloud.api;
-
-option go_package = "api";
-
-enum ChunkStatus {
- NEW = 0;
- CREATED = 1;
- WRITING = 2;
- REPLICATING = 3;
- READY = 4;
-}
-
-enum ReplicaRole {
- SECONDARY = 0;
- PRIMARY = 1;
-}
-
-// ChunkStorage
-
-service ChunkStorage {
- rpc ListChunks(ListChunksRequest) returns (ListChunksResponse) {}
-
- rpc CreateChunk(CreateChunkRequest) returns (CreateChunkResponse) {}
-
- rpc GetChunkStatus(GetChunkStatusRequest) returns (GetChunkStatusResponse) {}
-
- rpc ReadChunk(ReadChunkRequest) returns (ReadChunkResponse) {}
-
- rpc WriteChunk(WriteChunkRequest) returns (WriteChunkResponse) {}
-
- rpc RemoveChunk(RemoveChunkRequest) returns (RemoveChunkResponse) {}
-}
-
-message ListChunksRequest {
-}
-
-message ListChunksResponse {
- repeated string chunk_id = 1;
-}
-
-message CreateChunkRequest {
- string chunk_id = 1;
- int32 size = 2;
- ReplicaRole role = 3;
- string primary_address = 4;
-}
-
-message CreateChunkResponse {
-}
-
-message GetChunkStatusRequest {
- string chunk_id = 1;
-}
-
-message GetChunkStatusResponse {
- ChunkStatus status = 1;
- int32 total_bytes = 2;
- int32 committed_bytes = 3;
-}
-
-message ReadChunkRequest {
- string chunk_id = 1;
- int32 offset = 2;
- int32 num_bytes = 3;
-}
-
-message ReadChunkResponse {
- bytes data = 1;
-}
-
-message WriteChunkRequest {
- string chunk_id = 1;
- int32 offset = 2;
- bytes data = 3;
-}
-
-message WriteChunkResponse {
- int32 bytes_written = 1;
-}
-
-message RemoveChunkRequest {
- string chunk_id = 1;
-}
-
-message RemoveChunkResponse {
-}
-
-// MetadataStorage
-
-message ChunkStorageMetadata {
- string chunk_id = 1;
- int32 size_bytes = 2;
- repeated string server = 3;
-}
-
-service MetadataStorage {
- rpc AddChunkServer(AddChunkServerRequest) returns (AddChunkServerResponse) {}
-
- rpc CreateBlob(CreateBlobRequest) returns (CreateBlobResponse) {}
-
- rpc GetBlobMetadata(GetBlobMetadataRequest) returns (GetBlobMetadataResponse) {}
-}
-
-message AddChunkServerRequest {
- string address = 1;
-}
-
-message AddChunkServerResponse {
-}
-
-message CreateBlobRequest {
- int32 size_bytes = 1;
- int32 chunk_size_bytes = 2;
- int32 num_replicas = 3;
-}
-
-message CreateBlobResponse {
- string blob_id = 1;
- repeated ChunkStorageMetadata chunk = 2;
-}
-
-message GetBlobMetadataRequest {
- string blob_id = 1;
-}
-
-message GetBlobMetadataResponse {
- string blob_id = 1;
- int32 size_bytes = 2;
- repeated ChunkStorageMetadata chunk = 3;
-}
\ No newline at end of file
diff --git a/archive/pfs/api/client.go b/archive/pfs/api/client.go
deleted file mode 100644
index 3e05de6..0000000
--- a/archive/pfs/api/client.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package api
-
-import (
- "google.golang.org/grpc"
-)
-
-func DialConn(address string) (*grpc.ClientConn, error) {
- var opts []grpc.DialOption
- opts = append(opts, grpc.WithInsecure())
- opts = append(opts, grpc.WithBlock())
- return grpc.Dial(address, opts...)
-}
diff --git a/archive/pfs/chunk/chunk.go b/archive/pfs/chunk/chunk.go
deleted file mode 100644
index aaa1bfb..0000000
--- a/archive/pfs/chunk/chunk.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package chunk
-
-import (
- "io"
-
- "github.com/giolekva/pcloud/pfs/api"
-)
-
-type ChunkInfo struct {
- Status api.ChunkStatus
- Size int
- Committed int
-}
-
-type Chunk interface {
- Stats() (ChunkInfo, error)
- ReaderAt() io.ReaderAt
- WriterAt() io.WriterAt
-}
-
-type ChunkFactory interface {
- New(size int) Chunk
-}
diff --git a/archive/pfs/chunk/file.go b/archive/pfs/chunk/file.go
deleted file mode 100644
index 3502a50..0000000
--- a/archive/pfs/chunk/file.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package chunk
-
-import (
- "io"
- "os"
-
- "github.com/giolekva/pcloud/pfs/api"
-)
-
-type ReadOnlyFileChunk struct {
- f *os.File
- offset int
- size int
-}
-
-func NewReadOnlyFileChunk(f *os.File, offset, size int) Chunk {
- return &ReadOnlyFileChunk{f, offset, size}
-}
-
-func (c *ReadOnlyFileChunk) Stats() (ChunkInfo, error) {
- return ChunkInfo{
- Status: api.ChunkStatus_READY,
- Size: c.size,
- Committed: c.size}, nil
-}
-
-func (c *ReadOnlyFileChunk) ReaderAt() io.ReaderAt {
- return &fileReader{c.f}
-}
-
-func (c *ReadOnlyFileChunk) WriterAt() io.WriterAt {
- return &fileWriter{c.f}
-}
-
-type fileReader struct {
- f *os.File
-}
-
-func (f *fileReader) ReadAt(b []byte, offset int64) (int, error) {
- return f.f.ReadAt(b, offset)
-}
-
-type fileWriter struct {
- f *os.File
-}
-
-func (f *fileWriter) WriteAt(b []byte, offset int64) (int, error) {
- return f.f.WriteAt(b, offset)
-}
diff --git a/archive/pfs/chunk/in_memory.go b/archive/pfs/chunk/in_memory.go
deleted file mode 100644
index b9b55ec..0000000
--- a/archive/pfs/chunk/in_memory.go
+++ /dev/null
@@ -1,68 +0,0 @@
-package chunk
-
-import (
- "bytes"
- "errors"
- "io"
-
- "github.com/giolekva/pcloud/pfs/api"
-)
-
-type InMemoryChunk struct {
- status api.ChunkStatus
- payload []byte
- committed int
-}
-
-func (c *InMemoryChunk) Stats() (ChunkInfo, error) {
- return ChunkInfo{c.status, len(c.payload), c.committed}, nil
-}
-
-func (c *InMemoryChunk) ReaderAt() io.ReaderAt {
- return bytes.NewReader(c.payload[:c.committed])
-}
-
-func (c *InMemoryChunk) WriterAt() io.WriterAt {
- return &byteWriter{c}
-}
-
-type byteWriter struct {
- c *InMemoryChunk
-}
-
-func (w *byteWriter) WriteAt(p []byte, offset int64) (n int, err error) {
- if int(offset) > w.c.committed {
- panic(1)
- return 0, errors.New("Gaps are not allowed when writing in chunks")
- }
- if int(offset) < w.c.committed {
- if int(offset)+len(p) <= w.c.committed {
- if bytes.Compare(w.c.payload[int(offset):int(offset)+len(p)], p) != 0 {
- panic(2)
- return 0, errors.New("Can not change contents of allready committed chunk bytes")
- }
- panic(3)
- return len(p), nil
- }
- n = w.c.committed - int(offset)
- p = p[n:]
- offset = int64(w.c.committed)
- }
- if w.c.committed+len(p) > len(w.c.payload) {
- panic(4)
- return 0, errors.New("In memory chunk does not have enough space available")
- }
- n += copy(w.c.payload[w.c.committed:], p)
- w.c.committed += n
- return
-}
-
-type InMemoryChunkFactory struct {
-}
-
-func (f InMemoryChunkFactory) New(size int) Chunk {
- return &InMemoryChunk{
- status: api.ChunkStatus_CREATED,
- payload: make([]byte, size),
- committed: 0}
-}
diff --git a/archive/pfs/chunk/in_memory_test.go b/archive/pfs/chunk/in_memory_test.go
deleted file mode 100644
index b9711ca..0000000
--- a/archive/pfs/chunk/in_memory_test.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package chunk
-
-import (
- "bytes"
- "testing"
-)
-
-func TestConcurrentReads(t *testing.T) {
- c := InMemoryChunkFactory{}.New(4)
- if _, err := c.WriterAt().WriteAt([]byte("abcd"), 0); err != nil {
- panic(err)
- }
- d1 := make([]byte, 2)
- d2 := make([]byte, 3)
- if _, err := c.ReaderAt().ReadAt(d1, 0); err != nil {
- t.Error(err)
- }
- if bytes.Compare(d1, []byte("ab")) != 0 {
- t.Errorf("Expected: %s\nActual: %s", "ab", d1)
- }
- if _, err := c.ReaderAt().ReadAt(d2, 0); err != nil {
- t.Error(err)
- }
- if bytes.Compare(d2, []byte("abc")) != 0 {
- t.Errorf("Expected: %s\nActual: %s", "abc", d2)
- }
-}
diff --git a/archive/pfs/chunk/remote.go b/archive/pfs/chunk/remote.go
deleted file mode 100644
index 6d84241..0000000
--- a/archive/pfs/chunk/remote.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package chunk
-
-import (
- "context"
- "io"
-
- "github.com/giolekva/pcloud/pfs/api"
-)
-
-type RemoteChunk struct {
- chunkId string
- client api.ChunkStorageClient
-}
-
-func (r *RemoteChunk) Stats() (info ChunkInfo, err error) {
- resp, err := r.client.GetChunkStatus(
- context.Background(),
- &api.GetChunkStatusRequest{ChunkId: r.chunkId})
- if err != nil {
- return
- }
- info = ChunkInfo{
- resp.Status,
- int(resp.TotalBytes),
- int(resp.CommittedBytes)}
- return
-}
-
-func (r *RemoteChunk) ReaderAt() io.ReaderAt {
- return &remoteChunkReaderAt{
- chunkId: r.chunkId,
- client: r.client}
-}
-
-func (r *RemoteChunk) WriterAt() io.WriterAt {
- return &remoteChunkWriterAt{
- chunkId: r.chunkId,
- client: r.client}
-}
-
-type remoteChunkReaderAt struct {
- chunkId string
- client api.ChunkStorageClient
-}
-
-func (c *remoteChunkReaderAt) ReadAt(p []byte, offset int64) (n int, err error) {
- req := api.ReadChunkRequest{
- ChunkId: c.chunkId,
- Offset: int32(offset),
- NumBytes: int32(len(p))}
- resp, err := c.client.ReadChunk(context.Background(), &req)
- if err != nil {
- return
- }
- n = copy(p, resp.Data)
- return
-}
-
-type remoteChunkWriterAt struct {
- chunkId string
- client api.ChunkStorageClient
-}
-
-func (c *remoteChunkWriterAt) WriteAt(p []byte, offset int64) (n int, err error) {
- req := api.WriteChunkRequest{
- ChunkId: c.chunkId,
- Offset: int32(offset),
- Data: p}
- resp, err := c.client.WriteChunk(context.Background(), &req)
- if resp != nil {
- n = int(resp.BytesWritten)
- }
- return
-}
diff --git a/archive/pfs/chunk/replicator.go b/archive/pfs/chunk/replicator.go
deleted file mode 100644
index d8990a7..0000000
--- a/archive/pfs/chunk/replicator.go
+++ /dev/null
@@ -1,116 +0,0 @@
-package chunk
-
-import (
- "context"
- "io"
-
- "google.golang.org/grpc"
-
- "github.com/giolekva/pcloud/pfs/api"
-)
-
-type ReplicaAssignmentChangeListener interface {
- Primary(chunkId, currentPrimary string) <-chan string
-}
-
-type PrimaryReplicaChangeListener interface {
- ChunkId() string
- Address() <-chan string
-}
-
-type NonChangingReplicaAssignment struct {
-}
-
-func (l *NonChangingReplicaAssignment) Primary(chunkId, address string) <-chan string {
- ch := make(chan string, 1)
- ch <- address
- return ch
-}
-
-func replicate(ctx context.Context, dst, src Chunk, done chan<- int) {
- dstInfo, err := dst.Stats()
- if err != nil {
- panic(err)
- }
- inp := src.ReaderAt()
- replicated := dstInfo.Committed
- out := dst.WriterAt()
- for {
- select {
- default:
- p := make([]byte, 100)
- n, err := inp.ReadAt(p, int64(replicated))
- if n > 0 {
- m, _ := out.WriteAt(p[:n], int64(replicated))
- replicated += m
- }
- if err == io.EOF {
- done <- 1
- return
- }
-
- case <-ctx.Done():
- return
- }
- }
-}
-
-func ReplicateFromPrimary(ctx context.Context, chunkId string, dst Chunk, primaryAddressCh <-chan string) {
- var done chan int
- var cancel context.CancelFunc = nil
- for {
- select {
- case <-done:
- return
- case <-ctx.Done():
- return
- case address := <-primaryAddressCh:
- if cancel != nil {
- cancel()
- }
- var opts []grpc.DialOption
- opts = append(opts, grpc.WithInsecure())
- opts = append(opts, grpc.WithBlock())
- conn, err := grpc.Dial(address, opts...)
- if err == nil {
- continue
- }
- client := api.NewChunkStorageClient(conn)
- src := RemoteChunk{chunkId, client}
- replicatorCtx, cancelFn := context.WithCancel(context.Background())
- cancel = cancelFn
- done = make(chan int, 1)
- go replicate(replicatorCtx, dst, &src, done)
- }
- }
-}
-
-func WriteToPrimary(ctx context.Context, chunkId string, src Chunk, primaryAddressCh <-chan string) {
- var done chan int
- var cancel context.CancelFunc = nil
- for {
- select {
- case <-done:
- return
- case <-ctx.Done():
- return
- case address := <-primaryAddressCh:
- if cancel != nil {
- cancel()
- }
- var opts []grpc.DialOption
- opts = append(opts, grpc.WithInsecure())
- opts = append(opts, grpc.WithBlock())
- conn, err := grpc.Dial(address, opts...)
- if err != nil {
- continue
- }
- client := api.NewChunkStorageClient(conn)
- dst := RemoteChunk{chunkId, client}
- replicatorCtx, cancelFn := context.WithCancel(context.Background())
- cancel = cancelFn
- done = make(chan int, 1)
- go replicate(replicatorCtx, &dst, src, done)
- }
- }
-}
diff --git a/archive/pfs/chunk/server.go b/archive/pfs/chunk/server.go
deleted file mode 100644
index d619f13..0000000
--- a/archive/pfs/chunk/server.go
+++ /dev/null
@@ -1,123 +0,0 @@
-package chunk
-
-import (
- "context"
- "fmt"
- "log"
-
- "sync"
-
- "github.com/giolekva/pcloud/pfs/api"
-)
-
-type ChunkServer struct {
- factory ChunkFactory
- assignmentChangeLis ReplicaAssignmentChangeListener
- chunks sync.Map
- replicatorCancel sync.Map
-}
-
-func NewChunkServer(factory ChunkFactory,
- assignmentChangeLis ReplicaAssignmentChangeListener) *ChunkServer {
- return &ChunkServer{
- factory: factory,
- assignmentChangeLis: assignmentChangeLis}
-}
-
-func (s *ChunkServer) ListChunks(
- ctx context.Context,
- req *api.ListChunksRequest) (resp *api.ListChunksResponse, err error) {
- resp = &api.ListChunksResponse{}
- s.chunks.Range(func(k, v interface{}) bool {
- resp.ChunkId = append(resp.ChunkId, k.(string))
- return true
- })
- return
-}
-
-func (s *ChunkServer) CreateChunk(
- ctx context.Context,
- req *api.CreateChunkRequest) (resp *api.CreateChunkResponse, err error) {
- chunk := s.factory.New(int(req.Size))
- s.chunks.Store(req.ChunkId, chunk)
- switch req.Role {
- case api.ReplicaRole_SECONDARY:
- ctx, cancel := context.WithCancel(context.Background())
- s.replicatorCancel.Store(req.ChunkId, cancel)
- primaryAddressCh := s.assignmentChangeLis.Primary(
- req.ChunkId, req.PrimaryAddress)
- go ReplicateFromPrimary(ctx, req.ChunkId, chunk, primaryAddressCh)
- case api.ReplicaRole_PRIMARY:
- {
- }
- }
- resp = &api.CreateChunkResponse{}
- log.Printf("Created chunk: %s\n", req.ChunkId)
- return
-
-}
-
-func (s *ChunkServer) GetChunkStatus(
- ctx context.Context,
- req *api.GetChunkStatusRequest) (resp *api.GetChunkStatusResponse, err error) {
- if chunk, ok := s.chunks.Load(req.ChunkId); ok {
- c := chunk.(Chunk)
- var info ChunkInfo
- info, err = c.Stats()
- if err != nil {
- return
- }
- resp = &api.GetChunkStatusResponse{
- Status: info.Status,
- TotalBytes: int32(info.Size),
- CommittedBytes: int32(info.Committed)}
- return
- }
- return nil, fmt.Errorf("Could not fund chunk: %s", req.ChunkId)
-}
-
-func (s *ChunkServer) ReadChunk(
- ctx context.Context,
- req *api.ReadChunkRequest) (resp *api.ReadChunkResponse, err error) {
- if value, ok := s.chunks.Load(req.ChunkId); ok {
- chunk := value.(Chunk)
- b := make([]byte, req.NumBytes)
- var n int
- n, err = chunk.ReaderAt().ReadAt(b, int64(req.Offset))
- if n == 0 {
- return
- }
- return &api.ReadChunkResponse{Data: b[:n]}, nil
-
- } else {
- return nil, fmt.Errorf("Chunk not found: %s", req.ChunkId)
- }
-}
-
-func (s *ChunkServer) WriteChunk(
- ctx context.Context,
- req *api.WriteChunkRequest) (resp *api.WriteChunkResponse, err error) {
- if value, ok := s.chunks.Load(req.ChunkId); ok {
- chunk := value.(Chunk)
- var n int
- n, err = chunk.WriterAt().WriteAt(req.Data, int64(req.Offset))
- if n == 0 {
- return
- }
- return &api.WriteChunkResponse{BytesWritten: int32(n)}, nil
-
- } else {
- return nil, fmt.Errorf("Chunk not found: %s", req.ChunkId)
- }
-}
-
-func (s *ChunkServer) RemoveChunk(
- ctx context.Context,
- req *api.RemoveChunkRequest) (resp *api.RemoveChunkResponse, err error) {
- if cancel, ok := s.replicatorCancel.Load(req.ChunkId); ok {
- cancel.(context.CancelFunc)()
- s.replicatorCancel.Delete(req.ChunkId)
- }
- s.chunks.Delete(req.ChunkId)
- return &api.RemoveChunkResponse{}, nil
-}
diff --git a/archive/pfs/chunk/server_test.go b/archive/pfs/chunk/server_test.go
deleted file mode 100644
index 9549a06..0000000
--- a/archive/pfs/chunk/server_test.go
+++ /dev/null
@@ -1,103 +0,0 @@
-package chunk
-
-import (
- "bytes"
- "context"
- "testing"
-
- "github.com/giolekva/pcloud/pfs/api"
-)
-
-func TestStoreChunk(t *testing.T) {
- s := ChunkServer{factory: &InMemoryChunkFactory{}}
- _, err := s.CreateChunk(context.Background(), &api.CreateChunkRequest{
- ChunkId: "foo",
- Size: 11,
- Role: api.ReplicaRole_PRIMARY})
- if err != nil {
- t.Error(err)
- }
- _, err = s.WriteChunk(context.Background(), &api.WriteChunkRequest{
- ChunkId: "foo",
- Offset: 0,
- Data: []byte("hello world")})
- if err != nil {
- t.Error(err)
- }
-}
-
-func TestStoreAndReadChunk(t *testing.T) {
- s := ChunkServer{factory: &InMemoryChunkFactory{}}
- _, err := s.CreateChunk(context.Background(), &api.CreateChunkRequest{
- ChunkId: "foo",
- Size: 11,
- Role: api.ReplicaRole_PRIMARY})
- if err != nil {
- t.Error(err)
- }
- _, err = s.WriteChunk(context.Background(), &api.WriteChunkRequest{
- ChunkId: "foo",
- Offset: 0,
- Data: []byte("hello world")})
- if err != nil {
- t.Error(err)
- }
- resp, err := s.ReadChunk(context.Background(), &api.ReadChunkRequest{
- ChunkId: "foo",
- NumBytes: 100})
- if err != nil {
- t.Error(err)
- }
- if bytes.Compare(resp.Data, []byte("hello world")) != 0 {
- t.Errorf("Expected: %s\nGot: %s\n", "hello world", resp.Data)
- }
-}
-
-func TestReadWithOffsets(t *testing.T) {
- s := ChunkServer{factory: &InMemoryChunkFactory{}}
- _, err := s.CreateChunk(context.Background(), &api.CreateChunkRequest{
- ChunkId: "foo",
- Size: 11,
- Role: api.ReplicaRole_PRIMARY})
- if err != nil {
- t.Error(err)
- }
- _, err = s.WriteChunk(context.Background(), &api.WriteChunkRequest{
- ChunkId: "foo",
- Offset: 0,
- Data: []byte("hello world")})
- if err != nil {
- t.Error(err)
- }
- resp, err := s.ReadChunk(context.Background(), &api.ReadChunkRequest{
- ChunkId: "foo",
- Offset: 0,
- NumBytes: 2})
- if err != nil {
- t.Error(err)
- }
- if bytes.Compare(resp.Data, []byte("he")) != 0 {
- t.Errorf("Expected: %s\nGot: %s\n", "he", resp.Data)
- }
- resp, err = s.ReadChunk(context.Background(), &api.ReadChunkRequest{
- ChunkId: "foo",
- Offset: 2,
- NumBytes: 2})
- if err != nil {
- t.Error(err)
- }
- if bytes.Compare(resp.Data, []byte("ll")) != 0 {
- t.Errorf("Expected: %s\nGot: %s\n", "ll", resp.Data)
- }
- resp, err = s.ReadChunk(context.Background(), &api.ReadChunkRequest{
- ChunkId: "foo",
- Offset: 4,
- NumBytes: 100})
- if err != nil {
- t.Error(err)
- }
- if bytes.Compare(resp.Data, []byte("o world")) != 0 {
- t.Errorf("Expected: %s\nGot: %s\n", "o world", resp.Data)
- }
-
-}
diff --git a/archive/pfs/chunk_server.go b/archive/pfs/chunk_server.go
deleted file mode 100644
index 04a266e..0000000
--- a/archive/pfs/chunk_server.go
+++ /dev/null
@@ -1,55 +0,0 @@
-package main
-
-import (
- "context"
- "flag"
- "fmt"
- "log"
- "net"
- "time"
-
- "google.golang.org/grpc"
-
- "github.com/giolekva/pcloud/pfs/api"
- "github.com/giolekva/pcloud/pfs/chunk"
-)
-
-var controllerAddress = flag.String("controller", "localhost:123", "Metadata storage address.")
-var selfAddress = flag.String("self", "", "Metadata storage address.")
-
-func main() {
- flag.Parse()
- log.Print("Chunk server starting")
-
- // Create Master server client.
- var opts []grpc.DialOption
- opts = append(opts, grpc.WithInsecure())
- opts = append(opts, grpc.WithBlock())
- conn, err := grpc.Dial(*controllerAddress, opts...)
- if err != nil {
- log.Fatalf("Failed to dial %s: %v", *controllerAddress, err)
- }
- defer conn.Close()
- client := api.NewMetadataStorageClient(conn)
-
- // Register current Chunk server with Master.
- ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
- _, err = client.AddChunkServer(
- ctx,
- &api.AddChunkServerRequest{Address: *selfAddress})
- if err != nil {
- log.Fatalf("failed to register chunk server: %v", err)
- }
- log.Print("Registered myself")
-
- // Start RPC server
- lis, err := net.Listen("tcp", fmt.Sprintf(":%d", 234))
- if err != nil {
- log.Fatalf("failed to listen: %v", err)
- }
- server := grpc.NewServer()
- api.RegisterChunkStorageServer(server, chunk.NewChunkServer(
- &chunk.InMemoryChunkFactory{},
- &chunk.NonChangingReplicaAssignment{}))
- server.Serve(lis)
-}
diff --git a/archive/pfs/client.go b/archive/pfs/client.go
deleted file mode 100644
index 2abb47f..0000000
--- a/archive/pfs/client.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package main
-
-import (
- "flag"
- "log"
- "os"
-
- "google.golang.org/grpc"
-
- "github.com/giolekva/pcloud/pfs/api"
- "github.com/giolekva/pcloud/pfs/client"
-)
-
-var controllerAddress = flag.String("controller", "localhost:123", "Metadata storage address.")
-var fileToUpload = flag.String("file", "", "File path to upload.")
-
-func main() {
- flag.Parse()
-
- var opts []grpc.DialOption
- opts = append(opts, grpc.WithInsecure())
- opts = append(opts, grpc.WithBlock())
- conn, err := grpc.Dial(*controllerAddress, opts...)
- if err != nil {
- log.Fatalf("Failed to dial %s: %v", *controllerAddress, err)
- }
- defer conn.Close()
- uploader := client.NewFileUploader(api.NewMetadataStorageClient(conn))
-
- f, err := os.Open(*fileToUpload)
- if err != nil {
- panic(err)
- }
-
- uploader.Upload(f)
-}
diff --git a/archive/pfs/client/client.go b/archive/pfs/client/client.go
deleted file mode 100644
index a8492a3..0000000
--- a/archive/pfs/client/client.go
+++ /dev/null
@@ -1,43 +0,0 @@
-package client
-
-import (
- "context"
- "os"
-
- "github.com/giolekva/pcloud/pfs/api"
- "github.com/giolekva/pcloud/pfs/chunk"
-)
-
-type FileUploader struct {
- client api.MetadataStorageClient
-}
-
-func NewFileUploader(client api.MetadataStorageClient) *FileUploader {
- return &FileUploader{client}
-}
-
-func (fu *FileUploader) Upload(f *os.File, numReplicas int) {
- info, err := f.Stat()
- if err != nil {
- return
- }
- resp, err := fu.client.CreateBlob(
- context.Background(), &api.CreateBlobRequest{
- SizeBytes: int32(info.Size()),
- NumReplicas: int32(numReplicas)})
- if err != nil {
- panic(err)
- }
- if len(resp.Chunk) != 1 {
- panic(resp)
- }
- lis := &chunk.NonChangingReplicaAssignment{}
- primaryAddressCh := lis.Primary(
- resp.Chunk[0].ChunkId,
- resp.Chunk[0].Server[0])
- chunk.WriteToPrimary(
- context.Background(),
- resp.Chunk[0].ChunkId,
- chunk.NewReadOnlyFileChunk(f, 0, int(info.Size())),
- primaryAddressCh)
-}
diff --git a/archive/pfs/client/client_test.go b/archive/pfs/client/client_test.go
deleted file mode 100644
index b9f3002..0000000
--- a/archive/pfs/client/client_test.go
+++ /dev/null
@@ -1,62 +0,0 @@
-package client
-
-import (
- "os"
- "testing"
-
- "google.golang.org/grpc"
-
- "github.com/giolekva/pcloud/pfs/api"
- pt "github.com/giolekva/pcloud/pfs/testing"
-)
-
-func TestUploadSmallFile(t *testing.T) {
- env, err := pt.NewInMemoryEnv(1)
- if err != nil {
- t.Error(err)
- }
- defer env.Stop()
-
- var opts []grpc.DialOption
- opts = append(opts, grpc.WithInsecure())
- opts = append(opts, grpc.WithBlock())
- conn, err := grpc.Dial("unix:///tmp/pcloud/controller", opts...)
- if err != nil {
- t.Error(err)
- }
- defer conn.Close()
- client := api.NewMetadataStorageClient(conn)
-
- uploader := NewFileUploader(client)
- f, err := os.Open("testdata/foo")
- if err != nil {
- t.Error(err)
- }
- uploader.Upload(f, 1)
-
-}
-
-func TestUploadSmallFileWithReplication(t *testing.T) {
- env, err := pt.NewInMemoryEnv(3)
- if err != nil {
- t.Error(err)
- }
- defer env.Stop()
-
- var opts []grpc.DialOption
- opts = append(opts, grpc.WithInsecure())
- opts = append(opts, grpc.WithBlock())
- conn, err := grpc.Dial("unix:///tmp/pcloud/controller", opts...)
- if err != nil {
- t.Error(err)
- }
- defer conn.Close()
- client := api.NewMetadataStorageClient(conn)
-
- uploader := NewFileUploader(client)
- f, err := os.Open("testdata/foo")
- if err != nil {
- t.Error(err)
- }
- uploader.Upload(f, 2)
-}
diff --git a/archive/pfs/client/testdata/foo b/archive/pfs/client/testdata/foo
deleted file mode 100644
index 257cc56..0000000
--- a/archive/pfs/client/testdata/foo
+++ /dev/null
@@ -1 +0,0 @@
-foo
diff --git a/archive/pfs/controller/chunk.go b/archive/pfs/controller/chunk.go
deleted file mode 100644
index 5fb694f..0000000
--- a/archive/pfs/controller/chunk.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package controller
-
-import (
- "github.com/giolekva/pcloud/pfs/api"
-)
-
-type chunkServerStatus int
-
-const (
- Healthy chunkServerStatus = iota
- UNREACHABLE
-)
-
-type chunkServer struct {
- address string
- status chunkServerStatus
- chunks map[string]api.ChunkStatus
-}
diff --git a/archive/pfs/controller/server.go b/archive/pfs/controller/server.go
deleted file mode 100644
index 885ad55..0000000
--- a/archive/pfs/controller/server.go
+++ /dev/null
@@ -1,116 +0,0 @@
-package controller
-
-import (
- "context"
- "log"
- "math/rand"
-
- "github.com/google/uuid"
- "google.golang.org/grpc"
-
- "github.com/giolekva/pcloud/pfs/api"
-)
-
-type chunkServers struct {
- address string
-}
-
-type BlobStatus int
-
-const (
- NEW BlobStatus = iota
-)
-
-type ChunkStatus int
-
-const (
- ASSIGNED ChunkStatus = iota
- STORED
-)
-
-type chunkReplica struct {
- chunkServer string
- status ChunkStatus
-}
-
-type chunk struct {
- id string
- replica []chunkReplica
-}
-
-type blob struct {
- id string
- status BlobStatus
- chunks []chunk
-}
-
-type MasterServer struct {
- chunkServers []*chunkServer
- blobs []*blob
-}
-
-func NewMasterServer() *MasterServer {
- return &MasterServer{}
-}
-
-func (s *MasterServer) AddChunkServer(
- ctx context.Context,
- req *api.AddChunkServerRequest) (*api.AddChunkServerResponse, error) {
- s.chunkServers = append(s.chunkServers, &chunkServer{
- address: req.Address,
- status: Healthy})
- log.Printf("Registered Chunk server: %s", req.Address)
- return &api.AddChunkServerResponse{}, nil
-}
-
-func (s *MasterServer) CreateBlob(
- ctx context.Context,
- req *api.CreateBlobRequest) (*api.CreateBlobResponse, error) {
- if int(req.NumReplicas) > len(s.chunkServers) {
- return nil, nil
- }
- resp := api.CreateBlobResponse{
- BlobId: uuid.New().String(),
- Chunk: []*api.ChunkStorageMetadata{
- {ChunkId: uuid.New().String()},
- }}
- assigned := 0
- chunkId := resp.Chunk[0].ChunkId
- for i := range rand.Perm(len(s.chunkServers)) {
- if assigned == int(req.NumReplicas) {
- break
- }
- address := s.chunkServers[i].address
- log.Printf(address)
- var opts []grpc.DialOption
- opts = append(opts, grpc.WithInsecure())
- opts = append(opts, grpc.WithBlock())
- conn, err := grpc.Dial(address, opts...)
- if err != nil {
- continue
- }
- defer conn.Close()
- client := api.NewChunkStorageClient(conn)
- createChunkReq := api.CreateChunkRequest{
- ChunkId: chunkId,
- Size: req.SizeBytes}
- if assigned == 0 {
- createChunkReq.Role = api.ReplicaRole_PRIMARY
- } else {
- createChunkReq.Role = api.ReplicaRole_SECONDARY
- createChunkReq.PrimaryAddress = resp.Chunk[0].Server[0]
- }
- _, err = client.CreateChunk(ctx, &createChunkReq)
- if err == nil {
- resp.Chunk[0].Server = append(resp.Chunk[0].Server, address)
- assigned++
- }
- }
- return &resp, nil
-}
-
-func (s *MasterServer) GetBlobMetadata(
- ctx context.Context,
- req *api.GetBlobMetadataRequest) (*api.GetBlobMetadataResponse, error) {
- return nil, nil
-}
diff --git a/archive/pfs/controller_server.go b/archive/pfs/controller_server.go
deleted file mode 100644
index c905ba3..0000000
--- a/archive/pfs/controller_server.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package main
-
-import (
- "flag"
- "fmt"
- "log"
- "net"
-
- "google.golang.org/grpc"
-
- "github.com/giolekva/pcloud/pfs/api"
- "github.com/giolekva/pcloud/pfs/controller"
-)
-
-var port = flag.Int("port", 123, "Port to listen on.")
-
-func main() {
- flag.Parse()
- log.Print("Master server starting")
- lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))
- if err != nil {
- log.Fatalf("Failed to listen on port %d: %v", *port, err)
- }
- log.Printf("Listening on port: %d", *port)
- server := grpc.NewServer()
- api.RegisterMetadataStorageServer(server, controller.NewMasterServer())
- log.Print("Master serving")
- server.Serve(lis)
-}
diff --git a/archive/pfs/pfs.yamls b/archive/pfs/pfs.yamls
deleted file mode 100644
index ba06bcb..0000000
--- a/archive/pfs/pfs.yamls
+++ /dev/null
@@ -1,78 +0,0 @@
----
-kind: Service
-apiVersion: v1
-metadata:
- name: pfs-controller-service
-spec:
- type: ClusterIP
- selector:
- app: pfs-controller
- ports:
- - nodePort:
- port: 111
- targetPort: 123
----
-kind: Deployment
-apiVersion: apps/v1
-metadata:
- name: pfs-controller
-spec:
- selector:
- matchLabels:
- app: pfs-controller
- replicas: 1
- template:
- metadata:
- labels:
- app: pfs-controller
- spec:
- containers:
- - name: pfs-controller
- image: pcloud:latest
- imagePullPolicy: Never
- ports:
- - containerPort: 123
- volumeMounts:
- - name: code
- mountPath: /src/go/src/github.com/giolekva/pcloud/pfs
- command: ["/bin/sh"]
- args: ["-c", "protoc api/api.proto --go_out=plugins=grpc:. && go run controller_server.go --port=123"]
- volumes:
- - name: code
- hostPath:
- path: "/Users/lekva/dev/go/src/github.com/giolekva/pcloud/pfs"
----
-kind: Deployment
-apiVersion: apps/v1
-metadata:
- name: pfs-chunk
-spec:
- selector:
- matchLabels:
- app: pfs-chunk
- replicas: 3
- template:
- metadata:
- labels:
- app: pfs-chunk
- spec:
- containers:
- - name: pfs-chunk
- image: pcloud:latest
- imagePullPolicy: Never
- ports:
- - containerPort: 234
- env:
- - name: SELF_IP
- valueFrom:
- fieldRef:
- fieldPath: status.podIP
- volumeMounts:
- - name: code
- mountPath: /src/go/src/github.com/giolekva/pcloud/pfs
- command: ["/bin/sh"]
- args: ["-c", "protoc api/api.proto --go_out=plugins=grpc:. && go run chunk_server.go --controller=pfs-controller-service:111 --self=$(SELF_IP):234"]
- volumes:
- - name: code
- hostPath:
- path: "/Users/lekva/dev/go/src/github.com/giolekva/pcloud/pfs"
diff --git a/archive/pfs/testing/in_memory_env.go b/archive/pfs/testing/in_memory_env.go
deleted file mode 100644
index c3410be..0000000
--- a/archive/pfs/testing/in_memory_env.go
+++ /dev/null
@@ -1,84 +0,0 @@
-package testing
-
-import (
- "context"
- "fmt"
- "net"
- "syscall"
- "time"
-
- "google.golang.org/grpc"
-
- "github.com/giolekva/pcloud/pfs/api"
- "github.com/giolekva/pcloud/pfs/chunk"
- "github.com/giolekva/pcloud/pfs/controller"
-)
-
-type InMemoryEnv struct {
- m *grpc.Server
- c []*grpc.Server
- controllerConn *grpc.ClientConn
-}
-
-func NewInMemoryEnv(numChunkServers int) (*InMemoryEnv, error) {
- env := new(InMemoryEnv)
- syscall.Unlink("/tmp/pcloud/controller")
- lis, err := net.Listen("unix", "/tmp/pcloud/controller")
- if err != nil {
- return nil, err
- }
- server := grpc.NewServer()
- api.RegisterMetadataStorageServer(server, controller.NewMasterServer())
- go server.Serve(lis)
-
- var opts []grpc.DialOption
- opts = append(opts, grpc.WithInsecure())
- opts = append(opts, grpc.WithBlock())
- conn, err := grpc.Dial("unix:/tmp/pcloud/controller", opts...)
- if err != nil {
- return nil, err
- }
- env.controllerConn = conn
- client := api.NewMetadataStorageClient(conn)
-
- env.c = make([]*grpc.Server, numChunkServers)
- for i := 0; i < numChunkServers; i++ {
- unixSocket := fmt.Sprintf("/tmp/pcloud/chunk-%d", i)
- syscall.Unlink(unixSocket)
- lis, err := net.Listen("unix", unixSocket)
- if err != nil {
- return nil, err
- }
- server := grpc.NewServer()
- api.RegisterChunkStorageServer(server, chunk.NewChunkServer(
- &chunk.InMemoryChunkFactory{},
- &chunk.NonChangingReplicaAssignment{}))
- go server.Serve(lis)
- env.c[i] = server
- }
-
- for i := 0; i < numChunkServers; i++ {
- ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)
- _, err = client.AddChunkServer(
- ctx,
- &api.AddChunkServerRequest{Address: fmt.Sprintf("unix:///tmp/pcloud/chunk-%d", i)})
- if err != nil {
- return nil, err
- }
- }
- return env, nil
-}
-
-func (e *InMemoryEnv) Stop() {
- if e.controllerConn != nil {
- e.controllerConn.Close()
- }
- for _, s := range e.c {
- if s != nil {
- s.GracefulStop()
- }
- }
- if e.m != nil {
- e.m.GracefulStop()
- }
-}
diff --git a/archive/pfs/testing/simple_test.go b/archive/pfs/testing/simple_test.go
deleted file mode 100644
index d8e2510..0000000
--- a/archive/pfs/testing/simple_test.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package testing
-
-import (
- "testing"
-)
-
-func TestSetup(t *testing.T) {
- env, err := NewInMemoryEnv(3)
- if err != nil {
- t.Error(err)
- }
- defer env.Stop()
-}
diff --git a/bazel_tools/helm.bzl b/bazel_tools/helm.bzl
index 7b71492..6accf8b 100644
--- a/bazel_tools/helm.bzl
+++ b/bazel_tools/helm.bzl
@@ -26,6 +26,10 @@
helm --namespace={namespace} install --create-namespace {release_name} \$$CHART_TARBALL {args}
"""
+__HELM_UNINSTALL_TMPL = """
+helm --namespace={namespace} uninstall {release_name}
+"""
+
def helm_install(name, namespace, release_name, chart, args):
args_str = ""
for arg, value in args.items():
@@ -44,7 +48,7 @@
package = native.package_name(),
chart = "%s.tar.gz" % chart.split(":")[1],
args = args_str,
- ))
+ ))
native.sh_binary(
name = name,
srcs = ["helm_install.sh",],
@@ -53,4 +57,21 @@
],
deps = [
"@bazel_tools//tools/bash/runfiles",
- ])
+ ])
+
+def helm_uninstall(name, namespace, release_name):
+ native.genrule(
+ name = "%s.sh" % name,
+ executable = False,
+ outs = ["helm_uninstall.sh",],
+ cmd = """cat > $@ <<EOM
+%s
+EOM
+""" % __HELM_UNINSTALL_TMPL.format(
+ namespace = namespace,
+ release_name = release_name,
+ ))
+ native.sh_binary(
+ name = name,
+ srcs = ["helm_uninstall.sh",]
+ )
diff --git a/core/api/BUILD b/core/api/BUILD
index 48e6b37..8ea877a 100644
--- a/core/api/BUILD
+++ b/core/api/BUILD
@@ -1,5 +1,5 @@
load("//:bazel_tools/docker.bzl", "docker_image")
-load("//:bazel_tools/helm.bzl", "helm_install")
+load("//:bazel_tools/helm.bzl", "helm_install", "helm_uninstall")
load("@rules_pkg//:pkg.bzl", "pkg_tar")
# TODO(lekva): figure out how to build py_binary with pip dependencies and
@@ -30,3 +30,9 @@
"image.pullPolicy": "Always",
},
)
+
+helm_uninstall(
+ name = "uninstall",
+ namespace = "pcloud",
+ release_name = "init",
+)
diff --git a/core/appmanager/BUILD b/core/appmanager/BUILD
index ac84729..3ba5e53 100644
--- a/core/appmanager/BUILD
+++ b/core/appmanager/BUILD
@@ -1,5 +1,5 @@
load("//:bazel_tools/docker.bzl", "docker_image")
-load("//:bazel_tools/helm.bzl", "helm_install")
+load("//:bazel_tools/helm.bzl", "helm_install", "helm_uninstall")
load("@rules_pkg//:pkg.bzl", "pkg_tar")
# TODO(lekva): figure out how to build py_binary with pip dependencies and
@@ -30,3 +30,9 @@
"image.pullPolicy": "Always",
},
)
+
+helm_uninstall(
+ name = "uninstall",
+ namespace = "pcloud-app-manager",
+ release_name = "init",
+)
diff --git a/core/events/BUILD b/core/events/BUILD
index 71bacea..aaf0d51 100644
--- a/core/events/BUILD
+++ b/core/events/BUILD
@@ -1,5 +1,5 @@
load("//:bazel_tools/docker.bzl", "docker_image")
-load("//:bazel_tools/helm.bzl", "helm_install")
+load("//:bazel_tools/helm.bzl", "helm_install", "helm_uninstall")
load("@rules_pkg//:pkg.bzl", "pkg_tar")
# TODO(lekva): figure out how to build py_binary with pip dependencies and
@@ -30,3 +30,9 @@
"image.pullPolicy": "Always",
},
)
+
+helm_uninstall(
+ name = "uninstall",
+ namespace = "pcloud-event-processor",
+ release_name = "init",
+)
diff --git a/dev/create_dev_cluster.sh b/dev/create_dev_cluster.sh
index e6b01e1..54e66af 100755
--- a/dev/create_dev_cluster.sh
+++ b/dev/create_dev_cluster.sh
@@ -1,6 +1,7 @@
#!/bin/bash
-ROOT="$(dirname -- $(pwd))"
+ROOT=$(pwd)
+ROOT=${ROOT%/pcloud*}/pcloud
k3d cluster create pcloud-dev \
--servers=1 \
@@ -12,8 +13,7 @@
# Traefik
helm repo add traefik https://containous.github.io/traefik-helm-chart
helm repo update
-kubectl create namespace traefik
-helm --namespace=traefik install traefik traefik/traefik \
+helm --namespace=traefik install --create-namespace traefik traefik/traefik \
--set additionalArguments="{--providers.kubernetesingress,--global.checknewversion=true}" \
--set ports.traefik.expose=True
diff --git a/dev/install_core_services.sh b/dev/install_core_services.sh
index 0a7601f..1ab542a 100755
--- a/dev/install_core_services.sh
+++ b/dev/install_core_services.sh
@@ -1,6 +1,7 @@
#!/bin/sh
-ROOT="$(dirname -- $(pwd))"
+ROOT=$(pwd)
+ROOT=${ROOT%/pcloud*}/pcloud
# Dgraph
source $ROOT/apps/dgraph/install.sh
diff --git a/docs/dev.md b/docs/dev.md
index 7f6553f..c34b788 100644
--- a/docs/dev.md
+++ b/docs/dev.md
@@ -2,14 +2,32 @@
## Prerequisites
PCloud uses following tools to build and deploy it's packages:
-* Docker - To build container images: https://helm.sh/docs/intro/install/
+* Docker - To build container images: https://docs.docker.com/get-docker/
* k3d - To create local Kubernetes cluster for development environment: https://k3d.io/#installation
* kubectl - To interacto with the cluster: https://kubectl.docs.kubernetes.io/installation/kubectl/
* Helm - To package and distributes both PCloud core services and applications running on it: https://helm.sh/docs/intro/install/
Each of these tools provide multiple ways of installing them, choose the one which best suits you and your Host OS.
+# Development Instructions
+
## Installing PCloud
PCloud installation is two step process:
-1) First local Kubernetes cluster has to be created: ./dev/create_dev_cluster.sh
-2) Now we can install PCloud core services top of it: ./dev/install_core_services.sh
+> ./dev/create_dev_cluster.sh # creates local Kubernetes cluster
+> ./dev/install_core_services.sh # installs PCloud core services
+
+## Installing applications
+Under apps/ directory one can find number of sample application for PCloud. Installing any of those requires building container image, creating Helm Chart tarball and uploading it to Application Manager.
+Let's see what that looks like for rpuppy application:
+> bazel run //apps/rpuppy:push_to_dev # builds and pushes container image to localhost:30500 container registry, which is running inside PCloud cluster
+> bazel build //apps/rpuppy:chart # creates Helm Chart tartball which can be found at bazel-bin/apps/rpuppy/chart.tar.gz
+
+## Redeploying core services
+To redeploy one of the core services after making changes in it you have to rebuild container images and restart the running service. Let's see what that looks like for API Service:
+> bazel run //core/api:push_to_dev # builds and pushes container image to localhost:30500 container registry, which is running inside PCloud cluster
+> kubectl -n pcloud rollout restart deployment/api
+
+Reflecting changes in the chart configuration requires reinstallation of the chart itself:
+> bazel build //core/api:chart # creates chart tarball
+> bazel run //core/api:uninstall # uninstalls old Helm Chart from the cluster
+> bazel run //core/api:install # installs new Helm Chart to the cluster