* refact: namespace should be bound property
* chore: pass bound namespace property in template
* chore: update tests to account for bound namespace refactoring
* test: add test coverage for factoring namespace in path matching algo
* ui: add namespace filter feature
ui: add namespace filtering to variables.index
test: namespace filter
refact: fix action in template
ui: move data fetching and query param logic to
ui: controller query parameter logic
ui: prevent from forwarding query param
ui: create variables controller
refact: use dependency injection for controlling parent qp
chore: clean-up reset in route
chore: clean-up reset in route
* ui: add namespace filter to secure var form (#13629)
ui: update variable factory to accept namespaces
refact: update api to accept disabled
ui: add namespace setting logic to form
refact: remove debugger
refact: get correct selectors for
ui: move data loading to namespace-filter component
chore: prettify template
ui: update factory to handle namespace setting
refact: remove inline styling for grid class
* ui: fix placement of filter in `SecureVariablesForm` (#13762)
* refact: conditionally render css class
* chore: remove unused CSS property
* refact: edit path-input class to prevent textarea override
* refact: inject missing store service (#13763)
* chore: patch fixes for when no default namespace is available (#13782)
* test: add tests for namespace filtering conditions (#13816)
* test: add tests for namespace filtering and namespaces appearing in form
* patch namespace related issue to saving and querying (#13825)
* refact: use namespace id, not entity
* refact: update adapter to edit request to include qp
* ui: early exit if no snapshot
* refact: test passes wrong interface to method
* chore: add missing url update URL builder
* refact: model in doesn't have absolutePath
* Align error message
* chore: update tests (#13905)
* chore: patch brittle tests with better selectors
* chore: update assertion count
Co-authored-by: Phil Renaud <phil@riotindustries.com>
* Support pathLinkedEntities starting with nomad/jobs/ instead of jobs/
* links from jobs/groups/tasks to variables now look for nomad/jobs/ instead of jobs/
* Tests updated to reflect nomad/jobs/ change
* Acceptance test for disallowing nomad/foo/, and hint text updates
* Defensive logic in case path not yet set
* Allow exactly nomad/jobs as a variable path
* Vars from job prototype
* singular linked variable from job
* Links from task groups and tasks to their variables incl periodic and parameterized
* Lintfix
* Make sure they can list em before we list em
* Tests from job/group/task to var
* Failing test and TODO for wildcard
* Alias the namespace query parameter for Evals
* eval: fix list when using ACLs and * namespace
Apply the same verification process as in job, allocs and scaling
policy list endpoints to handle the eval list when using an ACL token
with limited namespace support but querying using the `*` wildcard
namespace.
* changelog: add entry for #13530
* ui: set namespace when querying eval
Evals have a unique UUID as ID, but when querying them the Nomad API
still expects a namespace query param, otherwise it assumes `default`.
Co-authored-by: Luiz Aoqui <luiz@hashicorp.com>
* Related entities scaffolded
* Added hint on edit
* Re-classic'd
* Dont create entities when path goes beyond task level
* only show the related entities hint for new vars, not edited ones
* Unit tests for pathLinkedEntities
* Acceptance tests for linked entities
* Add hint on creation
* Will be vs Is on @new boolean flag
* Link styles and namespaces on links
* Unused component class
* Delog
* Defensive shouldShowLinked
* Properly instantiating the accessibilty check test
* Toying with insert and update helpers before translation func
* Working prototype that lets you switch between json and tabular
* No longer add the bonus items row in json mode
* Trimmed the ivy from the codemirror (#13503)
* Trimmed the ivy from the codemirror
* editedJSONItems removal
* De-debugger
* Replaced other instances of IvyCodeMirror throughout the app (#13528)
* Replaced other instances of IvyCodeMirror throughout the app
* PR requests for codemirror modifier
* Screen reader setting as param
* Trying a simpler codemirror test helper
* Lint removal
* Screen Reader Label added for a11y
* JSONViewer cleanup
* JSON editor added to /new and all variables stringified before save or translate
* Give users a foothold when editing an empty item in JSON mode
* Copy the empty KV
* No duplicate keys in KV
* Better handling of cursor snapping in json edit field
* Catch formatting errors on the fly
* Basic tests for JSON to Table and Table to JSON in form
* JSON view init
* Overeager config history reverted
* Set as query parameter
* border added to copy button
* More robust stringifyObject helper
* Testing for stringify-object helper
* Error thrown if you have no KVs on save
* Acceptance tests for flash messages and no-key-value adds
* Post-hoc accounting for new variable path routing
* Trim on key before validating it as existing
* toast style notification init
* Notificatino styles and messaging for variable save
* pre-PR cleanup
* Typo fix and 5sec timeout
* Prevent text from overlapping the close button
* Bones of a just-in-time compaction pathTree
* wooo got compaction going in sub-ms times
* PR cleanup
* Path compaction tests
* lint fix to equal instead of .ok()
* Name prop specifically being equality checked
* variable index header and deletion hook
* Some visual improvements to edit header and back button
* Mirage fixtures for variables
* Deletion flow test
* Account for disabled state of add-more button
* Transition destination changes after design chat
* Simplified parent folder path by adding to variable model
* Lint cleanup
* test update to reflect path redirect on delete
* No longer have to re-traverse to a deleted var folder after deletion, tests updated
* Recursive trie-building with variable paths
* tree structure applied to new path routes and a new util class
* Breadcrumbs for SV paths and prompt when nothing exists at a path
* Lint and test cleanup
* Pre-review cleanup
* lintfix
* Abstracted pathtree each-ins into a new component class
* Path tree component styles
* Types added and PR feedback addressed
* Path tree to variable paths
* Slightly simpler path QP mods
* More pr feedback handling
* Trim moved into a function on variable model
* Traversal and compaction tests for PathTree
* Trim Path tests
* Variable-paths component tests
* Lint fixup for tests
* variables.new initialized
* Hacky but savey
* Variable wildcard route and multiple creatable at a time
* multiple KVs per variable
* PR Prep cleanup and lintfix
* Delog
* Data mocking in mirage for variables
* Linting fixes
* Re-implement absent params
* Adapter and model tests
* Moves the path-as-id logic to a serializer instead of adapter
* Classic to serializer and lint cleanup
* Pluralized save button (#13140)
* Autofocus modifier and better Add More button UX (#13145)
* Secure Variables: show/hide functionality when adding new values (#13137)
* Flight Icons added and show hide functionality
* PR cleanup
* Linting cleanup
* Position of icon moved to the right of input
* PR feedback addressed
* Delete button and stylistic changes to show hide
* Hmm, eslint doesnt like jsdoc-usage as only reason for import
* More closely match the button styles and delete test
* Simplified new.js model
* Secure Variables: /variables/*path/edit route and functionality (#13170)
* Variable edit page init
* Significant change to where we house model methods
* Lintfix
* Edit a variable tests
* Remove redundant tests
* Asserts expected
* Mirage factory updated to reflect model state
* Route init
* Bones of a mirage-mocked secure variables policy
* Functinoing policy for list vars
* Delog and transition on route
* Basic guard test
* Page guard tests for secure variables
* Cleanup and unit tests for variables ability
* Linter cleanup
* Set expectations for test assertions
* PR feedback addressed
* Read label changed to View per suggestion
* Allow running jobs from a namespace-limited token
* qpNamespace cleanup
* Looks like parse can deal with a * namespace
* A little diff cleanup
* Defensive destructuring
* Removing accidental friendly-fire on can-scale
* Testfix: Job run buttons from jobs index
* Testfix: activeRegion job adapter string
* Testfix: unit tests for job abilities correctly reflect the any-namespace rule
* Testfix: job editor test looks for requests with namespace applied on plan
* LastIndexOf and always append a namespace on job links
* Confirmed the volume equivalent and simplified idWIthNamespace logic
* Changelog added
* PR comments addressed
* Drop the redirect for the time being
* Tests updated to reflect namespace on links
* Task detail test default namespace link for test
* Sample percy test added
* Node engine up to 14.x for UI prep
* Force ui test rerun
* Updated config.yml
* Node v upgraded to 14 for docker image
* Expect length in test
* Running ember tests under percy exec
* Percy exec format
* Percy cli added
* Noop to rerun tests with updated percy_token
* Evals full list and details open snapshots
* Pretty legit use of assert so disable the warning
* Jobs list tests
* Snapshots for top-level clients, servers, ACL, topology, and storage lists
* Expect caveat for Topology test
* Stabilizing tests with faker seeded to 1
* Seed-stabilizing any tests with percySnapshots
* Faker import
* Drop unused param
* Assets and test audit using an older node version
* New strategy: avoid seeding, just use percyCSS to hide certain things
* chore: run prettier on hbs files
* ui: ensure to pass a real job object to task-group link
* chore: add changelog entry
* chore: prettify template
* ui: template helper for formatting jobId in LinkTo component
* ui: handle async relationship
* ui: pass in job id to model arg instead of job model
* update test for serialized namespace
* ui: defend against null in tests
* ui: prettified template added whitespace
* ui: rollback ember-data to 3.24 because watcher return undefined on abort
* ui: use format-job-helper instead of job model via alloc
* ui: fix whitespace in template caused by prettier using template helper
* ui: update test for new namespace
* ui: revert prettier change
Co-authored-by: Luiz Aoqui <luiz@hashicorp.com>
* chore: remove commented out code and skipped tests
* refact: triggeredBy requires filter expression not qp
* refact: use filter expression dsl instead of named params
* fix: add type
* docs: add in-line reference to filter expression DSL
* fix: update filter copy for non-matches
* fix: correct conditional logic to render no match copy
* Unknown status for allocations accounted for
* Canary string removed
* Test cleanup
* Generate unknown in mirage
* aacidentally oovervoowled
* Update ui/app/components/allocation-status-bar.js
Co-authored-by: Derek Strickland <1111455+DerekStrickland@users.noreply.github.com>
* Disconnected state on job status in client
* Renaming Disconnected to Unknown in the job-status-in-client
* Unknown accounted for on job rows filtering and testsfix
* Adding lostAllocs as a computed dependency
* Unknown client status within acceptance test
* Swatches updated and PR comments addressed
* Unknown and disconnected added to test fixtures
Co-authored-by: Derek Strickland <1111455+DerekStrickland@users.noreply.github.com>
* Allocation page linkfix
* fix added to task page and computed prop moved to allocation model
* Fallback query added to task group when specific volume isnt knowable
* Delog
* link text reflects alloc suffix
* Helper instead of in-template conditionals
* formatVolumeName unit test
* Removing unused helper import
* chore: prettify gutter-menu
* chore: add portal packages
* styling: add styles sidebar and portal behavior
* ui: sidebar component
* ui: create and implement statechart for evals
* ui: actor-relationship service and provider component
* ui: d3 hierarchy computation
* chore: add render-modifiers and curved arrows
* ui: create evaluation actor div
* fix related evaluations schema
* ui: register/deregister evaluation divs
* ui: handle resize behavior
* bug: infinite re-render cycle
* fix: conditional logic to prevent infinite render of flex resizing
* ui: related evaluations schema and request param
* ui: fix testing for evaluations
* refact: make related-evals a proper has-many
* chore: don't pauseTest
* temp: debug d3 hierarchy
* ui: move derived state logic into backing component class for detail
* ui: deprecated related evaluations logic in statechart
* ui: update evaluation models
* ui: update logic to paint svg in non-viewable scroll region
* ui: update styling
* ui: testing for eval detail view
* ui: delete detail from template directory
* ui: break detail component down
* ui: static data for /evaluation/:id endpoint
* ui: fix styling of d3 viz
* ui: add query parameter adapter for evals
* ui: last minute design requests
* wip: address browser updating detail view behavior
* refact: handle query-state change in statechart
* conditional class looking for currentEval equality (#12411)
* F UI/evaluation detail sidebar rel evals (#12415)
* ui: remove busy id alias from statechart
* ui: edit related evaluations viz error message
* ui: bug fixes on related evaluations view (#12423)
* ui: remove busy id alias from statechart
* ui: edit related evaluations viz error message
* ui: update error state
* ui: related evaluation outline styling
* Related evaluation stylefile and non-link if it matches the active sidebar (#12428)
* Adds tabbable and keyboard pressable evaluation table rows (#12433)
* ui: fix failing eval list tests (#12437)
* ui: move styling into classes (#12438)
* fix test failures (#12444)
* ui: move styling into classes
* ui: eslint disable
* ui: allocations have evaluations as async relationships
* ui: fix evaluation refresh button (#12447)
* ui: move styling into classes
* ui: eslint disable
* ui: allocations have evaluations as async relationships
* ui: refresh bug
* ui: final touches on sidebar (#12462)
* chore: turn off template linting rules
Temporarily turning off template linting because we dont have a set CSS convention and the release needs to go out ASAP.
* doc: deprecate out of date comments and vars
* ui: edit mirage server fetch logic
* ui: style sidebar relative
* Modification to mocked related evals and manually set 100% height on svg (#12460)
* F UI/evaluation detail sidebar final touches (#12463)
* chore: turn off template linting rules
Temporarily turning off template linting because we dont have a set CSS convention and the release needs to go out ASAP.
* doc: deprecate out of date comments and vars
* ui: edit mirage server fetch logic
* ui: style sidebar relative
* ui: account for new related eval added to chain
Co-authored-by: Michael Klein <michael@firstiwaslike.com>
Co-authored-by: Phil Renaud <phil@riotindustries.com>
* chore: upgrade forward compatible packages
* chore: v3.20.2...v3.24.0
* chore: silence string prototype extension deprecation
* refact: don't test clicking disabled button job-list
Recent test-helper upgrades will guard against clicking disabled buttons
as this is not something that real users can do. We need to change our
tests accordingly.
* fix: await async test helper `expectError`
We have to await this async test function otherwise the test's
rendering context will be torn down before we run assertions
against it.
* fix: don't try to click disabled two-step-button
Recent test-helper updates prohibit clicking disabled buttons. We need
to adapt the tests accordingly.
* fix: recommendation-accordion
Use up-to-date semantics for handling list-accordion closing
in recommendation-accordion.
* fixes toggling recommendation-accordion toggle.
* fix: simple-unless linting error application.hbs
There's no reason to use unless here - we can use if instead.
* fix: no-quoteless-attributes recommendation accordion
* fix: no-quoteless-attributes recommendation-chart
* fix: allow `unless` - global-header.hbs
This is a valid use of unless in our opinion.
* fix: allow unless in job-diff
This is not a great use for unless but we don't want to change this
behavior atm.
* fix: no-attrs-in-components list-pager
There is no need to use this.attrs in classic components. When we
will convert to glimmer we will use `@`-instead.
* fix: simple-unless job/definition
We can convert to a simple if here.
* fix: allow inline-styles stats-box component
To make linter happy.
* fix: disable no-action and no-invalid-interactive
Will be adressed in follow-up PRs.
* chore: update ember-classic-decorator to latest
* chore: upgrade ember-can to latest
* chore: upgrade ember-composable-helpers to latest
* chore: upgrade ember-concurrency
* fix: recomputation deprecation `Trigger`
schedule `do` on actions queue to work around recomputation deprecation
when triggering Trigger on `did-insert`.
* chore: upgrade ember-cli-string-helpers
* chore: upgrade ember-copy
* chore: upgrade ember-data-model-fragments
* chore: upgrade ember-deprecation-workflow
* chore: upgrade ember-inline-svg
* chore: upgrade ember-modifier
* chore: upgrade ember-truth-helpers
* chore: upgrade ember-moment & ember-cli-moment-shim
* chore: upgrade ember-power-select
* chore: upgrade ember-responsive
* chore: upgrade ember-sinon
* chore: upgrade ember-cli-mirage
For now we will stay on 2.2 - upgrades > 2.3 break the build.
* chore: upgrade 3.24.0 to 3.28.5
* fix: add missing classic decorators on adapters
* fix: missing classic decorators to serializers
* fix: don't reopen Ember.Object anymore
* fix: remove unused useNativeEvents
ember-cli-page-objects doesn't provide this method anymore
* fix: add missing attributeBindings for test-selectors
ember-test-selectors doesn't provides automatic bindings for
data-test-* attributes anymore.
* fix: classic decorator for application serializer test
* fix: remove `removeContext` from tests.
It is unneeded and ember-cli-page-objects doesn't provides
this method anymore.
* fix: remove deprecations `run.*`-invocations
* fix: `collapseWhitespace` in optimize test
* fix: make sure to load async relationship before access
* fix: dependent keys for relationship computeds
We need to add `*.isFulfilled` as dependent keys for computeds that
access async relationships.
* fix: `computed.read`-invocations use `read` instead
* chore: prettify templates
* fix: use map instead of mapBy ember-cli-page-object
Doesn't work with updated ember-cli-page-object anymore.
* fix: remove remaining deprecated `run.*`-calls
* chore: add more deprecations deprecation-workflow
* fix: `implicit-injection`-deprecation
All routes that add watchers will need to inject the store-service
as the store service is internally used in watchers.
* fix: more implicit injection deprecations
* chore: silence implicit-injection deprecation
We can tackle the deprecation when we find the time.
* fix: new linting errors after upgrade
* fix: remove merge conflicts prettierignore
* chore: upgrade to run node 12.22 when building binaries
There is no need to check the namespace query-param anymore with
`urlWithNamespace` but some tests still are using this. We refactor
the tests to be less clever and check the URL in a more manual approach
by explicitly defining how the URL should look like if a job belongs
to a namespace.
* less clever™ metaprogramming when checking for expectedURL
* clicking slices job-client-status-summary needs to change its
behavior and not pass the namespace query-param anymore.
* api: return 404 for alloc FS list/stat endpoints
If the alloc filesystem doesn't have a file requested by the List
Files or Stat File API, we currently return a HTTP 500 error with the
expected "file not found" error message. Return a HTTP 404 error
instead.
* update FS Handler
Previously the FS handler would interpret a 500 status as a 404
in the adapter layer by checking if the response body contained
the text or is the response status
was 500 and then throw an error code for 404.
Co-authored-by: Jai Bhagat <jaybhagat841@gmail.com>
Namespaces are set-up in Nomad to be an object that has an id property.
However, namespaces actually don't have that shape. Our search was expecting
a namespace object, but we actually don't have a namespace assigned to jobs
in our config and namespace is set to null. Normally, these namespaces would
be set to default, but that would require us to refactor our Mirage config
if we wanted to assert that namespaces are 'default' and not null. So this is
a bandaid solution.
* ui: add parameterized dispatch interface
This commit adds a new interface for dispatching parameteried jobs, if
the user has the right permissions. The UI can be accessed by viewing a
parameterized job and clicking on the "Dispatch Job" button located in
the "Job Launches" section.
* fix failing lint test
* clean up dispatch and remove meta
This commit cleans up a few things that had typos and
inconsistent naming. In line with this, the custom
`meta` view was removed in favor of using the
included `AttributesTable`.
* ui: encode dispatch job payload and start adding tests
* ui: remove unused test imports
* ui: redesign job dispatch form
* ui: initial acceptance tests for dispatch job
* ui: generate parameterized job children with correct id format
* ui: fix job dispatch breadcrumb link
* ui: refactor job dispatch component into glimmer component and add form validation
* ui: remove unused CSS class
* ui: align job dispatch button
* ui: handle namespace-specific requests on job dispatch
* ui: rename payloadMissing to payloadHasError
* ui: don't re-fetch job spec on dispatch job
* ui: keep overview tab selected on job dispatch page
* ui: fix task and task-group linting
* ui: URL encode job id on dispatch job tests
* ui: fix error when job meta is null
* ui: handle job dispatch from adapter
* ui: add more tests for dispatch job page
* ui: add "job dispatch" capability check
* ui: update job dispatch from code review
Co-authored-by: Luiz Aoqui <luiz@hashicorp.com>
In job versions, if you have an ACL token with a write policy
you should be able to revert a job, however, that was not the
case here. This is because we're using ember-can to check if
the user can run a job. That permission relies on policiesSupportRunning
which uses a function called namespaceIncludesCapability. We're going to
need to refactor any cases that use this function.
We wanted the ability to get our namespace from query params
in order to do this, we're using additional attributes via
ember-can to set a bound property directly from our
handlebar file. This sets us up better in the event that
the namespace filter changes on the UI because our handlebar
file will be aware of the change, whereas our ability may not
update as the namespace filter updates.
The name property had to be added back to the agent schema
in the Agent Factory because the /agent/monitor endpoint in
the config finds agents by their names and since member is not
a proper entity in our Mirage Config we can't just findBy name
of the member. So although we're following the correct schema
we're set-up to rely on this.
This closes#10513, thanks to @bastelfreak for the report.
GET /status/leader returns an IPv6 host with square brackets
around the IP address as expected, but the rpcAddr property
on the agent model does not.
This fixes rpcAddr, updates the Mirage /status/leader mock
to properly format an IPv6 host, and changes the agent
factory to sometimes produce IPv6 addresses.
I added a formatHost utility function to centralise the
conditional square bracket-wrapping that would have
otherwise been further scattered around.
This rethinks namespaces as a filter on list pages rather than a global setting.
The biggest net-new feature here is being able to select All (*) to list all jobs
or CSI volumes across namespaces.
This is the first step in #10268. If a maximum is not specified, the
task group sum uses the memory number instead. The maximum is only
shown when it’s higher than the memory sum.
This updates the UI to use the new fuzzy search API. It’s a drop-in
replacement so the / shortcut to jump to search is preserved, and
results can be cycled through and chosen via arrow keys and the
enter key.
It doesn’t use everything returned by the API:
* deployments and evaluations: these match by id, doesn’t seem like
people would know those or benefit from quick navigation to them
* namespaces: doesn’t seem useful as they currently function
* scaling policies
* tasks: the response doesn’t include an allocation id, which means they
can’t be navigated to in the UI without an additional query
* CSI volumes: aren’t actually returned by the API
Since there’s no API to check the server configuration and know whether
the feature has been disabled, this adds another query in
route:application#beforeModel that acts as feature detection: if the
attempt to query fails (500), the global search field is hidden.
Upon having added another query on load, I realised that beforeModel was
being triggered any time service:router#transitionTo was being called,
which happens upon navigating to a search result, for instance, because
of refreshModel being present on the region query parameter. This PR
adds a check for transition.queryParamsOnly and skips rerunning the
onload queries (token permissions check, license check, fuzzy search
feature detection).
Implementation notes:
* there are changes to unrelated tests to ignore the on-load feature
detection query
* some lifecycle-related guards against undefined were required to
address failures when navigating to an allocation
* the minimum search length of 2 characters is hard-coded as there’s
currently no way to determine min_term_length in the UI
This adds a Revert two-step button to the JobVersions component for
not-current versions, which redirects to the overview on success. It
checks the job version before and after reversion to mitigate the edge
case where reverting to an otherwise-identical version has no effect, as
discussed in #10337.
It uses existing facilities for handling other errors and disabling the
button when permissions are lacking.
This followup to #10066 adds a step to clear the one-time token
from the URL after the application has loaded. The delay is
required for it to actually clear, but only when the OTT is present
to avoid slowing down the entire test suite.
This adds UI support for receiving the one-time token passed via query parameter, as in #10134
and related PRs, and exchanging it for its corresponding secret ID. When this works, it’s mostly
invisible, with a brief flash of the OTT onscreen.
The authentication failure message now suggests the -authenticate flag.
When OTT exchange fails, it shows a whole-page error.
This includes a known UX shortcoming in that the OTT will not disappear from the URL when an
identifier is specified on the command line, like nomad ui -authenticate jobname. The goal is to
address that shortcoming in a forthcoming pull request.
This closes#10146.
Because of cibernox/ember-power-select#1203, which documents
the current impossibility of attaching test selectors to a
PowerSelect invocation, this uses test selectors on parent
containers instead, occasionally adding wrappers when needed.
I chose to leave the existing test selectors in the hopes that
we can return to using them eventually, but I could easily
remove them if it seems like extra noise now.
Presumably for the same reason, @class no longer works, so
this adjusts the scoping of global search CSS to preserve the style
of the search control.
I also included an update to the latest version of
ember-test-selectors, since we were far behind and I tried
that before finding the aforelinked issue.
Finally, this replaces ember-cli-uglify with ember-cli-terser to address
production build failures as described at ember-cli/ember-cli#9290.