Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge master branch into storage-config-ui #1855

Merged
merged 235 commits into from
Dec 27, 2024

Conversation

ancorgs
Copy link
Contributor

@ancorgs ancorgs commented Dec 26, 2024

Problem

The feature branch storage-config-ui has been running in parallel to master for months already. Getting out of sync little by little.

Solution

Merge the changes from master into storage-config-ui solving all the conflicts.

dgdavid and others added 30 commits November 21, 2024 12:35
But disabled when the installation is not possible because of settings
issues.
Avoiding to use the term "issues" in the title because it isn't an
accurate term. "Preflight checks" has been used instead.
To avoid "stacking contexts" problems which avoid sticky page sections
behave as expected.

Such a workaround will be not needed when migrating to latest versions
of PF6, since the problem has been addressed by droping the
DrawerContentBody from the Page component, see
patternfly/patternfly#7130 and related links

See also https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_positioned_layout/Understanding_z-index/Stacking_context
Replaced by IssuesDrawer and IssuesDrawerToggle.
Instead of doing it dinamically since the IssuesDrawer already have logic for
rendering nothing when needed. This approach helps to avoid having calls
to a query when the QueryClient has not been set yet, like at login
screen.
Which was also causing stacking problems at the selection product page.
Because it provides a benefit to the user both visually and cognitively,
as they don't have to figure out why the install button was disabled,
nor be told where to find the reasons for it.
Co-authored-by: Imobach González Sosa <[email protected]>
* The package contains a systemd service to run auto-installation
  init scripts.
Which will be initially shown after selecting a product if user issues
are found.
Useful for routes "outside" of "installation settings context".
…on always visible (agama-project#1778)

## Problem

[A month ago](agama-project#1690) , the
'Install' button achieved more visibility after being moved to the
sticky header, allowing users to access it from any page/section/screen.

But that was just an intermediate step towards improving the 'Install'
action and the discoverability of 'Installation setup problems,' which
sadly introduced some drawbacks:

* The Install button is displayed dynamically, which still _forces_
users to figure out where it will appear when it’s not visible from the
start.
* When installation is not possible, users have to navigate to the
Overview page to see what is making their setup invalid.


## Solution

* Keep the install button always enabled and visible, triggering the
installation when the setup is valid or displaying found _issues_ when
not, and
* Allow users to check found problems always, not only  in the overview 

## A discarded alternative

At commit
agama-project@6ecdceb,
this set of changes was in a bit different shape, where the interface
rendered a disabled "Install" button and an enabled "Warning" button to
display the setup problems. Additionally, it featured a _tooltip_ to
explain to users why the "Install" button was disabled and where to
click to view the reasons in detail.

However, this approach created unnecessary complexity and moving pieces,
not to mention the challenge of writing a clear, concise, yet complete
explanation for the _tooltip_ and keeping it up-to-date, including
translations

What's more, there is no reason to avoid keeping the "Install" button
**always active but behaving slightly different** depending on the setup
status:

* Displaying found problems when the installation setup is invalid
* Displaying the confirmation dialog when the setup is valid

This way, the user doesn't need to think. They can simply click the
"Install" button. If it's not possible, they can immediately start
fixing their setup. If it is possible, they just have to confirm they
want to begin the installation.

---

Related to not yet planned Trello card, https://trello.com/c/DmUOQN1Y
(internal link)
imobachgs and others added 28 commits December 18, 2024 12:33
…-project#1843)

Logs for the `agama-web-server` services include a lot of zbus-related
information, which is not useful for the Agama use case. To have better
control over what is included in the logs, this pull request adds
support for setting logs directives using an environment variable called
`AGAMA_LOG.`

This variable works in a similar way to [env_logger's
RUST_LOG](https://docs.rs/env_logger/latest/env_logger/#enabling-logging)
but with some additions that you can find in [Tokio's

EnvFilter](https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives)
documentation.

Setting `AGAMA_LOG` to `AGAMA_LOG=debug,zbus=info` allows filtering
those annoying messages.

Note: we could hard code `zbus=info` if needed.
## Problem

- The integration test *sometimes* fails
-
https://github.com/agama-project/agama/actions/runs/12390466733/job/34585536259

```
1) Agama test
       should require setting the root password:
     Error: Timeout of 20000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/usr/share/agama/integration-tests/tests/test_root_password.js)
      at listOnTimeout (node:internal/timers:594:[17](https://github.com/agama-project/agama/actions/runs/12390466733/job/34585536259#step:17:18))
      at process.processTimers (node:internal/timers:529:7)
```

The uploaded screenshot confirms that the software initialization was
still running:


![should_require_setting_the_root_password](https://github.com/user-attachments/assets/b74170a9-0324-433f-a060-e10c00445a6c)


## Solution

- Fix the timeout setting
## Problem

An exported profile is not valid.

```shell
# agama config show > profile.json
# agama profile validate profile.json

✗ The profile is not valid. Please, check the following errors:

	* Additional properties are not allowed ('autoconnect', 'ignoreAutoDns', 'status' were unexpected). ValidationError { instance: Object {"autoconnect": Bool(true), "id": String("Wired connection 1"), "ignoreAutoDns": Bool(false), "interface": String("enp1s0"), "method4": String("auto"), "method6": String("auto"), "status": String("up")}, kind: AdditionalProperties { unexpected: ["autoconnect", "ignoreAutoDns", "status"] }, instance_path: JSONPointer([Property("network"), Property("connections"), Index(0)]), schema_path: JSONPointer([Keyword("properties"), Property("network"), Keyword("properties"), Property("connections"), Keyword("items"), Keyword("additionalProperties")]) }
	* null is not of type "string". ValidationError { instance: Null, kind: Type { kind: Single(String) }, instance_path: JSONPointer([Property("product"), Property("registrationCode")]), schema_path: JSONPointer([Keyword("properties"), Property("product"), Keyword("properties"), Property("registrationCode"), Keyword("type")]) }
	* null is not of type "string". ValidationError { instance: Null, kind: Type { kind: Single(String) }, instance_path: JSONPointer([Property("product"), Property("registrationEmail")]), schema_path: JSONPointer([Keyword("properties"), Property("product"), Keyword("properties"), Property("registrationEmail"), Keyword("type")]) }
	* null is not of type "string". ValidationError { instance: Null, kind: Type { kind: Single(String) }, instance_path: JSONPointer([Property("root"), Property("sshPublicKey")]), schema_path: JSONPointer([Keyword("properties"), Property("root"), Keyword("properties"), Property("sshPublicKey"), Keyword("type")]) }
	* Additional properties are not allowed ('autologin' was unexpected). ValidationError { instance: Object {"autologin": Bool(false), "fullName": String(""), "hashedPassword": Bool(false), "password": String(""), "userName": String("")}, kind: AdditionalProperties { unexpected: ["autologin"] }, instance_path: JSONPointer([Property("user")]), schema_path: JSONPointer([Keyword("properties"), Property("user"), Keyword("additionalProperties")]) }
```

## Solution

Fix both the exported values and the JSON schema.

```shell
# agama config show > profile.json
# agama profile validate profile.json
✓ The profile is valid.
```
## Problem

In order to support the QA use-case, we need to make it possible to
configure the boot loader to stop at the menu without a timeout.

trello:
https://trello.com/c/dKYmc0K7/4018-5-agama-ped-10810-new-section-to-configure-bootloader
jira:
- [PED-10810](https://jira.suse.com/browse/PED-10810)
- Epic: https://jira.suse.com/browse/AGM-54
- Story: https://jira.suse.com/browse/AGM-59
- Tasks: https://jira.suse.com/browse/AGM-67 and
https://jira.suse.com/browse/AGM-68


## Solution

Add to profile section `Bootloader` with key `stopOnBootMenu` and
boolean value. This allows QA to use `jq -n ".bootloader.stopOnBootMenu
= true" | agama config load` after selecting product and before start of
installation to force stop without any timeout.


## Testing

- *Added a new unit test*
- *Tested manually*
The backend expects a prefix length instead of netmask, but
unfortunately current code base is not ensuring of making the conversion
before sending a request, making the connection form fail silently.

This commit fix it by adapting the formatIp util method for relying in
ipPrefixFor to make such a conversion.
## Problem

Backend expects a prefix length instead of netmask, but unfortunately
current code base is not ensuring of making the conversion before
sending a request, making the connection form fail silently.


## Solution

Adapt the `formatIp` util method for relying in `ipPrefixFor` to make
such a conversion.

## Testing

- Updated unit test
- Tested manually

---

Fixes agama-project#1846

Related to agama-project#530
## Problem

In autoinstallation, the storage config could be set before probing
storage. If so, the probing action overwrites the config that was set
from the autoinstall profile.

https://bugzilla.suse.com/show_bug.cgi?id=1234711

## Solution

Hotfix for ensuring the storage config is preserved when doing probing
for first time. A better solution should be provided for a correct
management of the services and precedences.

## Testing

Manually tested.
## Problem

There is collision between
agama-project#1848 and
agama-project#1840 where bootloader adds
another interface with Get/SetConfig on Storage service. This result
that generic access no longer works and needs access via specific
interface.

reported on slack
https://suse.slack.com/archives/C02TLF25571/p1734924853266999

## Solution

Change code to avoid ambitious code.


## Testing

- *Tested manually*
@dgdavid dgdavid merged commit 143095e into agama-project:storage-config-ui Dec 27, 2024
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.