Skip to content

Commit 191fece

Browse files
Merge pull request #18893 from openshift-cherrypick-robot/cherry-pick-18811-to-release-3.9
[release-3.9] Register audit/v1beta1 for master config
2 parents 093f975 + 5f1baf8 commit 191fece

File tree

3 files changed

+69
-4
lines changed

3 files changed

+69
-4
lines changed

pkg/cmd/server/apis/config/install/install.go

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
apiserverv1alpha1 "k8s.io/apiserver/pkg/apis/apiserver/v1alpha1"
1111
"k8s.io/apiserver/pkg/apis/audit"
1212
auditv1alpha1 "k8s.io/apiserver/pkg/apis/audit/v1alpha1"
13+
auditv1beta1 "k8s.io/apiserver/pkg/apis/audit/v1beta1"
1314

1415
configapi "github.com/openshift/origin/pkg/cmd/server/apis/config"
1516
configapiv1 "github.com/openshift/origin/pkg/cmd/server/apis/config/v1"
@@ -40,6 +41,7 @@ func AddToScheme(scheme *runtime.Scheme) {
4041
// policy file inside master-config.yaml
4142
audit.AddToScheme(scheme)
4243
auditv1alpha1.AddToScheme(scheme)
44+
auditv1beta1.AddToScheme(scheme)
4345
apiserver.AddToScheme(scheme)
4446
apiserverv1alpha1.AddToScheme(scheme)
4547
}

pkg/cmd/server/apis/config/validation/master.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ func ValidateAuditConfig(config configapi.AuditConfig, fldPath *field.Path) Vali
247247
} else {
248248
policyConfiguration, ok := config.PolicyConfiguration.(*auditinternal.Policy)
249249
if !ok {
250-
validationResults.AddErrors(field.Invalid(fldPath.Child("policyConfiguration"), config.PolicyConfiguration, "must be of type audit/v1alpha1.Policy"))
250+
validationResults.AddErrors(field.Invalid(fldPath.Child("policyConfiguration"), config.PolicyConfiguration, "must be of type audit/v1beta1.Policy"))
251251
} else {
252252
if err := auditvalidation.ValidatePolicy(policyConfiguration); err != nil {
253253
validationResults.AddErrors(field.Invalid(fldPath.Child("policyConfiguration"), config.PolicyConfiguration, err.ToAggregate().Error()))

test/integration/audit_test.go

+66-3
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
11
package integration
22

33
import (
4+
"io/ioutil"
5+
"os"
46
"testing"
57

68
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9+
"k8s.io/apiserver/pkg/apis/audit"
710
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
811

12+
configapi "github.com/openshift/origin/pkg/cmd/server/apis/config"
913
testutil "github.com/openshift/origin/test/util"
1014
testserver "github.com/openshift/origin/test/util/server"
1115
)
1216

13-
func setupAuditTest(t *testing.T) (kclientset.Interface, func()) {
17+
func setupAudit(t *testing.T, auditConfig configapi.AuditConfig) (kclientset.Interface, func()) {
1418
masterConfig, err := testserver.DefaultMasterOptions()
1519
if err != nil {
1620
t.Fatalf("error creating config: %v", err)
1721
}
18-
masterConfig.AuditConfig.Enabled = true
22+
masterConfig.AuditConfig = auditConfig
1923
kubeConfigFile, err := testserver.StartConfiguredMasterAPI(masterConfig)
2024
if err != nil {
2125
t.Fatalf("error starting server: %v", err)
@@ -30,7 +34,7 @@ func setupAuditTest(t *testing.T) (kclientset.Interface, func()) {
3034
}
3135

3236
func TestBasicFunctionalityWithAudit(t *testing.T) {
33-
kubeClient, fn := setupAuditTest(t)
37+
kubeClient, fn := setupAudit(t, configapi.AuditConfig{Enabled: true})
3438
defer fn()
3539

3640
if _, err := kubeClient.Core().Pods(metav1.NamespaceDefault).Watch(metav1.ListOptions{}); err != nil {
@@ -39,3 +43,62 @@ func TestBasicFunctionalityWithAudit(t *testing.T) {
3943

4044
// TODO: test oc debug, exec, rsh, port-forward
4145
}
46+
47+
func TestAuditConfigEmbeded(t *testing.T) {
48+
auditConfig := configapi.AuditConfig{
49+
Enabled: true,
50+
PolicyConfiguration: &audit.Policy{
51+
Rules: []audit.PolicyRule{
52+
{Level: audit.LevelMetadata},
53+
},
54+
},
55+
}
56+
kubeClient, fn := setupAudit(t, auditConfig)
57+
defer fn()
58+
59+
if _, err := kubeClient.Core().Pods(metav1.NamespaceDefault).Watch(metav1.ListOptions{}); err != nil {
60+
t.Errorf("Unexpected error watching pods: %v", err)
61+
}
62+
}
63+
64+
func TestAuditConfigV1Alpha1File(t *testing.T) {
65+
testAuditConfigFile(t, []byte(`
66+
apiVersion: audit.k8s.io/v1alpha1
67+
kind: Policy
68+
rules:
69+
- level: Metadata
70+
`))
71+
}
72+
73+
func TestAuditConfigV1Beta1File(t *testing.T) {
74+
testAuditConfigFile(t, []byte(`
75+
apiVersion: audit.k8s.io/v1beta1
76+
kind: Policy
77+
rules:
78+
- level: Metadata
79+
`))
80+
}
81+
82+
func testAuditConfigFile(t *testing.T, policy []byte) {
83+
tmp, err := ioutil.TempFile("", "audit-policy")
84+
if err != nil {
85+
t.Fatalf("Cannot create a temporary file: %v", err)
86+
}
87+
defer os.Remove(tmp.Name())
88+
if _, err := tmp.Write(policy); err != nil {
89+
t.Fatalf("Cannot write to a temporary file: %v", err)
90+
}
91+
if err := tmp.Close(); err != nil {
92+
t.Fatalf("Cannot close a temporary file: %v", err)
93+
}
94+
auditConfig := configapi.AuditConfig{
95+
Enabled: true,
96+
PolicyFile: tmp.Name(),
97+
}
98+
kubeClient, fn := setupAudit(t, auditConfig)
99+
defer fn()
100+
101+
if _, err := kubeClient.Core().Pods(metav1.NamespaceDefault).Watch(metav1.ListOptions{}); err != nil {
102+
t.Errorf("Unexpected error watching pods: %v", err)
103+
}
104+
}

0 commit comments

Comments
 (0)