Compare commits

..

38 Commits

Author SHA1 Message Date
argo-bot
4c94d886f5 Bump version to 2.0.5 2021-07-22 20:44:44 +00:00
argo-bot
052e636ac8 Bump version to 2.0.5 2021-07-22 20:44:29 +00:00
ZymoticB
bf0b1286e2 fix: allow argocd-notification ingress to repo-server (#6746)
* Allow argocd-notification ingress to repo-server

This change allows an argocd-notification installation using the provided
manifests to ingress to the repo-server.

I am not sure if there is a prevailing opinion about how to manage a
cross project network policy for these related components so I thought
I would put up a PR to spark that discussion. This could live in a separate
NetworkPolicy object managed by the argocd-notifications manifests but I
thought it wuold be better for the possible ingresses for the argocd project
to all live in the argo-cd manifests. I know that notifications are an optional
component, so maybe this is better provided as a separate manifest that can
be strategic merged in? (I am a kustomize user).

Regardless, I think this policy is something that be maintained by argoproj
in some form to reduce release burden of users trying to hand maintain network
policies.

Signed-off-by: Tyler Dixon <tdixon@buf.build>

* make manifests

Signed-off-by: Tyler Dixon <tdixon@buf.build>
2021-07-22 13:04:28 -07:00
Alexander Matyushentsev
312f341a27 fix: argocd-server crashes due to nil pointer dereference (#6757)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-07-22 12:09:33 -07:00
Alexander Matyushentsev
4725473e37 fix: WebUI failure when loading pod view 't.parentRefs is undefined' (#6490) (#6535)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-07-22 12:06:47 -07:00
Alexander Matyushentsev
fae6150ab9 fix: prevent 'cannot read property "filter" of undefined' during nodes filtering (#6453)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-07-22 12:06:34 -07:00
Alexander Matyushentsev
eaa0c1ed61 fix: download Pod Logs button not honouring argocd-server rootpath (#6548) (#6627)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-07-12 09:10:05 -07:00
Saumeya Katyal
f5d9c76cae fix: Version warning banner in docs (#6682)
Signed-off-by: saumeya <saumeyakatyal@gmail.com>

add side-bar media queries

removed extra comments

Signed-off-by: saumeya <saumeyakatyal@gmail.com>
2021-07-11 13:15:25 +02:00
Alexander Matyushentsev
4488857988 fix: upgrade gitops engine to fix workflow health check
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-06-23 15:19:24 -07:00
argo-bot
0842d44810 Bump version to 2.0.4 2021-06-23 01:20:18 +00:00
argo-bot
f428069d64 Bump version to 2.0.4 2021-06-23 01:20:06 +00:00
Antonin Bas
ae1401cb2a fix: typo in networkPolicy definition in manifests (#6532)
Unless the argocd-dex-server-network-policy NetworkPolicy was meant to
authorize ALL TCP traffic, which seems unlikely, this is a typo.

Signed-off-by: Antonin Bas <abas@vmware.com>
2021-06-22 15:37:46 -07:00
jannfis
c29b05785a fix: Update redis to 6.2.4 (#6475)
Signed-off-by: jannfis <jann@mistrust.net>
2021-06-15 08:43:13 +00:00
Alexander Matyushentsev
f42c3054b9 chore: pin mkdocs version to fix docs build (#6421)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-06-07 13:04:23 -07:00
Alexander Matyushentsev
4d1761d2aa chore: regenerate manifests using codegen (#6422)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-06-07 12:14:16 -07:00
Alexander Matyushentsev
12e6e1f069 fix: allows access to dex metrics from any pod (#6420)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-06-07 10:42:53 -07:00
Alexander Matyushentsev
fab0e82e64 fix: add client side retry to prevent 'transport is closing' errors (#6402)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-06-04 12:25:43 -07:00
LucasBoisserie
0310d4b105 fix: Update documentation Argocd app CRD health with app of apps (#6281)
fix: Update documentation Argocd app CRD health with app of apps (#6281)

Signed-off-by: LucasBoisserie <lucas.boisserie@gmail.com>
2021-06-04 12:25:39 -07:00
Remington Breeze
5ed2f712d7 fix(ui): Crash on application pod view (#6384)
Signed-off-by: Remington Breeze <remington@breeze.software>
2021-06-04 12:25:34 -07:00
Yujun Zhang
3a95e8f77c feat: use RLock and RUnlock for project to improve performance (#6225)
* feat: use RLock and RUnlock for project to improve performance

Signed-off-by: Yujun Zhang <zhangyujun@gmail.com>

* chore: go mod vendor && go mod tidy

Signed-off-by: Yujun Zhang <yujunz@nvidia.com>
2021-06-04 12:18:55 -07:00
jannfis
959f6759f8 chore: Update Golang to v1.16.4 (#6358)
Signed-off-by: jannfis <jann@mistrust.net>
2021-06-01 06:49:46 +00:00
argo-bot
8d2b13d733 Bump version to 2.0.3 2021-05-27 17:30:05 +00:00
argo-bot
de34f01f84 Bump version to 2.0.3 2021-05-27 17:29:49 +00:00
Alexander Matyushentsev
968f047feb fix: add missing --container flag to 'argocd app logs' command (#6320)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-05-25 17:58:17 -07:00
Alexander Matyushentsev
eecefa28cb fix: grpc web proxy must ensure to read full header (#6319)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-05-25 17:58:13 -07:00
Alexander Matyushentsev
061e752f13 fix: controller should refresh app before running sync operation (#6294)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-05-21 13:33:11 -07:00
argo-bot
9a7b0bc350 Bump version to 2.0.2 2021-05-20 19:23:09 +00:00
argo-bot
ecb935fb97 Bump version to 2.0.2 2021-05-20 19:22:57 +00:00
Alexander Matyushentsev
c207dec78a fix: enable access to metrics port in embedded network policies (#6277)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-05-20 08:53:42 -07:00
Alexander Matyushentsev
d12b049cda fix: display log streaming error in logs viewer (#6100) (#6273)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-05-20 08:53:35 -07:00
Remington Breeze
becc64519d fix(ui): Don't count errored or completed neighbor pods toward resource consumption (#6259)
Signed-off-by: Remington Breeze <remington@breeze.software>
2021-05-19 10:05:19 -07:00
jannfis
4accaa5400 fix(backport-2.0): Enable kex algo diffie-hellman-group-exchange-sha256 for go-git ssh (#6256)
Signed-off-by: jannfis <jann@mistrust.net>
2021-05-18 19:26:02 +02:00
Joe Bowbeer
beb9370450 fix: copy github app key from repocreds (#6197)
* fix: copy github app key from repocreds

Fixes #6196

Signed-off-by: Joe Bowbeer <joe.bowbeer@gmail.com>

* Add GitHub App to unit test

Signed-off-by: Joe Bowbeer <joe.bowbeer@gmail.com>
2021-05-15 17:22:14 +02:00
Jonah Back
1c698f7113 fix: copy github app key from repocreds (#6140)
Signed-off-by: Jonah Back <jonah@jonahback.com>
2021-05-15 17:20:53 +02:00
jannfis
6ca3c5e342 chore: Allow ingress traffic to argocd-server by default (#6179)
Signed-off-by: jannfis <jann@mistrust.net>
2021-05-11 18:54:17 -10:00
Remington Breeze
f3175a85e5 fix(ui): UI crashes after reinstalling ArgoCD (#6218)
Signed-off-by: Remington Breeze <remington@breeze.software>
2021-05-11 18:03:33 -10:00
Alexander Matyushentsev
bf1a9bc45c feat: add network policies to restrict traffic flow between argocd components (#6156)
Signed-off-by: Alexander Matyushentsev <AMatyushentsev@gmail.com>
2021-05-11 18:03:21 -10:00
Alexander Matyushentsev
95ada89c5e Revert "feat: Add health checks for kubernetes-external-secrets (#5435)"
This reverts commit 65ecd87027.
2021-04-16 15:02:57 -07:00
59 changed files with 928 additions and 188 deletions

View File

@@ -396,7 +396,7 @@ jobs:
run: |
docker pull quay.io/dexidp/dex:v2.25.0
docker pull argoproj/argo-cd-ci-builder:v1.0.0
docker pull redis:6.2.1-alpine
docker pull redis:6.2.4-alpine
- name: Create target directory for binaries in the build-process
run: |
mkdir -p dist

View File

@@ -13,7 +13,7 @@ jobs:
steps:
- uses: actions/setup-go@v1
with:
go-version: '1.16.2'
go-version: '1.16.4'
- uses: actions/checkout@master
with:
path: src/github.com/argoproj/argo-cd

View File

@@ -139,7 +139,7 @@ jobs:
- name: Setup Golang
uses: actions/setup-go@v1
with:
go-version: '1.16.2'
go-version: '1.16.4'
- name: Setup Git author information
run: |

View File

@@ -4,7 +4,7 @@ ARG BASE_IMAGE=ubuntu:20.10
# Initial stage which pulls prepares build dependencies and CLI tooling we need for our final image
# Also used as the image in CI jobs so needs all dependencies
####################################################################################################
FROM golang:1.16.2 as builder
FROM golang:1.16.4 as builder
RUN echo 'deb http://deb.debian.org/debian buster-backports main' >> /etc/apt/sources.list

View File

@@ -1,7 +1,7 @@
controller: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_TLS_DATA_PATH=${ARGOCD_TLS_DATA_PATH:-/tmp/argocd-local/tls} ARGOCD_SSH_DATA_PATH=${ARGOCD_SSH_DATA_PATH:-/tmp/argocd-local/ssh} ARGOCD_BINARY_NAME=argocd-application-controller go run ./cmd/main.go --loglevel debug --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379} --repo-server localhost:${ARGOCD_E2E_REPOSERVER_PORT:-8081}"
api-server: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_TLS_DATA_PATH=${ARGOCD_TLS_DATA_PATH:-/tmp/argocd-local/tls} ARGOCD_SSH_DATA_PATH=${ARGOCD_SSH_DATA_PATH:-/tmp/argocd-local/ssh} ARGOCD_BINARY_NAME=argocd-server go run ./cmd/main.go --loglevel debug --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379} --disable-auth=${ARGOCD_E2E_DISABLE_AUTH:-'true'} --insecure --dex-server http://localhost:${ARGOCD_E2E_DEX_PORT:-5556} --repo-server localhost:${ARGOCD_E2E_REPOSERVER_PORT:-8081} --port ${ARGOCD_E2E_APISERVER_PORT:-8080} --staticassets ui/dist/app"
dex: sh -c "ARGOCD_BINARY_NAME=argocd-dex go run github.com/argoproj/argo-cd/v2/cmd gendexcfg -o `pwd`/dist/dex.yaml && docker run --rm -p ${ARGOCD_E2E_DEX_PORT:-5556}:${ARGOCD_E2E_DEX_PORT:-5556} -v `pwd`/dist/dex.yaml:/dex.yaml ghcr.io/dexidp/dex:v2.27.0 serve /dex.yaml"
redis: docker run --rm --name argocd-redis -i -p ${ARGOCD_E2E_REDIS_PORT:-6379}:${ARGOCD_E2E_REDIS_PORT:-6379} redis:6.2.1-alpine --save "" --appendonly no --port ${ARGOCD_E2E_REDIS_PORT:-6379}
redis: docker run --rm --name argocd-redis -i -p ${ARGOCD_E2E_REDIS_PORT:-6379}:${ARGOCD_E2E_REDIS_PORT:-6379} redis:6.2.4-alpine --save "" --appendonly no --port ${ARGOCD_E2E_REDIS_PORT:-6379}
repo-server: sh -c "FORCE_LOG_COLORS=1 ARGOCD_FAKE_IN_CLUSTER=true ARGOCD_GNUPGHOME=${ARGOCD_GNUPGHOME:-/tmp/argocd-local/gpg/keys} ARGOCD_GPG_DATA_PATH=${ARGOCD_GPG_DATA_PATH:-/tmp/argocd-local/gpg/source} ARGOCD_TLS_DATA_PATH=${ARGOCD_TLS_DATA_PATH:-/tmp/argocd-local/tls} ARGOCD_SSH_DATA_PATH=${ARGOCD_SSH_DATA_PATH:-/tmp/argocd-local/ssh} ARGOCD_BINARY_NAME=argocd-repo-server go run ./cmd/main.go --loglevel debug --port ${ARGOCD_E2E_REPOSERVER_PORT:-8081} --redis localhost:${ARGOCD_E2E_REDIS_PORT:-6379}"
ui: sh -c 'cd ui && ${ARGOCD_E2E_YARN_CMD:-yarn} start'
git-server: test/fixture/testrepos/start-git.sh

View File

@@ -1 +1 @@
2.0.1
2.0.5

View File

@@ -276,6 +276,7 @@ func NewApplicationLogsCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co
sinceSeconds int64
untilTime string
filter string
container string
)
var command = &cobra.Command{
Use: "logs APPNAME",
@@ -304,6 +305,7 @@ func NewApplicationLogsCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co
SinceSeconds: sinceSeconds,
UntilTime: &untilTime,
Filter: &filter,
Container: container,
})
if err != nil {
log.Fatalf("failed to get pod logs: %v", err)
@@ -344,6 +346,7 @@ func NewApplicationLogsCommand(clientOpts *argocdclient.ClientOptions) *cobra.Co
command.Flags().Int64Var(&sinceSeconds, "since-seconds", 0, "A relative time in seconds before the current time from which to show logs")
command.Flags().StringVar(&untilTime, "until-time", "", "Show logs until this time")
command.Flags().StringVar(&filter, "filter", "", "Show logs contain this string")
command.Flags().StringVar(&container, "container", "", "Optional container name")
return command
}

View File

@@ -413,11 +413,13 @@ func (ctrl *ApplicationController) getAppHosts(a *appv1.Application, appNodes []
appPods[kube.NewResourceKey(node.Group, node.Kind, node.Namespace, node.Name)] = true
}
}
allNodesInfo := map[string]statecache.NodeInfo{}
allPodsByNode := map[string][]statecache.PodInfo{}
appPodsByNode := map[string][]statecache.PodInfo{}
err := ctrl.stateCache.IterateResources(a.Spec.Destination.Server, func(res *clustercache.Resource, info *statecache.ResourceInfo) {
key := res.ResourceKey()
switch {
case info.NodeInfo != nil && key.Group == "" && key.Kind == "Node":
allNodesInfo[key.Name] = *info.NodeInfo
@@ -464,7 +466,7 @@ func (ctrl *ApplicationController) getAppHosts(a *appv1.Application, appNodes []
for _, pod := range neighbors {
for name, resource := range pod.ResourceRequests {
if !supportedResourceNames[name] {
if !supportedResourceNames[name] || pod.Phase == v1.PodSucceeded || pod.Phase == v1.PodFailed {
continue
}
info := resources[name]
@@ -662,6 +664,18 @@ func (ctrl *ApplicationController) processAppOperationQueueItem() (processNext b
}
app := origApp.DeepCopy()
if app.Operation != nil {
// If we get here, we are about process an operation but we cannot rely on informer since it might has stale data.
// So always retrieve the latest version to ensure it is not stale to avoid unnecessary syncing.
// This code should be deleted when https://github.com/argoproj/argo-cd/pull/6294 is implemented.
freshApp, err := ctrl.applicationClientset.ArgoprojV1alpha1().Applications(ctrl.namespace).Get(context.Background(), app.ObjectMeta.Name, metav1.GetOptions{})
if err != nil {
log.Errorf("Failed to retrieve latest application state: %v", err)
return
}
app = freshApp
}
if app.Operation != nil {
ctrl.processRequestedAppOperation(app)
} else if app.DeletionTimestamp != nil && app.CascadedDeletion() {
@@ -942,20 +956,6 @@ func (ctrl *ApplicationController) processRequestedAppOperation(app *appv1.Appli
}()
terminating := false
if isOperationInProgress(app) {
// If we get here, we are about process an operation but we notice it is already in progress.
// We need to detect if the app object we pulled off the informer is stale and doesn't
// reflect the fact that the operation is completed. We don't want to perform the operation
// again. To detect this, always retrieve the latest version to ensure it is not stale.
freshApp, err := ctrl.applicationClientset.ArgoprojV1alpha1().Applications(ctrl.namespace).Get(context.Background(), app.ObjectMeta.Name, metav1.GetOptions{})
if err != nil {
logCtx.Errorf("Failed to retrieve latest application state: %v", err)
return
}
if !isOperationInProgress(freshApp) {
logCtx.Infof("Skipping operation on stale application state")
return
}
app = freshApp
state = app.Status.OperationState.DeepCopy()
terminating = state.Phase == synccommon.OperationTerminating
// Failed operation with retry strategy might have be in-progress and has completion time

View File

@@ -56,6 +56,7 @@ type ObjectUpdatedHandler = func(managedByApp map[string]bool, ref v1.ObjectRefe
type PodInfo struct {
NodeName string
ResourceRequests v1.ResourceList
Phase v1.PodPhase
}
type NodeInfo struct {

View File

@@ -324,7 +324,7 @@ func populatePodInfo(un *unstructured.Unstructured, res *ResourceInfo) {
}
req, _ := resourcehelper.PodRequestsAndLimits(&pod)
res.PodInfo = &PodInfo{NodeName: pod.Spec.NodeName, ResourceRequests: req}
res.PodInfo = &PodInfo{NodeName: pod.Spec.NodeName, ResourceRequests: req, Phase: pod.Status.Phase}
res.Info = append(res.Info, v1alpha1.InfoItem{Name: "Node", Value: pod.Spec.NodeName})
res.Info = append(res.Info, v1alpha1.InfoItem{Name: "Containers", Value: fmt.Sprintf("%d/%d", readyContainers, totalContainers)})

View File

@@ -36,10 +36,13 @@
/* Version Warning */
div[data-md-component=announce] {
background-color: rgba(255,145,0,.1);
background-color: rgb(248, 243, 236);
position: sticky;
top: 0;
z-index: 2;
}
div[data-md-component=announce]>div#announce-msg{
color: var(--md-admonition-fg-color);
color: var(--md-code-hl-number-color);
font-size: .8rem;
text-align: center;
margin: 15px;

View File

@@ -35,10 +35,24 @@ setTimeout(function() {
// VERSION WARNINGS
window.addEventListener("DOMContentLoaded", function() {
var rtdData = window['READTHEDOCS_DATA'] || { version: 'latest' };
var margin = 30;
var headerHeight = document.getElementsByClassName("md-header")[0].offsetHeight;
if (rtdData.version === "latest") {
document.querySelector("div[data-md-component=announce]").innerHTML = "<div id='announce-msg'>You are viewing the docs for an unreleased version of Argo CD, <a href='https://argo-cd.readthedocs.io/en/stable/'>click here to go to the latest stable version.</a></div>"
var bannerHeight = document.getElementById('announce-msg').offsetHeight + margin
document.querySelector("header.md-header").style.top = bannerHeight +"px";
document.querySelector('style').textContent +=
"@media screen and (min-width: 76.25em){ .md-sidebar { height: 0; top:"+ (bannerHeight+headerHeight)+"px !important; }}"
document.querySelector('style').textContent +=
"@media screen and (min-width: 60em){ .md-sidebar--secondary { height: 0; top:"+ (bannerHeight+headerHeight)+"px !important; }}"
}
else if (rtdData.version !== "stable") {
document.querySelector("div[data-md-component=announce]").innerHTML = "<div id='announce-msg'>You are viewing the docs for a previous version of Argo CD, <a href='https://argo-cd.readthedocs.io/en/stable/'>click here to go to the latest stable version.</a></div>"
var bannerHeight = document.getElementById('announce-msg').offsetHeight + margin
document.querySelector("header.md-header").style.top = bannerHeight +"px";
document.querySelector('style').textContent +=
"@media screen and (min-width: 76.25em){ .md-sidebar { height: 0; top:"+ (bannerHeight+headerHeight)+"px !important; }}"
document.querySelector('style').textContent +=
"@media screen and (min-width: 60em){ .md-sidebar--secondary { height: 0; top:"+ (bannerHeight+headerHeight)+"px !important; }}"
}
});

View File

@@ -19,6 +19,40 @@ with at least one value for `hostname` or `IP`.
### PersistentVolumeClaim
* The `status.phase` is `Bound`
### Argocd App
The health assessement of `argoproj.io/Application` CRD has been removed in argocd 1.8 (see [#3781](https://github.com/argoproj/argo-cd/issues/3781) for more information).
You might need to restore it if you are using app-of-apps pattern and orchestrating syncronization using sync waves. Add the following resource customization in
`argocd-cm` ConfigMap:
```yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: argocd-cm
namespace: argocd
labels:
app.kubernetes.io/name: argocd-cm
app.kubernetes.io/part-of: argocd
data:
resource.customizations: |
argoproj.io/Application:
health.lua: |
hs = {}
hs.status = "Progressing"
hs.message = ""
if obj.status ~= nil then
if obj.status.health ~= nil then
hs.status = obj.status.health.status
if obj.status.health.message ~= nil then
hs.message = obj.status.health.message
end
end
end
return hs
```
## Custom Health Checks
Argo CD supports custom health checks written in [Lua](https://www.lua.org/). This is useful if you:

View File

@@ -27,12 +27,14 @@ data:
argoproj.io/Application:
health.lua: |
hs = {}
hs.status = "Healthy"
hs.status = "Progressing"
hs.message = ""
if obj.status ~= nil then
if obj.status.health ~= nil then
hs.status = obj.status.health.status
hs.message = obj.status.health.message
if obj.status.health.message ~= nil then
hs.message = obj.status.health.message
end
end
end
return hs

View File

@@ -1,3 +1,4 @@
mkdocs-material
markdown_include
pygments==2.4
mkdocs==1.1.2
mkdocs-material==7.1.7
markdown_include==0.6.0
pygments==2.7.4

View File

@@ -9,6 +9,7 @@ argocd app logs APPNAME [flags]
### Options
```
--container string Optional container name
--filter string Show logs contain this string
--follow Specify if the logs should be streamed
--group string Resource group

12
go.mod
View File

@@ -7,8 +7,8 @@ require (
github.com/TomOnTime/utfutil v0.0.0-20180511104225-09c41003ee1d
github.com/alicebob/miniredis v2.5.0+incompatible
github.com/alicebob/miniredis/v2 v2.14.2
github.com/argoproj/gitops-engine v0.3.2
github.com/argoproj/pkg v0.2.0
github.com/argoproj/gitops-engine v0.3.3
github.com/argoproj/pkg v0.9.1
github.com/bombsimon/logrusr v1.0.0
github.com/bradleyfalzon/ghinstallation v1.1.1
github.com/casbin/casbin v1.9.1
@@ -20,7 +20,7 @@ require (
github.com/evanphx/json-patch v4.9.0+incompatible
github.com/fsnotify/fsnotify v1.4.9
github.com/ghodss/yaml v1.0.0
github.com/go-logr/logr v0.3.0
github.com/go-logr/logr v0.4.0
github.com/go-openapi/loads v0.19.4
github.com/go-openapi/runtime v0.19.4
github.com/go-openapi/spec v0.19.3
@@ -41,12 +41,15 @@ require (
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
github.com/grpc-ecosystem/grpc-gateway v1.16.0
github.com/imdario/mergo v0.3.9 // indirect
github.com/improbable-eng/grpc-web v0.0.0-20181111100011-16092bd1d58a
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51
github.com/kr/text v0.2.0 // indirect
github.com/malexdev/utfutil v0.0.0-20180510171754-00c8d4a8e7a8 // indirect
github.com/mattn/go-isatty v0.0.11
github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/pkg/errors v0.9.1
github.com/pquerna/cachecontrol v0.0.0-20180306154005-525d0eb5f91d // indirect
@@ -69,6 +72,7 @@ require (
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a
google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a
google.golang.org/grpc v1.33.1
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
gopkg.in/go-playground/webhooks.v5 v5.11.0
gopkg.in/src-d/go-git.v4 v4.13.1
gopkg.in/yaml.v2 v2.3.0
@@ -78,7 +82,7 @@ require (
k8s.io/client-go v11.0.1-0.20190816222228-6d55c1b1f1ca+incompatible
k8s.io/code-generator v0.20.4
k8s.io/component-base v0.20.4
k8s.io/klog/v2 v2.4.0
k8s.io/klog/v2 v2.5.0
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd
k8s.io/kubectl v0.20.4
k8s.io/utils v0.0.0-20201110183641-67b214c5f920

30
go.sum
View File

@@ -86,10 +86,10 @@ github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/argoproj/gitops-engine v0.3.2 h1:m5bjOk/bWwMsFBGFpurdK31/hC5UuLMQn0hAd51TlEk=
github.com/argoproj/gitops-engine v0.3.2/go.mod h1:IBHhAkqlC+3r/wBWUitWSidQhPzlLoSTWp2htq3dyQk=
github.com/argoproj/pkg v0.2.0 h1:ETgC600kr8WcAi3MEVY5sA1H7H/u1/IysYOobwsZ8No=
github.com/argoproj/pkg v0.2.0/go.mod h1:F4TZgInLUEjzsWFB/BTJBsewoEy0ucnKSq6vmQiD/yc=
github.com/argoproj/gitops-engine v0.3.3 h1:zRNwKRj3h+EBpciy/+Eyo4vW2GTG3UG4HXAdWn0mQRI=
github.com/argoproj/gitops-engine v0.3.3/go.mod h1:IBHhAkqlC+3r/wBWUitWSidQhPzlLoSTWp2htq3dyQk=
github.com/argoproj/pkg v0.9.1 h1:osfOS3QkzfRf+W43lbCZb0o0bzrBweQhL+U3rgEg+5M=
github.com/argoproj/pkg v0.9.1/go.mod h1:ra+bQPmbVAoEL+gYSKesuigt4m49i3Qa3mE/xQcjCiA=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
@@ -171,6 +171,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma
github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4=
@@ -244,8 +245,9 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/logr v0.3.0 h1:q4c+kbcR0d5rSurhBR8dIgieOaYpXtsdTYfx22Cu6rs=
github.com/go-logr/logr v0.3.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc=
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
@@ -419,8 +421,9 @@ github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible/go.mo
github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg=
github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/improbable-eng/grpc-web v0.0.0-20181111100011-16092bd1d58a h1:RweVA0vnEyStwtAelyGmnU8ENDnwd1Q7pQr7U3J/rXo=
github.com/improbable-eng/grpc-web v0.0.0-20181111100011-16092bd1d58a/go.mod h1:6hRR09jOEG81ADP5wCQju1z71g6OL4eEvELdran/3cs=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
@@ -462,13 +465,13 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJ
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
@@ -545,10 +548,13 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0=
github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852/go.mod h1:eqOVx5Vwu4gd2mmMZvVZsgIqNSaW3xxRThUJ0k/TPk4=
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
@@ -1017,8 +1023,9 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
@@ -1092,12 +1099,11 @@ k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8
k8s.io/gengo v0.0.0-20201113003025-83324d819ded h1:JApXBKYyB7l9xx+DK7/+mFjC7A9Bt5A93FPvFD0HIFE=
k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM=
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ=
k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.5.0 h1:8mOnjf1RmUPW6KRqQCfYSZq/K20Unmp3IhuZUhxl8KI=
k8s.io/klog/v2 v2.5.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
k8s.io/kube-aggregator v0.20.4 h1:j/SUwPy1eO+ud3XOUGmH18gISPyerqhXOoNRZDbv3fs=
k8s.io/kube-aggregator v0.20.4/go.mod h1:0ixQ9De7KXyHteXizS6nVtrnKqGa4kiuxl9rEBsNccw=
k8s.io/kube-controller-manager v0.20.4/go.mod h1:HCVTzFZhw/dtTgfeF2mEUSZZM++poC6qUhNmZ5yRELk=

View File

@@ -0,0 +1,15 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-application-controller-network-policy
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
ingress:
- from:
- namespaceSelector: { }
ports:
- port: 8082
policyTypes:
- Ingress

View File

@@ -7,3 +7,4 @@ resources:
- argocd-application-controller-rolebinding.yaml
- argocd-application-controller-statefulset.yaml
- argocd-metrics.yaml
- argocd-application-controller-network-policy.yaml

View File

@@ -0,0 +1,25 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-dex-server-network-policy
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-dex-server
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
ports:
- protocol: TCP
port: 5556
- protocol: TCP
port: 5557
- from:
- namespaceSelector: { }
ports:
- port: 5558
protocol: TCP

View File

@@ -7,3 +7,4 @@ resources:
- argocd-dex-server-rolebinding.yaml
- argocd-dex-server-sa.yaml
- argocd-dex-server-service.yaml
- argocd-dex-server-network-policy.yaml

View File

@@ -5,7 +5,7 @@ kind: Kustomization
images:
- name: quay.io/argoproj/argocd
newName: quay.io/argoproj/argocd
newTag: v2.0.1
newTag: v2.0.5
resources:
- ./application-controller
- ./dex

View File

@@ -23,7 +23,7 @@ spec:
serviceAccountName: argocd-redis
containers:
- name: redis
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: Always
args:
- "--save"

View File

@@ -0,0 +1,24 @@
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: argocd-redis-network-policy
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
ports:
- protocol: TCP
port: 6379

View File

@@ -7,6 +7,7 @@ resources:
- argocd-redis-rolebinding.yaml
- argocd-redis-sa.yaml
- argocd-redis-service.yaml
- argocd-redis-network-policy.yaml
vars:
- name: ARGOCD_REDIS_SERVICE

View File

@@ -0,0 +1,28 @@
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: argocd-repo-server-network-policy
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-notifications-controller
ports:
- protocol: TCP
port: 8081
- from:
- namespaceSelector: { }
ports:
- port: 8084

View File

@@ -4,3 +4,4 @@ kind: Kustomization
resources:
- argocd-repo-server-deployment.yaml
- argocd-repo-server-service.yaml
- argocd-repo-server-network-policy.yaml

View File

@@ -0,0 +1,12 @@
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-server-network-policy
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
ingress:
- {}
policyTypes:
- Ingress

View File

@@ -8,3 +8,4 @@ resources:
- argocd-server-sa.yaml
- argocd-server-service.yaml
- argocd-server-metrics.yaml
- argocd-server-network-policy.yaml

View File

@@ -11,7 +11,7 @@ patchesStrategicMerge:
images:
- name: quay.io/argoproj/argocd
newName: quay.io/argoproj/argocd
newTag: v2.0.1
newTag: v2.0.5
resources:
- ../../base/application-controller
- ../../base/dex

View File

@@ -0,0 +1,25 @@
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: argocd-redis-ha-proxy-network-policy
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha-haproxy
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
# Redis HA server need to talk to proxy as well
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha

View File

@@ -0,0 +1,20 @@
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: argocd-redis-ha-server-network-policy
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha-haproxy
# Redis HA server pods need to talk to each other
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha

View File

@@ -878,7 +878,7 @@ spec:
automountServiceAccountToken: false
initContainers:
- name: config-init
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: IfNotPresent
resources:
{}
@@ -906,7 +906,7 @@ spec:
containers:
- name: redis
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: IfNotPresent
command:
- redis-server
@@ -947,7 +947,7 @@ spec:
lifecycle:
{}
- name: sentinel
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: IfNotPresent
command:
- redis-sentinel

View File

@@ -11,7 +11,7 @@ redis-ha:
image:
tag: 2.0.20-alpine
image:
tag: 6.2.1-alpine
tag: 6.2.4-alpine
sentinel:
config:
replaceme: "0.0.0.0"

View File

@@ -3,6 +3,8 @@ kind: Kustomization
resources:
- chart/upstream.yaml
- argocd-redis-ha-proxy-network-policy.yaml
- argocd-redis-ha-server-network-policy.yaml
patchesJson6902:
- target:

View File

@@ -3178,7 +3178,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
name: copyutil
volumeMounts:
@@ -3312,7 +3312,7 @@ spec:
- argocd-repo-server
- --redis
- argocd-redis-ha-haproxy:6379
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -3413,7 +3413,7 @@ spec:
env:
- name: ARGOCD_API_SERVER_REPLICAS
value: "2"
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -3508,7 +3508,7 @@ spec:
- "10"
- --redis
- argocd-redis-ha-haproxy:6379
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -3583,7 +3583,7 @@ spec:
- /data/conf/redis.conf
command:
- redis-server
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: IfNotPresent
lifecycle: {}
livenessProbe:
@@ -3621,7 +3621,7 @@ spec:
- /data/conf/sentinel.conf
command:
- redis-sentinel
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: IfNotPresent
lifecycle: {}
livenessProbe:
@@ -3667,7 +3667,7 @@ spec:
value: 40000915ab58c3fa8fd888fb8b24711944e6cbb4
- name: SENTINEL_ID_2
value: 2bbec7894d954a8af3bb54d13eaec53cb024e2ca
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: IfNotPresent
name: config-init
volumeMounts:
@@ -3694,3 +3694,131 @@ spec:
name: data
updateStrategy:
type: RollingUpdate
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-application-controller-network-policy
spec:
ingress:
- from:
- namespaceSelector: {}
ports:
- port: 8082
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-dex-server-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
ports:
- port: 5556
protocol: TCP
- port: 5557
protocol: TCP
- from:
- namespaceSelector: {}
ports:
- port: 5558
protocol: TCP
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-dex-server
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-redis-ha-proxy-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha-haproxy
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-redis-ha-server-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha-haproxy
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-repo-server-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-notifications-controller
ports:
- port: 8081
protocol: TCP
- from:
- namespaceSelector: {}
ports:
- port: 8084
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-server-network-policy
spec:
ingress:
- {}
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
policyTypes:
- Ingress

View File

@@ -3093,7 +3093,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
name: copyutil
volumeMounts:
@@ -3227,7 +3227,7 @@ spec:
- argocd-repo-server
- --redis
- argocd-redis-ha-haproxy:6379
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -3328,7 +3328,7 @@ spec:
env:
- name: ARGOCD_API_SERVER_REPLICAS
value: "2"
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -3423,7 +3423,7 @@ spec:
- "10"
- --redis
- argocd-redis-ha-haproxy:6379
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -3498,7 +3498,7 @@ spec:
- /data/conf/redis.conf
command:
- redis-server
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: IfNotPresent
lifecycle: {}
livenessProbe:
@@ -3536,7 +3536,7 @@ spec:
- /data/conf/sentinel.conf
command:
- redis-sentinel
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: IfNotPresent
lifecycle: {}
livenessProbe:
@@ -3582,7 +3582,7 @@ spec:
value: 40000915ab58c3fa8fd888fb8b24711944e6cbb4
- name: SENTINEL_ID_2
value: 2bbec7894d954a8af3bb54d13eaec53cb024e2ca
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: IfNotPresent
name: config-init
volumeMounts:
@@ -3609,3 +3609,131 @@ spec:
name: data
updateStrategy:
type: RollingUpdate
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-application-controller-network-policy
spec:
ingress:
- from:
- namespaceSelector: {}
ports:
- port: 8082
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-dex-server-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
ports:
- port: 5556
protocol: TCP
- port: 5557
protocol: TCP
- from:
- namespaceSelector: {}
ports:
- port: 5558
protocol: TCP
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-dex-server
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-redis-ha-proxy-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha-haproxy
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-redis-ha-server-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha-haproxy
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis-ha
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-repo-server-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-notifications-controller
ports:
- port: 8081
protocol: TCP
- from:
- namespaceSelector: {}
ports:
- port: 8084
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-server-network-policy
spec:
ingress:
- {}
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
policyTypes:
- Ingress

View File

@@ -2544,7 +2544,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
name: copyutil
volumeMounts:
@@ -2593,7 +2593,7 @@ spec:
- ""
- --appendonly
- "no"
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: Always
name: redis
ports:
@@ -2644,7 +2644,7 @@ spec:
- argocd-repo-server
- --redis
- argocd-redis:6379
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -2740,7 +2740,7 @@ spec:
- argocd-server
- --staticassets
- /shared/app
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -2833,7 +2833,7 @@ spec:
- "20"
- --operation-processors
- "10"
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -2871,3 +2871,112 @@ spec:
path: ca.crt
optional: true
secretName: argocd-repo-server-tls
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-application-controller-network-policy
spec:
ingress:
- from:
- namespaceSelector: {}
ports:
- port: 8082
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-dex-server-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
ports:
- port: 5556
protocol: TCP
- port: 5557
protocol: TCP
- from:
- namespaceSelector: {}
ports:
- port: 5558
protocol: TCP
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-dex-server
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-redis-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
ports:
- port: 6379
protocol: TCP
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-repo-server-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-notifications-controller
ports:
- port: 8081
protocol: TCP
- from:
- namespaceSelector: {}
ports:
- port: 8084
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-server-network-policy
spec:
ingress:
- {}
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
policyTypes:
- Ingress

View File

@@ -2459,7 +2459,7 @@ spec:
- -n
- /usr/local/bin/argocd
- /shared/argocd-dex
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
name: copyutil
volumeMounts:
@@ -2508,7 +2508,7 @@ spec:
- ""
- --appendonly
- "no"
image: redis:6.2.1-alpine
image: redis:6.2.4-alpine
imagePullPolicy: Always
name: redis
ports:
@@ -2559,7 +2559,7 @@ spec:
- argocd-repo-server
- --redis
- argocd-redis:6379
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
failureThreshold: 3
@@ -2655,7 +2655,7 @@ spec:
- argocd-server
- --staticassets
- /shared/app
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -2748,7 +2748,7 @@ spec:
- "20"
- --operation-processors
- "10"
image: quay.io/argoproj/argocd:v2.0.1
image: quay.io/argoproj/argocd:v2.0.5
imagePullPolicy: Always
livenessProbe:
httpGet:
@@ -2786,3 +2786,112 @@ spec:
path: ca.crt
optional: true
secretName: argocd-repo-server-tls
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-application-controller-network-policy
spec:
ingress:
- from:
- namespaceSelector: {}
ports:
- port: 8082
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-dex-server-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
ports:
- port: 5556
protocol: TCP
- port: 5557
protocol: TCP
- from:
- namespaceSelector: {}
ports:
- port: 5558
protocol: TCP
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-dex-server
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-redis-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
ports:
- port: 6379
protocol: TCP
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-redis
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-repo-server-network-policy
spec:
ingress:
- from:
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-application-controller
- podSelector:
matchLabels:
app.kubernetes.io/name: argocd-notifications-controller
ports:
- port: 8081
protocol: TCP
- from:
- namespaceSelector: {}
ports:
- port: 8084
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
policyTypes:
- Ingress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: argocd-server-network-policy
spec:
ingress:
- {}
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
policyTypes:
- Ingress

View File

@@ -19,6 +19,8 @@ import (
"github.com/coreos/go-oidc"
"github.com/dgrijalva/jwt-go/v4"
"github.com/golang/protobuf/ptypes/empty"
grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware"
grpc_retry "github.com/grpc-ecosystem/go-grpc-middleware/retry"
log "github.com/sirupsen/logrus"
"golang.org/x/oauth2"
"google.golang.org/grpc"
@@ -466,9 +468,15 @@ func (c *client) newConn() (*grpc.ClientConn, io.Closer, error) {
endpointCredentials := jwtCredentials{
Token: c.AuthToken,
}
retryOpts := []grpc_retry.CallOption{
grpc_retry.WithMax(3),
grpc_retry.WithBackoff(grpc_retry.BackoffLinear(1000 * time.Millisecond)),
}
var dialOpts []grpc.DialOption
dialOpts = append(dialOpts, grpc.WithPerRPCCredentials(endpointCredentials))
dialOpts = append(dialOpts, grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(MaxGRPCMessageSize), grpc.MaxCallSendMsgSize(MaxGRPCMessageSize)))
dialOpts = append(dialOpts, grpc.WithStreamInterceptor(grpc_retry.StreamClientInterceptor(retryOpts...)))
dialOpts = append(dialOpts, grpc.WithUnaryInterceptor(grpc_middleware.ChainUnaryClient(grpc_retry.UnaryClientInterceptor(retryOpts...))))
ctx := context.Background()

View File

@@ -152,7 +152,7 @@ func (c *client) startGRPCProxy() (*grpc.Server, net.Listener, error) {
for {
header := make([]byte, frameHeaderLength)
if _, err := resp.Body.Read(header); err != nil {
if _, err := io.ReadAtLeast(resp.Body, header, frameHeaderLength); err != nil {
if err == io.EOF {
err = io.ErrUnexpectedEOF
}

View File

@@ -129,7 +129,7 @@ func TestGenerateYamlManifestInDir(t *testing.T) {
q := apiclient.ManifestRequest{Repo: &argoappv1.Repository{}, ApplicationSource: &src}
// update this value if we add/remove manifests
const countOfManifests = 29
const countOfManifests = 34
res1, err := service.GenerateManifest(context.Background(), &q)

View File

@@ -1,17 +0,0 @@
health_status = {}
if obj.status ~= nil then
if obj.status.status == "SUCCESS" then
health_status.status = "Healthy"
health_status.message = "Fetched ExternalSecret."
elseif obj.status.status:find('^ERROR') ~= nil then
health_status.status = "Degraded"
health_status.message = obj.status.status:gsub("ERROR, ", "")
else
health_status.status = "Progressing"
health_status.message = "Waiting for ExternalSecret."
end
return health_status
end
health_status.status = "Progressing"
health_status.message = "Waiting for ExternalSecret."
return health_status

View File

@@ -1,13 +0,0 @@
tests:
- healthStatus:
status: Progressing
message: "Waiting for ExternalSecret."
inputPath: testdata/progressing.yaml
- healthStatus:
status: Degraded
message: "Secrets Manager can't find the specified secret."
inputPath: testdata/degraded.yaml
- healthStatus:
status: Healthy
message: "Fetched ExternalSecret."
inputPath: testdata/healthy.yaml

View File

@@ -1,14 +0,0 @@
apiVersion: kubernetes-client.io/v1
kind: ExternalSecret
metadata:
name: external-secret
namespace: external-secret
spec:
backendType: secretsManager
data:
- key: /external/secret/name
name: EXTERNAL_SECRET_NAME
status:
lastSync: "2021-02-06T21:44:40.631Z"
observedGeneration: 1
status: ERROR, Secrets Manager can't find the specified secret.

View File

@@ -1,14 +0,0 @@
apiVersion: kubernetes-client.io/v1
kind: ExternalSecret
metadata:
name: external-secret
namespace: external-secret
spec:
backendType: secretsManager
data:
- key: /external/secret/name
name: EXTERNAL_SECRET_NAME
status:
lastSync: "2021-02-06T21:44:40.631Z"
observedGeneration: 1
status: SUCCESS

View File

@@ -1,10 +0,0 @@
apiVersion: kubernetes-client.io/v1
kind: ExternalSecret
metadata:
name: external-secret
namespace: external-secret
spec:
backendType: secretsManager
data:
- key: /external/secret/name
name: EXTERNAL_SECRET_NAME

View File

@@ -177,8 +177,8 @@ func (s *Server) Create(ctx context.Context, q *application.ApplicationCreateReq
return nil, err
}
s.projectLock.Lock(q.Application.Spec.Project)
defer s.projectLock.Unlock(q.Application.Spec.Project)
s.projectLock.RLock(q.Application.Spec.Project)
defer s.projectLock.RUnlock(q.Application.Spec.Project)
a := q.Application
validate := true
@@ -429,8 +429,8 @@ func (s *Server) ListResourceEvents(ctx context.Context, q *application.Applicat
}
func (s *Server) validateAndUpdateApp(ctx context.Context, newApp *appv1.Application, merge bool, validate bool) (*appv1.Application, error) {
s.projectLock.Lock(newApp.Spec.GetProject())
defer s.projectLock.Unlock(newApp.Spec.GetProject())
s.projectLock.RLock(newApp.Spec.GetProject())
defer s.projectLock.RUnlock(newApp.Spec.GetProject())
app, err := s.appclientset.ArgoprojV1alpha1().Applications(s.ns).Get(ctx, newApp.Name, metav1.GetOptions{})
if err != nil {
@@ -609,8 +609,8 @@ func (s *Server) Delete(ctx context.Context, q *application.ApplicationDeleteReq
return nil, err
}
s.projectLock.Lock(a.Spec.Project)
defer s.projectLock.Unlock(a.Spec.Project)
s.projectLock.RLock(a.Spec.Project)
defer s.projectLock.RUnlock(a.Spec.Project)
if err := s.enf.EnforceErr(ctx.Value("claims"), rbacpolicy.ResourceApplications, rbacpolicy.ActionDelete, appRBACName(*a)); err != nil {
return nil, err
@@ -1159,16 +1159,21 @@ func (s *Server) PodLogs(q *application.ApplicationPodLogsQuery, ws application.
SinceTime: q.SinceTime,
TailLines: tailLines,
}).Stream(ws.Context())
if err != nil {
return err
}
podName := pod.Name
logStream := make(chan logEntry)
defer ioutil.Close(stream)
if err == nil {
defer ioutil.Close(stream)
}
streams = append(streams, logStream)
go func() {
parseLogsStream(podName, stream, logStream)
// if k8s failed to start steaming logs (typically because Pod is not ready yet)
// then the error should be shown in the UI so that user know the reason
if err != nil {
logStream <- logEntry{line: err.Error()}
} else {
parseLogsStream(podName, stream, logStream)
}
close(logStream)
}()
}

View File

@@ -1,8 +1,8 @@
FROM redis:6.2.1 as redis
FROM redis:6.2.4 as redis
FROM node:12.18.4 as node
FROM golang:1.16.0 as golang
FROM golang:1.16.4 as golang
FROM ubuntu:20.10

View File

@@ -1,3 +1,5 @@
sshd: mkdir -p /var/run/sshd && mkdir -p ~/.ssh && cat ./test/fixture/testrepos/id_rsa.pub > ~/.ssh/authorized_keys && /usr/sbin/sshd -p 2222 -D -e
# To prevent regression of https://github.com/argoproj/argo-cd/pull/6253, we
# start sshd with -o KexAlgorithms=diffie-hellman-group-exchange-sha256
sshd: mkdir -p /var/run/sshd && mkdir -p ~/.ssh && cat ./test/fixture/testrepos/id_rsa.pub > ~/.ssh/authorized_keys && /usr/sbin/sshd -p 2222 -D -e -o KexAlgorithms=diffie-hellman-group-exchange-sha256
fcgiwrap: fcgiwrap -s unix:/var/run/fcgiwrap.socket & sleep 1 && chmod 777 /var/run/fcgiwrap.socket && wait
nginx: nginx -prefix=$(pwd) -g 'daemon off;' -c $(pwd)/test/fixture/testrepos/nginx.conf

View File

@@ -188,15 +188,18 @@ export class App extends React.Component<{}, {popupProps: PopupProps; showVersio
navItems={navItems}
version={() => (
<DataLoader load={() => versionLoader}>
{version => (
<React.Fragment>
<Tooltip content={version.Version}>
<a style={{color: 'white'}} onClick={() => this.setState({showVersionPanel: true})}>
{version.Version}
</a>
</Tooltip>
</React.Fragment>
)}
{version => {
const versionString = version ? version.Version : 'Unknown';
return (
<React.Fragment>
<Tooltip content={versionString}>
<a style={{color: 'white'}} onClick={() => this.setState({showVersionPanel: true})}>
{versionString}
</a>
</Tooltip>
</React.Fragment>
);
}}
</DataLoader>
)}>
<Banner>

View File

@@ -284,8 +284,13 @@ export class PodView extends React.Component<PodViewProps> {
}
const statusByKey = new Map<string, ResourceStatus>();
this.props.app.status.resources.forEach(res => statusByKey.set(nodeKey(res), res));
if (this.props.app) {
this.props.app.status.resources.forEach(res => statusByKey.set(nodeKey(res), res));
}
(tree.nodes || []).forEach((rnode: ResourceTreeNode) => {
// make sure each node has not null/undefined parentRefs field
rnode.parentRefs = rnode.parentRefs || [];
if (sortMode !== 'node') {
parentsFor[rnode.uid] = rnode.parentRefs as PodGroup[];
const fullName = nodeKey(rnode);
@@ -315,7 +320,7 @@ export class PodView extends React.Component<PodViewProps> {
fullName: nodeKey(rnode),
metadata: {name: rnode.name},
spec: {nodeName: 'Unknown'},
health: rnode.health.status
health: rnode.health ? rnode.health.status : 'Unknown'
} as Pod;
// Get node name for Pod

View File

@@ -119,7 +119,7 @@ export function compareNodes(first: ResourceTreeNode, second: ResourceTreeNode)
return Math.sign(numberA - numberB);
}
function getRevision(a: ResourceTreeNode) {
const filtered = a.info.filter(b => b.name === 'Revision' && b)[0];
const filtered = (a.info || []).filter(b => b.name === 'Revision' && b)[0];
if (filtered == null) {
return '';
}

View File

@@ -180,7 +180,7 @@ export class ApplicationsService {
public getDownloadLogsURL(applicationName: string, namespace: string, podName: string, resource: {group: string; kind: string; name: string}, containerName: string): string {
const search = this.getLogsQuery(namespace, podName, resource, containerName, null, false);
search.set('download', 'true');
return `/api/v1/applications/${applicationName}/logs?${search.toString()}`;
return `api/v1/applications/${applicationName}/logs?${search.toString()}`;
}
public getContainerLogs(

View File

@@ -381,6 +381,15 @@ func TestRepositorySecretsTrim(t *testing.T) {
sshPrivateKeySecret:
name: managed-secret
key: sshPrivateKey
tlsClientCertDataSecret:
name: managed-secret
key: tlsClientCertData
tlsClientCertKeySecret:
name: managed-secret
key: tlsClientCertKey
githubAppPrivateKeySecret:
name: managed-secret
key: githubAppPrivateKey
`}
clientset := getClientset(config, &v1.Secret{
ObjectMeta: metav1.ObjectMeta{
@@ -391,9 +400,12 @@ func TestRepositorySecretsTrim(t *testing.T) {
},
},
Data: map[string][]byte{
username: []byte("test-username\n\n"),
password: []byte("test-password\r\r"),
sshPrivateKey: []byte("test-ssh-private-key\n\r"),
username: []byte("test-username\n\n"),
password: []byte("test-password\r\r"),
sshPrivateKey: []byte("test-ssh-private-key\n\r"),
tlsClientCertData: []byte("test-tls-client-cert-data\n\r"),
tlsClientCertKey: []byte("test-tls-client-cert-key\n\r"),
githubAppPrivateKey: []byte("test-github-app-private-key\n\r"),
},
})
db := NewDB(testNamespace, settings.NewSettingsManager(context.Background(), clientset, testNamespace), clientset)
@@ -416,6 +428,18 @@ func TestRepositorySecretsTrim(t *testing.T) {
"test-ssh-private-key",
repo.SSHPrivateKey,
},
{
"test-tls-client-cert-data",
repo.TLSClientCertData,
},
{
"test-tls-client-cert-key",
repo.TLSClientCertKey,
},
{
"test-github-app-private-key",
repo.GithubAppPrivateKey,
},
}
for _, tt := range teststruct {
assert.Equal(t, tt.expectedSecret, tt.retrievedSecret)

View File

@@ -186,11 +186,12 @@ func (db *db) credentialsToRepository(repoInfo settings.Repository) (*appsv1.Rep
GitHubAppEnterpriseBaseURL: repoInfo.GithubAppEnterpriseBaseURL,
}
err := db.unmarshalFromSecretsStr(map[*SecretMaperValidation]*apiv1.SecretKeySelector{
&SecretMaperValidation{Dest: &repo.Username, Transform: StripCRLFCharacter}: repoInfo.UsernameSecret,
&SecretMaperValidation{Dest: &repo.Password, Transform: StripCRLFCharacter}: repoInfo.PasswordSecret,
&SecretMaperValidation{Dest: &repo.SSHPrivateKey, Transform: StripCRLFCharacter}: repoInfo.SSHPrivateKeySecret,
&SecretMaperValidation{Dest: &repo.TLSClientCertData, Transform: StripCRLFCharacter}: repoInfo.TLSClientCertDataSecret,
&SecretMaperValidation{Dest: &repo.TLSClientCertKey, Transform: StripCRLFCharacter}: repoInfo.TLSClientCertKeySecret,
&SecretMaperValidation{Dest: &repo.Username, Transform: StripCRLFCharacter}: repoInfo.UsernameSecret,
&SecretMaperValidation{Dest: &repo.Password, Transform: StripCRLFCharacter}: repoInfo.PasswordSecret,
&SecretMaperValidation{Dest: &repo.SSHPrivateKey, Transform: StripCRLFCharacter}: repoInfo.SSHPrivateKeySecret,
&SecretMaperValidation{Dest: &repo.TLSClientCertData, Transform: StripCRLFCharacter}: repoInfo.TLSClientCertDataSecret,
&SecretMaperValidation{Dest: &repo.TLSClientCertKey, Transform: StripCRLFCharacter}: repoInfo.TLSClientCertKeySecret,
&SecretMaperValidation{Dest: &repo.GithubAppPrivateKey, Transform: StripCRLFCharacter}: repoInfo.GithubAppPrivateKeySecret,
}, make(map[string]*apiv1.Secret))
return repo, err
}
@@ -203,11 +204,12 @@ func (db *db) credentialsToRepositoryCredentials(repoInfo settings.RepositoryCre
GitHubAppEnterpriseBaseURL: repoInfo.GithubAppEnterpriseBaseURL,
}
err := db.unmarshalFromSecretsStr(map[*SecretMaperValidation]*apiv1.SecretKeySelector{
&SecretMaperValidation{Dest: &creds.Username}: repoInfo.UsernameSecret,
&SecretMaperValidation{Dest: &creds.Password}: repoInfo.PasswordSecret,
&SecretMaperValidation{Dest: &creds.SSHPrivateKey}: repoInfo.SSHPrivateKeySecret,
&SecretMaperValidation{Dest: &creds.TLSClientCertData}: repoInfo.TLSClientCertDataSecret,
&SecretMaperValidation{Dest: &creds.TLSClientCertKey}: repoInfo.TLSClientCertKeySecret,
&SecretMaperValidation{Dest: &creds.Username}: repoInfo.UsernameSecret,
&SecretMaperValidation{Dest: &creds.Password}: repoInfo.PasswordSecret,
&SecretMaperValidation{Dest: &creds.SSHPrivateKey}: repoInfo.SSHPrivateKeySecret,
&SecretMaperValidation{Dest: &creds.TLSClientCertData}: repoInfo.TLSClientCertDataSecret,
&SecretMaperValidation{Dest: &creds.TLSClientCertKey}: repoInfo.TLSClientCertKeySecret,
&SecretMaperValidation{Dest: &creds.GithubAppPrivateKey}: repoInfo.GithubAppPrivateKeySecret,
}, make(map[string]*apiv1.Secret))
return creds, err
}

View File

@@ -22,7 +22,6 @@ import (
"gopkg.in/src-d/go-git.v4/plumbing"
"gopkg.in/src-d/go-git.v4/plumbing/transport"
githttp "gopkg.in/src-d/go-git.v4/plumbing/transport/http"
ssh2 "gopkg.in/src-d/go-git.v4/plumbing/transport/ssh"
"gopkg.in/src-d/go-git.v4/storage/memory"
"github.com/argoproj/argo-cd/v2/common"
@@ -203,7 +202,9 @@ func newAuth(repoURL string, creds Creds) (transport.AuthMethod, error) {
if err != nil {
return nil, err
}
auth := &ssh2.PublicKeys{User: sshUser, Signer: signer}
auth := &PublicKeysWithOptions{}
auth.User = sshUser
auth.Signer = signer
if creds.insecure {
auth.HostKeyCallback = ssh.InsecureIgnoreHostKey()
} else {

59
util/git/ssh.go Normal file
View File

@@ -0,0 +1,59 @@
package git
import (
"fmt"
"golang.org/x/crypto/ssh"
gitssh "gopkg.in/src-d/go-git.v4/plumbing/transport/ssh"
)
// List of all currently supported algorithms for SSH key exchange
// Unfortunately, crypto/ssh does not offer public constants or list for
// this.
var SupportedSSHKeyExchangeAlgorithms = []string{
"diffie-hellman-group1-sha1",
"diffie-hellman-group14-sha1",
"ecdh-sha2-nistp256",
"ecdh-sha2-nistp384",
"ecdh-sha2-nistp521",
"curve25519-sha256@libssh.org",
"diffie-hellman-group-exchange-sha1",
"diffie-hellman-group-exchange-sha256",
}
// List of default key exchange algorithms to use. We use those that are
// available by default, we can become more opinionated later on (when
// we support configuration of algorithms to use).
var DefaultSSHKeyExchangeAlgorithms = SupportedSSHKeyExchangeAlgorithms
// PublicKeysWithOptions is an auth method for go-git's SSH client that
// inherits from PublicKeys, but provides the possibility to override
// some client options.
type PublicKeysWithOptions struct {
KexAlgorithms []string
gitssh.PublicKeys
}
// Name returns the name of the auth method
func (a *PublicKeysWithOptions) Name() string {
return gitssh.PublicKeysName
}
// String returns the configured user and auth method name as string
func (a *PublicKeysWithOptions) String() string {
return fmt.Sprintf("user: %s, name: %s", a.User, a.Name())
}
// ClientConfig returns a custom SSH client configuration
func (a *PublicKeysWithOptions) ClientConfig() (*ssh.ClientConfig, error) {
// Algorithms used for kex can be configured
var kexAlgos []string
if len(a.KexAlgorithms) > 0 {
kexAlgos = a.KexAlgorithms
} else {
kexAlgos = DefaultSSHKeyExchangeAlgorithms
}
config := ssh.Config{KeyExchanges: kexAlgos}
opts := &ssh.ClientConfig{Config: config, User: a.User, Auth: []ssh.AuthMethod{ssh.PublicKeys(a.Signer)}}
return a.SetHostKeyCallback(opts)
}