Category Archives: software

Kubernetes ConfigMap per la configurazione delle app

La configurazione delle applicazioni è, di norma, gestita con dei file di configurazione che i programmi leggono in fase di boot o runtime.

Come si gestisce questo tipico scenario in ambito Kubernetes? In questo video spiego brevemente cosa sono le ConfigMap e come utilizzarle con un piccolo esempio.

In questo esempio la ConfigMap con nome myconfigini è creata a partire da un file di testo con lo switch –from-file.

kubectl create configmap myconfigini --from-file=.\tmweb\config\MyIniConfig.ini

Qui di seguito riporto il manifest YAML con il deployment con ConfigMap mostrato nel video. La configMap viene usata facendo il mount di un volume. Tale volume viene definito nella sezione spec del template e referenziato nella sezione container colla sintassi volumeMount.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tm-tmweb
  labels:
    app: tmweb
    chart: tmweb-0.1.0
    draft: draft-app
    release: tm-tmweb
    heritage: Helm
spec:
  revisionHistoryLimit: 0
  replicas: 1
  selector:
    matchLabels:
      app: tmweb
      release: tm-tmweb
  template:
    metadata:
      labels:
        app: tmweb
        draft: draft-app
        release: tm-tmweb
      annotations:
        buildID: ""
    spec:
      volumes:
      - name: config-volume
        configMap:
          name: myconfigini
      containers:
        - name: tmweb
          image: "tmweb:mini"
          imagePullPolicy: IfNotPresent
          volumeMounts:
          - name: config-volume
            mountPath: /app/config
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
          resources:
            {}

IIS XML Transformation with Azure DevOps

I was preparing a demo about IIS XML Transformation inside a CD pipeline with Azure DevOps.

It’s very likely that if you’re working with an ASP.Net project with default values the Azure App Service Deploy Task will fail. After some googling I found that this is documented here.

The trick is to remove the <DependendUpon> tag inside the csproj file.

By default, MSBuild applies the transformation as it generates the web package if the <DependentUpon> element is already present in the transform file in the *.csproj file. In such cases, the Azure App Service Deploy task will fail because there is no further transformation applied on the Web.config file. Therefore, it is recommended that the <DependentUpon> element is removed from all the transform files to disable any build-time configuration when using XML transformation.

File transforms and variable substitution reference, XML transformation notes, Microsoft Docs

My first streaming experience with YouTube

Yesterday I went live for the first time on YouTube. I improvised, literally, a session about the basics of Azure Kubernetes Service with the target objective to deploy an empty application starting from scratch.

The experiment was very intense because I had a couple of issues, but it delivered a not so bad result. Thank for my friends Giulio and Giuliano of getlatestversion.it for the feedback and for listening to me for almost an hour!

For this first stream I talked in Italian, but in the future when I’ll be more confortable I’ll swith to English to reach a broader audience.

This is the link of the video.

How to use OBS Studio as an external encoder for Microsoft Teams and Stream Live Events

Luca Vitali [MVP]

Hi All,

recently Microsft published a list of video encoderstested for Live streaming with Microsoft Stream (http://bit.ly/LiveEnc).
One of this products is OBS Studio, a free and open source software for video recording and live streamig (https://obsproject.com/).

This is a great news and big improvement on live events direction compared to Skype for Business.
This area (meetings, meetings recording and live events) is definitely the one that I love in Teams (in conjunction with Stream).

Note: before you go on, it’s a good idea to read this article to understand differences in Live events between Teams, Stream and Yammer
Live events across Microsoft 365 in Yammer, Microsoft Teams, and Microsoft Stream

In this article you will find:
– Live Eventswith Microsoft Teams
– Live EventswithMicrosoft Stream
– OBS Studio setup
-OBS Studio streaming

If you want to use OBS Studio with Yammer Live Event read this…

View original post 880 more words

How to configure access policies to Work Items on Azure DevOps

One of the strengths of Azure DevOps is that it’s very scalable. It can be configured to work for company of all sizes: from small teams of a few people, to a large enterprise with thousands of users.

When we work in complex environment we should follow the best practices to choose how to organize people and projects on our Azure DevOps Organization. This is a great piece of documentation to get started when we work in an enterprise scenario and I recommend reading it.

A general (but please double check if it is suitable for your environment) guideline is to work inside a single project and create many teams.

With this kind of setup is common that customers ask me to provide a way to limit visibility of work-items. This way only some people could access some work items. This is to provide better focus to teams, for example. But your project could have other needs to do this.

Continue reading

WCF config to avoid content-length error

Low quality blog post. This is a personal note/reminder.

I quickly post here a reference WCF config file to avoid the content-lenght error when uploading some content.

The key config section here was <system.webServer></system.webServer>

<?xml version="1.0" encoding="utf-8"?>
 <!--
  For more information on how to configure your ASP.NET application, please visit
  https://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5.1"/>
    <httpRuntime targetFramework="4.5.1" maxRequestLength="50000"/>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <bindings>
      <basicHttpBinding>
        <binding name="SchedulerWSServiceBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
                 allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="2147483647"
                 maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="2000000" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
            <message clientCredentialType="UserName" algorithmSuite="Default"/>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="W.Scheduler">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="SchedulerWSServiceBinding" contract="Web.Services.IScheduler"/>
      </service>
    </services>
    <client>
      <endpoint address="http://localhost/W/Scheduler.svc" binding="basicHttpBinding" bindingConfiguration="SchedulerWSServiceBinding" contract="Web.Services.IScheduler" name="WSClientScheduler"/>
    </client>
  </system.serviceModel>
  <system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="50000000" />    <!-- Allow files of upto 50,000,000 bytes (about 50Mb) to be uploaded -->
    </requestFiltering>
  </security>
</system.webServer>
</configuration>

How to share an Azure DevOps Artifact feed with the entire organization

Azure Feeds used to be scoped to an organization. However, to enable public feeds and to become more consistent with the rest of Azure DevOps, feeds created through the new create feed UI are now project-scoped.

The only way to create an org-scoped Azure Artifact Feed is through API calls and it’s not reccomended.

If we want to share a feed with an entire organization this is what we need to do.

Continue reading

Registry Names, Namespaces, Images, Artifacts & Tags

Interesting and well explained naming of registries, namespaces and repo.

Steve Lasker

When referring to an image, an artifact, a registry, a tag, what exactly is the reference? Do we mean:

  • web
  • web:v1.0
  • namesapce/web:v1.0
  • org.example.com/namespace/web:v1.0

For the sake of clarity of communications, there are several elements that make up an artifact or image name, and they are fairly important when we think about artifacts moving from one registry to another. See Choosing a Docker ContainerRegistry for more context

Should we really refer to an image, tied to a specific location? As humans, would we really say the fully qualified name, or would we use shorthand references? And what terminology would, or should we use? There are several terms we use interchangeably, which I’ll call out their meanings:

  • Image / Artifact
  • Registry
  • Unique Registry
  • Namespace
  • Repo (repository)
  • Tag

Images & Artifacts

The first thing you may notice is I reference Images and Artifacts interchangeably. It turns out the infrastructure we use to store…

View original post 1,619 more words

How to fix Windows 10 Broken Search Bar

If your Windows 10 Search Bar is broken you’re encountering an issue that is spreading to many Windows 10 users at the time of this writing.

This is NOT an official statement (I’m not responsible for any side effects caused by this) about how to fix but running this script inside a PowerShell session with administrator privileges and restarting the machine can solve your issue (it worked on my machine).

Get-AppXPackage -Name Microsoft.Windows.Cortana | Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"}   

The production environment for the developer

The development platform is the production environment for the job of creating software. / Michael T. Nygard

When you work with many customers you start to collect your personal database about the best and worst practices that you see and how much they are spreaded.

A thing that is very common is that development or IT related activities are treated like second class citizens in the company. Low end laptops (some with traditional HDD and not SSD!), low budget for testing or QA environment. I can’t explain why this is happening… I suppose it’s a cultural issue. Let’s look at an analogy. Suppose your company CRM went down so people from the selling department couldn’t do their job. That would be at least a severity 2 outage!

So I couldn’t agree more with Nygard: treat IT tools as production because it really is production!