From 79d9812a294f6b263f17fc0bbb2a41ce37bacfc4 Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Fri, 31 Mar 2023 12:07:58 -0300 Subject: [PATCH] Implement `tctl create -f` for devices (#23801) * Implement `tctl create -f` for devices * Update e/ reference --- e | 2 +- tool/tctl/common/resource_command.go | 33 +++++++++++++++++++--------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/e b/e index 219ed708e46..31c66422be0 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit 219ed708e460ac6f04025fab33861839168d7262 +Subproject commit 31c66422be08b3931ec03359e0db5d4cb256705f diff --git a/tool/tctl/common/resource_command.go b/tool/tctl/common/resource_command.go index 9cfec0a5369..6b91e4a52f9 100644 --- a/tool/tctl/common/resource_command.go +++ b/tool/tctl/common/resource_command.go @@ -784,25 +784,38 @@ func (rc *ResourceCommand) createSAMLIdPServiceProvider(ctx context.Context, cli } func (rc *ResourceCommand) createDevice(ctx context.Context, client auth.ClientI, raw services.UnknownResource) error { - if rc.IsForced() { - fmt.Printf("Warning: Devices cannot be overwritten with the --force flag\n") - } - dev, err := device.UnmarshalDevice(raw.Raw) if err != nil { return trace.Wrap(err) } - // TODO(codingllama): Figure out a way to call BulkCreateDevices here? - _, err = client.DevicesClient().CreateDevice(ctx, &devicepb.CreateDeviceRequest{ - Device: dev, - CreateAsResource: true, - }) + if rc.IsForced() { + _, err = client.DevicesClient().UpsertDevice(ctx, &devicepb.UpsertDeviceRequest{ + Device: dev, + CreateAsResource: true, + }) + // err checked below + } else { + _, err = client.DevicesClient().CreateDevice(ctx, &devicepb.CreateDeviceRequest{ + Device: dev, + CreateAsResource: true, + }) + // err checked below + } if err != nil { return trail.FromGRPC(err) } - fmt.Printf("Device %v/%v added to the inventory\n", dev.AssetTag, devicetrust.FriendlyOSType(dev.OsType)) + verb := "created" + if rc.IsForced() { + verb = "updated" + } + + fmt.Printf("Device %v/%v %v\n", + dev.AssetTag, + devicetrust.FriendlyOSType(dev.OsType), + verb, + ) return nil }