* validate sub command verb (#557)
* fix review comments for pr #555
* validate sub commands
* update error message
* use inner args returned by find func
* return appropriate error message for #557
* return appropriate error message for #557
* Revert "fix review comments for pr #555"
This reverts commit 14ea8d2dc6.
* review comments for pr 589
* misleading error message when verb is bad (#557)
* misleading error message when verb is bad (#557)
* misleading error message when verb is bad (#557)
* refactor,fix(revision list): Refactoring and fixing issues
This PR fixes the following issues of `kn revision list`:
* `kn revision list -A` didn't work as the internal service-get requires a namespace (that from the revision)
* `kn revison list -s myservice myrevision` was not supported
* Service caching assumed that the revision list returned by the server is grouped by servicename. This is not guaranteed.
* `kn revision list -o yaml` returned yaml with the artificial and bogus annotations used for printing out in columns.
The following refactorings were added:
* The main run function was simplified and splitted up in multiple methods
* List-filter handling was made straight forward (and hopefully easier to understand)
I abandoned my initial intention to remove the bogus, temporary, in-memory set annotations for tags and traffic as it does not fit well with the resource printer framework which only works with original K8s resource runtime.Object (and e.g. use serialization directly). I still don't like the hackish approach to add to annotatin (please note, how I need to write a wrapped printed to get rid of the annotations for fixing the `-o yaml` use case, which otherwise prints out those annotations, which are not existant on the server side), but for the sake of simplicity let's keep this (not dogmatic here).
* chore: Simplified
* chore: Some docs update
* fix: wtf
* fix(revision list): Add Namespace column for -A and unified list handling
* fix(revision list): truncate long columns
* add(revision list): Unit test for extracting target and tags
* fix(revision list): Add missing license header
* fix(revision list): Formatting issue
* fix: formatting
* chore: Some cosmetics
```bash
➜ client git:(master) ✗ ./kn service update summary-fn --untag sync1
Using kn config file: /Users/maximilien/.kn/config.yaml
Updating Service 'summary-fn' in namespace 'default':
0.089s Ready to serve.
Service 'summary-fn' with latest revision 'summary-fn-nxqwb-41' (unchanged) is available at URL:
http://summary-fn-default.kndemo-267179.sjc03.containers.appdomain.cloud
➜ client git:(master) ✗ ./kn service update summary-fn --image docker.io/drmax/summary-fn:latest
Using kn config file: /Users/maximilien/.kn/config.yaml
Updating Service 'summary-fn' in namespace 'default':
0.091s The Configuration is still working to reflect the latest desired specification.
6.317s Ready to serve.
Service 'summary-fn' updated to latest revision 'summary-fn-jfjcy-42' is available at URL:
http://summary-fn-default.kndemo-267179.sjc03.containers.appdomain.cloud
```
* Introduce Broker as a kind of sink, genericize sinks in general
* loltest
* Fix tests for mergeout
* the test file I forgot
* docstrings
* Move fake dynamic client into seprate file
* Pass whole client, not raw client, to resolve sinks
* one more test
* Dont return created ApiServer source object but only error
- After ApiServer source object is created, we don't need it to pass
around in caller function.
* Align creating ApiServer source client, removes unit tests
* Add ApiServer source update command
* Rename TestMockKnClient to TestMockKnCronJobSourceClient
* Add mock client for ApiServer Source and its tests
* Add mock unit tests for create, delete and update
* Add e2e tests for apiserver source update
- Add a test for apiserver source sink update
- Verify the updated sink name after the apiserver source is created
- Update resource names in existing tests
* Uses builder pattern for ApiServer source create command
* Update ApiServer source create/update flags and required config
* Uses builder pattern for ApiServer source update command
* Align create/update/delete description and error messages
* Add unit tests for get/create/update/delete in apiserver_client.go
* Update e2e tests expected output per change in commands output
* Golint fixes, Api -> API and add exported method docs
* Rename a test method and source update command description
* Add ApiServer source describe command
- Add command and unit tests
- TODO for later: Add 'Controller Selector' section for --verbose
* feature(source cronjobs): Implementation of CronJobSource management
Contains create/delete/update/describe but not tests yet.
Still todo:
* Think how to provide a namespace for the sink
* Support for more sinks
* Synchronous mode for create & update
* Add list (or implement "source list")
* chore: Add a mock test for cronjob source
* addd missing license headers
* cosmetic changes
* chore(cronjobsource): Add tests
* fixup
* chore(cronjob source): Improved test coverage
* chore(cronjob source): some review polishing
- Pin contrib.go.opencensus.io/exporter/stackdriver@59d068f8d8ff5b653916aa30cdc4e13c7f15d56e
- Pin knative.dev/pkg@release-0.11
- Move `Destination` from (knative.dev/pkg) v1alpha1 to duckv1beta1
- Run tests against Eventing v0.11.0
* feat: kn source list-types (builtin types)
- Only lists the builtin source types
- Uses client-go dynamic client for listing CRDs
- Adds DyanmicClient interface to KnParams
- Adds printing options
* chore(lint): Address golint suggestions
* Rebase and update venodr/modules.txt
* Adds unit tests for DynamicClient in types.go
* Add kn source list-types command in smoke tests
* Constants for the CRD GVR and source identifier label key value
GVR as:
- Group: apiextensions.k8s.io
- Version: v1beta1
- Resource: customresourcedefinitions
Label as:
{"duck.knative.dev/source": "true"}
* Add tests for dynamic client
* Add description about SinkBinding source type
as - "Binding Pattern for ContainerSource"
* Remove unused imports
* Adds unit tests for list-types command processing
* More unit tests for flags
* Adds e2e tests for kn source list-types
- also test the YAML output
* Sort the source types while listing them
- Update the unit tests accordingly
* Add examples
* Add unit tests for CreateDynamicTestKnCommand
* Fix typo in unit tests
* golint fixes
* Updates to vendor/modules.txt after rebase
* Remove the extra lines
* refactor delete service unit test with mock kn client (#358)
* refactor list svc unit test with mock kn client (#358)
* refactor list svc unit test with mock kn client (#358)
* fix review comments for pr 527 (#358)
* fix review comments for pr 527 (#358)
* chore: Add version information of eventing
Adding sources.eventing.knative.dev to version info (the only eventing API)
for now as this will be the first one used.
* chore(version): Add grouping for API versions
While testing I specified this on the `kn` command line:
```
./kn service create echo --concurrency-limit=1 --concurrency-target=1 --env foo=bar --limits-cpu=1000m --limits-memory=1024m --max-scale=1 --min-scale=1 --port=9999 --requests-cpu=250m --requests-memory=64mi --image duglin/echo
```
and it returned:
```
unable to parse quantity's suffix
```
I had no idea which value it didn't like. So this PR makes it so the output
is now this:
```
Error parsing "64mi": unable to parse quantity's suffix
```
Still not perfect since I still had to think way too hard to realize that it
didn't like the lower-case `m`, but that's a different issue.
Signed-off-by: Doug Davis <dug@us.ibm.com>
* Add support for envFrom, volumeMounts, serviceAccountName, and imagePullPolicy
* Add comments for added functions
* Add test functions for --env-from
* Add test functions for --volume-mount
* Add test functions for --service-account-name and --image-pull-policy
* Add testing functions to cover the case "service update --env-from"
* Add test functions to cover the case "service update --volume-mount"
* Add missing test functions for config_changes.go
* Add testing functions for pkg/util/parsing_helper.go
* Fix a bug on a test case, caused by ignoring random orderedness of map
* Remove image-pull-policy because it is not supported by Knative
* Fix comments to clarify it as well as to fix a typo
* Remove service-account-name flags in order to submit it as a seperate PR
* Split --volume-mount flag into --volume-mount and --volume flags in order to enable multiple times mounting for the same volume
* Change the name of local variable to simplify
* Update docs
* Change the flag "--volume-mount" into "--mount", and fix it to make volume automatically when the config-map or secret is directley used. In addition, the test cases are changed to new unit test style. To keep the original orderedness given via flags, OrderedMap implementation is added as well
* Fix usage descriptions for the mount flag
* Factor out the name existence checking from createEnvFromSource
* Fix the usage description for --mount
* Sanitize a generated volume name
* Revision describe rebaseable
* Fix up for rebase
* Some tests
* moretests
* Forgot part of the refactor!
* Fix unit tests
* Change e2e tests and respond to feedback
* Adds zsh completion
- Adds back zsh completion after vendoring cobra library with a fix
- Updates the command definition to accept argument either of ['bash', 'zsh']
- Moves the completion command definition under `pkg/kn/commands/completion`
- Updates docs
- Updates CHANGELOG.adoc
* fix(golint): exported function should have comment
* Fixes PR number in CHANGELOG.adoc
* Updates unit tests
* Vendors serving v0.9.0
* Updates references per serving v0.9.0 vendoring
- Updates code and tests to refer the required data structure and method/function calls
- duckv1beta1 -> duckv1 conditions
- traffic percent value is now *int64
- containerConcurrency validation method relocation
* fix(golint): exported function should have comment
for NonReadyConditionReason function
* Updates check for removing null targets
fixes the pointer value check
* Updates per review comments
* fix(version): Displays supported APIs and version
Fixes#404
```
./kn version
Version: v20191017-local-6328a73-dirty
Build Date: 2019-10-17 09:55:55
Git Revision: 6328a73
Supported APIs:
- serving.knative.dev/v1alpha1 (knative-serving v0.8.0)
```
* Removes ServingVersion feeding from ldflags
- hardcodes the supported APIs as they're supposed to be updated when we bump deps
* Fixes typo in e2e tests
* Uses array for deterministic order of printing supported APIs
* Increased default timeout to 600s. This timeout will be triggered
only when the Ready condition stays in UNKNOWN for that long. If its
True or False then the command will return anyway sooner.
So it makes sense to go for a much longer timeout than 60s
* Enhanced output to indicate the progress
This change needs some updates to the API and introduces a 'MessageCallback'
type which is calle for each intermediate event with the "Ready" condition message.
* feat(annotations): Adds annotation flag for service create and update
- Adds specified annotations to service object meta and revision template meta
- Adds --annotation / -a flag to service create and update options
- User can specify '-' at the end of the annotation key to remove an annotation
- Adds unit and e2e tests
- Updates docs and changelog accordingly
* Adds example for service create with annotation
* Adds mock unit tests for service update with annotations
* Removes the short hand -a for annotation flag
This solves 414 by adopting new format for config keys and thereby
bypassing the need for case sensitivity in Viper. Also changed
`lookupPluginsInPath` key to `lookup-plugins` and also same for the
persistent flag. The PATH part is implied and can be read from
help.
* Change symbols, add latest and latest ready
* More info on what is latest and tags. Filter annotations and labels.
* Make current tests pass
* More tests
* No longer require Annotations in test
* Add error
* Adjust tests to match adjusted output
* Respond to review comments
* one more
* Fix double printing of revisions + test for it
* Differentiate between latest traffic and latest ready w/o that being reason for traffic
* Re-build with go 1.12
* Rebased
* Limit non-verbose output to error and image
* Fix tests for new format
This is in preparation of introducting eventing and makes sense anyway.
Also, the GVK update handling has been moved to "util" so that it then
can be also reused by eventing.
* Add --service-account-name flag
* Change the flag --service-account-name to --service-account, and change its default value from "-" to an empty string. In addition, CHANGELOG.adoc is changed.
* Update docs with ./hack/build.sh
* Option to freeze revision to digest
* Tests pass. Checkpoint.
* Tests for env now check pinning to digest
* Bool flag using convention. Tweak usage.
* Describing the image carefully using the annotation and digest
* lint
* Test matrix of locking to digest behaviors
* Expose both flags, and rewrite help text again
* Unit tests.
* Removed unsed method
* Add tests for getting base revision
* Make tests actually test stuff better
* Make tests actually test stuff better
* A mergeout killed a returning of error. Restore it
* Help text again
* fix typo (misspell)
* ineffectual assignment to err (ineffassign)
* if block ends with a return statement, so drop this else and outdent its block (golint)
* should replace errors.New(fmt.Sprintf(...)) with fmt.Errorf(...) (golint)
* struct field LogHttp should be LogHTTP (golint)
* fix last typo
For the sake of consistency with out own service commands and for kubectl,
`kn plugin list` should print:
```
No plugins found.
```
`kn service list` should print:
```
No services found.
```
and not `No resources found.` like it does now.
Same for `kn routes list`.
* Make `kn service list --all-namespace` print namespace column
`kn service list` should print NAMESPACE column when specifying `--all-namespace` option, which follows the kubectl convention.
* Put services in default namespace at the top of the list
* Switch output of column definitions by priority field
A priority field is handled as follows:
- priority 0: print namespace column
- priority 1: print default columns
- priority 2: print additional columns for wide option
* Don't use AddFlags to bind all namespaces flag
* Update CHANGELOG
* Remove commented codes
* Fix import path
* Clean up
* Remove unnecessary return
* Swap the order of records
Fixes#369
- Replace `Dependencies:` with `Support:`
- Add list of supported Serving versions kn can work with
- Add list of supported Serving APIs kn can work with
```
✗ ./kn version
Version: v20190816-local-e36089f-dirty
Build Date: 2019-08-16 13:08:26
Git Revision: e36089f
Support:
- Serving: v0.8.0 v0.7.1
- API(s): v1alpha1
```
* Update serving to 0.8. Try building.
* Find the right serving version
* Change our own import path to knative.dev to match
* Remove dependency on old version of client
* Update yaml template
* Add sleep to test to deal with race
* fix merge conflict
* Update vendor modules
* Portable plugin executable check for Windows platform
builds Windows and non-Windows platform plugin verifier separately
* Removes redundant build tag and file suffix, uses file suffix
As we'll need either to mention, which file compiles for which
platform.
- Add e2e tests
- Use '=' for traffic and tag assignment instead of ':'
- Use --tag and --untag flags for tagging traffic targets
- Use --traffic flag for setting traffic portions
- Allow --traffic portion to either take revisionName or tagName
- Uses @latest identifier for referencing latest revision of service
- Dont throw error if requested revision=tag pair is same
- Support having multiple tags for a revision
- creates a new target in traffic block if revision present in traffic block with new tag requested
- creates N new targets in traffic block if revision absent in traffic block with Nxnew tags requested
- Ensure updating tag of @latest requires --untag flag
- streamline updating tag for latestReadyRevision
- adds respective tests
- adds tests for ensuring given traffic sum to 100 on CLI and fail fast
- Add note about preference of order in case where tagOfOneRevision == revisionOfAnother,
first tags are checked and assigned traffic if any, as tags are supposed to be
unique in traffic block and should be referenced in such scenario.
- Remove the examples from flag description, moves it to service update command example section
- Pass only traffic block to compute trffic, makes it better to consume.
- Cover more error cases for invalid value format for assignments, covers a=b=c, a=, =b, or variants of them
- Separate and improves the error messages
- Add unit tests for traffic computing
- Add sanity checks in dedicated function verifyInputSanity
- traffic perents should sum to 100
- individual percent should be in 0-100
- repetition of @latest or tagName or revisionRef is disallowed
- Verify traffic percents sum to 100 on client side and fail fast
- Add e2e tests for traffic splitting
- create and update service, assign tags and set traffic to make an existing state
- run the scenario on existing state of service
- form the desired state traffic block
- extract the traffic block and form the traffic block struct actual state
- assert.DeepEqual actual and desired traffic blocks
- Use logic to generate service name in the same way as namespace, use different service name per test case
- Run e2e test for traffic splitting in parallel
- Use timeout duration of 30m for e2e tests, use timeout parameter for go_test_e2e library function
- Use tagName in flag description of --untag, avoiding conflict with --tag flag
- Update CHANGELOG
* Groundwork for naming revisions automatically and deliberately
* Tests for name updates
* Add godoc comments
* Changelog entry for naming flags
* Error when trying to BYO revision name to an old-format service
* fix tests again
* Template the names
* Polsh, remove unused flags, generate helptext, add better helptext
* Decapitalize error msg
* Respond to Roland comments
* Forgot to add test file
* Be a good citizen, add more tests, try to get coverage happy.
* true dat
* Re-add implicit service prefix if one was not added.
* Allow boolean flags in the matched `--foo` and `--no-foo` format.
* test for it
* Godoc for new functions
* Copyright date update
* Disallow user from setting either flag to false explicitly. Moar tests, for this & other cases
* Apply suggestions from code review
Co-Authored-By: Roland Huß <rhuss@redhat.com>
* Fixup
* Add support for service labels with --label or -l
* Add tests
* Fix typo
* Move MapToArray helper method to separate file
* Allow unsetting labels by passing empty value
* Fix test
* Add test case for label removal
* Wrap error message with flag
* Update docs to include --label
* Update labels on both services and revisions
* Add some test cases around weirder user input
* Change unset behavior and allow setting empty env and label
* Update docs for new unset behavior
* Make single keys to map to empty values
* Move helper to util
* Use assert.DeepEqual
* Use new mock test + check both service and revision
* Use new method and correct year
Fixed:
```
$ ./kn plugin list --lookup-plugins-in-path
panic: runtime error: index out of range
goroutine 1 [running]:
github.com/knative/client/pkg/kn/core.extractKnPluginFlags(0xc00003c0c0, 0x4, 0x4, 0xc0002be280, 0xc000000180, 0xc0002ba180, 0xc0000de670, 0xc000117f68)
/root/go/src/knative.dev/client/pkg/kn/core/root.go:222 +0x666
github.com/knative/client/pkg/kn/core.NewDefaultKnCommand(0xc000000000)
/root/go/src/knative.dev/client/pkg/kn/core/root.go:46 +0x79
main.main()
/root/go/src/knative.dev/client/cmd/kn/main.go:33 +0x46
```
While in there I fixed it so that we only look for --flag at the start
of the arg, and handle the --flag, --flag=, and --flag=xxx cases.
If there's --flagX we skip it because it's some other flag and not one
of interest to us.
Also, fixed some error processing that seemed a bit off.
Signed-off-by: Doug Davis <dug@us.ibm.com>
* Add support for -A variant of --all-namespaces
-A is my newest favorite kubectl flag, it's so much easier/faster to type
than --all-namespaces. kn users should benefit from it too!
Signed-off-by: Doug Davis <dug@us.ibm.com>
* tweak tests
Signed-off-by: Doug Davis <dug@us.ibm.com>
* refactor(plugins): Improved and simplified verifier and plugin list
* Added proper executable check for current user
* Refactor plugin_list to make it more straightforward
* Seperate errors and warnings
* Don't return an error when no plugin is installed and `plugin list` is called
* Simplified tests
* Check assumption that a prefix is given in verify()
* fix(plugins): Fixed broken homedir expansion
* fix(plugin): Adapted to proper permission handling
E.g. if u-x, g+x and the user has the group of the file, but is also owner of the file then he is not allowed to execute the file.
* test(plugins): Added checks for the execution check for plugins
* chore(plugins): optimized tests to reflect the real unix behaviour
* chore(plugins): Moved plugin seenMap to top-level verify method.
Also, allow symlinks without warnings.
* refactor(plugins): Split up some methods in plugin_verifier to make them shorter
* fix: Tuned `plugin list` for better handling when no plugin directory exists
* feature(service describe): Output of service details
`kn service show` mimics `kubectl describe <sth>` as that it output detail information in human readable output.
A future extension should add machine readable output with `-o` to export
a single object in json/yaml (that is missing from `kn service list`)
This command shows information about the service itself, but also a summary about the associated revisions.
It also knows about scaling and concurrency options.
Options:
`--details` : Print more information. By default only are shorter summary is shown
* chore: Cleanup up and refreshed dependencies
* fix(service describe): Integration test fix (revert "show" to "describe")
* fix: go.sum
* fix go.sum
* feature(service describe): Add printing of resources (requests/limits) + machine readable output with -o
* chore(service describe): Simplified digest handling
* chore(service describe): Sort maps by key when printed
* chore: Adapt mock framework
* chore(service describe): Test fixes
* chore: Added some tests
* more tests
* test: Moar tests
* chore: Even moar tests
* more, more tests
* changelog update
* fix(service describe): golint fixes
* List revisions sorted by generation order
We use a configuration generation as a sort key, which is obtained from a label on configuration resource.
* Change column name from order to generation
* Fix revision sorting issue
* Fix revision e2e test
* Just sort by name if invalid type of generation found
* Update CHANGELOG
* Add --log-http option
* Oh yeah build it and change docs and stuff
* And some test
* Actually test the thing I meant to
* There was a way to remove the downcast
* Test for http transport
* Some deps
* Elide sensitive headers from logging
* Test for eliding errors
* Feedback from CL
```bash
➜ client git:(issue309) ✗ ./kn lol
Manage your Knative building blocks:
* Serving: Manage your services and release new software to them.
* Eventing: Manage event subscriptions and channels. Connect up event sources.
Usage:
...
Use "kn [command] --help" for more information about a command.
unknown sub-command or plugin "lol" for "kn"
```
* feature(testing): Introduce a Mock implementation for KnClient
Commands must only use the `KnClient` API and their unit tests should also
only use a mock implementation for this interface.
This commit introduces such a Mock implementation and works like in
the example below for creating a simple service in a synchronous
way
```
// New mock client
client := knclient.NewMockKnClient(t)
// Recording:
r := client.Recorder()
// Check for existing service --> no
r.GetService("foo", nil, errors.NewNotFound(v1alpha1.Resource("service"), "foo"))
// Create service (don't validate given service --> "Any()" arg is allowed)
r.CreateService(knclient.Any(), nil)
// Wait for service to become ready
r.WaitForService("foo", knclient.Any(), nil)
// Get for showing the URL
r.GetService("foo", getServiceWithUrl("foo", "http://foo.example.com"), nil)
// Testing:
output, err := executeCommand(client, "create", "foo", "--image", "gcr.io/foo/bar:baz")
assert.NilError(t, err)
assert.Assert(t, util.ContainsAll(output, "created", "foo", "http://foo.example.com", "Waiting"))
// Validate that all recorded API methods have been called
r.Validate()
```
Such tests have three phases:
* A recording phase where the mock client is prepared. In this phase a
recorder is called with the expected arguments and the return values
it can return. The arguments can be also functions with
signature `func (t *testing.T, actual interface{}, expected interface{})`
and will be called to verify a given argument. Such a function should
`t.Fail()` on its own if the validation fails.
A convenient `Any()` method is added to allow no validation on an argument
(see example below).
Method can be called multiple times, but the order needs to reflect
the actual calling order
* A playback phase where the test executed which in turn calls out to the
Mocks
* A validation phase to check the expected output. The recorder can be
also validated to verify that all recorded mock calls has been
used during the test.
See `service_create_mock_test.go` for a full example.
* chore: Test the mock client
* chore: Minor fixes
* chore: Cosmetic fixes
When no current namespace is set in the config file, then using `kn` without -n fails:
```
invalid configuration: no configuration has been provided
```
Instead of failing in this case, assume the default namespace "namespace"
This version contains the following:
1. wraps the main root Kn command to support plugin
2. plugins are any executable in kn's config new pluginDir
variable which defaults to $PATH
3. plugins must have name kn-*
4. 'kn plugin list' sub-command to list found kn plugins
5. skips any kn plugins found with name that match core
commands, e.g., kn-service would be ignored
6. can execute any valid kn plugins found, e.g.,
`kn valid` where the plugin file `kn-valid` is in path
specified in 2.
7. unit tests (using gotest.tools)
And is missing:
1. integration tests
2. plugin install command
3. plugin repository command
4. plugin / Knative server version negotiation
5. anything else we agree on in plugin req doc
I plan to create issues for the things missing so we don't
end up with an even bigger PR. It's already big as is but is a
good MVP as per plugins requirement doc.
* Validate invalid container concurrency options
* Use assert package
* Use FlagSet.Changed and don't care about default values
* Update dependency
* Follow e2e test changes
* Return error if invalid value is specified by users
* Fix broken e2e test
* Add more unit tests
* Fix error message
* Fix comment statement
* Revert back unrelated changes
* Fix typo
* chore(revision): Remove bogus log message
This showed up in the test run as single log message so I removed that.
* chore(revision): Revert back to wrong API group in test as its unrelated to this PR
* feature(service): Wait on update for service to become ready.
The behaviour is now the same as for `kn service create`. This should also fix some flakiness in the tests again.
* chore: Fixed changelog
* chore(service): Adapt help message for update
* fix(test): Updated renamed method
* Check that every generated file has been regenerated for CI
* No color when not on a tty which is useful for build logs
* Always do updates when called without args
* Removed -u option and added -c for codegen only (dep update, docs gen, formatting, license check)
* fix(service update): Retry an update in case of a conflict.
Is related to #224 and should fix one flake.
* chore(service): Fixed retry-loop for kn service create/update
* fix(service): Pick up new field Address instead of Domain when listing service
Starting with 0.7.0 old fields are not populated anymore. Let's switch to the new fields then.
This fix should work with 0.6.0, too as the new fields already have been populated back then.
So we can unconditionally pick status.address.url which is accordance with
our policy to support the latest release and the release before.
Fixes#246.
* fix(service list): Use status.URL instead of status.Address in column
* chore: Rebase and update changelog
* chore: Rebase and test fix
This puts all the console output to the command, where it belongs too.
One could add a ProgressHandler for more fine granular feedback (like suggested in #234) but for now this is not needed.
* fix(serving): Remove hardcoded GVK and look it up from schema
Fixes#133.
* chore(serving): Add test for "WaitForService()"
* refactor(service): Add listRoutes() to client + generic way for list options
* chore(serving): Fixing rebase conflicts
(and gofmt if goimports isn't available)
- Runs goimports on all packages except vendor dir and filter on only *.go files
- Runs gofmt on all dirs except vendor and filters on *.go files, also writes the results instead of printing diff
- Fixes typo s/insteat/insead
- Adds the changes after adding simply code step in hack/build.sh
- Uses source_dir var specifying the dirs to work on
- Combines gofmt commands into single command
* Adds custom comparison for checking multiple substrings
This changeset introduces custom comparison for checking if a target
string has given multiple substrings, namely `ContainsMultipleSubstrings`.
Also removes `commands.TestContains` function and replaces all references
of `commands.TestContains` with `gotest.tools/assert.Check` function and
uses `ContainsMultipleSubstrings` as comparison function.
* Renames and makes the compare function variadic
New name: ContainsAll
New location: pkg/util/compare.go
Also the function now takes target string as first arg,
and accepts any number of substrings to check.
Removed the message arg, the compare function composes the error message.
For eg:
```
Actual output: foo-abcd foo <unknown> 0 OK / 0 <unknown> <unknown>
Missing strings: foo-abcd1, foo1
```
* Adds tests for compare utility ContainsAll
* Update vendor/modules.txt
Explores all sub-commands from root and adds a RunE for all
commands that are groups with child commands and without a RunE.
The added RunE will return the correct errors when the command
is called with empty sub-command or with an unknown sub-command.
It will also print the command help message first.
Added a gotest.tools test for root.go.
* fix(servicing): Fix logic 'service create --force' and some bogus tests
Now a more meaningful error is returned when the user tries to create
a service that already exists. Until know the service is tried
to be created even if the client already knows that it exists.
Also some broken (broken in the sense that the test was nonsense) tests has been fixed.
* chore(serving): Use constant instead of string lateral in test
- Accepts an argument name for listing particular route
- Enables the machine readable output flags
- Updates docs for kn route command group
- Adds unit tests for route command group and route list
- Adds integration tests for route list in basic workflow test
- Updates tests and getting namespace
- Adds more unit tests for code in pkg/kn/commands/route/list_flags.go
- Adds route list command in smoke tests
- Updates vendor/modules.txt
- Clean up imports
- Addresses review comments
- replaces knative to Knative
- uses reflect.DeepEqual for slice comparison
- removes few code comments
- removes irrelevant tests modifications from the PR
* Adds kn revision delete command
* Adds unit tests for revision delete command
* Adds integration tests for revision delete command
Added revision delete command tests in new workflow namely
TestRevisionWorkflow.
* Removes extra line and renames an import alias
* Adds 10 seconds sleep between service create and revision delete
Also adds check for 'No resources found' while grabbing revision name.
* Clean up imports
* Removes the pause after service create
* Updates testing output strings in unit and e2e
* Updates post goimports on hack and test dirs
* feat(build.sh): Enable goimports for cleanup imports + cleanup imports
Much like 'go fmt' for cleaning up go source, 'goimports' can help
in properly formatting and grouping imports. See https://goinbigdata.com/goimports-vs-gofmt/
for a quick overview.
This commit also cleansup imports on existing files.
* fix(build): Add missing space for output on iterm
* chore(build): Merged gofmt and goimports
And changed order so that formatting and import reordering comes
before compiling and testing
* feat(service create): Added --no-wait and --wait-timeout
By default, `kn service create` blocks until the service is either
created or an error occured during service creation.
With the option --no-wait the behaviour can be switched to an
async mode so that that kn returns immediately after the service is
created without waiting for a successful Ready status condition.
The timeout for how long to wait can be configured with --wait-timeout
If a timeout occur, that doesn't mean that the service is not created,
but the wait just returns. The default value is 60 seconds.
In wait mode, print out the service URL as a last line (so that it can be used together with `tail -1`) to extract the service URL after the service is created.
Fixes#54
* chore(service create): Tolerate if obeservedGeneration has not been set yet during startup
* chore(service create): Refactored based on review comments
* Introduced an --async flag (replacing --wait and --no-wait)
* Added proper retry handling on the list watch
* Updated help message
* chore(service wait): Added a new test for sync behaviour
* Set current namespace from kubeconfig by default
Currently kn command does not pick up namespace from kubeconfig but
hardcorded default namespace.
This patch fixes to get namespace from kubeconfig.
Fixes https://github.com/knative/client/issues/7
* Use NamespaceFactory to get current namespace
* Update unit tests
* Add nil check for ClientConfig
* Lists revisions for a given service
Fixes#127
* Adds unit tests for listing revisions of a service
* Adds integration tests for listing revisions of a service
* Updates docs for listing revisions of a service
* Updates vendor/modules.txt
* Remove unused `--config` option
Currently `--config` option in kn command is not used from anywhere.
This patch removes the option from the command.
* update auto gen files
* Update deps by hack/update-deps.sh
Autoscaler concurrency annotations are added to the revision template if
--min-scale / --max-scale / --concurrency-target/--concurrency-limit
are provided to `kn service create` and `kn service update`
Fixes#151
Creates four subpackages for now:
1. kn/commands - inludes types.go for common
struct and other common files and misc commands
2. kn/commands/service - all 'kn service *' commands
3. kn/commands/revision - all 'kn revision *' commands
4. kn/core - contains the root.go and other top level
for code and testing
5. refactors:
a. split .../commons/human_readable_flags.go into three
b. modifies the HumanReadableFlags.ToPrinter to get pass
a function that sets the columns and fields
Had to refactor all tests to avoid cycles.
* fix(service update): Only update fields which have been sent by server.
This reflects the lemonade process step1. Tests have been adapted to
verify this behaviours.
The only situation when we update field coming from the server is for
"kn service update" for envs, image and requests/limits.
All other operation are either create (here, we always have to send the
old fields), or read (get/describe).
Fixes#144.
* chore: typo fix
* refactor(service update/create): Moved from Configuration to RevisionTemplateSpec
In order to proper handling the v1alpha1 -> v1beta1 migration methods has been updated to get rid fo Configuration within the service as this
is completely inlined in v1beta1.
The helper methods have been also updated accordingly.
I think we are good now.
* chore: Streamlined build.sh
* Merged generate-docs.sh into build.sh
* Split up into smaller functions
* Added serving dependency version to 'kn version' command
Not sure whether the latter is really useful (showing the serving dependency)
as this is might get confused with the knative version
installed on the cluster.
* chore: Fixed indentation
Also:
1. New docs for commands
* service get
* revision get
2. Removes auto generated docs tags
3. Auto run generated docs when building to pick up any command changes
* Adds --force flag to service create command / service replace
Fixes#13
* Keeps the resourceVersion of service with --force flag
* Updates the tests
* Removes unnecessary comments
* Adds info message after service create operation
Fixes#87
Aligns the service delete info message with service create too.
* Updates per review comments
Adds newline after std imports
Line breaks at proper operator
* Renames test names for service get command
also removes unnecessary commented imports
* Adds revision get command
renames `revision list` ==> `revision get`
* Adds tests for revision get command
* Updates the vendors/modules.txt
* Removes revision list command
* Adds service get command
replaces service list command
* Updates go.mod and vendors/*
* Adds message if no services found in requested namespace
* Adds tests for service get
* Adds human-friendly printer
All the credits goes to authors of https://github.com/kubernetes/kubernetes/tree/master/pkg/printers
* Updates the vendor/modules.txt
As its updated after running hack/verify-codegen.sh
* Removes WithKind and WithNamespace printing options
Lets start with bare minimum printer
* Adds licenses
and references the original implementation file link.
Removes pkg/printers/printers.go
* Removes unused imports
* Fix returning the namespace for listing resources
Fixes#86
* Adds license to pkg/kn/commands/namespaced.go
* Adds tests for namespace flags and retrieval
* Renames test function
* added tests for service update with variations of --requests/limits-cpu --requests/limits-memory
* made image optional on service update since that was not the case and image should be optional
* chore: Update dependency to knative-serving 0.5.1
* chore: Changed deps to released versions where possible
Rebuilt mod deps and vendor dir based on this dependency list
github.com/knative/serving v0.5.
github.com/knative/pkg v0.0.0-20190330001454-aad7a9ad4639
github.com/mitchellh/go-homedir v1.1.0
github.com/spf13/cobra v0.0.3
github.com/spf13/pflag v1.0.3
github.com/spf13/viper v1.3.1
k8s.io/api kubernetes-1.14.1
k8s.io/apimachinery kubernetes-1.14.1
k8s.io/cli-runtime kubernetes-1.14.1
k8s.io/client-go v11.0.0
sigs.k8s.io/yaml v1.1.0
Not sure if all dependencies are required (e.g. is k8s.io/api required
to be specified explicitely or shouldn't we rely on k8s.io/client-go
to bring it this as a transitive dependency which maches always
the cli-runtime's version.
* chore: Update .gitignore to *not* ignore certain vendor files
* chore: Aligned with k8s version from serving 0.5.2
* chore: Run `go mod tidy`
* chore(modules): Update dependencies
* Added support for limits and requests of CPU and memory. Examples:
1. kn service create mysvc --image dev.local/ns/image:latest --request-cpu 100m --requests-memory 64Mi
2. kn service create mysvc --image dev.local/ns/image:latest --limits-cpu 1000m --limits-memory 1024Mi
You can also include and/or omit the requests and limits. So the following should also work:
kn service create mysvc --image dev.local/ns/image:latest --request-cpu 1000m --limits-memory 1024Mi
* Addressed comments about maintaining existing requests and limits and added more tests
* TestServiceCreateWithRequests
* TestServiceCreateWithLimits
* TestServiceCreateRequestsLimitsCPU
* TestServiceCreateRequestsLimitsMemory
* TestServiceCreateRequestsLimitsCPUMemory
* updating dependencies and formatting tests code
* chore(version): Add buildtime and git revision to version command
For that, also updated `hack/build.sh` and `hack/build-binaries.sh` to
set the values from the outside.
The file `hack/NEXT_VERSION` contains the version number of the next
release. A regular build will create version numbers in the format
"0.1.0-20190417" which according to semver.org is a version less
than 0.1.0 (i.e. a pre-release).
A release script should pick up NEXT_VERSION, make the release with
the number found there and then update to the next release, possibly
a minor a release.
* chore(build.sh): Minor cosmetic fixes
* Aligned variable name
* Streamlined console output of build scripts
* Use "2019-04-18 07:40:10" as format for build time as it used as information only
* chore(build.sh): Add GO111MODULE=on
So that the script can be used also when running from within GOPATH
* chore(build.sh): Changed shasum --> sha256sum
... as shasum is not part of coreutils, and sha256sum should be more
generally available. Made the shasum output optional, too.
* chore(build.sh): Changed from BuildTime to BuildDate
... as this better reflects the value, the date when the client was built.
* chore(build.sh): Typo fix
* Adds service delete command
This chageset adds `service delete` command, able to delete a service
at a time.
Fixes#49
```
kn service delete --help
Delete a service
Usage:
kn service delete <SERVICE_NAME> [flags]
Aliases:
delete, del, d
Examples:
# Delete a service 'svc1' in default namespace
kn service delete svc1
# Delete a service 'svc2' in 'ns1' namespace
kn service delete svc2 -n ns1
```
* Removes aliases, PreRunE and addresses review comments
* Support --all-namespaces option for service and revision list
`kn {service, revision} list` does not have the all-namespaces
options. Although it is possible to list them by `kn service list -n
""`(empty string), it is difficult to find such secret trick.
Hence, This patch adds `--all-namespaces` option.
* Add all-namespace option to KnParams
* Add AddNamespaceFlags function
* Add GetNamespace func
* Update help message
* Use GetNamespace util in service create cmmand
* Adds example usage in service create command
Fixes#61
Adds two examples to service create command as below
```
Examples:
kn service create mysvc --image dev.local/ns/image:latest
kn service create mysvc --env KEY1=VALUE1 --env KEY2=VALUE2 --image dev.local/ns/image:latest
```
* Adds double spaces in the example text
Adding double spaces to properly aligns the example
text while displaying help.
`service create` command always requires and specify `--image` to run.
This patch changes:
- Add validation check if image is empty or not.
- Add image to `MarkFlagRequired()`.
- to add `--image IMAGE` in help message
* Intermediate.
* Basic creation working
* Simplify
* Simple test passes
* Tests for env var updater, fix to bug found where wasnt getting a pointer
* Add some comments
* Fix env var quoting issues
* More comments from cppforlife
* Fix a couple copyrights
* Add SilenceUsage option to cobra command
This patch adds `cmd.SilenceUsage` to command to stop usage output
after command validation.
Fixes https://github.com/knative/client/issues/38
* Set cmd.SilenceUsage to global cmd
* Support generating bash completion
This patch adds subcommand to generate completion script for bash.
As an knative user, we would like to complete subcommands and
options rather than typing them.
* Adds docs about bash auto completion in README.md
This changeset adds auto-completion section in existing README.md
Suggested-by: Navid Shaikh <nshaikh@redhat.com>
* put the auth libraries in the root command
* add revision describe (#15)
* print the yaml formatted revision by default
* allow for custom formatting to be passed in
* Refactor commands to allow insertion of fakes for testing
* Pin client-go to version that matches signatures other libs use
* Add tests for service list
* actually add test file
* Review comments: Fatal instead of Error/return, Split instead of read to newline
* Get revision and service listing skeletons in.
This adds the kn program, with basic commands for service and revision listing
in.
kn service list
kn revision list
They use the genericclioptions library from kubernetes to support jsonpath,
yaml, and json output. The default is to just list the names of the objects, for
now, until we add in some of the kubectl-based libraries for creating tables in
another commit.
This is deliberately bare-bones; I am looking to get the basic skeletons of how
this repository is laid out down.
No tests yet. Soon.
* Move commands to pkg, so cmd only contains minimalist main.go
* RunE instead of Run. The defaults on Cobra command generation are weird.
* Oops forgot to change types of stuff
* Do not panic on bad config file
* Make commands no longer global
* Make configuration initialization not static in the module, but rather triggered by main.go init