private void Load(ExtensionInstance extension, string[] assemblies) { foreach (var path in assemblies) { try { var fileInfo = extension.FileProvider.GetFileInfo(path); if (!fileInfo.Exists) { _logger.LogError(" Could not find extension service provider assembly {Path} in extension {Name}", path, extension.Name); continue; } using var assemblyStream = GetSeekableStream(fileInfo); LoadFromStream(assemblyStream); } catch (FileLoadException) { } catch (BadImageFormatException) { } } }
public void CanCreateUpdateDeleteExtensionInstanceWithIdentity() { ClusterInfo cluster = new ClusterInfo( name: "nanthicluster0923", type: ClusterInfo.ClusterType.connectedClusters, location: "eastus2euap", resourceGroup: "nanthirg0923" ); ExtensionInstance extensionInstance = new ExtensionInstance( name: "microsoft.azuredefender.kubernetes", type: ExtensionTestBase.ConfigurationType, location: "eastus2euap", extensionType: "microsoft.azuredefender.kubernetes", autoUpgradeMinorVersion: false, releaseTrain: "Stable", version: "0.4.61", scope: new Scope( cluster: new ScopeCluster( releaseNamespace: "azuredefender" ) ), identity: new ConfigurationIdentity( type: ResourceIdentityType.SystemAssigned ) ); using (var context = MockContext.Start(this.GetType())) { using (var testFixture = new ExtensionTestBase(context)) { testFixture.Cluster = cluster; testFixture.ExtensionInstance = extensionInstance; // List configurations and get count var extensions = testFixture.ListExtensionInstances(); int extensionCount = extensions.Count(); // Create a configuration var newExtension = testFixture.CreateExtensionInstance(); Assert.NotNull(newExtension); // Get the configuration and verify var ext = testFixture.GetExtensionInstance(); Assert.Equal(extensionInstance.Name, ext.Name); Assert.True((ext.InstallState.ToString() == "Pending") || (ext.InstallState.ToString() == "Installed")); // List configurations and get count to confirm it is up by one extensions = testFixture.ListExtensionInstances(); Assert.True(extensions.Count() == extensionCount + 1); // Delete the configuration created testFixture.DeleteExtensionInstance(); // List configurations and get count to confirm it is what we started with extensions = testFixture.ListExtensionInstances(); Assert.True(extensions.Count() == extensionCount); } } }
public override Expression VisitInvocationExpression(IInvocationExpression invocationExpressionParam, IMetadataResolver context) { var result = invocationExpressionParam.InvocationExpressionReference.Resolve().Result; ExtensionInstance <IDeclaredElement> extension = result.ElementAsExtension(); return(invocationExpressionParam.InvokedExpression.Accept(this, context)); }
public ExtensionAssemblyLoadContext(string instanceKey, ExtensionInstance extension, string[] assemblies, ILogger logger) : base(string.Concat(ALC_Prefix, extension.Name, instanceKey), isCollectible: true) { if (assemblies is null) { throw new ArgumentNullException(nameof(assemblies)); } _extension = extension ?? throw new ArgumentNullException(nameof(extension)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); Unloading += _ => _logger.LogDebug("{Name} extension is unloading", Name); Load(extension, assemblies); }
public override Expression Build() { IResolveResult resolve = expression.Reference.Resolve().Result; ExtensionInstance <IDeclaredElement> element = resolve.ElementAsExtension(); var property = element.Element as IProperty; if (property != null) { if (property.XMLDocId == "P:System.Array.Length") { return(Expression.ArrayLength(context)); } } MemberInfo memberInfo = GetReferencedMember(element.Element.ShortName, context.Type); return(Expression.MakeMemberAccess(context, memberInfo)); }
public IModule GetTargetModule <T>(T element) { var invocationExpression = element as IInvocationExpression; if (invocationExpression != null) { ExtensionInstance <IMethod> method = InvocationExpressionUtil.GetInvokedMethod(invocationExpression); if (method == null) { return(null); } // todo horrible horrible hack, find non shitastick way of doing this if (method.Element.XMLDocId == "M:System.Reflection.Assembly.GetExecutingAssembly") { return(invocationExpression.GetPsiModule().ContainingProjectModule); } } return(null); }
public void GivenCustomExtensionShouldBeRegisteredAfterDefaultExtension() { var defaultPath = "default"; var customPath = "custom"; var options = new ExtensionOptions(); options.DefaultExtensions.Add(defaultPath); options.ExtensionPaths.Add(customPath); var loader = new Mock <IExtensionLoader>(); using (var defaultInstance = new ExtensionInstance(defaultPath, Mock.Of <IFileProvider>(), defaultPath, MockConfiguration(), NullLogger <ExtensionInstance> .Instance)) { using (var customInstance = new ExtensionInstance(customPath, Mock.Of <IFileProvider>(), customPath, MockConfiguration(), NullLogger <ExtensionInstance> .Instance)) { loader.Setup(l => l.LoadExtension(It.Is <string>(s => s.EndsWith(defaultPath)))).Returns(defaultInstance); loader.Setup(l => l.LoadExtension(It.Is <string>(s => s.EndsWith(customPath)))).Returns(customInstance); using (var subject = new ExtensionProvider(new[] { loader.Object }, MockConfigurationLoader(), new ExtensionInstanceFactory(NullLogger <ExtensionInstance> .Instance), Mock.Of <IExtensionLocator>(), Options.Create(options), NullLogger <ExtensionProvider> .Instance)) { Assert.Equal((subject as IExtensionProvider).Instances.First().Location, defaultPath); } } } }
/// <summary> /// Create a new Kubernetes Cluster Extension Instance. /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// The name of the resource group. /// </param> /// <param name='clusterRp'> /// The Kubernetes cluster RP - either Microsoft.ContainerService (for AKS /// clusters) or Microsoft.Kubernetes (for OnPrem K8S clusters). Possible /// values include: 'Microsoft.ContainerService', 'Microsoft.Kubernetes' /// </param> /// <param name='clusterResourceName'> /// The Kubernetes cluster resource name - either managedClusters (for AKS /// clusters) or connectedClusters (for OnPrem K8S clusters). Possible values /// include: 'managedClusters', 'connectedClusters' /// </param> /// <param name='clusterName'> /// The name of the kubernetes cluster. /// </param> /// <param name='extensionInstanceName'> /// Name of an instance of the Extension. /// </param> /// <param name='extensionInstance'> /// Properties necessary to Create an Extension Instance. /// </param> /// <param name='cancellationToken'> /// The cancellation token. /// </param> public static async Task <ExtensionInstance> CreateAsync(this IExtensionsOperations operations, string resourceGroupName, string clusterRp, string clusterResourceName, string clusterName, string extensionInstanceName, ExtensionInstance extensionInstance, CancellationToken cancellationToken = default(CancellationToken)) { using (var _result = await operations.CreateWithHttpMessagesAsync(resourceGroupName, clusterRp, clusterResourceName, clusterName, extensionInstanceName, extensionInstance, null, cancellationToken).ConfigureAwait(false)) { return(_result.Body); } }
/// <summary> /// Create a new Kubernetes Cluster Extension Instance. /// </summary> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// The name of the resource group. /// </param> /// <param name='clusterRp'> /// The Kubernetes cluster RP - either Microsoft.ContainerService (for AKS /// clusters) or Microsoft.Kubernetes (for OnPrem K8S clusters). Possible /// values include: 'Microsoft.ContainerService', 'Microsoft.Kubernetes' /// </param> /// <param name='clusterResourceName'> /// The Kubernetes cluster resource name - either managedClusters (for AKS /// clusters) or connectedClusters (for OnPrem K8S clusters). Possible values /// include: 'managedClusters', 'connectedClusters' /// </param> /// <param name='clusterName'> /// The name of the kubernetes cluster. /// </param> /// <param name='extensionInstanceName'> /// Name of an instance of the Extension. /// </param> /// <param name='extensionInstance'> /// Properties necessary to Create an Extension Instance. /// </param> public static ExtensionInstance Create(this IExtensionsOperations operations, string resourceGroupName, string clusterRp, string clusterResourceName, string clusterName, string extensionInstanceName, ExtensionInstance extensionInstance) { return(operations.CreateAsync(resourceGroupName, clusterRp, clusterResourceName, clusterName, extensionInstanceName, extensionInstance).GetAwaiter().GetResult()); }