diff --git a/internal/blueprint/repository_customizations.go b/internal/blueprint/repository_customizations.go index 9288b69fc1c..fb72bfd53f2 100644 --- a/internal/blueprint/repository_customizations.go +++ b/internal/blueprint/repository_customizations.go @@ -8,18 +8,19 @@ import ( ) type RepositoryCustomization struct { - Id string `json:"id" toml:"id"` - BaseURLs []string `json:"baseurls,omitempty" toml:"baseurls,omitempty"` - GPGKeys []string `json:"gpgkeys,omitempty" toml:"gpgkeys,omitempty"` - Metalink string `json:"metalink,omitempty" toml:"metalink,omitempty"` - Mirrorlist string `json:"mirrorlist,omitempty" toml:"mirrorlist,omitempty"` - Name string `json:"name,omitempty" toml:"name,omitempty"` - Priority *int `json:"priority,omitempty" toml:"priority,omitempty"` - Enabled *bool `json:"enabled,omitempty" toml:"enabled,omitempty"` - GPGCheck *bool `json:"gpgcheck,omitempty" toml:"gpgcheck,omitempty"` - RepoGPGCheck *bool `json:"repo_gpgcheck,omitempty" toml:"repo_gpgcheck,omitempty"` - SSLVerify *bool `json:"sslverify,omitempty" toml:"sslverify,omitempty"` - Filename string `json:"filename,omitempty" toml:"filename,omitempty"` + Id string `json:"id" toml:"id"` + BaseURLs []string `json:"baseurls,omitempty" toml:"baseurls,omitempty"` + GPGKeys []string `json:"gpgkeys,omitempty" toml:"gpgkeys,omitempty"` + Metalink string `json:"metalink,omitempty" toml:"metalink,omitempty"` + Mirrorlist string `json:"mirrorlist,omitempty" toml:"mirrorlist,omitempty"` + Name string `json:"name,omitempty" toml:"name,omitempty"` + Priority *int `json:"priority,omitempty" toml:"priority,omitempty"` + Enabled *bool `json:"enabled,omitempty" toml:"enabled,omitempty"` + GPGCheck *bool `json:"gpgcheck,omitempty" toml:"gpgcheck,omitempty"` + RepoGPGCheck *bool `json:"repo_gpgcheck,omitempty" toml:"repo_gpgcheck,omitempty"` + SSLVerify *bool `json:"sslverify,omitempty" toml:"sslverify,omitempty"` + ModuleHotfixes *bool `json:"module_hotfixes,omitempty" toml:"module_hotfixes,omitempty"` + Filename string `json:"filename,omitempty" toml:"filename,omitempty"` } const repoFilenameRegex = "^[\\w.-]{1,250}\\.repo$" diff --git a/internal/cloudapi/v2/compose.go b/internal/cloudapi/v2/compose.go index 26520203b96..b51e9c8a3b8 100644 --- a/internal/cloudapi/v2/compose.go +++ b/internal/cloudapi/v2/compose.go @@ -251,6 +251,10 @@ func (request *ComposeRequest) GetBlueprintWithCustomizations() (blueprint.Bluep repoCustomization.Priority = repo.Priority } + if repo.ModuleHotfixes != nil && *repo.ModuleHotfixes { + repoCustomization.ModuleHotfixes = repo.ModuleHotfixes + } + repoCustomizations = append(repoCustomizations, repoCustomization) } bp.Customizations.Repositories = repoCustomizations diff --git a/internal/cloudapi/v2/compose_test.go b/internal/cloudapi/v2/compose_test.go index c545027d64b..27d5bd86999 100644 --- a/internal/cloudapi/v2/compose_test.go +++ b/internal/cloudapi/v2/compose_test.go @@ -86,10 +86,11 @@ func TestGetBlueprintWithCustomizations(t *testing.T) { Openscap: &OpenSCAP{ProfileId: "B 263-59"}, CustomRepositories: &[]CustomRepository{ CustomRepository{ - Id: "custom repo", - Metalink: common.ToPtr("http://example.org/metalink"), - CheckGpg: common.ToPtr(true), - Enabled: common.ToPtr(true), + Id: "custom repo", + Metalink: common.ToPtr("http://example.org/metalink"), + CheckGpg: common.ToPtr(true), + Enabled: common.ToPtr(true), + ModuleHotfixes: common.ToPtr(true), }, }, Firewall: &FirewallCustomization{ @@ -192,10 +193,11 @@ func TestGetBlueprintWithCustomizations(t *testing.T) { }, Repositories: []blueprint.RepositoryCustomization{ blueprint.RepositoryCustomization{ - Id: "custom repo", - Metalink: "http://example.org/metalink", - Enabled: common.ToPtr(true), - GPGCheck: common.ToPtr(true), + Id: "custom repo", + Metalink: "http://example.org/metalink", + Enabled: common.ToPtr(true), + GPGCheck: common.ToPtr(true), + ModuleHotfixes: common.ToPtr(true), }, }, Firewall: &blueprint.FirewallCustomization{ @@ -257,20 +259,22 @@ func TestGetPayloadRepositories(t *testing.T) { cr = ComposeRequest{Customizations: &Customizations{ PayloadRepositories: &[]Repository{ Repository{ - Baseurl: common.ToPtr("http://example.org/pub/linux/repo"), - CheckGpg: common.ToPtr(true), - PackageSets: &[]string{"build", "archive"}, - Rhsm: common.ToPtr(false), + Baseurl: common.ToPtr("http://example.org/pub/linux/repo"), + CheckGpg: common.ToPtr(true), + PackageSets: &[]string{"build", "archive"}, + Rhsm: common.ToPtr(false), + ModuleHotfixes: common.ToPtr(true), }, }, }} expected := []Repository{ Repository{ - Baseurl: common.ToPtr("http://example.org/pub/linux/repo"), - CheckGpg: common.ToPtr(true), - PackageSets: &[]string{"build", "archive"}, - Rhsm: common.ToPtr(false), + Baseurl: common.ToPtr("http://example.org/pub/linux/repo"), + CheckGpg: common.ToPtr(true), + PackageSets: &[]string{"build", "archive"}, + Rhsm: common.ToPtr(false), + ModuleHotfixes: common.ToPtr(true), }, } repos = cr.GetPayloadRepositories() diff --git a/internal/cloudapi/v2/handler.go b/internal/cloudapi/v2/handler.go index 6f4f0a4d4cc..3927f39ecee 100644 --- a/internal/cloudapi/v2/handler.go +++ b/internal/cloudapi/v2/handler.go @@ -1051,6 +1051,9 @@ func genRepoConfig(repo Repository) (*rpmmd.RepoConfig, error) { if repo.CheckRepoGpg != nil { repoConfig.CheckRepoGPG = repo.CheckRepoGpg } + if repo.ModuleHotfixes != nil && *repo.ModuleHotfixes { + repoConfig.ModuleHotfixes = repo.ModuleHotfixes + } if repoConfig.CheckGPG != nil && *repoConfig.CheckGPG && len(repoConfig.GPGKeys) == 0 { return nil, HTTPError(ErrorNoGPGKey) diff --git a/internal/cloudapi/v2/openapi.v2.gen.go b/internal/cloudapi/v2/openapi.v2.gen.go index c6d7579b0c5..17f30af5318 100644 --- a/internal/cloudapi/v2/openapi.v2.gen.go +++ b/internal/cloudapi/v2/openapi.v2.gen.go @@ -318,18 +318,19 @@ type ContainerUploadStatus struct { // CustomRepository defines model for CustomRepository. type CustomRepository struct { - Baseurl *[]string `json:"baseurl,omitempty"` - CheckGpg *bool `json:"check_gpg,omitempty"` - CheckRepoGpg *bool `json:"check_repo_gpg,omitempty"` - Enabled *bool `json:"enabled,omitempty"` - Filename *string `json:"filename,omitempty"` - Gpgkey *[]string `json:"gpgkey,omitempty"` - Id string `json:"id"` - Metalink *string `json:"metalink,omitempty"` - Mirrorlist *string `json:"mirrorlist,omitempty"` - Name *string `json:"name,omitempty"` - Priority *int `json:"priority,omitempty"` - SslVerify *bool `json:"ssl_verify,omitempty"` + Baseurl *[]string `json:"baseurl,omitempty"` + CheckGpg *bool `json:"check_gpg,omitempty"` + CheckRepoGpg *bool `json:"check_repo_gpg,omitempty"` + Enabled *bool `json:"enabled,omitempty"` + Filename *string `json:"filename,omitempty"` + Gpgkey *[]string `json:"gpgkey,omitempty"` + Id string `json:"id"` + Metalink *string `json:"metalink,omitempty"` + Mirrorlist *string `json:"mirrorlist,omitempty"` + ModuleHotfixes *bool `json:"module_hotfixes,omitempty"` + Name *string `json:"name,omitempty"` + Priority *int `json:"priority,omitempty"` + SslVerify *bool `json:"ssl_verify,omitempty"` } // Customizations defines model for Customizations. @@ -732,6 +733,9 @@ type Repository struct { Metalink *string `json:"metalink,omitempty"` Mirrorlist *string `json:"mirrorlist,omitempty"` + // Disables modularity filtering for this repository. + ModuleHotfixes *bool `json:"module_hotfixes,omitempty"` + // Naming package sets for a repository assigns it to a specific part // (pipeline) of the build process. PackageSets *[]string `json:"package_sets,omitempty"` @@ -1132,126 +1136,126 @@ var swaggerSpec = []string{ "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", - "HZxv3///AAAA//+4oHJX3ZYAAA==", + "ghxd9TbBhZq+g15sKkb4HfH0tVm5Lh7DlGExSz9XOXdiIn2NYE41GUM2iauz2+jCocjYXEOan7hpPKCQ", + "UbtcMS1OMxxa74JBEG+j5HJoacydoQATkNTW86BvI44GJNF7ih1Hedk4MuVpayKPU2eCAv+vYBhNUAQ/", + "DxoRgZxZdkCEBDkfPoTG4SRwIWPXo0xo2FIw/quAhFGY+W5eoZE3C/8CkZdtQALpO5eam9F1UdylkDcc", + "BG+h0R6HiKUBHJl0Xf+T46tQ+mw+6Al2UOp4EsqMC+RuBSrokgqQoSl0nPVQdLsEtyjBme4I72B9wKrX", + "XC68Vhk2XU3t7U5B2KZcpKtATUpG2PIZ0qGzqGEypBJ7vGxlWgSHVumnRk7YTqUAcAEdR9HjxUQTbKwJ", + "OsU7AN0hCwyfMUSEMwOUODPJiCPfibQtZFoox7HrOYqtcwEIqRrPvEXFomCiSYGbMG2CY8QIWrvWF7pV", + "EGVy0Lr2Hd3qezZDPUS4Ab11Pa48RHrNxvWigyQWovcoFxZDfLvwvAeZUEuDifXiUhMlYsYZ6AuacyZu", + "ZjFw3EMOMgSw6VQR3MR8HMQgQmkWQUZmHuyEgHb0e2kMMTgFPnEQ50oiMgQgQyroRxlwKUPAlWqeRzER", + "KtlkamPDBgbkCGAxh9O57+bBjoINnSmc8QGRFrh8ngVoglTwRknIYAhCAVInQgx+HuwwON0BqqfELEKf", + "D0gakBV4BlGgwOBkcJrJZjT9IlJ+S3V6zaTq+285xxQDbXyYDUjIZFc9gAVHzkhlDcw0MEJVNBhOIHak", + "ahmxpFLVAaNUAMoGBJJZEJuXhI77Bk3gMSqt768K53DgF44EByOMHDOEuTQdzAG2CGVhMG4jwfn5AcgR", + "kwJnLZRe2E4pWXagGqeLeM5tMEYzvimGvd7ZBUrHLhbtWgsl3lbCwi76oGStsOqH7aQFx7dR3O54ms6W", + "ZsvOVYYlojWCjTzXd+ZnYxjLHGECHSAZdgQNodc+qXYiwn2GXjzIwmS7z/NiWqo9EDYUOhauOoKYOgTQ", + "O44bnTHdfMUJr07ocKfPZwM5gEHEW+VGUCZ/4wXnDVU5UvOI4KIEWVb2v2lTIi2HEDEXcy7FAtAAIi6d", + "o4UJoIaA6kyV5kocm+J+rZbuuhd2mtte2KEiG8FPnsBSu3VnJmapbgOunW1JqFdTonMRU6gpe8SI6f8K", + "Yi7YRmqqadZR5PX8VS5pI1jDJbokHKmyB4wlNKQkYmzmUVXDRc0XAKd7fdWUO4HtvNm0VesU93soVjaS", + "L5rU60JjGlQ65tLUWGe/Lrir2sdXgRIKKBlSyJQbTOnRoftz0cfmkxfPH76M0ezFhtxOX8x4K0w4MnyG", + "1reUW/nFQEyka3suJL4Uib588CLPMsReVqaaLe1lZVStlsjStvoRYRxGIJc9ynJ5Q55W0CEHngMlZPSe", + "Gi38CwX7Gi/2ZnI+nIUS6YFsj2T9v0XEK4w+le571eqPSXcJOk2wB89/RLLP6eeH9Iuk+98n1E8SXoSF", + "wD4mL+n58vJpfB4agqT9cCYQj6NfLlX3q/XKXrWezAHwMRF7Ve0VDG2MpIeyMIFsres71jk7Rzh9pmlu", + "iy1lZABjnWT0KBN8tZqsXoMv0sChTAAGiYX4V2WVeIwKalBH+UmkDR2n5T8z5fKhMLxMNlMvBn9gF3rq", + "z+1y12PK/w/NPwSgInLK1S63sIm5/DPlpOCRN36F5RCDN4cSm7lADkFiu1nGYgDrR9WNk4OOhCQxEd6W", + "BRELmy/tBDptXv9M6G/oG2MkVruXINHSXsrHXr9xedy4PQY9QRm0EDAcyDk4UiDyi3nGwY9cMMLKDIx0", + "z5u0a0lKXDjy+8pNriodTNCkrucLBFrEwiRw8uYHpB8lfSpAC2nYUyzs4Dw+bV6DIGqSDVwomCtjP2nK", + "K1hBovzcB50H7VEyYTjKzx6QHUOH21kOejg38IvFiuH72FR/oZ3w5AmGk2JcJLDeJn97npy/TEo5Rf0+", + "lhEbzSl0SMWd6jH6jhh1A3qqgoeIlFD+xqaCHqZP50EPIRAF+hzqm3mLUisIp3O9dVQWbSHKwg4S35NZ", + "1yqw6jsC5wLMowxtw6EccREeqjo8PiBfguTocHvqjRl1+yrJbNiUIwKgL6gLBTag48wWiYz8LUqA0gVC", + "QBc1bxA2l/gqKMmdnLZ91fbMD0gLGna4SRTVg+gQgBGlIkUgGEY5cPPgXmGglRcOIEOHAwJADuxI5eDw", + "T+RC7GDz+84haBCgfgFomgxxrlU/hjyGuFI3o7EMCQIsTCsPTigDAfWyYAc62ED/G0uh2MkHIwdSsqH7", + "bYmDHjoAsWpsd5ZTLrMc9Lz/hZ7HPSryVtAp7BNHSWma21IjmH+Y6y/xWiCB6WLCU2lgUhdicvin/lcO", + "qNgT9HwsENBPwRePYRey2dflwR1HD6iSAThigTEARdB3kSJz1tuRB+vOAk7pXPf51gzrI7RwkBsVQDIb", + "kJC+gwVdQ224pV2RiZSHcD9suniZwK44XCZzJpsJCBx/+JcUIUbn7q/Lh1dns4T/spjvDLmBiAmJyA0Z", + "xGauUqzUSpW1Sm0MXHZdev1paKptoTxYaSUY2riTpogWS9qYmxvBX6inwX+d4x+Lv68vsVoAuJYKK6fc", + "jsXmtlBew25rdHeVX2ZqrXGTyF8rbK9DqFwMpb22YeeTqEOqkrg0xtYpCSNsbeIZU+0+o/VJfGZboJCa", + "GXXN6ARzHZoDd7edjRKcUrGL5+Vuhxhkho0FMkTgjZozbZRas0Lx1Y83yH3tzzwdNtGJ5Gsjob2+bKWm", + "noyV/YpoT2THBz6k4lLcM7Dp1SSzkS2fBw82ImH9ajFekiU7YHmwuphg13cHxEQjTJAJhrNYO6XXJA+X", + "avmgerC3Xz7YW+UU0Or6C/U2yixPWlLz7kFZbLpuLcdU6nIwiLJVlOLqOWixsBYojU4uBNCT5AMCAUce", + "ZFI4Bq1NJC0ureyqAxYLDuiUhEPkQTeAPyAmHinXuAjHkFbEFDmO/DdCI3wXyFBVBDzGxJSa4YBw39Mn", + "/hZRQU2rvoK79iBNcEmCARZ26beQG1cdqyiMHmyctB05wbdOWg/SvaNtsBmAZE3UQuctGHERzqcEDpPO", + "k+TbKr87m1HBZf2nRlr/HZbrBkngS+IsJqRiQ8GpHAZOec6GOWb7OPgV+5NDL/r5oZHRlbsIevuJN8kf", + "sX4qjyUqlQl+hdlwwYMot0VqjsrZZRkRAEvK/EgjU/8mOmAq5vD1jzl4+XuxMYPTCJyDJ0lo1JBjTrgn", + "jfD5Xzk6gZlsZsqdVAJfRDk22xxMnlzYlOCEei5NQst3UWCWqtQCSoXKLmZAJ/WoEiQp2BxMkq5kQrkr", + "/hhRZqSqset1uGAA7dxJgNZvciYa+tZmad4XQdHMDyS8z4c90bmxTYf6Zu4I8hUeFpXNmuxZLpaLxYPi", + "fr6Y6jVQEaX0vN0xfcUpSbvyse0PN0l3hny8aCtUy2la9QQxvlQbVVl/ZUOA/nyoYHHnEOdU+bZibcK6", + "yUXzSJ44QY0LUXVxS3FJoplOt1wFftVBoYTZJtRJ21NhrDYJUh6Y6SnFwdVCKenEgb60/EZQAZ20VwtU", + "UINmozuJ9FVAunN2Zeg2q+5scH7GM6wS9V44nKD1McO+jXnkxMTSMnKHCf1FuxuP7tqd45fOVbPR6TXu", + "WwCRCWaU6OL4AZlAhnUEQPtl9eaLRQY4nEhNX5fyqBNeOfccZ5YHEgV14YrUvkw0QQ71JGDlPabEmWW1", + "z1Y7L+bZV1oEsRVXniysRYwmK2mOtjQndac1xuQYzVQkfVmq9qRWp0WqbgIcOKN+MmDppxZqOZBYfnoh", + "aejH1Nma6ogYRnmmoZtIWan6DhJkUBdxEPitsupmCGlOEfVe+R8BRwYlJgxqX2IOIkRe7nr5u/5Jrv5z", + "8ZFs5qrZ3m7Pr4bwl9xDE9hmh3+mJP0jIlKt3Ia63UfFJbIAqyuAshGzyd0+QsKwJWMEUPKg7XoORoHv", + "8l8+c/4lO0jbK7ANsgOiAx2JPH1luAR1v4pn8ullSjolICVBARIJC2GVtgiDEmbwJVjrQ1As7xWrw7IJ", + "99BBrTo0K9VhfVgvw3qlhmpwf98sD/eKoxH8mtWB7CGDxLBzDh4jwKJqvjk8ZiNnXioklb2vC7785Rbp", + "B/touWx4g242d9cLx2MkEHOlqQemNgpIowMEiQtUXEighRj4YkBiOsjD5CvAJiICi5m+3EnvLyCocrZq", + "57R6EVrsedCkhPsuYsCQm0tVHC5WY0AODAdL1ky2sREZkGgvRftASs1wY624FmrzfJnFZK4lRrCDpVj2", + "maSfvCuO5LQi2OAgVSOk8maYQb6ElMfoCDtoVeKYgNih6seGOer9qEOKxzYc6TMU+/ERk7hylXauXXyb", + "R7h98iP90lZ48fqA5SvlmJGe4IU8uuLNylKumEK+rHljyzVrq14RKFalj4V+uaUXMSV6zXU72rGxUlPO", + "aiJEOEqr/dp3PH06/FQ4H3KUnoV0FLzR+lF0XUCgTs1FSLp4jBd8LhZZh++kkqB1dX2vnHJWhmeAoKut", + "o5cg1CaBf27yLNA5mm0arywSdNV5rso/NzrUo5Zpw91uRqOEmpcfkIYAck9oNSowjneCItqdLNiZ11Wq", + "X0E95w6Yz0HFhQdkiOZRPJWSoOouNERX61/JIB9lpo4dewwZyFQnK9aFJtEdgXJceWIM6QSl5SnGqn3/", + "viLfrYt61+U7SjuAA8uzgjr95GV3880fnYkrjsF5we9CROz6VGrnUfmIFD/zkhSVhJI8xRMaTE7+d9Q6", + "bV+C69NrcH131Gk3wUXrCRx1rpoX6vWADIh70748Om0YPYMetRrHnVH96WyMPs73oOl0n6b78PS07ZxD", + "R9TPX8vvhaPyxa7dHrX991Ph3b/uowHp3FrHd/t7r7Bf8+6Pa+5J97zijRFBtwWj77693YwvZzfcfizT", + "m8dp6+OuNyw1L7vNUfPUGj/Wb8oD8vE8Zm2jyU6KN+Upuxg60Dftu118D0njmLul+lPrjQ9rjbvKvinu", + "WLdy82Q+WAe3u4/4enRfvx2Qi6PXfrEyuT+6Mrs9/lQ56MAm2Wt7pauJV2+3aKGNWvdPpTe3eXXdgBfF", + "4flZxR9Z1aaPxny33xuQ6c1DHzU77/5zZ++q+0ivri+mk+7N6H1olR6P6xP/uXghXgvG5Vn5HfrFd5c3", + "/IOzcw+NJ1fXt+/OgMzexOvsecToPUYnM2/6bE1upoKQbr1g9Vp+4fy+z56KtbLbuuvvN43hfnVsnJ30", + "T0bdsUPGp4UBKY7uqo1bWCtWzyrvr8WxGKLK5MK4fqTXV/7F0T0/602KxbvTp8bsGvmz3fq+cVd4atnd", + "/XGld3/xOiB7qP1szXD3qjh1Sk+nx7cXhu9Mx/ygses7Y6tE+8Mqr3y4z5Pr4v4p7b8/VMuv8KL20Nu9", + "tJ8RGpD6XvGR3ttDo3Th9XZfR8/0lbOWeK5fD++ed58mJ/Vbj5kPDfZ6Njwfl8+924vGe99+5zcNfmSf", + "lgak2PHfyw+we1S0yu3atdE1zwvG2yst1g2DvR49+vj9geEa9g+6j179rV8Y9T4uXW62LVIvvD1fDAiu", + "3/jOyN/f99/sh8JUlIeCYGHd8rdX+73rvz7dVZ+HVXssTur2xV3h8XG/Wn6zO7WLaeO2cdM4GhBxfHL6", + "/HA7MdyWdXHcLV30GvVn9348rJzbnX631Hk8msGHkm0QpxE+N87OJ9C9fzWbtcmAGK6xi2/Or46OukfN", + "RqN6glstdLbnMvvkbN+/5zedbrdcfKoZzzZ5f6qfNFzFQ83Taf2kOR23B+Ro2j49uaHnzQZvHh09NRvT", + "VvPMajVPqo1G0xrfzHvvXj41CvtHT57lzHqN56cz+3V2YQ9IYXe093E9up8Mz8rF1ltl3N6/Ojm6LJLO", + "4+7RXcn1J73dt77fqzx02FHFrZz6jvAublvnFx3h1lrHA1Jipx+PDdovzbyDp3a90zg2u83m1ey18crp", + "w119/+nOb+4WhuSV9dFtuXN71RzNrpv7ew8H9Rq+uh8Qt9bbHfKb4+l+s9xhjtnoVrvHPp09l3pYnMLn", + "6sVN517s9luwVMX8qXfafP2g+9dP9fvK+dW4VhwQ6+3BqpcvC0O33Pro7ffrlYfW8bDkTF6rbWfybrXf", + "LpBVKn08Pr277Kn3fH7eHE0+RrvOZW/Pf7fOBuT1vXBenDnP5Q4enrK900ZjdnVw98Aaz71pr1tsGa/9", + "+rTVJO/j3rE/e3MfpveTy6NHv9W+r1+hytOAdPFdaXR+Wefm/rHHT95r3d1Hk3TJTW/3jL32ry+OK+4D", + "cxomafVt8+m+/vo89h7s4xmvFA4O0NWA2OMi65BZ8fVyOob+qIDv6lfG3uOkO37t3HbPrdrdwf3F7Nx/", + "eBAf00fy2r2sPdyeHL1dVPkzdbvdARmJYf+stFubDW8fCo3K5GgI328fymL/7uPy1fhA495zC8PO5UGn", + "cGacN9u3pZuT+l69fGw2nNbJgTkg47J1g596Nw0Iz4vn542Ps8nt+Pa807Euyk83T/js8n5WFpXz2cmI", + "M+jWpr3mw9XIvkbtWeeo/3w+IBPmXTrXQzTi/YPafn9UPrps+9bHM2vW7t+PexfjZ+vWLt2fTnrtG9Kc", + "fYxvZnutu/LbtYcfagdSRtnX7cdndkGNi8pFp3dQwB/nN/1bR7x2G38MyB/Xo/7+gKjTpXV5/NnRs6Ls", + "mTL0wrmTfkj/vtBi3YUWa3wKOrWZA9UTMixmYIQdHaQLkmWTOsUKnSVeO5oaspHwgkZAF5gqz0xMK4Jc", + "KjQcKC0/liyo6lYH5IuHPeRggr6m1rAupYuFNwjRLeu0f60zJulvASvcLeke4yXbIChP3c6US1UlG6YZ", + "eXvDuJ3PEdvhAPrCpgx/IPNljGZ8udSEczuHzHKtVjoAjUaj0axcfsBmyXk+bpcu+62afNZu9B6wGF+d", + "Ve/q+9WWyY/uyEwMK8Pp5NayzpwbZ/j06OyTUnFysOIKo9SKlTuuHfmh+aNTYIMyX7mlEpiqxL71yTxc", + "RaYkndIMst6mpQm/oMQADGfhnfDx9In5jMI7Mcx0SUTaukvpl9QerMWGjISSHlsik7q1F+qrF3w9hsAT", + "XRsZbOfktw2QwZDIyVcxGelBzqeUpZJKGoovqRbnssG5gdzFhGPLXviWw6piNsosSGL1PvEQcLVYKVfT", + "XcQbfGPgKsiIBCMHWmHFA7MN+WeYfKEZRtVHhUUK0OE0uNAhWHkO2sGMFsTqqjklCx7j1/vNlzUvJWuM", + "sGvpusCnCbplF/dEAofYAscWJ427+7Ha/C2CbWG3NeE2IjyN1SehMSI8EDZKHGDFPKFM2DnoIoYNmPco", + "dfJEeFKByGQzpc9eb3Xixe8nWJ1qEbbKhjJBSYq7fjMhcu96hRaU+4xslnSx7KQks42v4l5Ms1vbZ/FT", + "H+u6LBVFrR1j+fsQ67qsuHlxXbeUuPy6LktBzXUdVvmSv39LlzyhUqe/SbGcg6iKfzAPL89nCDr6QhRV", + "SwqGvgDLi6RTOlUgWPLLgKSsvQ7bAxdBEgQroeOAlIZA7zw+IJAhLfi00rY0LozaBlJygqm6/lA7PSXC", + "A8J8B+kLXxgaUYayYIqADSdRuZnazUBVSsnZDRGAUxhWRavPQZAdMSAe5RwHWQQuflexMhcKw9be12A9", + "gKCWUjWlUI54Z5U/Opaqus319gvZghuz1IY9FssdtmCoDXuk39a5MW9s2H5FVEAVim+f3hkliG6Syx0k", + "zOpk7lVXCAeho3ATfFvYLlsmdDKfkFVZm4n83aVduPWEfjLVOj2CtgDy28qDaHX2aZ5XorTPMMk0nsJJ", + "DZwPBIYuG5QE9B0vHyTbp5IusHG2KZVRl9atuBZVvSxtcqHpkha9kVF3yU4vWqz7hHe73bupfwZvG+fu", + "bYe2P25H5bfjsnlc+yge9d8Le++fpXPG84kQK/1o4Y1SOw2fYTHryc2gCXSEINNUHaq/TkIV8/yhH377", + "Timvul0EVer++gt4mIxoWn6UrhgUNPA7qCwwncikCwt4XmXqGij4/Efw0b2GBw0bgbLK61QKcuSfmk6n", + "eaheK6dQ0JcXOu1m67LXypXzxbwtXEcraUKR7Kp3pIYPUtMZUKWxAHo4FiI+zJTDO+/ki8NMJV/MlzL6", + "ZglFpoLhUIJ44U9sflf7Kq14+xTpEKyWKqqMGwSiAFCmcuccJMJbhPUN2zBMqQsPe/35gJifhDKVOjcv", + "yFD1V5gSoIQQMpGZj1+H0zY1KvEPkWQTn3D8Z/rne4KyEI28oMBS5ePqw4gq2ht9FzG42zzccdrImX8l", + "8Zd/L+Sb+laO+k6MWoxysRhL3gqSrp0gflh4DW4TmiP06fEXo5LazknKxGkit0j1Fw4dFEgsD9omWskK", + "ky2xqYcu/fVDN3x1acoYKVcc1ojo0St//eh3ZO5NkzvQQ0zuDRDtbY1J9e/AZEzolCwsQe3vWP07gt49", + "lRMEVNENoIa6U9RMiHDFxaHw/uc3ySPcd13IZkF5VFwIKeEV7ScFp2DMP1Hq0bSr1pu6bhQCgqZh1yzw", + "qJw6VpaIQQkP7qhQDrEJYjAU7kreByaN+har9ppiFjdw+LLguqZchF+L0kIGcRF+d+rXcHzyiynfk8en", + "FGbfl+RN6VeP3jbTlj54CWzI5foxgcx/m9Bh88+l/JY8vyXPhpInEBppkuZXKU9b6EshDdcoSolv9myk", + "KkWA/x9TlhKUStlBSbr8Vph+i63/UIVppfzShmBca0rRX+KfvNxInsSE1f8hKfIX6F6LHxP9u7WvtE+P", + "pmwpdQ0ams5v3hkiVeijv5WULtcEehcFdSdoEp9F0m4svaq/aoA03vyeOLUlWRJ3zn3CAE5QV/ojp/gI", + "E8zt2CEOPj3DsZgf3bqOUIUgXCQgwETvYUwJgEPqi/BLzb4jPjvmVVns70N+7SEffKo0lTXkFoiuBtTR", + "q8hAxAQQqj9SYPgOZMFdaOCLsKlv2UH86Lx3dfk1/1/HSKfq3jsrDOyFuzyNjRKfXf2Ul6KWG7DTLRI+", + "I1yVNURfR5PIKBs8EGck/ln74GqUqLFBFWNF1xMEyxdeDQMFiLtjgy+d6SRBSMIvn+VCcPnaJ6w4/5zt", + "b35cy49zYq1gysRyLzHmfyevJdljA6aLlcd9znNROa5kuSU+07dyondoiMRBxBT7IROYSN/2QRO8Frn+", + "1Z1Kn3FGiOdvxljPGNEXk1fwRbiU2/DFbyP1t5H6f81IXZJNafJOAY/rFEsiZv5RjCXhkjazeZOCugtl", + "VaZHrJ26LOUvZf35HNJ2u/4OOx2BgBi/2ezfw2Z6o//nMRmMNhB0HBAlm4W7ac5m6z3akOikB2JEiaEa", + "s/mt5cMZUEdnOqNu7j9CQfOfOvUrf/MZvnIp1QsQf/abi39z8TZcjJZ3kOTcKMln9Ql5FTT5yX2/mH+1", + "NNEAFSULpFUuQYTfvfkP1Es+nc73qOohTYp1g+vXqekb+psB0Q14yRQw6OG8+jSpjUe63AR6uKCvj1Se", + "B8Ry4bcfCpOy0lYWEtMEtDCxPhuAC2ihnxwm+AxscD18NMw6ON++//8BAAD//0DbfPx8lwAA", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/internal/cloudapi/v2/openapi.v2.yml b/internal/cloudapi/v2/openapi.v2.yml index 9d6e19b88bf..a29ed12ba29 100644 --- a/internal/cloudapi/v2/openapi.v2.yml +++ b/internal/cloudapi/v2/openapi.v2.yml @@ -866,6 +866,11 @@ components: Enables gpg verification of the repository metadata ignore_ssl: type: boolean + module_hotfixes: + type: boolean + default: false + description: | + Disables modularity filtering for this repository. package_sets: type: array example: ["build", "os"] @@ -913,6 +918,8 @@ components: type: boolean priority: type: integer + module_hotfixes: + type: boolean OpenSCAP: type: object required: diff --git a/internal/dnfjson/dnfjson.go b/internal/dnfjson/dnfjson.go index 27a804d9269..f6cfa2bfeb4 100644 --- a/internal/dnfjson/dnfjson.go +++ b/internal/dnfjson/dnfjson.go @@ -282,6 +282,10 @@ func (s *Solver) reposFromRPMMD(rpmRepos []rpmmd.RepoConfig) ([]repoConfig, erro dr.IgnoreSSL = *rr.IgnoreSSL } + if rr.ModuleHotfixes != nil && *rr.ModuleHotfixes { + dr.ModuleHotfixes = rr.ModuleHotfixes + } + if rr.RHSM { if s.subscriptions == nil { return nil, fmt.Errorf("This system does not have any valid subscriptions. Subscribe it before specifying rhsm: true in sources.") @@ -315,6 +319,7 @@ type repoConfig struct { SSLClientKey string `json:"sslclientkey,omitempty"` SSLClientCert string `json:"sslclientcert,omitempty"` MetadataExpire string `json:"metadata_expire,omitempty"` + ModuleHotfixes bool `json:"module_hotfixes,omitempty"` // set the repo hass from `rpmmd.RepoConfig.Hash()` function // rather than re-calculating it repoHash string