osbuild-composer: add a socket for Koji API
Add a systemd socket for Koji API. If enabled when osbuild-composer.service is started, the service will also listen on the socket and serve Koji API there. Note that Koji API doesn't upload to Koji yet, this still needs to be hooked up. Based on a patch from Tom Gundersen, thanks!
This commit is contained in:
parent
67e4182ba4
commit
91b86a1369
5 changed files with 132 additions and 25 deletions
1
Makefile
1
Makefile
|
|
@ -117,6 +117,7 @@ build:
|
|||
go test -c -tags=integration -o osbuild-weldr-tests ./internal/client/
|
||||
go test -c -tags=integration -o osbuild-dnf-json-tests ./cmd/osbuild-dnf-json-tests/main_test.go
|
||||
go test -c -tags=integration -o osbuild-image-tests ./cmd/osbuild-image-tests/
|
||||
go test -c -tags=integration -o osbuild-composer-koji-tests ./cmd/osbuild-composer-koji-tests/main_test.go
|
||||
|
||||
.PHONY: install
|
||||
install:
|
||||
|
|
|
|||
45
cmd/osbuild-composer-koji-tests/main_test.go
Normal file
45
cmd/osbuild-composer-koji-tests/main_test.go
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
// +build integration
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"testing"
|
||||
|
||||
"github.com/osbuild/osbuild-composer/internal/kojiapi"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestKoji(t *testing.T) {
|
||||
client, err := kojiapi.NewClientWithResponses("http://127.0.0.1:8701/")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
response, err := client.PostComposeWithResponse(context.Background(), kojiapi.PostComposeJSONRequestBody{
|
||||
Distribution: "fedora-32",
|
||||
ImageRequests: []kojiapi.ImageRequest{
|
||||
{
|
||||
Architecture: "x86_64",
|
||||
ImageType: "qcow2",
|
||||
Repositories: []kojiapi.Repository{
|
||||
{
|
||||
Baseurl: "http://download.fedoraproject.org/pub/fedora/linux/releases/32/Everything/x86_64/os/",
|
||||
Gpgkey: "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQINBF1RVqsBEADWMBqYv/G1r4PwyiPQCfg5fXFGXV1FCZ32qMi9gLUTv1CX7rYy\nH4Inj93oic+lt1kQ0kQCkINOwQczOkm6XDkEekmMrHknJpFLwrTK4AS28bYF2RjL\nM+QJ/dGXDMPYsP0tkLvoxaHr9WTRq89A+AmONcUAQIMJg3JxXAAafBi2UszUUEPI\nU35MyufFt2ePd1k/6hVAO8S2VT72TxXSY7Ha4X2J0pGzbqQ6Dq3AVzogsnoIi09A\n7fYutYZPVVAEGRUqavl0th8LyuZShASZ38CdAHBMvWV4bVZghd/wDV5ev3LXUE0o\nitLAqNSeiDJ3grKWN6v0qdU0l3Ya60sugABd3xaE+ROe8kDCy3WmAaO51Q880ZA2\niXOTJFObqkBTP9j9+ZeQ+KNE8SBoiH1EybKtBU8HmygZvu8ZC1TKUyL5gwGUJt8v\nergy5Bw3Q7av520sNGD3cIWr4fBAVYwdBoZT8RcsnU1PP67NmOGFcwSFJ/LpiOMC\npZ1IBvjOC7KyKEZY2/63kjW73mB7OHOd18BHtGVkA3QAdVlcSule/z68VOAy6bih\nE6mdxP28D4INsts8w6yr4G+3aEIN8u0qRQq66Ri5mOXTyle+ONudtfGg3U9lgicg\nz6oVk17RT0jV9uL6K41sGZ1sH/6yTXQKagdAYr3w1ix2L46JgzC+/+6SSwARAQAB\ntDFGZWRvcmEgKDMyKSA8ZmVkb3JhLTMyLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v\ncmc+iQI4BBMBAgAiBQJdUVarAhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK\nCRBsEwJtEslE0LdAD/wKdAMtfzr7O2y06/sOPnrb3D39Y2DXbB8y0iEmRdBL29Bq\n5btxwmAka7JZRJVFxPsOVqZ6KARjS0/oCBmJc0jCRANFCtM4UjVHTSsxrJfuPkel\nvrlNE9tcR6OCRpuj/PZgUa39iifF/FTUfDgh4Q91xiQoLqfBxOJzravQHoK9VzrM\nNTOu6J6l4zeGzY/ocj6DpT+5fdUO/3HgGFNiNYPC6GVzeiA3AAVR0sCyGENuqqdg\nwUxV3BIht05M5Wcdvxg1U9x5I3yjkLQw+idvX4pevTiCh9/0u+4g80cT/21Cxsdx\n7+DVHaewXbF87QQIcOAing0S5QE67r2uPVxmWy/56TKUqDoyP8SNsV62lT2jutsj\nLevNxUky011g5w3bc61UeaeKrrurFdRs+RwBVkXmtqm/i6g0ZTWZyWGO6gJd+HWA\nqY1NYiq4+cMvNLatmA2sOoCsRNmE9q6jM/ESVgaH8hSp8GcLuzt9/r4PZZGl5CvU\neldOiD221u8rzuHmLs4dsgwJJ9pgLT0cUAsOpbMPI0JpGIPQ2SG6yK7LmO6HFOxb\nAkz7IGUt0gy1MzPTyBvnB+WgD1I+IQXXsJbhP5+d+d3mOnqsd6oDM/grKBzrhoUe\noNadc9uzjqKlOrmrdIR3Bz38SSiWlde5fu6xPqJdmGZRNjXtcyJlbSPVDIloxw==\n=QWRO\n-----END PGP PUBLIC KEY BLOCK-----\n",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equalf(t, http.StatusCreated, response.StatusCode(), "Error: got non-201 status. Full response: %v", string(response.Body))
|
||||
|
||||
require.NotNil(t, response.JSON201)
|
||||
|
||||
response2, err := client.GetComposeIdWithResponse(context.Background(), response.JSON201.Id)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equalf(t, response2.StatusCode(), 200, "Error: got non-200 status. Full response: %v", response2.Body)
|
||||
}
|
||||
|
|
@ -13,6 +13,7 @@ import (
|
|||
"github.com/osbuild/osbuild-composer/internal/distro/fedora32"
|
||||
"github.com/osbuild/osbuild-composer/internal/distro/rhel8"
|
||||
"github.com/osbuild/osbuild-composer/internal/jobqueue/fsjobqueue"
|
||||
"github.com/osbuild/osbuild-composer/internal/kojiapi"
|
||||
|
||||
"github.com/osbuild/osbuild-composer/internal/common"
|
||||
"github.com/osbuild/osbuild-composer/internal/distro"
|
||||
|
|
@ -148,6 +149,24 @@ func main() {
|
|||
common.PanicOnError(err)
|
||||
}()
|
||||
|
||||
// Optionally run Koji API
|
||||
if kojiListeners, exists := listeners["osbuild-composer-koji.socket"]; exists {
|
||||
if len(kojiListeners) != 1 {
|
||||
// Use Fatal to call os.Exit with non-zero return value
|
||||
log.Fatal("The osbuild-composer-koji.socket unit is misconfigured. It should contain only one socket.")
|
||||
}
|
||||
kojiListener := kojiListeners[0]
|
||||
|
||||
kojiServer := kojiapi.NewServer(workers, rpm, distros)
|
||||
|
||||
go func() {
|
||||
err = kojiServer.Serve(kojiListener)
|
||||
|
||||
// If the koji server fails, take down the whole process, not just a single goroutine
|
||||
log.Fatal("osbuild-composer-koji.socket failed: ", err)
|
||||
}()
|
||||
}
|
||||
|
||||
if remoteWorkerListeners, exists := listeners["osbuild-remote-worker.socket"]; exists {
|
||||
for _, listener := range remoteWorkerListeners {
|
||||
log.Printf("Starting remote listener\n")
|
||||
|
|
|
|||
9
distribution/osbuild-composer-koji.socket
Normal file
9
distribution/osbuild-composer-koji.socket
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
[Unit]
|
||||
Description=OSBuild Composer Koji API socket
|
||||
|
||||
[Socket]
|
||||
Service=osbuild-composer.service
|
||||
ListenStream=8701
|
||||
|
||||
[Install]
|
||||
WantedBy=sockets.target
|
||||
|
|
@ -113,45 +113,52 @@ go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-tests %{
|
|||
go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-dnf-json-tests %{goipath}/cmd/osbuild-dnf-json-tests
|
||||
go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-weldr-tests %{goipath}/internal/client/
|
||||
go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-image-tests %{goipath}/cmd/osbuild-image-tests
|
||||
go test -c -tags=integration -ldflags="${TEST_LDFLAGS}" -o _bin/osbuild-composer-koji-tests %{goipath}/cmd/osbuild-composer-koji-tests
|
||||
|
||||
%endif
|
||||
|
||||
%install
|
||||
install -m 0755 -vd %{buildroot}%{_libexecdir}/osbuild-composer
|
||||
install -m 0755 -vp _bin/osbuild-composer %{buildroot}%{_libexecdir}/osbuild-composer/
|
||||
install -m 0755 -vp _bin/osbuild-worker %{buildroot}%{_libexecdir}/osbuild-composer/
|
||||
install -m 0755 -vp dnf-json %{buildroot}%{_libexecdir}/osbuild-composer/
|
||||
install -m 0755 -vd %{buildroot}%{_libexecdir}/osbuild-composer
|
||||
install -m 0755 -vp _bin/osbuild-composer %{buildroot}%{_libexecdir}/osbuild-composer/
|
||||
install -m 0755 -vp _bin/osbuild-worker %{buildroot}%{_libexecdir}/osbuild-composer/
|
||||
install -m 0755 -vp dnf-json %{buildroot}%{_libexecdir}/osbuild-composer/
|
||||
|
||||
install -m 0755 -vd %{buildroot}%{_datadir}/osbuild-composer/repositories
|
||||
install -m 0644 -vp repositories/* %{buildroot}%{_datadir}/osbuild-composer/repositories/
|
||||
install -m 0755 -vd %{buildroot}%{_datadir}/osbuild-composer/repositories
|
||||
install -m 0644 -vp repositories/* %{buildroot}%{_datadir}/osbuild-composer/repositories/
|
||||
|
||||
install -m 0755 -vd %{buildroot}%{_unitdir}
|
||||
install -m 0644 -vp distribution/*.{service,socket} %{buildroot}%{_unitdir}/
|
||||
install -m 0755 -vd %{buildroot}%{_unitdir}
|
||||
install -m 0644 -vp distribution/osbuild-composer.service %{buildroot}%{_unitdir}/
|
||||
install -m 0644 -vp distribution/osbuild-composer.socket %{buildroot}%{_unitdir}/
|
||||
install -m 0644 -vp distribution/osbuild-remote-worker.socket %{buildroot}%{_unitdir}/
|
||||
install -m 0644 -vp distribution/osbuild-remote-worker@.service %{buildroot}%{_unitdir}/
|
||||
install -m 0644 -vp distribution/osbuild-worker@.service %{buildroot}%{_unitdir}/
|
||||
install -m 0644 -vp distribution/osbuild-composer-koji.socket %{buildroot}%{_unitdir}/
|
||||
|
||||
install -m 0755 -vd %{buildroot}%{_sysusersdir}
|
||||
install -m 0644 -vp distribution/osbuild-composer.conf %{buildroot}%{_sysusersdir}/
|
||||
install -m 0755 -vd %{buildroot}%{_sysusersdir}
|
||||
install -m 0644 -vp distribution/osbuild-composer.conf %{buildroot}%{_sysusersdir}/
|
||||
|
||||
install -m 0755 -vd %{buildroot}%{_localstatedir}/cache/osbuild-composer/dnf-cache
|
||||
install -m 0755 -vd %{buildroot}%{_localstatedir}/cache/osbuild-composer/dnf-cache
|
||||
|
||||
%if %{with tests} || 0%{?rhel}
|
||||
|
||||
install -m 0755 -vd %{buildroot}%{_libexecdir}/tests/osbuild-composer
|
||||
install -m 0755 -vp _bin/osbuild-tests %{buildroot}%{_libexecdir}/tests/osbuild-composer/
|
||||
install -m 0755 -vp _bin/osbuild-weldr-tests %{buildroot}%{_libexecdir}/tests/osbuild-composer/
|
||||
install -m 0755 -vp _bin/osbuild-dnf-json-tests %{buildroot}%{_libexecdir}/tests/osbuild-composer/
|
||||
install -m 0755 -vp _bin/osbuild-image-tests %{buildroot}%{_libexecdir}/tests/osbuild-composer/
|
||||
install -m 0755 -vp tools/image-info %{buildroot}%{_libexecdir}/osbuild-composer/
|
||||
install -m 0755 -vd %{buildroot}%{_libexecdir}/tests/osbuild-composer
|
||||
install -m 0755 -vp _bin/osbuild-tests %{buildroot}%{_libexecdir}/tests/osbuild-composer/
|
||||
install -m 0755 -vp _bin/osbuild-weldr-tests %{buildroot}%{_libexecdir}/tests/osbuild-composer/
|
||||
install -m 0755 -vp _bin/osbuild-dnf-json-tests %{buildroot}%{_libexecdir}/tests/osbuild-composer/
|
||||
install -m 0755 -vp _bin/osbuild-image-tests %{buildroot}%{_libexecdir}/tests/osbuild-composer/
|
||||
install -m 0755 -vp _bin/osbuild-composer-koji-tests %{buildroot}%{_libexecdir}/tests/osbuild-composer/
|
||||
install -m 0755 -vp tools/image-info %{buildroot}%{_libexecdir}/osbuild-composer/
|
||||
|
||||
install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer
|
||||
install -m 0644 -vp test/azure-deployment-template.json %{buildroot}%{_datadir}/tests/osbuild-composer/
|
||||
install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer
|
||||
install -m 0644 -vp test/azure-deployment-template.json %{buildroot}%{_datadir}/tests/osbuild-composer/
|
||||
|
||||
install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/cases
|
||||
install -m 0644 -vp test/cases/* %{buildroot}%{_datadir}/tests/osbuild-composer/cases/
|
||||
install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/keyring
|
||||
install -m 0600 -vp test/keyring/* %{buildroot}%{_datadir}/tests/osbuild-composer/keyring/
|
||||
install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/cases
|
||||
install -m 0644 -vp test/cases/* %{buildroot}%{_datadir}/tests/osbuild-composer/cases/
|
||||
install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/keyring
|
||||
install -m 0600 -vp test/keyring/* %{buildroot}%{_datadir}/tests/osbuild-composer/keyring/
|
||||
|
||||
install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/cloud-init
|
||||
install -m 0644 -vp test/cloud-init/* %{buildroot}%{_datadir}/tests/osbuild-composer/cloud-init/
|
||||
install -m 0755 -vd %{buildroot}%{_datadir}/tests/osbuild-composer/cloud-init
|
||||
install -m 0644 -vp test/cloud-init/* %{buildroot}%{_datadir}/tests/osbuild-composer/cloud-init/
|
||||
|
||||
%endif
|
||||
|
||||
|
|
@ -241,5 +248,31 @@ Integration tests to be run on a pristine-dedicated system to test the osbuild-c
|
|||
|
||||
%endif
|
||||
|
||||
%package koji
|
||||
Summary: osbuild-composer for pushing images to Koji
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
|
||||
# remove in F34
|
||||
Obsoletes: golang-github-osbuild-composer-rcm < %{version}-%{release}
|
||||
Provides: golang-github-osbuild-composer-rcm = %{version}-%{release}
|
||||
# remove in the future
|
||||
Obsoletes: osbuild-composer-rcm < %{version}-%{release}
|
||||
Provides: osbuild-composer-rcm = %{version}-%{release}
|
||||
|
||||
%description koji
|
||||
osbulid-composer specifically for pushing images to Koji.
|
||||
|
||||
%files koji
|
||||
%{_unitdir}/osbuild-composer-koji.socket
|
||||
|
||||
%post koji
|
||||
%systemd_post osbuild-composer-koji.socket
|
||||
|
||||
%preun koji
|
||||
%systemd_preun osbuild-composer-koji.socket
|
||||
|
||||
%postun koji
|
||||
%systemd_postun_with_restart osbuild-composer-koji.socket
|
||||
|
||||
%changelog
|
||||
# the changelog is distribution-specific, therefore it doesn't make sense to have it upstream
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue