Browse Source

Add undeploy support for ingress

davidfowl/ingress-changes
Ryan Nowak 7 years ago
parent
commit
cd3da7e172
  1. 54
      src/tye/UndeployHost.cs

54
src/tye/UndeployHost.cs

@ -75,7 +75,7 @@ namespace Microsoft.Tye
resource.Kind = V1Service.KubeKind;
}
resources.AddRange(response.Body.Items.Select(item => new Resource(item, item.Metadata, DeleteService)));
resources.AddRange(response.Body.Items.Select(item => new Resource(item.Kind, item.Metadata, DeleteService)));
output.WriteDebugLine($"Found {response.Body.Items.Count} matching services");
}
catch (Exception ex)
@ -97,7 +97,7 @@ namespace Microsoft.Tye
resource.Kind = V1Deployment.KubeKind;
}
resources.AddRange(response.Body.Items.Select(item => new Resource(item, item.Metadata, DeleteDeployment)));
resources.AddRange(response.Body.Items.Select(item => new Resource(item.Kind, item.Metadata, DeleteDeployment)));
output.WriteDebugLine($"Found {response.Body.Items.Count} matching deployments");
}
catch (Exception ex)
@ -119,7 +119,7 @@ namespace Microsoft.Tye
resource.Kind = V1Secret.KubeKind;
}
resources.AddRange(response.Body.Items.Select(item => new Resource(item, item.Metadata, DeleteSecret)));
resources.AddRange(response.Body.Items.Select(item => new Resource(item.Kind, item.Metadata, DeleteSecret)));
output.WriteDebugLine($"Found {response.Body.Items.Count} matching secrets");
}
@ -130,13 +130,36 @@ namespace Microsoft.Tye
throw new CommandException("Unable connect to kubernetes.", ex);
}
try
{
output.WriteDebugLine("Querying ingresses");
var response = await kubernetes.ListNamespacedIngressWithHttpMessagesAsync(
config.Namespace,
labelSelector: $"app.kubernetes.io/part-of={application.Name}");
foreach (var resource in response.Body.Items)
{
resource.Kind = "Ingress";
}
resources.AddRange(response.Body.Items.Select(item => new Resource(item.Kind, item.Metadata, DeleteIngress)));
output.WriteDebugLine($"Found {response.Body.Items.Count} matching ingress");
}
catch (Exception ex)
{
output.WriteDebugLine("Failed to query ingress.");
output.WriteDebugLine(ex.ToString());
throw new CommandException("Unable connect to kubernetes.", ex);
}
output.WriteInfoLine($"Found {resources.Count} resource(s).");
var exceptions = new List<(Resource resource, HttpOperationException exception)>();
foreach (var resource in resources)
{
var operation = Operations.Delete;
if (interactive && !output.Confirm($"Delete {resource.Obj.Kind} '{resource.Metadata.Name}'?"))
if (interactive && !output.Confirm($"Delete {resource.Kind} '{resource.Metadata.Name}'?"))
{
operation = Operations.None;
}
@ -148,25 +171,25 @@ namespace Microsoft.Tye
if (operation == Operations.None)
{
output.WriteAlwaysLine($"Skipping '{resource.Obj.Kind}' '{resource.Metadata.Name}' ...");
output.WriteAlwaysLine($"Skipping '{resource.Kind}' '{resource.Metadata.Name}' ...");
}
else if (operation == Operations.Explain)
{
output.WriteAlwaysLine($"whatif: Deleting '{resource.Obj.Kind}' '{resource.Metadata.Name}' ...");
output.WriteAlwaysLine($"whatif: Deleting '{resource.Kind}' '{resource.Metadata.Name}' ...");
}
else if (operation == Operations.Delete)
{
output.WriteAlwaysLine($"Deleting '{resource.Obj.Kind}' '{resource.Metadata.Name}' ...");
output.WriteAlwaysLine($"Deleting '{resource.Kind}' '{resource.Metadata.Name}' ...");
try
{
var response = await resource.Deleter(resource.Metadata.Name);
output.WriteDebugLine($"Successfully deleted resource: '{resource.Obj.Kind}' '{resource.Metadata.Name}'.");
output.WriteDebugLine($"Successfully deleted resource: '{resource.Kind}' '{resource.Metadata.Name}'.");
}
catch (HttpOperationException ex)
{
output.WriteDebugLine($"Failed to delete resource: '{resource.Obj.Kind}' '{resource.Metadata.Name}'.");
output.WriteDebugLine($"Failed to delete resource: '{resource.Kind}' '{resource.Metadata.Name}'.");
output.WriteDebugLine(ex.ToString());
exceptions.Add((resource, ex));
}
@ -177,7 +200,7 @@ namespace Microsoft.Tye
{
throw new CommandException(
$"Failed to delete some resources: " + Environment.NewLine + Environment.NewLine +
string.Join(Environment.NewLine, exceptions.Select(e => $"\t'{e.resource.Obj.Kind}' '{e.resource.Metadata.Name}': {e.exception.Body}.")));
string.Join(Environment.NewLine, exceptions.Select(e => $"\t'{e.resource.Kind}' '{e.resource.Metadata.Name}': {e.exception.Body}.")));
}
Task<Rest.HttpOperationResponse<V1Status>> DeleteService(string name)
@ -194,6 +217,11 @@ namespace Microsoft.Tye
{
return kubernetes!.DeleteNamespacedSecretWithHttpMessagesAsync(name, config!.Namespace);
}
Task<Rest.HttpOperationResponse<V1Status>> DeleteIngress(string name)
{
return kubernetes!.DeleteNamespacedIngressWithHttpMessagesAsync(name, config!.Namespace);
}
}
private enum Operations
@ -205,13 +233,13 @@ namespace Microsoft.Tye
private readonly struct Resource
{
public readonly IKubernetesObject Obj;
public readonly string Kind;
public readonly V1ObjectMeta Metadata;
public readonly Func<string, Task<Rest.HttpOperationResponse<V1Status>>> Deleter;
public Resource(IKubernetesObject obj, V1ObjectMeta metadata, Func<string, Task<Rest.HttpOperationResponse<V1Status>>> deleter)
public Resource(string kind, V1ObjectMeta metadata, Func<string, Task<Rest.HttpOperationResponse<V1Status>>> deleter)
{
Obj = obj;
Kind = kind;
Metadata = metadata;
Deleter = deleter;
}

Loading…
Cancel
Save