Commit Graph

377 Commits

Author SHA1 Message Date
Daniel J Walsh 62a22c5d60
Run codespell on code
Also cleanup --rm=true to be just --rm

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2023-08-03 07:00:30 -04:00
Valentin Rothberg 8b7701f522 machine: QEMU: recover from failed start
After a failed start, we can run into (somehow inconsistent) states
where the machine won't start because a previous QEMU process is still
running and the PID file is being used.  Stop didn't resolve the issue
as this state wasn't detected.

Allow to recover from this state by a) detecting it during start and
error out with a more helpful message than the error QEMU would
otherwise spit out, and b) by enabling stop to kill the dangling QEMU
process - even after a failed stop.

With the changes, a recovery may look as follows:
```
_  podman git:(main) _ ./bin/darwin/podman machine start
Starting machine "podman-machine-default"
Error: cannot start VM "podman-machine-default": another instance of "/opt/homebrew/bin/qemu-system-aarch64" is already running with process ID 970: please stop and restart the VM
_  podman git:(main) _ ./bin/darwin/podman machine stop
Machine "podman-machine-default" stopped successfully
_  podman git:(main) _ ./bin/darwin/podman machine start
Starting machine "podman-machine-default"
Waiting for VM ...
```

Please note that this change does not prevent us from running into such
inconsistent states but only allows for recovering from them.

[NO NEW TESTS NEEDED] - there is no reliable reproducer.

Fixes: #16054
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-08-02 11:08:26 +02:00
Jake Correnti 21ebe0e90a Move `writeConfig` logic to shared function
Moves the shared logic from `writeConfig` into a shared function in
`pkg/machine/machine_common.go`

[NO NEW TESTS NEEDED]

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-08-01 21:40:14 -04:00
Jake Correnti 597ccff0bc Move some logic of `setRootful` to a common file
Moves most of the logic of `setRootful` to the common file
`pkg/machine/machine_common.go`.

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-08-01 21:40:06 -04:00
Jake Correnti 98cf8462ad move `removeFilesAndConnections` to a common file
Moves `removeFilesAndConnections` to the common file
`pkg/machine/connections.go` to be reused by multiple hypervisors.

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-08-01 21:13:58 -04:00
Jake Correnti 75a8f13c4a Move `waitAPIAndPrintInfo` to common file
Moves `waitAPIAndPrintInfo` into the common file
`pkg/machine/machine_common.go` allowing applehv and qemu to share the
code.

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-08-01 21:13:58 -04:00
Jake Correnti 55c7b5ceca Move `addSSHConnectionsToPodmanSocket` code to shared file
Moves the implementation of `addSSHConnectionsToPodmanSocket` into the
common file `pkg/machine/machine_common.go`. The implementation was
shared between the hypervisors and does not need to be implemented
multiple times.

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-08-01 21:13:52 -04:00
Jake Correnti 850482b314 Move alternate image acquisition to separate function
Moves acquisition of an alternate image provided by the user out of
`acquireVMImage` in `pkg/machine/<hypervisor>/machine.go` and into
`pkg/machine/pull.go` as its own function.

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-08-01 09:53:38 -04:00
Jake Correnti 906af5bbc6 Move `getDevNullFiles` into a common file
Moves `getDevNullFiles` into a new common file,
`pkg/machine/machine_common.go`, preventing the re-implementation of the
function across the different hypervisor implementations.

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-08-01 08:52:23 -04:00
OpenShift Merge Robot a9948dafc9
Merge pull request #19455 from jakecorrenti/qemu-machine-funcs-to-methods
Convert new QEMU functions to methods with documentation
2023-08-01 09:43:17 +02:00
OpenShift Merge Robot 0ecda592c9
Merge pull request #19350 from jakecorrenti/breakup-applehv-machine-funcs
Breakup applehv machine funcs
2023-08-01 09:22:20 +02:00
Jake Correnti d6847b19c8 Convert QEMU functions to methods with documentation
Converts new functions added in #19311 to methods and adds
documentation.

[NO NEW TESTS NEEDED]

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-31 15:55:47 -04:00
Jake Correnti ff7d287fc0 Breakup AppleHV machine funcs
The functions for AppleHV's VM interface implementation (machine.go) had
quite large functions. Pulls out some code that could be moved to its
own function for easier readability and maintainability.

[NO NEW TESTS NEEDED]

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-31 10:41:18 -04:00
OpenShift Merge Robot 330e51960e
Merge pull request #19364 from jakecorrenti/breakup-hyperv-machine-funcs
Breakup hyperv machine funcs
2023-07-31 16:25:03 +02:00
Jake Correnti 19deb6a346 Adds documentation to new functions that were added
Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-30 19:58:03 -04:00
Jake Correnti 481143e584 `startHostNetworking`: get DevNull files
[NO NEW TESTS NEEDED]

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-30 18:39:45 -04:00
Jake Correnti 13da82466a `Remove`: remove network and ready sockets from registry
Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-30 18:39:41 -04:00
Jake Correnti d896431b28 `Remove`: remove files and connections
Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-30 18:31:30 -04:00
Jake Correnti 32265e1f64 `Remove`: collect files to destroy
Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-30 18:24:13 -04:00
Jake Correnti 381b103dd1 `Init`: read and split ign file
Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-30 18:22:49 -04:00
Jake Correnti aa6827a67a `Init`: write ign config
Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-30 18:21:48 -04:00
Jake Correnti cc30639d7b `Init`: add network and registry socks to registry
Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-30 18:19:34 -04:00
Jake Correnti 78d3b549cd `Init`: add SSH conns to podman sock
Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-30 18:16:32 -04:00
Jake Correnti 837bc25681 Fix HyperV loadMachineFromJSON function name
Re-names HyperV function that was copied from the applehv
implementation and not changed. Makes the function a method of
`HyperVMachine`.

[NO NEW TESTS NEEDED]

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-28 11:14:13 -04:00
Valentin Rothberg 416a471eed machine: QEMU: lock VM on stop/rm/set
Lock the machine when stopping, removing or changing its attributes to
make sure write accesses are serialized which should prevent a number of
issues and inconsistencies reported.

[NO NEW TESTS NEEDED]

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-07-28 13:57:59 +02:00
OpenShift Merge Robot bd0fe69cad
Merge pull request #19385 from jakecorrenti/breakup-qemu-config-funcs
Breakup qemu config funcs
2023-07-28 08:37:42 +02:00
Jake Correnti 3523b9b052 Break QEMU `config.go` code into its own functions
Breaks some of the code in QEMU's `VirtProvider` implementation located
at `pkg/machine/qemu/config.go` into its own functions. Aids in
improving the readability of the code.

[NO NEW TESTS NEEDED]

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-27 09:53:21 -04:00
Valentin Rothberg c341a0ffe0 machine: QEMU: lock VM on start
Lock the VM on start.  If the machine is in the "starting" state we know
that a previous start has failed and guide the user into resolving the
issue.

Concurrent starts will busy wait and return the expected "already
running" error.

NOTE: this change is only looking at the start issue (#18662).  Other
commands such as stop and update should also lock and will be updated
in a future change.  I expect the underlying issue to apply to all
machine providers, not only QEMU.  It's desirable to aim for extending
the machine interface to also allow to `Lock()` and `Unlock()`.  After
acquiring the lock, the VM should automatically be reloaded/updated.

[NO NEW TESTS NEEDED]

Fixes: #18662
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-07-27 14:16:02 +02:00
Daniel J Walsh 17496592e4
Merge pull request #19311 from jakecorrenti/breakup-qemu-machine-funcs
Reduce qemu machine function sizes
2023-07-24 10:04:22 -04:00
Jake Correnti b57091ac92 Reduce qemu machine function sizes
The functions for QEMU's `VM` interface implementation (`machine.go`)
had quite large functions. Pulls out some code that could be moved to
its own function for easier readability.

[NO NEW TESTS NEEDED]

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-07-24 09:31:58 -04:00
Anders F Björklund d2862c7dd5 Avoid progress hang with empty files
[NO NEW TESTS NEEDED]

Signed-off-by: Anders F Björklund <anders.f.bjorklund@gmail.com>
2023-07-17 19:11:07 +02:00
Anders F Björklund d8d600b1d9 Add progress bar for decompress image
[NO NEW TESTS NEEDED]

Signed-off-by: Anders F Björklund <anders.f.bjorklund@gmail.com>
2023-07-17 14:34:06 +02:00
Anders F Björklund 46058cfed9 refactor: move progressbar to a function
Signed-off-by: Anders F Björklund <anders.f.bjorklund@gmail.com>
2023-07-17 14:34:06 +02:00
Brent Baude b4ffbcdfd8 Enabled arm64 arch for podman applehv provider
The apple hypervisor code works on Intel Macs with very recent operating
system versions.

[NO NEW TESTS NEEDED]

Signed-off-by: Brent Baude <bbaude@redhat.com>
2023-07-14 10:19:07 -05:00
OpenShift Merge Robot a6bdccdb85
Merge pull request #19217 from baude/applehvpass3
Podman machine AppleHV pass number 3
2023-07-13 19:03:46 +02:00
Brent Baude 1443e2918c Podman machine AppleHV pass number 3
* Enabled user-mode networking with gvproxy
* VirtIOFS volumes supported

Signed-off-by: Brent Baude <bbaude@redhat.com>

[NO NEW TESTS NEEDED]

Signed-off-by: Brent Baude <bbaude@redhat.com>
2023-07-13 09:06:34 -05:00
Valentin Rothberg 8c16322a84 machine start: qemu: wait for SSH readiness
During the exponential backoff waiting for the machine to be fully up
and running, also make sure that SSH is ready.  The systemd dependencies
of the ready.service include the sshd.service among others but that is
not enough.

Other CoreOS users reported the same issue on IRC, so I feel fairly
confident to use the pragmatic approach of making sure SSH works on the
client side.  #17403 is quite old and there are other pressing machine
issues that need attention.

[NO NEW TESTS NEEDED]

Fixes: #17403
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-07-13 08:57:07 +02:00
Brent Baude 4e96686e9d AppleHV enablement pass #2
* Use vfkit command line assembly
* Inject ignition file into guest using http over vsock
* Ready notification through use of vsock

[NO NEW TESTS NEEDED]

Signed-off-by: Brent Baude <bbaude@redhat.com>
2023-07-11 06:36:10 -05:00
Anders F Björklund fa654e9857 Use bytes size consistently instead of human size
Previously podman was using "MB" and "GB" (binary) for input but
"MB" and "GB" (decimal) for output, which was causing confusion.

Signed-off-by: Anders F Björklund <anders.f.bjorklund@gmail.com>
2023-07-06 14:51:06 +02:00
Valentin Rothberg a0b7655523 machine start: qemu: adjust backoffs
Make sure that starting a qemu machine uses proper exponential backoffs
and that a single variable isn't shared across multiple backoffs.

DO NOT BACKPORT: I want to avoid backporting this PR to the upcoming 4.6
release as it increases the flakiness of machine start (see #17403). On
my M2 machine, the flake rate seems to have increased with this change
and I strongly suspect that additional/redundant sleep after waiting for
the machine to be running and listening reduced the flakiness.  My hope
is to have more predictable behavior and find the sources of the flakes
soon.

[NO NEW TESTS NEEDED] - still too flaky to add a test to CI.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-07-05 09:40:33 +02:00
Valentin Rothberg 9fb2f8e100 podman machine start: fix ready service
When debugging #17403, the logs of sshd indicates that Podman tried to
ssh into the machine too soon as the `core` user has not yet been fully
set up:

 > error: kex_exchange_identification: Connection closed by remote host
 > fatal: Access denied for user core by PAM account configuration [preauth]

@dustymabe found that the we may have to wait for systemd-user sessions
to be up.  Doing that reduces the flake rate on my M2 machine but does
not entirely fix the issue.

Since I have seen multiple symptoms of flakiness, I think it does not
hurt to add the systemd-user sessions to the dependencies of the ready
service and continue investigating.

[NO NEW TESTS NEEDED] - once we have a fix out, I want to exercise
frequent stop/start in the machine tests but they won't pass now.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-06-30 10:50:30 +02:00
Jake Correnti 516034215f Re-organize hypervisor implementations
Ensures that for each hypervisor implementation, their `config.go` file
deals with implementing the `VirtProvider` interface while the
`machine.go` file is for implementing the `VM` interface.

Moves the `Virtualization` type into a common file and
created wrappers for the individual hypervisors. Allows for shared
functions that are exactly the same while providing the flexibility to
create hypervisor-specific implementations of the functions.

[NO NEW TESTS NEEDED]

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-06-23 11:33:19 -04:00
Black-Hole1 04a1cdfa96
refactor(machine): remove hard code
Use exported variables instead of hard-coded strings.

Ref: https://github.com/containers/common/pull/1516

Signed-off-by: Black-Hole1 <bh@bugs.cc>
2023-06-21 18:49:12 +08:00
OpenShift Merge Robot a77f896bab
Merge pull request #18936 from BlackHole1/fix-proxy
fix(machine): throw error `connection refused` after set proxy
2023-06-20 23:26:24 +02:00
OpenShift Merge Robot 3907df6789
Merge pull request #18820 from jakecorrenti/add-console-to-mac-machine
Add console mode to podman machine
2023-06-20 19:38:35 +02:00
Black-Hole1 81e63227e6
fix(machine): throw `connect: connection refused` after set proxy
When the `machine start` command is executed, Podman automatically retrieves the current host's `*_PROXY` environment variable and assigns it directly to the virtual machine in QEMU. However, most `*_PROXY` variables are set with `127.0.0.1` or `localhost`, such as `127.0.0.1:8888`. This causes failures in network-related operations within the virtual machine due to incorrect proxy settings.

Fixes: #14087
Signed-off-by: Black-Hole1 <bh@bugs.cc>
2023-06-21 01:01:58 +08:00
Jake Correnti 65e5d2773d Add console mode to podman machine
Add the functionality for a console to be dipslayed when the user runs
`podman --log-level debug machine start` on MacOS. This mimics the
behavior that currently exists on Linux.

[NO NEW TESTS NEEDED]

Signed-off-by: Jake Correnti <jakecorrenti+github@proton.me>
2023-06-20 09:46:45 -04:00
Valentin Rothberg aa453c4f11 make lint: re-enable ginkgolinter
To make sure the e2e tests are kept in order.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-06-19 15:09:34 +02:00
Black-Hole1 c2360800e0
fix(ssh): start machine failed to start with exit status 255
Signed-off-by: Black-Hole1 <bh@bugs.cc>
2023-06-16 19:39:38 +08:00
OpenShift Merge Robot 377245d9be
Merge pull request #18750 from BlackHole1/improve-ssh
refactor: improve get identity path duplicate code
2023-06-07 08:13:17 -04:00