Helper can't be found

Just installed the addon and I get the error ember-initials is not a helper
My project uses a pod structure and ember v2.10
Edit: extending the component does the trick. So it only works if I generate a component and extend the one from the add-on.

Here was a similar problem. http://stackoverflow.com/questions/30323885/component-exposed-in-ember-addon-is-not-recognised-in-ember-app
Are u sure you install this addon through ember install ember-initials instead of adding it to package.json or using npm install ember-initials?
I checked the current version on a new fresh project and it works correctly unless I installed the package via npm.

Hmm... I checked this package on a few real projects and it does work properly.
Could you try to reinstall addon, by removing it from package.json and execute install command again? I read that this could help. I also create a PR #17 which will improve addon private API and maybe this will fix your problem.
But to be honest, I never meet with an issue like that :/

I've installed it using ember install ember-initials tried reinstalling, tried ember generate ember-initials but that just says Unknown blueprint: ember-initials. Tried deleting node_modules and reinstalling with yarn, npm and ember install. Nothing worked. 😢
I also generated a component and extended from the addon to make it work.

Hi @evoactivity,
What version are you using? Do you get the same error: ember-initials is not a helper?
What's your ember-cli and ember version?
From v3.1.0 there is no need to use ember generate ember-initials because the blueprint has been removed as well as blueimp-md5 (bower dependency).
What you need now, is just to edit the version in package.json and npm i. I tested it on 2 projects and it works as expected.
Here is also a working twiddle: https://ember-twiddle.com/205fa2775fa1332248fb530971c65198?openFiles=templates.application.hbs%2C

@exelord
Same error, yep.
Ember-Initials 3.1.0
Ember 2.10.2
ember-cli: 2.10.0
Also using pod structure.
I also setup a twiddle to confirm the addon worked and it did.
https://ember-twiddle.com/17c34feb7342719393d3f1c98a016571?openFiles=application.template.hbs%2C
I think this is probably something unique to our environments and will be very tricky to fix


adds "Adding Documents" upload screen

Pivotal Tracker:  https://www.pivotaltracker.com/story/show/182837559
This is the first screen in the UBI document upload screens section.
We did not remove the existing file upload page, but will revamp it when we get to it.
Also this adds a # to separate sections in the messages. properties files.  Intellij kept reformatting the file on me (Bethany) and removing the blank lines.

I think there's an issue on main and I'm not holding up this work because of it.


Front camera as default not working

Describe the bug
Using the example app when I set the default camera to be 'front' the back camera is still selected by default. I have to double tap the switch camera button to get it in sync and work normally.
To Reproduce
Steps to reproduce the behavior:

Change :const [camera, setCamera] = React.useState<'front' | 'back'>('back');
to:  const [camera, setCamera] = React.useState<'front' | 'back'>('front');
Tap the switch camera  button.
Nothing happens
Tap switch camera button again.
Works as expected.

Expected behavior
The app starts up with the front facing camera.
Smartphone (please complete the following information):

Device: iPhone 8
OS: iOS 14.6

Hi,
This issue have been fixed in v1.1.2.


Make the adjustment of client for the 2nd version of REST API

This issue was moved to odalic/odalic-ui#35


chore: invalidate circleci cache nightly; cache node_modules again

Fixes #1119
This allows us to discover breakages due to external changes from nightly runs, and also should make non-nightly tests run faster.

Force-merging this, as this reveals errors that need to be addressed separately.


Compatible with the new v1 API

change API from 'api/v1/memo' to 'api/v1/memos' to Compatible with the new v1 API
Reference: https://memos.apidocumentation.com/reference#tag/memoservice/post/api/v1/memos

make some small change


kubeadm in self-hosted mode (1.6.1) fails to startup scheduler

I just did a super fresh install of everything but now hit the following issue with kubeadm 1.6.1
A
KUBE_HYPERKUBE_IMAGE=luxas/hyperkube:v1.6.0-and-PR-42911 kubeadm init --config /etc/kubernetes/kubeadm.yml

with /etc/kubernetes/kubeadm.yml (from the README except an extra predefined token)
kind: MasterConfiguration
apiVersion: kubeadm.k8s.io/v1alpha1
token: "3d63a1.d93b1c68af864b80"
networking:
  podSubnet: "<IP_ADDRESS>/16"
#  serviceSubnet: "<IP_ADDRESS>/24"
controllerManagerExtraArgs:
  controllers: "*,-persistentvolume-binder,bootstrapsigner,tokencleaner"
  horizontal-pod-autoscaler-use-rest-clients: "true"
  horizontal-pod-autoscaler-sync-period: "10s"
  node-monitor-grace-period: "10s"
apiServerExtraArgs:
  runtime-config: "api/all=true"
  feature-gates: "TaintBasedEvictions=true"
  proxy-client-cert-file: "/etc/kubernetes/pki/front-proxy-client.crt"
  proxy-client-key-file: "/etc/kubernetes/pki/front-proxy-client.key"
selfHosted: true

leads to
root@n0:/home/pi# KUBE_HYPERKUBE_IMAGE=luxas/hyperkube:v1.6.0-and-PR-42911 kubeadm init --config /etc/kubernetes/kubeadm.yml
[kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters.
[init] Using Kubernetes version: v1.6.0
[init] Using Authorization mode: RBAC
[preflight] Running pre-flight checks
[preflight] Starting the kubelet service
[certificates] Generated CA certificate and key.
[certificates] Generated API server certificate and key.
[certificates] API Server serving cert is signed for DNS names [n0 kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [<IP_ADDRESS> <IP_ADDRESS>]
[certificates] Generated API server kubelet client certificate and key.
[certificates] Generated service account token signing key and public key.
[certificates] Generated front-proxy CA certificate and key.
[certificates] Generated front-proxy client certificate and key.
[certificates] Valid certificates and keys now exist in "/etc/kubernetes/pki"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/kubelet.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/controller-manager.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/scheduler.conf"
[kubeconfig] Wrote KubeConfig file to disk: "/etc/kubernetes/admin.conf"
[apiclient] Created API client, waiting for the control plane to become ready
[apiclient] All control plane components are healthy after 38.382559 seconds
[apiclient] Waiting for at least one node to register
[apiclient] First node has registered after 8.119716 seconds
[self-hosted] Creating self-hosted control plane...
[self-hosted] kube-apiserver DaemonSet current=0, desired=0
[self-hosted] Found 0 self-hosted-kube-apiserver pods
[self-hosted] Found 0 self-hosted-kube-apiserver pods
[self-hosted] Found 0 self-hosted-kube-apiserver pods
....
[self-hosted] Found 1 self-hosted-kube-apiserver pods
[self-hosted] Pod self-hosted-kube-apiserver-jx8s8 status: Pending
[self-hosted] Found 1 self-hosted-kube-apiserver pods
[self-hosted] Pod self-hosted-kube-apiserver-jx8s8 status: Pending
[self-hosted] Found 1 self-hosted-kube-apiserver pods
.....
[self-hosted] Pod self-hosted-kube-apiserver-jx8s8 status: Running
[apiclient] All control plane components are healthy after 19.398582 seconds
[self-hosted] self-hosted kube-apiserver ready after 41.020531 seconds
[self-hosted] Found 0 self-hosted-kube-scheduler pods
[self-hosted] Found 0 self-hosted-kube-scheduler pods
[self-hosted] Found 0 self-hosted-kube-scheduler pods
[self-hosted] Found 0 self-hosted-kube-scheduler pods
[self-hosted] Found 0 self-hosted-kube-scheduler pods
[self-hosted] Found 0 self-hosted-kube-scheduler pods
[self-hosted] Found 1 self-hosted-kube-scheduler pods
[self-hosted] Pod self-hosted-kube-scheduler-2660681130-r0php status: Pending
[self-hosted] Found 1 self-hosted-kube-scheduler pods
[self-hosted] Pod self-hosted-kube-scheduler-2660681130-r0php status: Pending
[self-hosted] Found 1 self-hosted-kube-scheduler pods
[self-hosted] Pod self-hosted-kube-scheduler-2660681130-r0php status: Pending
[self-hosted] Found 1 self-hosted-kube-scheduler pods
[self-hosted] Pod self-hosted-kube-scheduler-2660681130-r0php status: Pending
[self-hosted] Found 1 self-hosted-kube-scheduler pods
.....
(never ending)

which indicates that the scheduler pod doesn't come up. And indeed the problem is that the scheduler pod cannot be scheduled:
root@n0:/home/pi# kubectl get pods --all-namespaces
NAMESPACE     NAME                                          READY     STATUS    RESTARTS   AGE
kube-system   etcd-n0                                       1/1       Running   0          1m
kube-system   kube-controller-manager-n0                    1/1       Running   0          22s
kube-system   kube-scheduler-n0                             1/1       Running   1          1m
kube-system   self-hosted-kube-apiserver-jx8s8              1/1       Running   0          2m
kube-system   self-hosted-kube-scheduler-2660681130-r0php   0/1       Pending   0          1m

root@n0:/home/pi# kubectl describe pod self-hosted-kube-scheduler-2660681130-r0php --namespace=kube-system
Name:		self-hosted-kube-scheduler-2660681130-r0php
Namespace:	kube-system
Node:		/
Labels:		component=kube-scheduler
		k8s-app=self-hosted-kube-scheduler
		pod-template-hash=2660681130
		tier=control-plane
Annotations:	kubernetes.io/created-by={"kind":"SerializedReference","apiVersion":"v1","reference":{"kind":"ReplicaSet","namespace":"kube-system","name":"self-hosted-kube-scheduler-2660681130","uid":"449d6cb5-1917-...
Status:		Pending
IP:
Controllers:	ReplicaSet/self-hosted-kube-scheduler-2660681130
Containers:
  self-hosted-kube-scheduler:
    Image:	luxas/hyperkube:v1.6.0-and-PR-42911
    Port:
    Command:
      /hyperkube
      scheduler
      --address=<IP_ADDRESS>
      --leader-elect=true
      --kubeconfig=/etc/kubernetes/scheduler.conf
    Requests:
      cpu:		100m
    Liveness:		http-get http://<IP_ADDRESS>:10251/healthz delay=15s timeout=15s period=10s #success=1 #failure=8
    Environment:	<none>
    Mounts:
      /etc/kubernetes/ from k8s (ro)
      /etc/ssl/certs from certs (rw)
      /var/lock from var-lock (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-4szsp (ro)
Conditions:
  Type		Status
  PodScheduled 	False
Volumes:
  k8s:
    Type:	HostPath (bare host directory volume)
    Path:	/etc/kubernetes
  certs:
    Type:	HostPath (bare host directory volume)
    Path:	/etc/ssl/certs
  var-lock:
    Type:	HostPath (bare host directory volume)
    Path:	/var/lock
  default-token-4szsp:
    Type:	Secret (a volume populated by a Secret)
    SecretName:	default-token-4szsp
    Optional:	false
QoS Class:	Burstable
Node-Selectors:	node-role.kubernetes.io/master=
Tolerations:	node-role.kubernetes.io/master=:NoSchedule
		node.alpha.kubernetes.io/notReady=:Exists:NoExecute for 300s
		node.alpha.kubernetes.io/unreachable=:Exists:NoExecute for 300s
Events:
  FirstSeen	LastSeen	Count	From			SubObjectPath	Type		Reason		Message
  ---------	--------	-----	----			-------------	--------	------		-------
  1m		42s		8	default-scheduler			Warning		FailedScheduling	no nodes available to schedule pods

Looks like a catch-22 ;-)

these are the logs of the Docker container:
root@n0:/home/pi# docker logs 9552a3fccc4b
I0404 09:16:00.523415       1 leaderelection.go:179] attempting to acquire leader lease...
I0404 09:16:01.711489       1 leaderelection.go:189] successfully acquired lease kube-system/kube-scheduler
I0404 09:16:01.714291       1 event.go:217] Event(v1.ObjectReference{Kind:"Endpoints", Namespace:"kube-system", Name:"kube-scheduler", UID:"2907d1f8-1917-11e7-9f3c-b827ebadcfc2", APIVersion:"v1", ResourceVersion:"388", FieldPath:""}): type: 'Normal' reason: 'LeaderElection' n0 became leader
I0404 09:16:01.715333       1 event.go:217] Event(v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"self-hosted-kube-scheduler-2660681130-r0php", UID:"4671c05b-1917-11e7-8dc6-b827ebadcfc2", APIVersion:"v1", ResourceVersion:"362", FieldPath:""}): type: 'Warning' reason: 'FailedScheduling' no nodes available to schedule pods
I0404 09:16:01.751626       1 event.go:217] Event(v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"self-hosted-kube-scheduler-2660681130-r0php", UID:"4671c05b-1917-11e7-8dc6-b827ebadcfc2", APIVersion:"v1", ResourceVersion:"389", FieldPath:""}): type: 'Warning' reason: 'FailedScheduling' no nodes available to schedule pods
W0404 09:16:01.751239       1 factory.go:533] Request for pod kube-system/self-hosted-kube-scheduler-2660681130-r0php already in flight, abandoning
I0404 09:16:02.734193       1 event.go:217] Event(v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"self-hosted-kube-scheduler-2660681130-r0php", UID:"4671c05b-1917-11e7-8dc6-b827ebadcfc2", APIVersion:"v1", ResourceVersion:"389", FieldPath:""}): type: 'Warning' reason: 'FailedScheduling' no nodes available to schedule pods
I0404 09:16:04.757063       1 event.go:217] Event(v1.ObjectReference{Kind:"Pod", Namespace:"kube-system", Name:"self-hosted-kube-scheduler-2660681130-r0php", UID:"4671c05b-1917-11e7-8dc6-b827ebadcfc2", APIVersion:"v1", ResourceVersion:"389", FieldPath:""}): type: 'Warning' reason: 'FailedScheduling' no nodes available to schedule pods
....

Maybe also interesting that there is also a stopped scheduler container these logs:
Full log
```
docker logs d59b24c9d1a1
E0404 09:14:27.925556       1 reflector.go:201] k8s.io/kubernetes/plugin/pkg/scheduler/factory/factory.go:451: Failed to list *v1.Pod: Get https://<IP_ADDRESS>:6443/api/v1/pods?fieldSelector=spec.nodeName%3D%2Cstatus.phase%21%3DFailed%2Cstatus.phase%21%3DSucceeded&resourceVersion=0: dial tcp <IP_ADDRESS>:6443: getsockopt: connection refused
E0404 09:14:27.927174       1 reflector.go:201] k8s.io/kubernetes/plugin/pkg/scheduler/factory/factory.go:454: Failed to list *v1.Pod: Get https://<IP_ADDRESS>:6443/api/v1/pods?fieldSelector=spec.nodeName%21%3D%2Cstatus.phase%21%3DFailed%2Cstatus.phase%21%3DSucceeded&resourceVersion=0: dial tcp <IP_ADDRESS>:6443: getsockopt: connection refused
I0404 09:14:27.928893       1 leaderelection.go:179] attempting to acquire leader lease...
 Will not report event: 'Normal' 'LeaderElection' 'n0 stopped leading'
I0404 09:15:35.267394       1 leaderelection.go:208] failed to renew lease kube-system/kube-scheduler
F0404 09:15:35.268121       1 server.go:134] lost master
```

Actually this is only an issue when running in self-hosted mode. Without selfHosted: true in the config file it works.
Current status: I'm now back using plain kubeadm 1.6.1 (without your custom hyperkube image) and disabled some features in the config file (like proxy-client-cert-file) since these are not available in for vanilla apiserver 1.6.0.
Now it works, and even weave is happy (because of different machine-ids now).
Now going to try PVs and Ingress (as I guess they don't require your customisations in the adapter hyperkube image ...)
Let me know if I can help further in evaluating the issue with the self-hosted mode.

Known issue. Since the kubelet behaviour changed drastically between beta.4 and rc.1-ish and kubeadm broke fatally as a consequence, we fixed that by breaking self-hosting only in v1.6.1 ;)
It's on my list to do pretty soon, but well, school ;)
As you noted, it will just work fine to disable proxy* and self-hosting if you don't want the API aggregation thing.
Awesome to see you're working on this. When you find flaws, feel free to do a PR as well :+1:

Thanks for the info and for your awesome work on kubeadm and kubernetes in general.
np at all, take your time. School is important. still ;-)
'hope to contribute more, still looking around to get a feeling of the project(s). And yes, spare time  is an issue here, too :)

I could now move from self-hosting to using static pods as normal, so this should be ok now :+1:
Thanks ;)


make fails  - Unable to get qRestAPI from github

-- Build files have been written to: /proj/sw/osgi/ctk/CTK-superbuild
[  1%] Performing download step (git clone) for 'qRestAPI'
github.com[0: <IP_ADDRESS>]: errno=Connection timed out
fatal: unable to connect a socket (Connection timed out)
Initialized empty Git repository in /proj/sw/osgi/ctk/CTK-superbuild/qRestAPI/.git/
github.com[0: <IP_ADDRESS>]: errno=Connection timed out
fatal: unable to connect a socket (Connection timed out)
Initialized empty Git repository in /proj/sw/osgi/ctk/CTK-superbuild/qRestAPI/.git/
github.com[0: <IP_ADDRESS>]: errno=Connection timed out
fatal: unable to connect a socket (Connection timed out)
Initialized empty Git repository in /proj/sw/osgi/ctk/CTK-superbuild/qRestAPI/.git/
-- Had to git clone more than once:
3 times.
CMake Error at qRestAPI-cmake/tmp/qRestAPI-gitclone.cmake:40 (message):
Failed to clone repository: 'git://github.com/commontk/qRestAPI.git'
make[2]: *** [qRestAPI-cmake/src/qRestAPI-stamp/qRestAPI-download] Error 1
make[1]: *** [CMakeFiles/qRestAPI.dir/all] Error 2
make: *** [all] Error 2
[asmith@rtxscplp001 CTK-superbuild]$ ccmake ../CTK-master

@quiccsmith  If this is still an issue, consider re-opening the issue. Thanks. Jc


need a directive to retrieve the area/length of the patch

solved by https://github.com/ReMobidyc/ReMobidyc/pull/300


The clause on line X cannot be reached

This is my project and commit
https://github.com/eksperimental/beam_langs_meta_data/tree/26ecd958475bedd5c0e4204814e7437484acdff4
Error:

lib/beam_langs_meta_data.ex: The clause on line 395 cannot be reached

https://github.com/eksperimental/beam_langs_meta_data/blob/26ecd958475bedd5c0e4204814e7437484acdff4/lib/beam_langs_meta_data.ex#L395
The line is reachable from IEx though

This does not seem to be connected with #72. This means it's likely connected with multiple spec clauses on the function in question, that is josefs/gradualizer#410.


Allow addsb to target other players

In essence this would allow a player to soulbind an item to another player instead of the player holding it.

Modified to set to none and then effect players after thanks to burpingdog1
Fixed with 7a077c4c3ff2ebabe81ad564e2b5a8e038097aff


[MX-13]: Add users and auth users tables

Summary

Add migrations files for the users and auth users tables creation and delete as well.
Update Makefile with more commands about goose migration tool.
Fix type on goose file.
Update docs README.md about goose commands.


couldn't insert emoji between other words

thanks bro 🙃, appreciate your efforts coding this picker .
there's problems:
when i insert a emoji ，it would be added to the tail of the sentence，thats not quite convenient.
plus,the picker is not available to, choose emoji consistently

Thanks for the recommendations, which are in fact needing these improvements, I am adding on demand.
I just don't understand the part where it says "plus, the picker is not available to choose emoji consistently"

hh.. sorry 4 my poor English🤣
i mean it's not very friendly to choose emojis continuously, like typing "🤣🤣🤣"  need 3 times of opening the emoji picker

No problem :rofl:
This behavior only happens on the demo page, it is optional, there is a comment in the code :)


Removes border around  caret in IE10+

Working example in JSbin. Open it using IE: http://jsbin.com/lapakociya/1/edit?html,css,output
Removes border around select caret. Fixes issue #16527
Before and After in IE:

Applied @cvrebert's feedback and tweaked some stuff in df78c8956d16f7128b853cf712f88dc79774d409.


Custom font image displaying in wrong mod

Describe your bug here.

the custom font is from the song "disco", but appears in the next song. this is done using a custom alphabet.png texture
(v0.5.1)
Command Prompt/Terminal logs (if existing)
No response
Are you modding a build from source or with Lua?
Lua
What is your build target?
Windows
Did you edit anything in this build? If so, mention or summarize your changes.
No.

Bug still occurs on Psych Engine  v0.6.3

In the screenshot, the "Doors" mod and the "Turn-Bass" are 2 separate mods. the custom "noisy" font is from "Doors", but it shows in the next mod instead


No "all posts" button using Japanese

Hi Vicky，Thank you for making such a beautiful theme and I really like the theme you made.
There is a problem that bothers me, it is about the appearance of blog contents at home using Japanese.
Almost the whole text of one blog is displayed, and I don't see 'Read more' and 'All Posts'.
I would appreciate it if you could provide me with a solution.

Hello,
I think the reason that the summary is so long is because Hugo's automatic Summary function shows the first 70 words by default. If it is counting words by using whitespace, that will include quite a lot of text for the Japanese language.
To fix this, I would suggest trying to set summaryLength in your site configuration to something shorter.
You can also manually truncate your text in the blog post.
I am not yet sure why "Read More" and "All Posts" does not show up, but I would start with trying the things above.

Dear Vicky,
Thank you for your kind and quick response.
I added summaryLength in my configuration and it works perfectly, thank you.
The reason for "Read More" and "All Posts" button did not show up was the lack of adding the ja.toml file to the i18n/ folder.
I apologize for the inconvenience caused by my lack of front engineering knowledge.
Best regards,

I’m glad to know it worked! Please do ask if you need any other help.


Possible improvement?

Hi, I have a suggestion I would like to propose an adjustment to the library for discussion.
I am using Blade in 2 projects now and I am really happy with how easy to use it is and the great job of boilerplate destruction. :D
My adjustment is to allow for an Arg and a State to be applied to the same variable in a way that the State is applied AFTER the Arg is so it is not overwritten by the Arg bundle stored variable, but instead ends up with the restored state from the State.
I have noticed that this happens the other way around and perhaps there is a way that it can be adjusted to allow for my suggestion?
Perhaps also there is a reason for it being done the way it is that I am unaware of.
I will try and implement it myself but honestly I don't have much idea where to start.
Thanks!

So it seems that if you order things correctly it generates the code and works properly (the way I wanted it to).
For it to restore the State after injecting the Args the @Annotations need to be ordered with the @State first followed by the @Arg:
@State @Arg int mVariableToStateAndArg;
I noticed that this orders the generated classes such that the State restoration is above the Arg injection. I assume (perhaps this is an unsafe assumption) that because of this it gets processed such that the State restoration function is "Weaved" into the onCreate after the super call, and then the Arg injection function is "Weaved" into the onCreate after the super call also, but because the State was already injected the Arg injection will be above it.
Cleaning and rebuilding seemed to order them correctly.
My problem was caused initially by only having the @Arg which I assume didn't get regenerated and the @State was placed after it even though it was above the @Arg where the variable was declared.
Feel free to clarify/confirm my assumptions! :D (perhaps something can be added to the Wiki to inform new users of this?)
Going to close this since it seems not to be an issue.

Hi,
I'm glad it's useful to you.
If you do incremental build, only the newly added annotations will be processed and appropriate code will be weaved.
If you do clean build, you could be able to achieve desired order as you mentioned. I'm not sure (never tried) if annotations are processed in the same order every time you do a clean build.
Honestly, I never used @Arg and @State together :)
I'll look into it.

I will add some extra tests for order of weaved code, when you use multiple annotation.

ok, created issue #7

Awesome thank you!

@GuyDavis90 please feel free to open new issue if you think of any improvement or new feature i could implement.


[Slider] Fix value label display for custom value component

[x] I have followed (at least) the PR section of the contributing guide.

Fixes #17905

@NoNonsense126 Thanks!


How do I check how many background images is in my file?

I wanted to replace the previous background, so I tried several ways, one is by clicking Edit- add background item, but I found that is actually adding other images below the current background, and right now I've found correct way to replace it, but I don't know how to delete the images below.

Indeed 'add background' is a bit odd. We added it to mock the AnimSchool function and help transition for animators doing the migration.
Actually the DW Picker is working differently, so there is no way to him to discriminate which item is the background as far it is the same object than any other button. There is no limit in the images you can put.
To edit those 'non interactive' items, you have to uncheck this button in the advanced editor toolbar:

They will become selectable, resizable and editable.

ok thanks


Popup menu (showMenuTooltip) crashes on ios

I have a popup menu in my appbar but when I run the app on the ios simulator, I get this weird error that is resolved as soon as I hot restart the app, from that moment on it works fine. However I do not get this error on Android. Here is the exception it throws.

Please add the output of flutter doctor -v and if possible the code that allows to reproduce.

Flutter Doctor
[✓] Flutter (Channel beta, v0.5.1, on Mac OS X 10.13.5 17F77, locale en-PH)
• Flutter version 0.5.1 at /Users/sam/Library/Developer/Flutter/flutter
• Framework revision c7ea3ca377 (8 weeks ago), 2018-05-29 21:07:33 +0200
• Engine revision 1ed25ca7b7
• Dart version 2.0.0-dev.58.0.flutter-f981f09760
[✓] Android toolchain - develop for Android devices (Android SDK 26.0.3)
• Android SDK at /Users/sam/Library/Developer/Xamarin/android-sdk-macosx
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-27, build-tools 26.0.3
• ANDROID_HOME = /Users/sam/Library/Developer/Xamarin/android-sdk-macosx
• Java binary at: /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/bin/java
• Java version Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
• All Android licenses accepted.
[✓] iOS toolchain - develop for iOS devices (Xcode 9.4.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 9.4.1, Build version 9F2000
• ios-deploy 1.9.2
• CocoaPods version 1.5.0
[✗] Android Studio (not installed)
• Android Studio not found; download from https://developer.android.com/studio/index.html
(or visit https://flutter.io/setup/#android-setup for detailed instructions).
[✓] IntelliJ IDEA Community Edition (version 2018.1.6)
• IntelliJ at /Applications/IntelliJ IDEA CE.app
• Flutter plugin version 26.0.2
• Dart plugin version 181.4892.1
[!] VS Code (version 1.25.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension not installed; install from
https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter
[✓] Connected devices (1 available)
• iPhone X • 6F725D2F-CC68-48E0-8DB4-1C38DE8E302D • ios • iOS 11.4 (simulator)

This issue is still present in latest version of Flutter

Sounds like similar behavior as #19551

It seems fixed with the latest version of Flutter. Will close


:bug: downgrade yip

What this PR does / why we need it:
Looks like yip 1.x is not working as expected, skipping stages and whatnot
This downgrades it to a know working 0.11.x version until those issues are fixed
Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes #

Related to https://github.com/mudler/yip/issues/67

only unit-test failing and not related to this PR, merging


Adding AccessTokenProvider interface and changing authentication structure to composition

fixes #1006

Thanks for taking a stab at that. On top of the comments I already added, how comfortable would you be to do it for the other languages? Could you also add a changelog entry please?

I will add this for other languages too.

thanks, I'll try to land a hand as soon as I'm finished with #1041

Actually, let's divide an conquer, @andrueastman can you reflect the changes for dotnet in a separate PR targeting this branch please? I'll do the same for Java and Go in another branch while Nikitha addresses the typescript comments here.

correction I've put together #1050 which covers java, go, dotnet and the docs.

@nikithauc FYI I've just merged #1050 into this pull request.
Don't worry about rebasing for now (I can see conflicts for the package files), we'll do it a final time once #1051 is wrapped up and merged and once we've bumped versions for all other languages.

one thing left besides #1051, rebase and version bump is the changelog entry @nikithauc

@nikithauc @Ndiritu @andrueastman I just merged in #1051 and rebased off of main. I have yet to bump version numbers (I'll do that later)
Can you take one last look at that and let me know whether I messed up anything during the rebase (the only conflicts were for typescript due to other changes).

@nikithauc @Ndiritu @andrueastman I just merged in #1051 and rebased off of main. I have yet to bump version numbers (I'll do that later) Can you take one last look at that and let me know whether I messed up anything during the rebase (the only conflicts were for typescript due to other changes).

PHP looks good

@nikithauc @Ndiritu @andrueastman I just merged in #1051 and rebased off of main. I have yet to bump version numbers (I'll do that later) Can you take one last look at that and let me know whether I messed up anything during the rebase (the only conflicts were for typescript due to other changes).

Sorry I missed this @baywet. This looks good to me for dotnet.
As you mentioned, we now just need to bump version numbers for Abstractions, Authentication and Http libraries for dotnet.

thanks @nikitauc @andrueastman @Ndiritu @SilasKenneth @samwelkanda for the extended collaboration on this PR (and related ones), merged! 🥳🙌
(working on releasing the packages as we speak)


Improved Performance in go-libp2p-kad-dht: New Feature Reduces PUT/Provide Latencies to <1s

Hi 4everland Devs,
This is Dennis from Protocol Labs. I wanted to inform you about an exciting update regarding the go-libp2p-kad-dht implementation, which I believe you are currently using. As part of our continuous efforts to enhance performance, we have introduced a new experimental feature that significantly improves the PUT/Provide latencies.
Previously, the DHT's PUT performance was known to be rather sluggish, often taking more than 10 seconds or even minutes. However, with the latest release of go-libp2p-kad-dht >v0.23.0, we have introduced a feature called "Optimistic Provide." This feature has demonstrated great results, bringing the latencies down to less than 1 second in the 50th percentile and less than 1.4 seconds in the 90th percentile.
While I'm unaware of the specific requirements of your use case or whether the previous latencies posed any challenges for you, I wanted to ensure that you are aware of this improvement.
If you have any questions or would like more information about this new feature, please don't hesitate to reach out.
Cheers,
Dennis

very good

Hi @dennis-tra, We have noticed that dht has affected our performance, We have been trying to use the index provider recently
https://github.com/ipni/index-provider
https://github.com/ipni/storetheindex
but after testing, it does not integrate well with Kubo itself,  We will try to introduce "Optimal Provide".

Hi @cachalots, great that you want to try this new Optimistic Provide approach! Let me know how that goes and what your experiences are.
If you have the time, I'd love to know more information about how the DHT has affected your performance and why the indexers don't integrate well with Kubo

Hi @dennis-tra,
I tested it at the beginning of this month, and at that time, cid. contact did not support index provider's /routing/v1/providers/{cid} routing access, only supported storetheindex's /cid/{cid} routing access, which caused Kubo's HTTP FindProviders to always fail. I just tried to access it and it has already been supported.
https://github.com/ipfs/kubo/blob/92f651fda94970043a3e1272de491756c0f42a5e/core/node/libp2p/routingopt.go#L34
I flipped through the Kubo code and found that endpoints cannot be passed through configuration in the default code, so I modified the defaultHTTPRouters to point to the endpoints in our index provider, After testing, I found that the index provider did not implement the FindProviders API.
https://github.com/ipni/index-provider/blob/72cfffcf8c6fbe59ed073352f109b24f067cd950/delegatedrouting/listener.go#L266

The cid.contact does not provide the FindProviders API (it is now available).
Kubo cannot configure HTTP provider endpoints.
The index provider does not implement the FindProviders API.
After the index provider is published, it seems that cid.contact will not be included either.

@cachalots
cid.contact has supported /routing/v1/providers from the early inception of IPFS HTTP delegated routing. It works through a loa balancing service. You should be able to test this yourself , e.g.:
$ curl -s https://cid.contact/routing/v1/providers/bafkreid2afmtbcfjioljdxwxd5zccg3d5dpr76zaksqfhuyff5oebw4osi | jq
{
  "Providers": [
    {
      "Protocol": "transport-bitswap",
      "Schema": "bitswap",
      "ID": "QmQzqxhK82kAmKvARFZSkUVS6fo9sySaiogAnx5EnZ6ZmC",
      "Addrs": [
        "/dns4/elastic.dag.house/tcp/443/wss"
      ],
      "Metadata": "gBI="
    },
    {
      "Protocol": "unknown",
      "Schema": "unknown",
      "ID": "QmUA9D3H7HeCYsirB3KmPSvZh3dNXMZas6Lwgr4fv1HTTp",
      "Addrs": [
        "/dns4/dag.w3s.link/tcp/443/https"
      ]
    }
  ]
}

The above covers lookup through cid.contact. As for providing records to it, have you tried this?

@masih Of course, I modified the code of Kubo and passed my httpRouter to ProvideRouter for testing. From the index provider log, it can be seen that the index provider received my provide request and published it a few minutes later.
From my understanding of index provider, it is to publish records to other nodes through a scheduled task to the/indexer/ingest/mainnet topic of libp2p pubub. But every once in a while after publishing, I go to cid.contact to request that the cid I have published is still 404 not found, and cid.contact doesn't seem to listen to the topic to include my published cid

For Gossipsub announcements to work, there needs to be a connection between your node and cid.contact libp2p instance.
Alternatively you can use HTTP publisher directly to cid.contact, which should pick up notifications typically in order of seconds.

Folks are happy to help debug this. Ping us at #ipni on FileCoin Slack.

For Gossipsub announcements to work, there needs to be a connection between your node and cid.contact libp2p instance.
Alternatively you can use HTTP publisher directly to cid.contact, which should pick up notifications typically in order of seconds.

Folks are happy to help debug this. Ping us at #ipni on FileCoin Slack.

Thanks, when we refocus on this part, I will go to Slack for help.

@masih Hello, I don't have a email related to Filecoin Slack. Can you send me an invitation?

Have you tried https://filecoin.io/slack ?


Error after Update-Database command

After I enter the Update-Database command in the PMC I get the following error:
CREATE FILE encountered operating system error 5(Access is denied.) while attempting to open or create the physical file 'C:\Users\mrwilMvcMovieContext-5dda2acf-f45e-4b88-bcfc-3fcd49610910.mdf'.
CREATE DATABASE failed. Some file names listed could not be created. Check related errors.
I'm stuck here. Where did I go wrong?

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 1d975a83-1550-b284-d0d8-7fe2ea206ff5
Version Independent ID: 48e81b42-7c2b-afbf-71e6-d4f442a4bd1f
Content: Add a model to an ASP.NET Core MVC app
Content Source: aspnetcore/tutorials/first-mvc-app/adding-model.md
Product: aspnet-core
GitHub Login: @Rick-Anderson
Microsoft Alias: riande

@williab3  see https://github.com/aspnet/EntityFramework6/issues/384
Do you have the latest released VS and .NET Core SDK?
cc @ErikEJ

I have all of the updates. How do I verify that I have the latest versions?

For VS  Help > Check for Updates
For the SDK
dotnet --version
and compare to the latest version

Suggest you look at SQL Server update
https://support.microsoft.com/en-us/help/4342123/cumulative-update-10-for-sql-server-2017
Works for all SQL Server versions (including Express)
I had same problem and the cumulative upgrade (CU 10) fixed the issue and code ran fine.


Render history

This PR does a few major things:

renders a visual history based on user responses, using the renderHistory() function in engine.js. This essentially redraws the history after every click using the state array
builds history in the .wand-history ordered list, and pushes all of the node renderings into .wand-node-container - preparing us for styling
starts building out some CSS because I can't stand looking at those un-styled buttons :stuck_out_tongue_winking_eye:

There are two new utility functions as well:

wand.util.getNodeObject(nodeId), which is essentially a node search, that returns the entire node object based on Id - currently used in the history renderings
wand.util.createElem(type, className, innerHTML) for simplifying the DOM element creation process - returns a DOM object

This is a pretty big PR, and @bsmithgall asked me to build off of api. Tests are currently not working, and I would be happy to split this into different PR's for the different features (especially since styles come along with this).

:sob:

I TAKE BACK EVERYTHING I SAID

YOU CAN'T TAKE IT BACK! NOT NOW!


Add GitHub Actions to enforce linting and unit tests on PR

Is your feature request related to a problem? Please describe.
As a developer, I want to ensure consistent styling and unit tests pass before merging branches to main/dev.
Describe the solution you'd like
Add GitHub Actions to enforce:

npm run test:coverage returns all tests pass and test coverage threshold is met
npm run lint returns no styling issues

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

related to #96


disable Jacoco and have premerge use snapshots jar

Signed-off-by: Thomas Graves<EMAIL_ADDRESS>

build

build


Create New Project_ Speaking Dictionary

Description
Hello, I am a freshman in college and learning this open-source system and Github,
This is my first time contributing to GitHub,
and I would like to try to create a new project called Speaking Dictionary.
If there is any problem, please contact or leave a comment. Thank you.
Type of issue

[x] Feature (New Script)
[ ] Bug
[ ] Documentation

Checklist:

[x] I have read the project guidelines.
[x] I have checked all the existing projects, before submitting a new project issue.
[x] I have checked previous issues to avoid duplicates.
[x] This issue will be meaningful for the project.

Thanks! Have a great day!


Enable GWT logging in JsComp.gwt.xml

This enables printing of errors / warnings to the browser's console from
gwt_demo.html.

I thought we were already printing them to a  on the page or something?

Not yet in the open-source gwt_demo.html. Not sure about internal usage :)


Delete with start/end support

This patch allows for support of start and end times for delete searchs:
https://gist.github.com/cyphunk/7e9257e6d81ce3fc230d
Examples:

gcalcli delete "search string" --calendar "my calendar" 2014-05-18 "30 days" --iamaexpert

I chose not to create a fork to submit this because I do not work actively with this tool. And I understand this may mean no one cares to integrate this feature. But here it is if someone searches for it.

My only concern with this is the change of the default behavior.  Can you make the default None for start/end to maintain how it's been working?  Also, can you open this as a pull request vs a patch?  Thanks!


Recording audio

Hello,
I should record audio as well as video.
Please could you help me to record audio from microphone?
Thanks you for this project.
Simeon

I should add microphone audio in a ts file.
If anyone has an idea how to do it, please tell me.
Thanks


Fixed the build issues related to adding past events and partners page

@rohin079 I have added the imports for router, Navbar and Footer

@AshiqNoor-S The build has failed again, please try to run "npm run build" command in your local machine before pushing the changes so you can be sure the build doesn't fail.
Also i had reverted back your last PR so those files were not pushed (Past events and parteners page), kindly push them too along with the required changes. Thanks:)


chore: update examples with unhandleFailed

Updates examples and VirtualMultisigRune to use unhandleFailed where the hash isn't required from finalized

We'll tackle the error-handling story more holistically following #624. Let's close this for now.


Fix Lunar Lander termination criteria

Description
This fixes lunar lander termination criteria.
Fixes this

@pseudo-rnd-thoughts I'm not sure if that's an ideal thing to do. As it stands the environment doesn't check for when the lander goes out of the map in the y direction, only x. So in theory, the lander could be y = 1000 and the environment would still be valid as long as x is in [-1, 1]. If we change the bounds, what it should be is kind of weird since no matter what number we give it, there will always be a valid y value outside of that.
The change I made simply makes it so that the environment additionally checks the y coordinate. I agree that this requires a version bump though.

I agree that it doesn't make much sense in terms of visualisation currently but this doesn't break the environment specification as it is currently. To me, the cost of version bumping to benefit of adding this is too much
Therefore, I would set the y bound to something quite high, 1000 which is difficult to achieve

That's fair, I'll modify the bounds then. Although I should mention that in some instances, the observation space bounds are used for normalisation of the observation itself, so this may result in previously trained models performing differently. Although, agreed that just changing the bounds is a less disruptive change.

We have modified the observation two or three times over the last few versions (which we should note somewhere)


Exception on start of powertoys run

Microsoft PowerToys version
main commit #5a4822f89
Running as admin

[X] Yes

Area(s) with issue?
PowerToys Run
Steps to reproduce
Start powertoys and/or enable powertoys run
✔ Expected Behavior
No exception
❌ Actual Behavior
Dialog with something went wrong:
Version: <IP_ADDRESS>
OS Version: Microsoft Windows NT 10.0.19043.0
IntPtr Length: 8
x64: True
Date: 17-Nov-21 23:05:59
Exception:
System.ArgumentException: An item with the same key has already been added. Key: B4D3B69656E14D44865C8D818EAE47C4
   at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
   at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
   at System.Linq.Enumerable.ToDictionary[TSource,TKey](IEnumerable`1 source, Func`2 keySelector, IEqualityComparer`1 comparer)
   at PowerLauncher.SettingsReader.UpdateSettings(PowerLauncherSettings settings) in C:\source\github\powertoys\src\modules\launcher\PowerLauncher\SettingsReader.cs:line 209
   at PowerLauncher.SettingsReader..ctor(PowerToysRunSettings settings, ThemeManager themeManager) in C:\source\github\powertoys\src\modules\launcher\PowerLauncher\SettingsReader.cs:line 43
   at PowerLauncher.App.<>c__DisplayClass14_0.<OnStartup>b__0() in C:\source\github\powertoys\src\modules\launcher\PowerLauncher\App.xaml.cs:line 124
   at Wox.Infrastructure.Stopwatch.Normal(String message, Action action) in C:\source\github\powertoys\src\modules\launcher\Wox.Infrastructure\Stopwatch.cs:line 47
   at PowerLauncher.App.OnStartup(Object sender, StartupEventArgs e) in C:\source\github\powertoys\src\modules\launcher\PowerLauncher\App.xaml.cs:line 154
   at System.Windows.Application.OnStartup(StartupEventArgs e)
   at System.Windows.Application.<.ctor>b__1_0(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

2021-11-17.txt
Other Software
No response

It seems you are building your own version of PowerToys and there are duplicate key entries for plugins in the PowerToys Run.
Please try the following steps:

Uninstall PowerToys.
Check if there is anything left in %ProgramFiles%\PowerToys, if so, delete the entire folder.
Re-install PowerToys.

Thank you.

This is the Folder plugin.  Wondering if maybe a settings was tweaked and a race condition maybe happened?


[BUG] Unable to pcie passthrough 2x 1080ti on 1 VM

Describe the bug
Two gpus of the same type (such as 2x 1080ti) are on a node. When the PCIE passthrough is selected, the same Device ID  will be assigned to the two gpus.
When editing the virtual machine configuration and selecting the PCIE passthrough device, you can only select one gpu with the same name, not multiple gpus
To Reproduce
Steps to reproduce the behavior:

Advanced-->PCI Device-->filter"NVIDIA"
2.Virtual Machines-->Edit Config -->PCI Devices -->Available PCI Devices

related docs:
https://kubevirt.io/user-guide/virtual_machines/host-devices/#nvme-pci-passthrough
Currently, the KubeVirt device plugin doesn't allow the user to select a specific device by specifying the address. Therefore, if multiple NVMe devices with the same vendor and product id exist in the cluster, they could be randomly assigned to a VM. If the devices are not on the same node, then the nodeSelector mitigates the issue

related docs: https://kubevirt.io/user-guide/virtual_machines/host-devices/#nvme-pci-passthrough
Currently, the KubeVirt device plugin doesn't allow the user to select a specific device by specifying the address. Therefore, if multiple NVMe devices with the same vendor and product id exist in the cluster, they could be randomly assigned to a VM. If the devices are not on the same node, then the nodeSelector mitigates the issue

Now, I can add 2 1080ti in a VM by editing the VM's yaml.

But it seems that we can't add a second GPU through this Harvester UI .
We can't select the second GPU in this page ' PCI Device'.

Now, I can add 2 1080ti in a VM by editing the VM's yaml.

Can you see 2 1080Ti inside the VM (not yaml)?

yes ,it' works

This will be solved by the DevicePlugin I am working on in this HEP.

This also requires UI changes to enable the user to request multiple devices with the resourceName

This is currently handled by PR 35. Multiple instances of the same device will get counted, and then they can be requested by the VM.

Tested in v1.1-510a0256-head. When I enabled the pcidevices addon there was no list of devices. I think this might be a UI issue, but I can't test because the external ui-source is broken #3618 .

supportbundle_75442969-7c14-4617-8ea7-a13fb7d17276_2023-03-09T03-42-45Z.zip

Hi @noahgildersleeve ! May I know the Get requests of /v1/harvester/devices.harvesterhci.io.pcidevices and /v1/harvester/devices.harvesterhci.io.pcideviceclaims respond successfully?
Hi @tlehman ! Could you help us to confirm the environment of @noahgildersleeve is ready for enabling PCI Passthrough?

@DaiYuzeng Sure,
pcidevices:
fetch("https://<IP_ADDRESS>/v1/harvester/devices.harvesterhci.io.pcidevices", {
  "headers": {
    "accept": "application/json",
    "accept-language": "en-US,en;q=0.9",
    // sec headers scrubbed for security
  },
  "referrer": "https://<IP_ADDRESS>/dashboard/harvester/c/local/devices.harvesterhci.io.pcidevice",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": null,
  "method": "GET",
  "mode": "cors",
  "credentials": "include"
});

pcideviceclaims
fetch("https://<IP_ADDRESS>/v1/harvester/devices.harvesterhci.io.pcideviceclaims", {
  "headers": {
    "accept": "application/json",
    "accept-language": "en-US,en;q=0.9",
    // sec headers scrubbed for security
  },
  "referrer": "https://<IP_ADDRESS>/dashboard/harvester/c/local/devices.harvesterhci.io.pcidevice",
  "referrerPolicy": "strict-origin-when-cross-origin",
  "body": null,
  "method": "GET",
  "mode": "cors",
  "credentials": "include"
});

Thank you @tlehman ! May I know the response body of these two requests? I can't access this env... I would like to confirm that there are some PCI devices on this env.

Tested with v1.1-e1905897-head on single node physical server with NICS.
Verification Steps

Enable PCI devices
Enable passthrough on two NICs with same vendor ID

Add both NICs to new VM

Check that NICs are both showing up in VM


Building a Search Engine with Bookshelfjs

Related Issues: #IssueNumber if necessary

Introduction
I want to build a search engine that returns Requests by matching names in the Users, Projects, and Components tables.
User:
* ID
* Name

Projects
* ID
* Name

Requests
* ID
* UserID (Has One)
* ProjectID (Has One)
* Components (Has Many)

Component
* ID
* Name

Issue Description
I found a way to chain 2 queries together from here: https://bookshelfjs.org/api.html#Model-instance-hasOne. I'm not sure what it would look like to do this over multiple tables.
Is there a way to execute this using a single query? I may have more tables added in the future and I don't want to be making a query for every single one.

Nevermind, found a similar ticket
https://github.com/bookshelf/bookshelf/issues/677


install abends if config yaml uses 2 spaces for indentation

I've just found out that I get the following errors, if the install.conf.yaml uses 2 spaces for indentation rather than 4.
All targets have been cleaned
An error was encountered while executing action link
'NoneType' object has no attribute 'get'
Action link not handled
An error was encountered while executing action create
'NoneType' object has no attribute 'get'
Action create not handled
An error was encountered while executing action link
'NoneType' object has no attribute 'get'
Action link not handled

I thought the config yaml file has to be a valid yaml file, but apparently this is not the case.
It specifically requires an indentation with 4 spaces. @anishathalye can you please shed some light on this? According to every yaml validator my config file is valid, but install abends with the above messages. All is well again, when I change to 4 spaces.

Could you share (a potentially redacted) version of your YAML file here, or if you're not comfortable sharing publicly, email it to me?

@tessus My guess is that your file looks like this:
- link:
  ~/.bashrc: bash/bashrc.sh

This is valid YAML because YAML defaults to null when a key has no value:
[
  {
    "link": None,
    "~/.bashrc": "bash/bashrc.sh"
  }
]

However, this is not well-formed because it doesn't parse to dotbot's required format.
If your file looks like the above, please close this issue because it's not a dotbot problem.

For reference, this is correct syntax using 2-space indentation:
- link:
    ~/.bashrc: bash/bashrc.sh

and this is the correct syntax using 4-space indentation:
-   link:
        ~/.bashrc: bash/bashrc.sh

which parses to:
[
  {
    "link": {"~/.bashrc": "bash/bashrc.sh"}
  }
]

Yes, my file looks like that. Why? Because 2 spaces are used for indentation. ;-)
But thank you. Your explanation makes sense. Now I only have to figure out how I explain this to every editor that uses .editorconfig with
[*.yaml]
indent_style = space
indent_size = 2

Super! Please close this issue.

I still think this is a dotbot issue. Ansible parses files with 2 spaces just fine.


Submit the new FOM user to KC

Having selected user and role

retrieve the user object from the user pulldown component
retrieve role object from the role pulldown object
create a service that recieves the request and sends to Keycloak

Gbola and Kevin to determine path forward - FOM or FAM?


Limit for events on token endpoint?

In the graphql playground I can see that I can add pagination input for events when querying the token endpoint, how would I accomplish this with the zdk? At the moment I only receive 10 events back, and I was hoping to either be able to paginate them or just set a somewhat high limit.

@webel the response from ZDK has cursor-based pagination baked in, so you can fetch additional pages by incrementing with the cursor. There's a fairly robust working example up at https://github.com/ourzora/nouns-marketplace/blob/main/%40filter/hooks/useTokensQuery.ts, for reference. It uses the useSWRInfinite hook to manage refreshing, which is super flexible.
Pertinent bits:
async function getNFTs(query: TokensQueryArgs): Promise<GetNFTReturnType> {
  const resp = await zdk.tokens(query)
  const tokens = resp.tokens.nodes
    /* @ts-ignore */
    .map((token) => transformNFTZDK(token, { rawData: token }))
    .map(prepareJson)
  return {
    tokens,
    nextCursor: resp.tokens.pageInfo.endCursor,  // <-- PASS THIS INTO PAGINATION
  }
}

and then note how the cursor is passed in as the after value:
      pagination: {
        after: previousPageData?.nextCursor,
        limit: PAGE_SIZE,
      },

Hm, that looks like the top-level pagination for the nft endpoint, I was wondering more if I could get the next cursor for one of the nested returns (events). I guess I might just have to call events endpoint directly?

Ah, yes, missed that. sorry. Yes, targeting events separately would be the way to go here.


feat(security): Fix redis start issue from #2863

Now redis starts with conf file with credentials and thus insecure gap is removed

Refactor security-bootstrap-redis to be absorbed into security-bootstrapper as one of commands
Remove security-bootstrap-redis binary build
Redis db server starts with config file with credentials
Update snaps

Closes: #2863
Signed-off-by: Jim Wang<EMAIL_ADDRESS>PR Checklist
Please check if your PR fulfills the following requirements:

[x ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features)

If your build fails due to your commit message not passing the build checks, please review the guidelines here: https://github.com/edgexfoundry/edgex-go/blob/master/.github/Contributing.md.
What is the current behavior?

Redis server starts insecurely as it is not started in authenticated mode.
Issue Number: #2863
What is the new behavior?
Now Redis server starts with credentials in conf file and thus it is started securely.
Does this PR introduce a breaking change?

[ ] Yes
[x ] No

New Imports

[ ] Yes
[x ] No

Specific Instructions
Are there any specific instructions or things that should be known prior to reviewing?
Local docker test file:
networks:
  edgex-network:
    driver: bridge
services:
  app-service-rules:
    container_name: edgex-app-service-configurable-rules
    depends_on:
    - consul
    - data
    environment:
      BINDING_PUBLISHTOPIC: events
      CLIENTS_COMMAND_HOST: edgex-core-command
      CLIENTS_COREDATA_HOST: edgex-core-data
      CLIENTS_DATA_HOST: edgex-core-data
      CLIENTS_METADATA_HOST: edgex-core-metadata
      CLIENTS_NOTIFICATIONS_HOST: edgex-support-notifications
      CLIENTS_RULESENGINE_HOST: edgex-kuiper
      CLIENTS_SCHEDULER_HOST: edgex-support-scheduler
      CLIENTS_VIRTUALDEVICE_HOST: edgex-device-virtual
      DATABASES_PRIMARY_HOST: edgex-redis
      EDGEX_PROFILE: rules-engine
      EDGEX_SECURITY_SECRET_STORE: "false"
      MESSAGEBUS_SUBSCRIBEHOST_HOST: edgex-core-data
      REGISTRY_HOST: edgex-core-consul
      SERVICE_HOST: edgex-app-service-configurable-rules
      SERVICE_PORT: 48100
    hostname: edgex-app-service-configurable-rules
    image: nexus3.edgexfoundry.org:10004/docker-app-service-configurable:master
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:48100:48100/tcp
    read_only: true
    security_opt:
    - no-new-privileges:true
    user: 2002:2001
  command:
    command: /core-command -cp=consul.http://edgex-core-consul:8500 --registry --confdir=/res
    container_name: edgex-core-command
    depends_on:
    - consul
    - database
    - metadata
    - secretstore-setup
    - security-bootstrapper
    entrypoint:
    - /edgex-init/ready_to_run_wait_install.sh
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      CLIENTS_COMMAND_HOST: edgex-core-command
      CLIENTS_COREDATA_HOST: edgex-core-data
      CLIENTS_DATA_HOST: edgex-core-data
      CLIENTS_METADATA_HOST: edgex-core-metadata
      CLIENTS_NOTIFICATIONS_HOST: edgex-support-notifications
      CLIENTS_RULESENGINE_HOST: edgex-kuiper
      CLIENTS_SCHEDULER_HOST: edgex-support-scheduler
      CLIENTS_VIRTUALDEVICE_HOST: edgex-device-virtual
      DATABASES_PRIMARY_HOST: edgex-redis
      EDGEX_SECURITY_SECRET_STORE: "true"
      PROXY_SETUP_HOST: edgex-proxy-setup
      REGISTRY_HOST: edgex-core-consul
      SECRETSTORE_HOST: edgex-vault
      SECRETSTORE_PORT: '8200'
      SECRETSTORE_TOKENFILE: /tmp/edgex/secrets/edgex-core-command/secrets-token.json
      SERVICE_HOST: edgex-core-command
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: edgex-core-command
    image: edgexfoundry/docker-core-command-go:0.0.0-dev
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:48082:48082/tcp
    read_only: true
    security_opt:
    - no-new-privileges:true
    user: 2002:2001
    volumes:
    - edgex-init:/edgex-init:ro,z
    - /tmp/edgex/secrets/edgex-core-command:/tmp/edgex/secrets/edgex-core-command:ro,z
  consul:
    container_name: edgex-core-consul
    depends_on:
    - security-bootstrapper
    - vault
    entrypoint:
    - /edgex-init/consul_wait_install.sh
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      EDGEX_SECURITY_SECRET_STORE: "true"
      PROXY_SETUP_HOST: edgex-proxy-setup
      SECRETSTORE_HOST: edgex-vault
      SECRETSTORE_PORT: '8200'
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: edgex-core-consul
    image: consul:1.9.1
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:8500:8500/tcp
    read_only: true
    security_opt:
    - no-new-privileges:true
    volumes:
    - consul-config:/consul/config:z
    - consul-data:/consul/data:z
    - edgex-init:/edgex-init:ro,z
    - /tmp/edgex/secrets/edgex-consul:/tmp/edgex/secrets/edgex-consul:ro,z
    - /tmp/edgex/secrets/edgex-kong:/tmp/edgex/secrets/edgex-kong:ro,z
  data:
    command: /core-data -cp=consul.http://edgex-core-consul:8500 --registry --confdir=/res
    container_name: edgex-core-data
    depends_on:
    - consul
    - database
    - metadata
    - secretstore-setup
    - security-bootstrapper
    entrypoint:
    - /edgex-init/ready_to_run_wait_install.sh
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      CLIENTS_COMMAND_HOST: edgex-core-command
      CLIENTS_COREDATA_HOST: edgex-core-data
      CLIENTS_DATA_HOST: edgex-core-data
      CLIENTS_METADATA_HOST: edgex-core-metadata
      CLIENTS_NOTIFICATIONS_HOST: edgex-support-notifications
      CLIENTS_RULESENGINE_HOST: edgex-kuiper
      CLIENTS_SCHEDULER_HOST: edgex-support-scheduler
      CLIENTS_VIRTUALDEVICE_HOST: edgex-device-virtual
      DATABASES_PRIMARY_HOST: edgex-redis
      EDGEX_SECURITY_SECRET_STORE: "true"
      PROXY_SETUP_HOST: edgex-proxy-setup
      REGISTRY_HOST: edgex-core-consul
      SECRETSTORE_HOST: edgex-vault
      SECRETSTORE_PORT: '8200'
      SECRETSTORE_TOKENFILE: /tmp/edgex/secrets/edgex-core-data/secrets-token.json
      SERVICE_HOST: edgex-core-data
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: edgex-core-data
    image: edgexfoundry/docker-core-data-go:0.0.0-dev
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:5563:5563/tcp
    - <IP_ADDRESS>:48080:48080/tcp
    read_only: true
    security_opt:
    - no-new-privileges:true
    user: 2002:2001
    volumes:
    - edgex-init:/edgex-init:ro,z
    - /tmp/edgex/secrets/edgex-core-data:/tmp/edgex/secrets/edgex-core-data:ro,z
  database:
    container_name: edgex-redis
    depends_on:
    - secretstore-setup
    - security-bootstrapper
    entrypoint:
    - /edgex-init/redis_wait_install.sh
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      CLIENTS_COMMAND_HOST: edgex-core-command
      CLIENTS_COREDATA_HOST: edgex-core-data
      CLIENTS_DATA_HOST: edgex-core-data
      CLIENTS_METADATA_HOST: edgex-core-metadata
      CLIENTS_NOTIFICATIONS_HOST: edgex-support-notifications
      CLIENTS_RULESENGINE_HOST: edgex-kuiper
      CLIENTS_SCHEDULER_HOST: edgex-support-scheduler
      CLIENTS_VIRTUALDEVICE_HOST: edgex-device-virtual
      DATABASECONFIG_NAME: redis.conf
      DATABASECONFIG_PATH: /run/redis/conf
      DATABASES_PRIMARY_HOST: edgex-redis
      EDGEX_SECURITY_SECRET_STORE: "true"
      PROXY_SETUP_HOST: edgex-proxy-setup
      REGISTRY_HOST: edgex-core-consul
      SECRETSTORE_HOST: edgex-vault
      SECRETSTORE_PORT: '8200'
      SECRETSTORE_TOKENFILE: /tmp/edgex/secrets/edgex-security-bootstrap-redis/secrets-token.json
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: edgex-redis
    image: redis:6.0.9-alpine
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:6379:6379/tcp
    read_only: true
    security_opt:
    - no-new-privileges:true
    tmpfs:
    - /run
    volumes:
    - db-data:/data:z
    - edgex-init:/edgex-init:ro,z
    - redis-config:/run/redis/conf:z
    - /tmp/edgex/secrets/edgex-security-bootstrap-redis:/tmp/edgex/secrets/edgex-security-bootstrap-redis:ro,z
  kong:
    container_name: kong
    depends_on:
    - kong-db
    - security-bootstrapper
    entrypoint:
    - /edgex-init/kong_wait_install.sh
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      KONG_ADMIN_ACCESS_LOG: /dev/stdout
      KONG_ADMIN_ERROR_LOG: /dev/stderr
      KONG_ADMIN_LISTEN: <IP_ADDRESS>:8001, <IP_ADDRESS>:8444 ssl
      KONG_DATABASE: postgres
      KONG_PG_HOST: kong-db
      KONG_PG_PASSWORD_FILE: /tmp/postgres-config/.pgpassword
      KONG_PROXY_ACCESS_LOG: /dev/stdout
      KONG_PROXY_ERROR_LOG: /dev/stderr
      PROXY_SETUP_HOST: edgex-proxy-setup
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: kong
    image: kong:2.3-alpine
    networks:
      edgex-network: {}
    ports:
    - 8000:8000/tcp
    - <IP_ADDRESS>:8001:8001/tcp
    - 8443:8443/tcp
    - <IP_ADDRESS>:8444:8444/tcp
    read_only: true
    restart: on-failure
    security_opt:
    - no-new-privileges:true
    tmpfs:
    - /run
    - /tmp
    tty: true
    volumes:
    - edgex-init:/edgex-init:ro,z
    - postgres-config:/tmp/postgres-config:z
    - kong:/usr/local/kong:rw
  kong-db:
    container_name: kong-db
    depends_on:
    - security-bootstrapper
    entrypoint:
    - /edgex-init/postgres_wait_install.sh
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      EDGEX_SECURITY_SECRET_STORE: "true"
      POSTGRES_DB: kong
      POSTGRES_PASSWORD_FILE: /tmp/postgres-config/.pgpassword
      POSTGRES_USER: kong
      PROXY_SETUP_HOST: edgex-proxy-setup
      SECRETSTORE_HOST: edgex-vault
      SECRETSTORE_PORT: '8200'
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: kong-db
    image: postgres:12.3-alpine
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:5432:5432/tcp
    read_only: true
    security_opt:
    - no-new-privileges:true
    tmpfs:
    - /var/run
    - /tmp
    - /run
    volumes:
    - edgex-init:/edgex-init:ro,z
    - postgres-config:/tmp/postgres-config:z
    - postgres-data:/var/lib/postgresql/data:z
  metadata:
    command: /core-metadata -cp=consul.http://edgex-core-consul:8500 --registry --confdir=/res
    container_name: edgex-core-metadata
    depends_on:
    - consul
    - database
    - notifications
    - secretstore-setup
    - security-bootstrapper
    entrypoint:
    - /edgex-init/ready_to_run_wait_install.sh
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      CLIENTS_COMMAND_HOST: edgex-core-command
      CLIENTS_COREDATA_HOST: edgex-core-data
      CLIENTS_DATA_HOST: edgex-core-data
      CLIENTS_METADATA_HOST: edgex-core-metadata
      CLIENTS_NOTIFICATIONS_HOST: edgex-support-notifications
      CLIENTS_RULESENGINE_HOST: edgex-kuiper
      CLIENTS_SCHEDULER_HOST: edgex-support-scheduler
      CLIENTS_VIRTUALDEVICE_HOST: edgex-device-virtual
      DATABASES_PRIMARY_HOST: edgex-redis
      EDGEX_SECURITY_SECRET_STORE: "true"
      NOTIFICATIONS_SENDER: edgex-core-metadata
      PROXY_SETUP_HOST: edgex-proxy-setup
      REGISTRY_HOST: edgex-core-consul
      SECRETSTORE_HOST: edgex-vault
      SECRETSTORE_PORT: '8200'
      SECRETSTORE_TOKENFILE: /tmp/edgex/secrets/edgex-core-metadata/secrets-token.json
      SERVICE_HOST: edgex-core-metadata
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: edgex-core-metadata
    image: edgexfoundry/docker-core-metadata-go:0.0.0-dev
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:48081:48081/tcp
    read_only: true
    security_opt:
    - no-new-privileges:true
    user: 2002:2001
    volumes:
    - edgex-init:/edgex-init:ro,z
    - /tmp/edgex/secrets/edgex-core-metadata:/tmp/edgex/secrets/edgex-core-metadata:ro,z
  notifications:
    command: /support-notifications -cp=consul.http://edgex-core-consul:8500 --registry
      --confdir=/res
    container_name: edgex-support-notifications
    depends_on:
    - consul
    - database
    - secretstore-setup
    - security-bootstrapper
    entrypoint:
    - /edgex-init/ready_to_run_wait_install.sh
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      CLIENTS_COMMAND_HOST: edgex-core-command
      CLIENTS_COREDATA_HOST: edgex-core-data
      CLIENTS_DATA_HOST: edgex-core-data
      CLIENTS_METADATA_HOST: edgex-core-metadata
      CLIENTS_NOTIFICATIONS_HOST: edgex-support-notifications
      CLIENTS_RULESENGINE_HOST: edgex-kuiper
      CLIENTS_SCHEDULER_HOST: edgex-support-scheduler
      CLIENTS_VIRTUALDEVICE_HOST: edgex-device-virtual
      DATABASES_PRIMARY_HOST: edgex-redis
      EDGEX_SECURITY_SECRET_STORE: "true"
      PROXY_SETUP_HOST: edgex-proxy-setup
      REGISTRY_HOST: edgex-core-consul
      SECRETSTORE_HOST: edgex-vault
      SECRETSTORE_PORT: '8200'
      SECRETSTORE_TOKENFILE: /tmp/edgex/secrets/edgex-support-notifications/secrets-token.json
      SERVICE_HOST: edgex-support-notifications
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: edgex-support-notifications
    image: edgexfoundry/docker-support-notifications-go:0.0.0-dev
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:48060:48060/tcp
    read_only: true
    security_opt:
    - no-new-privileges:true
    user: 2002:2001
    volumes:
    - edgex-init:/edgex-init:ro,z
    - /tmp/edgex/secrets/edgex-support-notifications:/tmp/edgex/secrets/edgex-support-notifications:ro,z
  proxy-setup:
    container_name: edgex-proxy-setup
    depends_on:
    - kong
    - secretstore-setup
    - security-bootstrapper
    entrypoint:
    - /edgex-init/proxy_setup_wait_install.sh
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      CLIENTS_COMMAND_HOST: edgex-core-command
      CLIENTS_COREDATA_HOST: edgex-core-data
      CLIENTS_DATA_HOST: edgex-core-data
      CLIENTS_METADATA_HOST: edgex-core-metadata
      CLIENTS_NOTIFICATIONS_HOST: edgex-support-notifications
      CLIENTS_RULESENGINE_HOST: edgex-kuiper
      CLIENTS_SCHEDULER_HOST: edgex-support-scheduler
      CLIENTS_VIRTUALDEVICE_HOST: edgex-device-virtual
      DATABASES_PRIMARY_HOST: edgex-redis
      EDGEX_SECURITY_SECRET_STORE: "false"
      KONGURL_SERVER: kong
      PROXY_SETUP_HOST: edgex-proxy-setup
      REGISTRY_HOST: edgex-core-consul
      SECRETSERVICE_SERVER: edgex-vault
      SECRETSERVICE_TOKENPATH: /tmp/edgex/secrets/edgex-security-proxy-setup/secrets-token.json
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: edgex-proxy-setup
    image: edgexfoundry/docker-security-proxy-setup-go:0.0.0-dev
    networks:
      edgex-network: {}
    read_only: true
    security_opt:
    - no-new-privileges:true
    user: 2002:2001
    volumes:
    - edgex-init:/edgex-init:ro,z
    - /tmp/edgex/secrets/edgex-security-proxy-setup:/tmp/edgex/secrets/edgex-security-proxy-setup:ro,z
  rulesengine:
    container_name: edgex-kuiper
    depends_on:
    - app-service-rules
    environment:
      EDGEX__DEFAULT__PORT: 5566
      EDGEX__DEFAULT__PROTOCOL: tcp
      EDGEX__DEFAULT__SERVER: edgex-app-service-configurable-rules
      EDGEX__DEFAULT__SERVICESERVER: http://edgex-core-data:48080
      EDGEX__DEFAULT__TOPIC: events
      KUIPER__BASIC__CONSOLELOG: "true"
      KUIPER__BASIC__RESTPORT: 48075
    hostname: edgex-kuiper
    image: emqx/kuiper:1.1.1-alpine
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:20498:20498/tcp
    - <IP_ADDRESS>:48075:48075/tcp
    read_only: true
    security_opt:
    - no-new-privileges:true
    volumes:
    - kuiper-data:/kuiper/data:z
  scheduler:
    command: /support-scheduler -cp=consul.http://edgex-core-consul:8500 --registry
      --confdir=/res
    container_name: edgex-support-scheduler
    depends_on:
    - consul
    - database
    - secretstore-setup
    - security-bootstrapper
    entrypoint:
    - /edgex-init/ready_to_run_wait_install.sh
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      CLIENTS_COMMAND_HOST: edgex-core-command
      CLIENTS_COREDATA_HOST: edgex-core-data
      CLIENTS_DATA_HOST: edgex-core-data
      CLIENTS_METADATA_HOST: edgex-core-metadata
      CLIENTS_NOTIFICATIONS_HOST: edgex-support-notifications
      CLIENTS_RULESENGINE_HOST: edgex-kuiper
      CLIENTS_SCHEDULER_HOST: edgex-support-scheduler
      CLIENTS_VIRTUALDEVICE_HOST: edgex-device-virtual
      DATABASES_PRIMARY_HOST: edgex-redis
      EDGEX_SECURITY_SECRET_STORE: "true"
      INTERVALACTIONS_SCRUBAGED_HOST: edgex-core-data
      INTERVALACTIONS_SCRUBPUSHED_HOST: edgex-core-data
      PROXY_SETUP_HOST: edgex-proxy-setup
      REGISTRY_HOST: edgex-core-consul
      SECRETSTORE_HOST: edgex-vault
      SECRETSTORE_PORT: '8200'
      SECRETSTORE_TOKENFILE: /tmp/edgex/secrets/edgex-support-scheduler/secrets-token.json
      SERVICE_HOST: edgex-support-scheduler
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: edgex-support-scheduler
    image: edgexfoundry/docker-support-scheduler-go:0.0.0-dev
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:48085:48085/tcp
    read_only: true
    security_opt:
    - no-new-privileges:true
    user: 2002:2001
    volumes:
    - edgex-init:/edgex-init:ro,z
    - /tmp/edgex/secrets/edgex-support-scheduler:/tmp/edgex/secrets/edgex-support-scheduler:ro,z
  secretstore-setup:
    container_name: edgex-secretstore-setup
    depends_on:
    - security-bootstrapper
    - vault
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      EDGEX_GROUP: '2001'
      EDGEX_USER: '2002'
      PROXY_SETUP_HOST: edgex-proxy-setup
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: edgex-secretstore-setup
    image: edgexfoundry/docker-security-secretstore-setup-go:0.0.0-dev
    networks:
      edgex-network: {}
    read_only: true
    security_opt:
    - no-new-privileges:true
    tmpfs:
    - /run
    - /vault
    volumes:
    - edgex-init:/edgex-init:ro,z
    - /tmp/edgex/secrets:/tmp/edgex/secrets:z
    - vault-config:/vault/config:z
  security-bootstrapper:
    container_name: edgex-security-bootstrapper
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      EDGEX_GROUP: '2001'
      EDGEX_USER: '2002'
      PROXY_SETUP_HOST: edgex-proxy-setup
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
    hostname: edgex-security-bootstrapper
    image: edgexfoundry/docker-security-bootstrapper-go:0.0.0-dev
    networks:
      edgex-network: {}
    read_only: true
    security_opt:
    - no-new-privileges:true
    volumes:
    - edgex-init:/edgex-init:z
  system:
    container_name: edgex-sys-mgmt-agent
    depends_on:
    - command
    - consul
    - data
    - metadata
    - notifications
    - scheduler
    environment:
      CLIENTS_COMMAND_HOST: edgex-core-command
      CLIENTS_COREDATA_HOST: edgex-core-data
      CLIENTS_DATA_HOST: edgex-core-data
      CLIENTS_METADATA_HOST: edgex-core-metadata
      CLIENTS_NOTIFICATIONS_HOST: edgex-support-notifications
      CLIENTS_RULESENGINE_HOST: edgex-kuiper
      CLIENTS_SCHEDULER_HOST: edgex-support-scheduler
      CLIENTS_VIRTUALDEVICE_HOST: edgex-device-virtual
      DATABASES_PRIMARY_HOST: edgex-redis
      EDGEX_SECURITY_SECRET_STORE: "false"
      EXECUTORPATH: /sys-mgmt-executor
      METRICSMECHANISM: executor
      REGISTRY_HOST: edgex-core-consul
      SERVICE_HOST: edgex-sys-mgmt-agent
    hostname: edgex-sys-mgmt-agent
    image: edgexfoundry/docker-sys-mgmt-agent-go:0.0.0-dev
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:48090:48090/tcp
    read_only: true
    security_opt:
    - no-new-privileges:true
    user: 2002:2001
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock:z
  vault:
    cap_add:
    - IPC_LOCK
    command: server
    container_name: edgex-vault
    depends_on:
    - security-bootstrapper
    entrypoint:
    - /edgex-init/vault_wait_install.sh
    environment:
      API_GATEWAY_HOST: kong
      API_GATEWAY_STATUS_PORT: '8001'
      PROXY_SETUP_HOST: edgex-proxy-setup
      STAGEGATE_BOOTSTRAPPER_HOST: edgex-security-bootstrapper
      STAGEGATE_BOOTSTRAPPER_STARTPORT: '54321'
      STAGEGATE_DATABASE_HOST: edgex-redis
      STAGEGATE_DATABASE_PORT: '6379'
      STAGEGATE_DATABASE_READYPORT: '6379'
      STAGEGATE_KONGDB_HOST: kong-db
      STAGEGATE_KONGDB_PORT: '5432'
      STAGEGATE_KONGDB_READYPORT: '54325'
      STAGEGATE_READY_TORUNPORT: '54329'
      STAGEGATE_REGISTRY_HOST: edgex-core-consul
      STAGEGATE_REGISTRY_PORT: '8500'
      STAGEGATE_REGISTRY_READYPORT: '54324'
      STAGEGATE_SECRETSTORESETUP_HOST: edgex-secretstore-setup
      STAGEGATE_SECRETSTORESETUP_TOKENS_READYPORT: '54322'
      STAGEGATE_WAITFOR_TIMEOUT: 60s
      VAULT_ADDR: http://edgex-vault:8200
      VAULT_CONFIG_DIR: /vault/config
      VAULT_UI: "true"
    hostname: edgex-vault
    image: vault:1.5.3
    networks:
      edgex-network: {}
    ports:
    - <IP_ADDRESS>:8200:8200/tcp
    tmpfs:
    - /vault/config
    volumes:
    - edgex-init:/edgex-init:ro,z
    - vault-file:/vault/file:z
    - vault-logs:/vault/logs:z
version: '3.7'
volumes:
  consul-config: {}
  consul-data: {}
  db-data: {}
  edgex-init: {}
  kong: {}
  kuiper-data: {}
  postgres-config: {}
  postgres-data: {}
  redis-config: {}
  vault-config: {}
  vault-file: {}
  vault-logs: {}

Other information
TBD: need to update patch file for SNAP  @tonyespy

Hi @tonyespy  would you please help to generate a new updated PATCH file for the related snapcraft.yml changes?  Thanks!

recheck

@tonyespy

Jim is just converting an existing oneshot service in the snap which used to call security-bootstrap-redis. The redis service is > already defined to start after this service, so this transition to using bootstrap doesn't really impact the service ordering.
Yes, we could re-implement this via command-chain, however I don't see any added benefit to doing so, unless I'm missing something?

Is it better to have the service, a wrapper script, or a command chain?  Personally I don't see the point of the service.

While this looks like it solves my bug, I wonder if this implementation is compliant with respect to Secret Creation and Distribution ADR as the vault password is being read from Vault and written to a configuration file, which in theory persists on disk? This is quite similar to the original implementation of secure Redis as implemented in Geneva. @bnevis-i thoughts?

The implementation is compatible with option 3 from the ADR: "Dynamic injection of secret into container-scoped tmpfs volume"
There is no best solution here.  Either the database is going to be started in insecure mode, and then locked down after the fact, or it will take a config file with the password in it.  These are the only two solutions that Redis offers.  This is an honest attempt to address #2863.  Otherwise #2863 should be closed as will not fix.

The permissions on the conf file are "rwx r-x r-x" (0755), should they be tightened up (e.g. 0600)?

Agree, this is a problem.

Hi Tony @tonyespy, I've addressed your concerns and belows are my comments to your questions:

While this looks like it solves my bug, I wonder if this implementation is compliant with respect to Secret Creation and Distribution ADR as the vault password is being read from Vault and written to a configuration file, which in theory persists on disk? This is quite similar to the original implementation of secure Redis as implemented in Geneva. @bnevis-i thoughts?
A couple of other thoughts...
* I wonder if this approach precludes our usage of other features that we might want to enable in the Redis configuration file?

No, it won't preclude features to override.  We did not use redis' conf file before and thus this is the first time we use it because Redis is able to start without a configuration file using a built-in default configuration.  So the built-in features are still there and we can override the built-in features via the provided option arguments in the command line just like the current snap is doing with --dir and --save options. See https://redis.io/topics/config for more details about Passing arguments via the command line.

* One of the scenarios I tested was rebooting the system after I'd brought up device-virtual. When I checked, it looked like the redis.conf had been re-recreated (with the same contents) after the reboot. Was this supposed to happen?

Yes because in docker we mounted the file onto temp file system and thus it would be gone after reboot and hence requires re-creation.

* The permissions on the conf file are "rwx r-x r-x" (0755), should they be tightened up (e.g. 0600)?

Good point, I've added extra code due to redis' running in redis:redis uid and gid to tightened it up to 0600.

* Did you run these changes past @andresrinivasan?

Good point, Hey @andresrinivasan  would you please take review this if any issue you might have?

Also I know you asked me to help update the snap build patch, and will do so, but first wanted to get your take on my comments.

Ok, thanks.

Wrt the implementation, this looks good. Kudos for switching over to ACLs. One of the conversations I had with the V2 API team was to consider that with ACLs and deterministic key names, we could segregate microservice access to only the keys they should have access to. If that does evolve, this will need a little rework. Another thing to note is that by removing the dangerous commands, the commands useful for debugging Redis apps have also been removed. I had tried to document tips to debug with security enabled in the various security .md files and I suggest pointing out enabling the dangerous commands while debugging may be useful.

Thanks @andresrinivasan. A good thought about the debugging redis app.  It is truly that you might lose the ability to run the dangerous command like INFO server directly from redis server; however, I think developer can always achieve that by swap out the current conf file with their own redis config file for that matter.   There is ENVs provided you can always override the redis.conf file should it find you for that purpose.

Circling back to #2863, while using a config file conforms to the ADR and addresses the risk of Redis being unsecured on boot, I wonder if we're trading a timing risk for a clear password on disk risk. Another way #2863 could be addressed is starting Redis unsecured and pointing to an empty RDB file, dynamically setting the password/ACLs, then pointing back to the actual RDB file.

From file system mounting point of view, as long as you can mount it on the temp. file system like docker's tmfs, in which it also runs in memory (see docker's doc https://docs.docker.com/storage/tmpfs/) , I think the password written out should be ok.  At least it is not as bad as of it today and just like Redis' data in memory.

Circling back to #2863, while using a config file conforms to the ADR and addresses the risk of Redis being unsecured on boot, I wonder if we're trading one timing risk for a clear password on disk risk. Another way #2863 could be addressed is starting Redis unsecured and pointing to an empty RDB file, dynamically setting the password/ACLs, then pointing back to the actual RDB file.

What is to stop someone, if they can get at the Redis password, from simply starting their own server to read them?

Wrt the implementation, this looks good. Kudos for switching over to ACLs. One of the conversations I had with the V2 API team was to consider that with ACLs and deterministic key names, we could segregate microservice access to only the keys they should have access to. If that does evolve, this will need a little rework. Another thing to note is that by removing the dangerous commands, the commands useful for debugging Redis apps have also been removed. I had tried to document tips to debug with security enabled in the various security .md files and I suggest pointing out enabling the dangerous commands while debugging may be useful.

Thanks @andresrinivasan. A good thought about the debugging redis app. It is truly that you might lose the ability to run the dangerous command like INFO server directly from redis server; however, I think developer can always achieve that by swap out the current conf file with their own redis config file for that matter. There is ENVs provided you can always override the redis.conf file should it find you for that purpose.

In addition to INFO, MONITOR, BGSAVE, and FLUSHDB are quite useful. I'm only suggesting we document this and document specifically how the developer overrides this. When I was trying to figure out how to integrate with Vault I consumed a lot of time from Bryon and Lenny because not enough was written down to help me figure out how to debug things.

Wrt the implementation, this looks good. Kudos for switching over to ACLs. One of the conversations I had with the V2 API team was to consider that with ACLs and deterministic key names, we could segregate microservice access to only the keys they should have access to. If that does evolve, this will need a little rework. Another thing to note is that by removing the dangerous commands, the commands useful for debugging Redis apps have also been removed. I had tried to document tips to debug with security enabled in the various security .md files and I suggest pointing out enabling the dangerous commands while debugging may be useful.

Thanks @andresrinivasan. A good thought about the debugging redis app. It is truly that you might lose the ability to run the dangerous command like INFO server directly from redis server; however, I think developer can always achieve that by swap out the current conf file with their own redis config file for that matter. There is ENVs provided you can always override the redis.conf file should it find you for that purpose.

In addition to INFO, MONITOR, BGSAVE, and FLUSHDB are quite useful. I'm only suggesting we document this and document specifically how the developer overrides this. When I was trying to figure out how to integrate with Vault I consumed a lot of time from Bryon and Lenny because not enough was written down to help me figure out how to debug things.

@andresrinivasan  I created a note md file for the aspect of developers to use their own configuration file: Developer-notes.md.

@jim-wang-intel here's the update for the snap patch...
0001-fix-snap-update-the-snap-optimization-patch.patch.txt


ProcessWords: preserve quotes

Preserve single and double quotes in ProcessWords to match the
function description and user intention.  Also add some simple
unit tests to catch potential future regressions.
Fixes: #108
Signed-off-by: Valentin Rothberg<EMAIL_ADDRESS>

@rhatdan PTAL. Need Yoda to have a look at the changes as it smells a bit of some side-effects.

/ok-to-test

@vrothberg do you have a Dockerfile that you could attach here or in the issue that shows the problem before the fix and now works with the fix?  I saw the example Dockerfile line, but would like an easy to use Dockerfile if you've one handy.

I wonder if this is a bug, or if the intent was to follow shell quoting rules here (this could be if the same rules are applied to ENV, and people expecting it to be processed more in a "shell-like" matter, i.e.;
echo "beta" gamma 'delta'
beta gamma delta

If not, then this could be a bug, where only leading/trailing quotes should be removed from values, but it's applying that rule incorrectly.
The pitfall there being that there are two syntaxes;
LABEL name value
LABEL name=value name=value

Using this Dockerfile;
FROM scratch

# Sets label 'one'
LABEL one two three four

# Sets label 'five' and 'seven'
LABEL five=six seven=eight

# Sets label 'alpha'
LABEL alpha "beta" gamma 'delta'

# Sets label 'epsilon' and 'eta'
LABEL epsilon='zeta' eta="theta"

# Sets label 'quoted'
LABEL quoted "a quoted \"value\""

# Sets label 'quoted2'
LABEL quoted2="another quoted \"value\""

Building the above currently produces;
{
  "alpha": "beta gamma delta",
  "epsilon": "zeta",
  "eta": "theta",
  "five": "six",
  "one": "two three four",
  "quoted": "a quoted \"value\"",
  "quoted2": "another quoted \"value\"",
  "seven": "eight"
}

But if the intent was to remove leading/trailing quotes, I think the expected results would be:
{
  "alpha": "\"beta\" gamma 'delta'",
  "epsilon": "zeta",
  "eta": "theta",
  "five": "six",
  "one": "two three four",
  "quoted": "a quoted \"value\"",
  "quoted2": "another quoted \"value\"",
  "seven": "eight"
}

ping @tonistiigi @akihirosuda @duglin PTAL

I found this earlier discussion around this; https://github.com/moby/moby/issues/36027#issuecomment-358194966 (also https://github.com/moby/moby/issues/32140#issuecomment-289918601(

From those discussions (and the docs change in https://github.com/docker/cli/pull/814), it looks like the intent was to process it with shell rules (and thus quotes to be stripped);

The value will be interpreted for other environment variables, so quote characters will be removed if they are not escape

@thaJeztah, thanks a lot for the very valuable input!
Your comments made my mind shift to the question whether the values of LABEL must be processed the same way as the ones of ENV. My personal preference would be to preserve quotes and to not transform the input for labels, but given it's been like that for such a long while I fear there's nothing to change without breaking existing workloads.
For the use case of podman-container-runlabel, we might need to mention this explicitly in the docs to avoid this pitfall.

Perhaps @justincormack's proposal in https://github.com/moby/moby/issues/32140#issuecomment-289465543 would be a solution for this; add a JSON syntax for LABEL (and ENV) that won't substitute variables, e.g.;
LABEL {"RUN":"/usr/bin/foo --string-arg \"a string arg\""}

or
LABEL ["RUN=/usr/bin/foo --string-arg \"a string arg\""]

Pitfalls there are (although less problematic than for the RUN syntax, which is ambiguous), not everyone knows that JSON doesn't support single quotes (see https://github.com/moby/moby/issues/5701, and https://github.com/moby/moby/pull/7998)

The intent was to preserve quotes like the linux shell, however, since the value args all get squashed into one string things get a little weird. Look at this:
$ cat a.sh
echo $*

$ echo ads "asd asd" asd | xargs ./a.sh
ads asd asd asd

Notice no quotes.
I would point out that:
LABEL RUN2 "/usr/bin/foo --string-arg 'a string arg'"
does give you want you're looking for.
"RUN2": "/usr/bin/foo --string-arg 'a string arg'",
So, if you want to keep the quotes you may need to wrap the whole thing with more quotes, or escape things:
For example:
ENV foo3 asd \"asd qwe\" qwe
yields:
"foo3=asd "asd qwe" qwe",
Which does seem to make some sense to me. But I'm not a sh expert to know for certain.

I think we do what the user expects.  I would expect that LABEL or a RUN command to work the same as if I typed in the command at the shell.
Currently we have the users jumping through hoops to make this work.  So I like the idea of this patch.
The issue will be what happens if the programmer did jump through hoops will we break that use case.
Does
ENV foo3 asd "asd qwe" qwe
end up with
"foo3=asd "asd qwe" qwe",

Does
ENV foo3 asd "asd qwe" qwe
end up with
"foo3=asd "asd qwe" qwe",

No. It ends put with "foo3=asd asd qwe qwe" (i.e., quotes removed).

I think we can really break it down to if LABEL should be processed in a similar fashion as ENV.
ENTRYPOINT, for instance, is processed differently (for the reasons mentioned above) and quotes are properly escaped: "/usr/bin/foo --string-arg \"a string arg\""

The difference there is that ENTRYPOINT is used as argument for /bin/sh -c, and to be evaluated by /bin/sh at runtime, whereas LABEL is processed/evaluated during build.
Given this Dockerfile;
FROM scratch
ENTRYPOINT /usr/bin/foo --string-arg "a string arg"

The entrypoint will be;
docker inspect --format '{{json .Config.Entrypoint}}' myimage
["/bin/sh","-c","/usr/bin/foo --string-arg \"a string arg\""]

Irregardless of the above; changing this would be quite a breaking change, and potentially breaking a lot of existing Dockerfiles

Irregardless of the above; changing this would be quite a breaking change, and potentially breaking a lot of existing Dockerfiles

That's what I am afraid of as well.

I am closing this PR as I changing this behavior might cause regressions for some users. Quotes need to be escaped manually and we need to educate users to be aware of that.


Add str methods for classes in cppmodel

cppmodel classes can be usefully represented as strings and should be.
We can add a method to create useful representations for iPython notebook too.

58c31d60092f4dd38c02942f2ea60897c2b236b9 closed it

Model and member are still missing __str__.

closed by #273


Support star-projections.

Supports star projection in '@HiltBinds', '@HiltSetBinds', and '@HiltMapBinds'. Provides unrestricted star projections for a particular type.

Resolved: https://github.com/Park-SM/HiltBinder/pull/34