Skip to content

Commit 6a1f752

Browse files
Merge pull request #3144 from hunterkepley/ocm-21402
OCM-21402 | fix: Edit/logforwarder always use CW/S3 yaml fields
2 parents e0727f2 + 75ee117 commit 6a1f752

4 files changed

Lines changed: 67 additions & 32 deletions

File tree

cmd/edit/logforwarder/cmd.go

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func NewEditLogForwarderCommand() *cobra.Command {
6666
return cmd
6767
}
6868

69-
func EditLogForwarderRunner(ctx context.Context, r *rosa.Runtime, command *cobra.Command, argv []string) error {
69+
func EditLogForwarderRunner(_ context.Context, r *rosa.Runtime, _ *cobra.Command, argv []string) error {
7070
if len(argv) != 1 {
7171
return fmt.Errorf("expected exactly one argument: log-forwarder ID")
7272
}
@@ -90,9 +90,18 @@ func EditLogForwarderRunner(ctx context.Context, r *rosa.Runtime, command *cobra
9090

9191
var logForwarderYaml logforwarding.LogForwarderYaml
9292

93+
currentLogForwarder, err := r.OCMClient.FetchLogForwarder(cluster.ID(), logFwdID)
94+
if err != nil {
95+
return err
96+
}
97+
if currentLogForwarder == nil {
98+
return errors.UserErrorf("Unable to fetch log forwarder with id '%s' from cluster '%s'",
99+
logFwdID, cluster.ID())
100+
}
101+
93102
if len(configData) == 0 {
94-
interactiveObject, err := interactiveLogForwarding.InteractiveLogForwardingConfig(
95-
r.OCMClient)
103+
interactiveObject, err := interactiveLogForwarding.InteractiveLogForwardingConfigWithDefaults(
104+
r.OCMClient, currentLogForwarder)
96105
if err != nil {
97106
return errors.UserErrorf("failed to create log fowarder config: %s", err)
98107
}
@@ -110,7 +119,7 @@ func EditLogForwarderRunner(ctx context.Context, r *rosa.Runtime, command *cobra
110119
}
111120
}
112121

113-
err = r.OCMClient.EditLogForwarder(cluster.ID(), logFwdID, logForwarderYaml)
122+
err = r.OCMClient.EditLogForwarder(cluster.ID(), logFwdID, logForwarderYaml, currentLogForwarder)
114123
if err != nil {
115124
return fmt.Errorf("failed to edit log forwarder '%s' for cluster '%s': %s", logFwdID, cluster.ID(), err)
116125
}

pkg/interactive/logforwarding/logforwarding.go

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"fmt"
55
"strings"
66

7+
cmv1 "github.com/openshift-online/ocm-sdk-go/clustersmgmt/v1"
8+
79
"github.com/openshift/rosa/pkg/interactive"
810
"github.com/openshift/rosa/pkg/logforwarding"
911
"github.com/openshift/rosa/pkg/ocm"
@@ -36,13 +38,13 @@ func InteractiveLogForwardingConfig(ocmClient *ocm.Client) (
3638
cloudWatchResult := &logforwarding.CloudWatchLogForwarderConfig{}
3739

3840
if con == cloudWatch || con == both {
39-
cloudWatchResult, err = interactiveCloudWatch(ocmClient)
41+
cloudWatchResult, err = interactiveCloudWatch(ocmClient, "", "")
4042
if err != nil {
4143
return nil, err
4244
}
4345
}
4446
if con == s3 || con == both {
45-
s3Result, err = interactiveS3(ocmClient)
47+
s3Result, err = interactiveS3(ocmClient, "", "")
4648
if err != nil {
4749
return nil, err
4850
}
@@ -55,12 +57,43 @@ func InteractiveLogForwardingConfig(ocmClient *ocm.Client) (
5557
return &result, nil
5658
}
5759

58-
func interactiveCloudWatch(ocmClient *ocm.Client) (
60+
func InteractiveLogForwardingConfigWithDefaults(ocmClient *ocm.Client, logForwarder *cmv1.LogForwarder) (
61+
*logforwarding.LogForwarderYaml, error) {
62+
63+
s3Result := &logforwarding.S3LogForwarderConfig{}
64+
cloudWatchResult := &logforwarding.CloudWatchLogForwarderConfig{}
65+
66+
var err error
67+
68+
if logForwarder.Cloudwatch() != nil && logForwarder.Cloudwatch().LogDistributionRoleArn() != "" {
69+
cloudWatchResult, err = interactiveCloudWatch(ocmClient,
70+
logForwarder.Cloudwatch().LogGroupName(), logForwarder.Cloudwatch().LogDistributionRoleArn())
71+
if err != nil {
72+
return nil, err
73+
}
74+
}
75+
if logForwarder.S3() != nil && logForwarder.S3().BucketName() != "" {
76+
s3Result, err = interactiveS3(ocmClient, logForwarder.S3().BucketName(), logForwarder.S3().BucketPrefix())
77+
if err != nil {
78+
return nil, err
79+
}
80+
}
81+
82+
result := logforwarding.LogForwarderYaml{}
83+
result.S3 = s3Result
84+
result.CloudWatch = cloudWatchResult
85+
86+
return &result, nil
87+
}
88+
89+
func interactiveCloudWatch(ocmClient *ocm.Client, defaultLogGroupName string, defaultLogRoleArn string) (
5990
*logforwarding.CloudWatchLogForwarderConfig, error) {
91+
6092
cloudWatchConfig := logforwarding.CloudWatchLogForwarderConfig{}
6193
roleArn, err := interactive.GetString(interactive.Input{
6294
Question: "CloudWatch Log forwarding role ARN",
6395
Help: "The role ARN which forwards logs to CloudWatch",
96+
Default: defaultLogRoleArn,
6497
Required: true,
6598
})
6699
if err != nil {
@@ -71,6 +104,7 @@ func interactiveCloudWatch(ocmClient *ocm.Client) (
71104
groupName, err := interactive.GetString(interactive.Input{
72105
Question: "CloudWatch log group name",
73106
Help: "The name of the group on CloudWatch which will contain the logs",
107+
Default: defaultLogGroupName,
74108
Required: true,
75109
})
76110
if err != nil {
@@ -96,11 +130,14 @@ func interactiveCloudWatch(ocmClient *ocm.Client) (
96130
return &cloudWatchConfig, nil
97131
}
98132

99-
func interactiveS3(ocmClient *ocm.Client) (*logforwarding.S3LogForwarderConfig, error) {
133+
func interactiveS3(ocmClient *ocm.Client, defaultBucketName string, defaultBucketPrefix string) (
134+
*logforwarding.S3LogForwarderConfig, error) {
135+
100136
s3Config := logforwarding.S3LogForwarderConfig{}
101137
bucketPrefix, err := interactive.GetString(interactive.Input{
102138
Question: "S3 Bucket prefix",
103139
Help: "The identifiable prefix to prepend to the S3 Bucket used for log forwarding",
140+
Default: defaultBucketPrefix,
104141
Required: false,
105142
})
106143
if err != nil {
@@ -111,6 +148,7 @@ func interactiveS3(ocmClient *ocm.Client) (*logforwarding.S3LogForwarderConfig,
111148
bucketName, err := interactive.GetString(interactive.Input{
112149
Question: "S3 Bucket name",
113150
Help: "The identifiable name to append to the S3 Bucket used for log forwarding",
151+
Default: defaultBucketName,
114152
Required: true,
115153
})
116154
if err != nil {

pkg/ocm/log_forwards.go

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -183,32 +183,21 @@ func (c *Client) FetchLogForwarder(clusterId string, logForwarderId string) (*cm
183183
}
184184

185185
func (c *Client) EditLogForwarder(clusterId string, logForwarderId string,
186-
logForwarderYaml logforwarding.LogForwarderYaml) error {
186+
logForwarderYaml logforwarding.LogForwarderYaml, currentLogForwarder *cmv1.LogForwarder) error {
187187

188188
if logForwarderYaml.S3 == nil && logForwarderYaml.CloudWatch == nil {
189189
return errors.UserErrorf("log forwarding config provided contained no valid log forwarders")
190190
}
191191

192192
var logForwarderConfig *cmv1.LogForwarderBuilder
193193

194-
currentLogForwarder, err := c.FetchLogForwarder(clusterId, logForwarderId)
195-
if err != nil {
196-
return err
197-
}
198-
if currentLogForwarder == nil {
199-
return errors.UserErrorf("Unable to fetch log forwarder with id '%s' from cluster '%s'",
200-
logForwarderId, clusterId)
201-
}
202-
203194
if logForwarderYaml.S3 != nil {
204195
logForwarderConfigBuilder := cmv1.NewLogForwarder()
205196
logForwarderS3ConfigBuilder := cmv1.NewLogForwarderS3Config()
206-
if logForwarderYaml.S3.S3ConfigBucketPrefix != currentLogForwarder.S3().BucketPrefix() {
207-
logForwarderS3ConfigBuilder.BucketPrefix(logForwarderYaml.S3.S3ConfigBucketPrefix)
208-
}
209-
if logForwarderYaml.S3.S3ConfigBucketName != currentLogForwarder.S3().BucketName() {
210-
logForwarderS3ConfigBuilder.BucketName(logForwarderYaml.S3.S3ConfigBucketName)
211-
}
197+
198+
logForwarderS3ConfigBuilder.BucketPrefix(logForwarderYaml.S3.S3ConfigBucketPrefix)
199+
200+
logForwarderS3ConfigBuilder.BucketName(logForwarderYaml.S3.S3ConfigBucketName)
212201

213202
if !reflect.DeepEqual(currentLogForwarder.Applications(), logForwarderYaml.S3.Applications) {
214203
logForwarderConfigBuilder.Applications(logForwarderYaml.S3.Applications...)
@@ -222,17 +211,15 @@ func (c *Client) EditLogForwarder(clusterId string, logForwarderId string,
222211
logForwarderConfigBuilder.Groups(groupBuilder...)
223212
}
224213

214+
logForwarderConfigBuilder.S3(logForwarderS3ConfigBuilder)
225215
logForwarderConfig = logForwarderConfigBuilder
226216
} else if logForwarderYaml.CloudWatch != nil {
227217
logForwarderConfigBuilder := cmv1.NewLogForwarder()
228218
logForwarderCWConfigBuilder := cmv1.NewLogForwarderCloudWatchConfig()
229-
if logForwarderYaml.CloudWatch.CloudWatchLogGroupName != currentLogForwarder.Cloudwatch().LogGroupName() {
230-
logForwarderCWConfigBuilder.LogGroupName(logForwarderYaml.CloudWatch.CloudWatchLogGroupName)
231-
}
232-
if logForwarderYaml.CloudWatch.CloudWatchLogRoleArn !=
233-
currentLogForwarder.Cloudwatch().LogDistributionRoleArn() {
234-
logForwarderCWConfigBuilder.LogDistributionRoleArn(logForwarderYaml.CloudWatch.CloudWatchLogRoleArn)
235-
}
219+
220+
logForwarderCWConfigBuilder.LogGroupName(logForwarderYaml.CloudWatch.CloudWatchLogGroupName)
221+
222+
logForwarderCWConfigBuilder.LogDistributionRoleArn(logForwarderYaml.CloudWatch.CloudWatchLogRoleArn)
236223

237224
if !reflect.DeepEqual(currentLogForwarder.Applications(), logForwarderYaml.CloudWatch.Applications) {
238225
logForwarderConfigBuilder.Applications(logForwarderYaml.CloudWatch.Applications...)
@@ -246,6 +233,7 @@ func (c *Client) EditLogForwarder(clusterId string, logForwarderId string,
246233
logForwarderConfigBuilder.Groups(groupBuilder...)
247234
}
248235

236+
logForwarderConfigBuilder.Cloudwatch(logForwarderCWConfigBuilder)
249237
logForwarderConfig = logForwarderConfigBuilder
250238
}
251239

pkg/ocm/log_forwards_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ var _ = Describe("EditLogForwarder", func() {
199199
It("Should handle empty config", func() {
200200
client := Client{}
201201
emptyConfig := logforwarding.LogForwarderYaml{}
202-
err := client.EditLogForwarder("cluster-123", "log-fwd-123", emptyConfig)
202+
err := client.EditLogForwarder("cluster-123", "log-fwd-123", emptyConfig, nil)
203203
Expect(err).To(HaveOccurred())
204204
Expect(err.Error()).To(ContainSubstring(
205205
"log forwarding config provided contained no valid log forwarders"))

0 commit comments

Comments
 (0)