<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Windows - Architect the cloud</title>
	<atom:link href="https://blog.slepcevic.net/category/akamai-connected-cloud/windows/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.slepcevic.net</link>
	<description></description>
	<lastBuildDate>Tue, 30 Jul 2024 13:23:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Linode, Windows instances and Metadata service</title>
		<link>https://blog.slepcevic.net/linode-windows-instances-and-metadata-service/</link>
					<comments>https://blog.slepcevic.net/linode-windows-instances-and-metadata-service/#respond</comments>
		
		<dc:creator><![CDATA[Alesandro Slepčević]]></dc:creator>
		<pubDate>Tue, 30 Jul 2024 13:22:17 +0000</pubDate>
				<category><![CDATA[Akamai Connected Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Linode]]></category>
		<category><![CDATA[windows linode metadata]]></category>
		<guid isPermaLink="false">https://blog.slepcevic.net/?p=662</guid>

					<description><![CDATA[<p>Even though Windows instances aren&#8217;t officially supported on Linode, there are ways to get a Windows based instance up and running (a bit of googling will help you around that). Once you deployed your Windows instance, you will notice that...</p>
<p>The post <a href="https://blog.slepcevic.net/linode-windows-instances-and-metadata-service/">Linode, Windows instances and Metadata service</a> first appeared on <a href="https://blog.slepcevic.net">Architect the cloud</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Even though Windows instances aren&#8217;t officially supported on Linode, there are ways to get a Windows based instance up and running (a bit of googling will help you around that). </p>



<p>Once you deployed your Windows instance, you will notice that all attempts to reach the Linode&#8217;s <a href="https://www.linode.com/docs/products/compute/compute-instances/guides/metadata/?tabs=linode-api" target="_blank" rel="noopener" title="metadata service">metadata service</a> will fail. </p>



<p>Let&#8217;s take a quick look on how metadata service works. </p>



<pre class="wp-block-code"><code>#We get the token into a TOKEN variable
export TOKEN=$(curl -X PUT -H "Metadata-Token-Expiry-Seconds: 3600" http://169.254.169.254/v1/token)

#Send a request to the metadata service. 
curl -H "Metadata-Token: $TOKEN" http://169.254.169.254/v1/instance</code></pre>



<p></p>



<p>If we translate these commands into PowerShell, we get something which looks like this</p>



<pre class="wp-block-code"><code># Define the URL for the token request
$tokenUrl = "http://169.254.169.254/v1/token"

# Define the headers for the token request
$tokenHeaders = @{
    "Metadata-Token-Expiry-Seconds" = "3600"
}

# Make the PUT request to get the token
$tokenResponse = Invoke-RestMethod -Uri $tokenUrl -Method Put -Headers</code></pre>



<p></p>



<p>If we execute Invoke-RestMethod command out of the box, the request will fail with the following message: Unable to connect to the remote server</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="848" height="145" src="https://blog.slepcevic.net/wp-content/uploads/2024/07/windowsmetadata.png" alt="" class="wp-image-663" srcset="https://blog.slepcevic.net/wp-content/uploads/2024/07/windowsmetadata.png 848w, https://blog.slepcevic.net/wp-content/uploads/2024/07/windowsmetadata-300x51.png 300w, https://blog.slepcevic.net/wp-content/uploads/2024/07/windowsmetadata-768x131.png 768w" sizes="(max-width: 848px) 100vw, 848px" /></figure>



<p>Problem occurs because our server doesn&#8217;t know where to route the request for http://169.254.169.254 and can easily be fixed by adding a route on your server which will route requests for 169.254.169.254 via your instance gateway. </p>



<pre class="wp-block-code"><code>ROUTE ADD 169.254.169.254 mask 255.255.255.255 <strong>172.233.45.1</strong> METRIC 10</code></pre>



<p></p>



<p>Make sure to replace <strong>172.233.45.1</strong> with your gateway IP address. Don&#8217;t use the one provided above. After adding the route, we should be able to send requests to our metadata service. Below you can find an example PowerShell script which will return basic instance information. </p>



<pre class="wp-block-code"><code># Define the URL for the token request
$tokenUrl = "http://169.254.169.254/v1/token"

# Define the headers for the token request
$tokenHeaders = @{
    "Metadata-Token-Expiry-Seconds" = "3600"
}

# Make the PUT request to get the token
$tokenResponse = Invoke-RestMethod -Uri $tokenUrl -Method Put -Headers $tokenHeaders 

# Extract the token from the response
$token = $tokenResponse

# Define the URL for the instance info request
$networkUrl = "http://169.254.169.254/v1/instance"

# Define the headers for the network request
$networkHeaders = @{
    "Metadata-Token" = $token
    "Accept" = "application/json" #specify we want the results in JSON format
}

# Make the GET request to retrieve instance information
$Response = Invoke-RestMethod -Uri $networkUrl -Method Get -Headers $networkHeaders 

return $Response
</code></pre>



<p></p>



<p>Finally, if you want the route for the metadata service to be persistent across reboots, make sure to add the &#8220;-p&#8221; flag to your &#8220;route add&#8221; command. </p>



<p>Cheers, </p>



<p>Alex. </p><p>The post <a href="https://blog.slepcevic.net/linode-windows-instances-and-metadata-service/">Linode, Windows instances and Metadata service</a> first appeared on <a href="https://blog.slepcevic.net">Architect the cloud</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.slepcevic.net/linode-windows-instances-and-metadata-service/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Powershell module for Linode &#8211; Akamai Connected Cloud</title>
		<link>https://blog.slepcevic.net/powershell-module-for-linode-akamai-connected-cloud/</link>
					<comments>https://blog.slepcevic.net/powershell-module-for-linode-akamai-connected-cloud/#respond</comments>
		
		<dc:creator><![CDATA[Alesandro Slepčević]]></dc:creator>
		<pubDate>Sun, 30 Jun 2024 13:09:53 +0000</pubDate>
				<category><![CDATA[Akamai Connected Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Linode]]></category>
		<category><![CDATA[Linode PowerShell Module]]></category>
		<category><![CDATA[Powershell module]]></category>
		<guid isPermaLink="false">https://blog.slepcevic.net/?p=487</guid>

					<description><![CDATA[<p>Even though I consider myself as being &#8220;platform-agnostic&#8221;, I originally come from a Microsoft side of the industry and because of that I had a lot of exposure to PowerShell. After a relatively steep learning curve, I realized that PowerShell...</p>
<p>The post <a href="https://blog.slepcevic.net/powershell-module-for-linode-akamai-connected-cloud/">Powershell module for Linode – Akamai Connected Cloud</a> first appeared on <a href="https://blog.slepcevic.net">Architect the cloud</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Even though I consider myself as being &#8220;platform-agnostic&#8221;, I originally come from a Microsoft side of the industry and because of that I had a lot of exposure to PowerShell. </p>



<p>After a relatively steep learning curve, I realized that PowerShell is cool and VERY powerful for some use cases. </p>



<p></p>



<p>Well, as a small side project, I started working on a <a href="https://github.com/slepix/LinodePowerShell" target="_blank" rel="noopener" title="">Powershell module</a> for Akamai Connected Cloud (Linode) platform.</p>



<p><strong>Why? Why not!? </strong></p>



<p>Linode is already known as being <a href="https://www.linode.com/developers/" target="_blank" rel="noopener" title="">VERY developer friendly</a>, why not make it even more friendlier <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>General idea was to generate a module which will directly talk to the Linode API and eventually expose all platform features via some commandlet. </p>



<p>Besides that, I also wanted to implement some quality of life features which current Linode CLI doesn&#8217;t have.</p>



<h5 class="wp-block-heading">Using the label/name of the resource in your commands.</h5>



<p>With the current <a href="https://www.linode.com/docs/products/tools/cli/get-started/" target="_blank" rel="noopener" title="">linode-cli</a>, you need to use the resource ID in all commands which is a bit annoying for some use cases <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>With this module, you can use the resource label/name in your commands, and in the background the module will convert the label provided to a resource ID and use that to talk to the API. </p>



<h5 class="wp-block-heading">Support for multiple Linode accounts and account switching.</h5>



<p>I also implemented the possibility to have and switch between multiple different Linode &#8220;profiles&#8221;. </p>



<p>You can have a profile for your development Linode account, a profile for your test Linode account and switch between them using a single command. </p>



<h5 class="wp-block-heading">Generate a random password when launching an instance</h5>



<p>When you deploy instances with the linode-cli, you need to provide a password for the instance. </p>



<p>Since humans are lazy, we most probably end up using the same password over and over again. This feature will make sure that you always get a secure password generated for your Linode. Of course, you are still free to provide your own password if you like. </p>



<h6 class="wp-block-heading"><strong>Check out the examples below to see how all of these things work. </strong></h6>



<p></p>



<h4 class="wp-block-heading"><strong>How to start? It&#8217;s really easy! You will be up and running in less than 2 minutes!</strong></h4>



<h4 class="wp-block-heading">Installation</h4>



<p>To install the Linode PowerShell module, you need to clone the repository, position yourself into the module folder and import the module:</p>



<pre class="wp-block-code"><code>git clone https://github.com/slepix/LinodePowerShell.git
cd LinodePowerShell</code></pre>



<p></p>



<h4 class="wp-block-heading">Usage</h4>



<p>Before you can use the module, you need to import it using the following command:</p>



<pre class="wp-block-code"><code>Import-Module -Name .\LinodePSModule.psd1</code></pre>



<p>After the module has been imported, you need to configure it and add your Linode account.</p>



<h4 class="wp-block-heading">Configuration</h4>



<p>Configuration is really simple, all you need to do is run&nbsp;<strong>&#8216;Connect-LinodeAccount&#8217;</strong>&nbsp;command and follow the configuration wizard.</p>



<pre class="wp-block-code"><code>Connect-LinodeAccount</code></pre>



<p></p>



<p><strong>You can run </strong>&#8220;Connect-LinodeAccount&#8221; <strong>command for each Linode account you want to add.</strong></p>



<pre class="wp-block-preformatted">IMPORTANT!!!<br>When creating a new profile, you will be asked if you want to encrypt your Linode token or not. If you decide to encrypt the token, you won't be able to manually edit the profile file and edit the token. <br><br>It is recommended that you use encrypted profile option and recreate a profile if you need to change the token.<br></pre>



<p>User configuration is stored in &#8220;<strong>$HOME\.LinodePSModule\$name-profile.json</strong>&#8220;</p>



<p>Check in the examples below how you can switch between different Linode accounts.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><em><strong>NOTE:</strong></em><br><strong>You will need Linode API token with the READ/WRITE permissions for all resources in order to get the full functionality of this module.<br>However, you are free to limit the scope of the API token to suit your security and usage requirements</strong>.</p>
</blockquote>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="350" src="https://blog.slepcevic.net/wp-content/uploads/2024/06/blogpsmodule-1024x350.png" alt="" class="wp-image-609" srcset="https://blog.slepcevic.net/wp-content/uploads/2024/06/blogpsmodule-1024x350.png 1024w, https://blog.slepcevic.net/wp-content/uploads/2024/06/blogpsmodule-300x103.png 300w, https://blog.slepcevic.net/wp-content/uploads/2024/06/blogpsmodule-768x262.png 768w, https://blog.slepcevic.net/wp-content/uploads/2024/06/blogpsmodule.png 1191w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<h4 class="wp-block-heading">Available commands</h4>



<p><a href="https://github.com/slepix/LinodePowerShell#commands"></a></p>



<p>List of currently available commands can be viewed by running this command</p>



<pre class="wp-block-code"><code>(Get-Module LinodePSModule).ExportedCommands</code></pre>



<p></p>



<h4 class="wp-block-heading">Example commands</h4>



<p><a href="https://github.com/slepix/LinodePowerShell#example-commands"></a></p>



<p><strong>List all currently configured profiles</strong></p>



<pre class="wp-block-code"><code>PS C:\&gt; Get-LinodeProviderProfiles # returns a list of all configured profiles
development
test</code></pre>



<p></p>



<p><strong>Switch to a profile named &#8220;test&#8221;</strong></p>



<pre class="wp-block-code"><code>PS C:\&gt; Set-LinodeProviderProfile -profile test
Profile test loaded</code></pre>



<p></p>



<p><strong>Get a list of all regions, but only return label, id and status of each region</strong></p>



<pre class="wp-block-code"><code>PS C:\&gt; Get-LinodeRegions | Select label, id, status

label           id           status
-----           --           ------
Mumbai, IN      ap-west      ok
Toronto, CA     ca-central   ok
Sydney, AU      ap-southeast ok
Washington, DC  us-iad       ok
Chicago, IL     us-ord       ok
Paris, FR       fr-par       ok
Seattle, WA     us-sea       ok
Sao Paulo, BR   br-gru       ok
Amsterdam, NL   nl-ams       ok
Stockholm, SE   se-sto       ok
Madrid, ES      es-mad       ok
Chennai, IN     in-maa       ok
Osaka, JP       jp-osa       ok
Milan, IT       it-mil       ok
Miami, FL       us-mia       ok
Jakarta, ID     id-cgk       ok
Los Angeles, CA us-lax       ok
Dallas, TX      us-central   ok
Fremont, CA     us-west      ok
Atlanta, GA     us-southeast ok
Newark, NJ      us-east      ok
London, UK      eu-west      ok
Singapore, SG   ap-south     ok
Frankfurt, DE   eu-central   ok
Tokyo, JP       ap-northeast ok</code></pre>



<p></p>



<p></p>



<p><strong>Returns all properties of a single region</strong></p>



<pre class="wp-block-code"><code>PS C:\&gt; Get-LinodeRegion -region nl-ams # list only nl-ams region

id                     : nl-ams
label                  : Amsterdam, NL
country                : nl
capabilities           : {Linodes, Backups, NodeBalancers, Block Storage...}
status                 : ok
resolvers              : @{ipv4=172.233.33.36, 172.233.33.38, 172.233.33.35,     172.233.33.39, 172.233.33.34, 172.233.33.33, 172.233.33.31, 172.233.33.30, 172.233.33.37, 172.233.33.32;
                         ipv6=2600:3c0e::f03c:93ff:fe9d:2d10, 2600:3c0e::f03c:93ff:fe9d:2d89, 2600:3c0e::f03c:93ff:fe9d:2d79, 2600:3c0e::f03c:93ff:fe9d:2d96, 2600:3c0e::f03c:93ff:fe9d:2da5,     
                         2600:3c0e::f03c:93ff:fe9d:2d34, 2600:3c0e::f03c:93ff:fe9d:2d68, 2600:3c0e::f03c:93ff:fe9d:2d17, 2600:3c0e::f03c:93ff:fe9d:2d45, 2600:3c0e::f03c:93ff:fe9d:2d5c}
placement_group_limits : @{maximum_pgs_per_customer=100; maximum_linodes_per_pg=5}
site_type              : core</code></pre>



<p></p>



<p>Create a new Linode named &#8220;<strong>myInstance</strong>&#8221; with the instance type of &#8220;<strong>g6-nanode-1</strong>&#8221; in <strong>nl-ams</strong> region and a <strong>randomly generated password</strong> <strong>25 characters long</strong> running <strong>Debian 11</strong></p>



<pre class="wp-block-code"><code>PS C:\&gt; New-LinodeInstance -label myInstance -region nl-ams -type g6-nanode-1 -image linode/debian11 -generatepassword -passwordlength 25


id               : 60827598
label            : myInstance
group            :
status           : provisioning
created          : 2024-06-30T01:23:46
updated          : 2024-06-30T01:23:46
type             : g6-nanode-1
ipv4             : {172.233.40.46}
ipv6             : 2600:3c0e::f03c:94ff:fe85:29cf/128
image            : linode/debian11
region           : nl-ams
specs            : @{disk=25600; memory=1024; vcpus=1; gpus=0; transfer=1000}
alerts           : @{cpu=90; network_in=10; network_out=10; transfer_quota=80; io=10000}
backups          : @{enabled=False; available=False; schedule=; last_successful=}
hypervisor       : kvm
watchdog_enabled : True
tags             : {}
host_uuid        : 5f337dda11805445fc391c91e6dcbf45c2a38a21
has_user_data    : False
placement_group  :
lke_cluster_id   :
root_password    : eJbd\OQC9ypSagfvTSG@XREV4</code></pre>



<p></p>



<p><strong>Delete a Linode instance</strong></p>



<p><strong>All destructive commands</strong> will force you to use &#8220;-confirm&#8221; flag in order to actually delete a resource.</p>



<pre class="wp-block-code"><code>PS C:\&gt; Remove-LinodeInstance -label myInstance  
Please use the -confirm flag in order to delete an instance</code></pre>



<p></p>



<pre class="wp-block-code"><code>PS C:\&gt; Remove-LinodeInstance -label myInstance -confirm
Instance 60827598 deleted</code></pre>



<p></p>



<h5 class="wp-block-heading">Every other command</h5>



<p>Even though each commandlet will ask you for parameters, you can also use&nbsp;<em><strong>&#8216;Get-Help&#8217;</strong></em>&nbsp;commandlet in order to find out which parameters each command requires.</p>



<p><strong>Example for &#8220;New-LinodeVPC&#8221; command:</strong></p>



<pre class="wp-block-code"><code>PS /&gt; Get-Help New-LinodeVPC

NAME
    New-LinodeVPC

SYNTAX
    New-LinodeVPC &#91;&#91;-description] &lt;string&gt;] &#91;&#91;-apiVersion] &lt;string&gt;] &#91;&#91;-label] &lt;string&gt;] &#91;&#91;-token] &lt;string&gt;] &#91;&#91;-region] &lt;string&gt;] &#91;&#91;-subnetlabel] &lt;string&gt;] &#91;&#91;-iprange] &lt;string&gt;] &#91;&lt;CommonParameters&gt;]

ALIASES
    None

REMARKS
    None</code></pre>



<p></p>



<h4 class="wp-block-heading"></h4>



<p></p>



<h4 class="wp-block-heading">Cool stuff and other quality of life improvements</h4>



<p>Compared to Linode&#8217;s existing CLI, this module will allow you to specify a label for most of the resources you&#8217;re working with. In the background the module will convert the label to the ID of the resource for you.</p>



<p>Example of retrieving an instance details using&nbsp;<a href="https://www.linode.com/docs/products/tools/cli/guides/install/">linode-cli</a>:</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="415" src="https://blog.slepcevic.net/wp-content/uploads/2024/06/linodecli-1024x415.png" alt="" class="wp-image-517" srcset="https://blog.slepcevic.net/wp-content/uploads/2024/06/linodecli-1024x415.png 1024w, https://blog.slepcevic.net/wp-content/uploads/2024/06/linodecli-300x121.png 300w, https://blog.slepcevic.net/wp-content/uploads/2024/06/linodecli-768x311.png 768w, https://blog.slepcevic.net/wp-content/uploads/2024/06/linodecli.png 1089w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Example retrieving an instance details using Linode Powershell module:</strong></p>



<pre class="wp-block-code"><code>PS C:\&gt; Get-Linodeinstance -label blog.dummyserver.net

id               : 12374123
label            : blog.dummyserver.net
group            :
status           : running
created          : 2024-02-29T17:53:49
updated          : 2024-06-29T00:35:47
type             : g6-standard-2
ipv4             : {172.123.123.123}
ipv6             : 2600:4c0e::f04c:95ff:fe48:cda4/128
image            : linode/ubuntu22.04
region           : nl-ams
specs            : @{disk=81920; memory=4096; vcpus=2; gpus=0; transfer=4000}
alerts           : @{cpu=180; network_in=10; network_out=10; transfer_quota=80; io=10000}
backups          : @{enabled=True; available=True; schedule=; last_successful=2024-06-29T00:29:24}
hypervisor       : kvm
watchdog_enabled : True
tags             : {prod}
host_uuid        : 123f8e495e9d51c53df4fa074e5844bce944a068
has_user_data    : True
placement_group  :
lke_cluster_id   :</code></pre>



<p></p>



<h4 class="wp-block-heading">Development status as of 30.06.2024</h4>



<figure class="wp-block-table alignwide"><table><tbody><tr><td>Percent complete</td><td><strong>51.35%</strong></td></tr><tr><td>Total API commands:</td><td>368</td></tr><tr><td>Implemented Powershell commands</td><td>189</td></tr></tbody></table></figure>



<p>Live status: <a href="https://docs.google.com/spreadsheets/d/1UCzCSL3fRUB6cJKZJBUFEq-hPzaxGcS7B37nP12Ee3I/edit?gid=1065465499#gid=1065465499" target="_blank" rel="noopener" title="">https://docs.google.com/spreadsheets/d/1UCzCSL3fRUB6cJKZJBUFEq-hPzaxGcS7B37nP12Ee3I/edit?gid=1065465499#gid=1065465499</a></p>



<p>Development is focused on providing the <strong>most important features from the start</strong>, so that&#8217;s the reason you will see a lot of less important functionalities being implemented halfway or &#8220;almost there&#8221;.</p>



<p>This is a very active project and my expectation is that in the next few weeks there will be full coverage.</p>



<p>Status of implementation is as follows:</p>



<figure class="wp-block-table"><table><thead><tr><th>Area</th><th>Status</th><th>Notes</th></tr></thead><tbody><tr><td><strong>Account</strong></td><td><strong>Done</strong></td><td>All functionalities besides billing available.</td></tr><tr><td><strong>Beta programs</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available</strong></td></tr><tr><td><strong>Account availability</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available</strong></td></tr><tr><td><strong>Child accounts</strong></td><td>Not started</td><td>None</td></tr><tr><td><strong>Payments</strong></td><td>Not started</td><td>None</td></tr><tr><td><strong>Entity transfers</strong></td><td>Not started</td><td>None</td></tr><tr><td><strong>Events</strong></td><td>WIP</td><td>Everything besides &#8220;Mark as read/seen&#8221; has been implemented</td></tr><tr><td><strong>Invoices</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available</strong></td></tr><tr><td><strong>Logins</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available</strong></td></tr><tr><td><strong>Maintenances</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available</strong></td></tr><tr><td><strong>Notifications</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available</strong></td></tr><tr><td><strong>Oauth Clients</strong></td><td>Not started</td><td>None</td></tr><tr><td><strong>Client thumbnails</strong></td><td>Not started</td><td>None</td></tr><tr><td><strong>Payment methods</strong></td><td>Not started</td><td>None</td></tr><tr><td><strong>Promo credits</strong></td><td>Not started</td><td>None</td></tr><tr><td><strong>Service transfers</strong></td><td>Not started</td><td>None</td></tr><tr><td><strong>Account settings</strong></td><td>Not started</td><td>None</td></tr><tr><td><strong>Settings</strong></td><td>Not started</td><td>None</td></tr><tr><td><strong>Account transfer</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available.</strong></td></tr><tr><td><strong>Users</strong></td><td><strong>Done</strong></td><td>Everything besides &#8220;Update user&#8217;s grant&#8221; command is implemented.</td></tr><tr><td><strong>Beta programs</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available.</strong></td></tr><tr><td><strong>Databases</strong></td><td>WIP</td><td>MySQL 95% done, PostgreSQL 0%.</td></tr><tr><td><strong>Domains</strong></td><td>WIP</td><td>All GET commands done, 80% of write commands done.</td></tr><tr><td><strong>Images</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available.</strong></td></tr><tr><td><strong>Instances</strong></td><td>WIP</td><td>60% done. Most important features like VM management are already available</td></tr><tr><td><strong>StackScripts</strong></td><td>WIP</td><td>80% done. All &#8220;GET&#8221; commands available</td></tr><tr><td><strong>LKE</strong></td><td>WIP</td><td>95% done. All &#8220;GET&#8221; commands available</td></tr><tr><td><strong>Longview</strong></td><td>WIP</td><td>0% done</td></tr><tr><td><strong>Managed</strong></td><td>WIP</td><td>0% done</td></tr><tr><td><strong>Networking</strong></td><td>WIP</td><td>80% done. All &#8220;GET&#8221; commands available</td></tr><tr><td><strong>NodeBalancers</strong></td><td>WIP</td><td>80% done. All &#8220;GET&#8221; commands available</td></tr><tr><td><strong>Object storage</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available.</strong></td></tr><tr><td><strong>Placement groups</strong></td><td>WIP</td><td>0% done</td></tr><tr><td><strong>Profile</strong></td><td>WIP</td><td>0% done</td></tr><tr><td><strong>Regions</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available.</strong></td></tr><tr><td><strong>Support</strong></td><td>WIP</td><td>0% done</td></tr><tr><td><strong>Tags</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available.</strong></td></tr><tr><td><strong>Volumes</strong></td><td>WIP</td><td>50% done</td></tr><tr><td><strong>VPC</strong></td><td><strong>Done</strong></td><td><strong>All functionalities available.</strong></td></tr></tbody></table></figure>



<h4 class="wp-block-heading">Roadmap</h4>



<p>Since this is a &#8220;weekend&#8221; project, no dates will be listed here <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p> Project is under very active development and I&#8217;m expecting to finish the first stage in the next few weeks</p>



<p></p>



<ul class="wp-block-list">
<li><strong>Stage 1 &lt; -WE ARE HERE (30.06.2024)</strong>
<ul class="wp-block-list">
<li>Full functionality coverage &#8211; 45% done</li>
</ul>
</li>



<li>Stage 2
<ul class="wp-block-list">
<li>Write Pester tests for all functionalities</li>
</ul>
</li>



<li>Stage 3
<ul class="wp-block-list">
<li>Build test and release pipelines</li>
</ul>
</li>



<li>Stage 4
<ul class="wp-block-list">
<li>Get a signing certificate &amp; publish to NuGet gallery if project gets enough traction</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading">Contributing</h4>



<p>To report a bug or request a feature in the module, please open a&nbsp;<a href="https://github.com/slepix/LinodePowerShell/issues">GitHub Issue</a>. Will be happy to check it out &lt;3</p>



<p>Have fun with it, please provide feedback (especially around naming commandlets) and until next time <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p>Alex!</p><p>The post <a href="https://blog.slepcevic.net/powershell-module-for-linode-akamai-connected-cloud/">Powershell module for Linode – Akamai Connected Cloud</a> first appeared on <a href="https://blog.slepcevic.net">Architect the cloud</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.slepcevic.net/powershell-module-for-linode-akamai-connected-cloud/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Fix Linode Windows VM IP configuration using Windows SAC console and Lish.</title>
		<link>https://blog.slepcevic.net/fix-linode-windows-vm-ip-configuration-using-windows-sac-console-and-lish/</link>
					<comments>https://blog.slepcevic.net/fix-linode-windows-vm-ip-configuration-using-windows-sac-console-and-lish/#respond</comments>
		
		<dc:creator><![CDATA[Alesandro Slepčević]]></dc:creator>
		<pubDate>Wed, 25 Oct 2023 21:44:43 +0000</pubDate>
				<category><![CDATA[Akamai Connected Cloud]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Linode]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[windows linode]]></category>
		<guid isPermaLink="false">http://172.233.40.105/blog.slepcevic.net/?p=196</guid>

					<description><![CDATA[<p>Today I decided to migrate my Windows VM running on Linode from Paris region to Amsterdam region. After kicking off the migration through the Cloud Manager (which took &#60;15 minutes), my instance wasn&#8217;t responding to any network requests. Problem was...</p>
<p>The post <a href="https://blog.slepcevic.net/fix-linode-windows-vm-ip-configuration-using-windows-sac-console-and-lish/">Fix Linode Windows VM IP configuration using Windows SAC console and Lish.</a> first appeared on <a href="https://blog.slepcevic.net">Architect the cloud</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Today I decided to migrate my Windows VM running on Linode from Paris region to <a href="https://www.linode.com/blog/linode/european-region-expansion-live-in-amsterdam/">Amsterdam </a>region. </p>



<p>After <a href="https://www.linode.com/docs/products/compute/compute-instances/guides/migrate-to-different-dc/">kicking off the migration</a> through the Cloud Manager (which took &lt;15 minutes), my instance wasn&#8217;t responding to any network requests. Problem was completely cause by me, by configuring a static IP on the VM. After the VM got migrated to Amsterdam DC, it got a new IP which wasn&#8217;t configured on the interface. </p>



<p>The <strong>Lish Console</strong>, also called the <strong>Linode Shell</strong>, provides direct console access to all of your Compute Instances. Through Lish, you can easily access your Compute Instance’s internal Linux system and run commands, install software, or configure applications. Lish is especially useful when you are not able to connect to your server through other means, such as SSH or the entire network stack is down. </p>



<p>Alongside <strong>Lish</strong>, there&#8217;s also a tool called <strong>Glish</strong>, which stands for &#8220;<strong>Graphical Linode Shell</strong>&#8220;, which you guessed it, has the ability to display your desktop environment, including Windows. </p>



<p>Problem comes when we run an <a href="https://github.com/kitknox/winode">UNSUPPORTED deployment of Windows OS</a> on Linode and want to send  &#8220;CTRL + ALT + DEL&#8221; command to the OS. Glish doesn&#8217;t have that ability built-in. </p>



<p></p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="802" data-id="197" src="https://blog.slepcevic.net/wp-content/uploads/2023/10/glish-1024x802.png" alt="" class="wp-image-197" srcset="https://blog.slepcevic.net/wp-content/uploads/2023/10/glish-1024x802.png 1024w, https://blog.slepcevic.net/wp-content/uploads/2023/10/glish-300x235.png 300w, https://blog.slepcevic.net/wp-content/uploads/2023/10/glish-768x601.png 768w, https://blog.slepcevic.net/wp-content/uploads/2023/10/glish.png 1077w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</figure>



<p></p>



<p>When I say unsupported I mean that <strong>Windows OS works on Linode</strong> (quite good!), <strong>but there&#8217;s no official support from Linode</strong> when it comes to debugging your system.</p>



<p>If the VM starts up (aka, passes the &#8220;BIOS&#8221; stage and has a boot attempt) Linode&#8217;s work here is done and support won&#8217;t be able to provide any help with debugging your instance in case it doesn&#8217;t work properly. With that out of the way, let&#8217;s check out what options we have to fix the IP address of the interface. </p>



<ol class="wp-block-list">
<li>Extract a valid GLISH session ID and use <a href="https://novnc.com/info.html">noVNC</a> to connect over a WebSocket (more complex)</li>



<li>Use Windows SAC console which is available via Lish to configure the IP on your network adapter (less complex)</li>
</ol>



<p>We&#8217;ll go with option 2 <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Go to <strong><a href="https://cloud.linode.com/">Linode Cloud Manager</a></strong>, click on your VM and launch <strong>Lish Console</strong>. </p>



<p>You will be presented with a screen like this: </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="679" src="https://blog.slepcevic.net/wp-content/uploads/2023/10/sac-1-1024x679.png" alt="" class="wp-image-205" srcset="https://blog.slepcevic.net/wp-content/uploads/2023/10/sac-1-1024x679.png 1024w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac-1-300x199.png 300w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac-1-768x510.png 768w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac-1.png 1064w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>What we see here is <strong>Special Admin Console (SAC)</strong> capability built into Windows. </p>



<p>Type in &#8220;<strong>cmd</strong>&#8221; and press Enter. You will get an output saying that a new &#8220;channel&#8221; was created. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="701" src="https://blog.slepcevic.net/wp-content/uploads/2023/10/sac2-1024x701.png" alt="" class="wp-image-199" srcset="https://blog.slepcevic.net/wp-content/uploads/2023/10/sac2-1024x701.png 1024w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac2-300x205.png 300w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac2-768x526.png 768w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac2.png 1066w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>After the channel has been created, we need to switch to it. </p>



<p><strong>We can do that by pressing ESC and then TAB</strong>. This will switch us to the new channel and prompt us to authenticate to the server. If you ever used <a href="https://www.linode.com/docs/guides/using-gnu-screen-to-manage-persistent-terminal-sessions/">screen </a>in Linux, this concept will be familiar to you <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="704" src="https://blog.slepcevic.net/wp-content/uploads/2023/10/Screenshot-2023-10-25-231227-1024x704.png" alt="" class="wp-image-200" srcset="https://blog.slepcevic.net/wp-content/uploads/2023/10/Screenshot-2023-10-25-231227-1024x704.png 1024w, https://blog.slepcevic.net/wp-content/uploads/2023/10/Screenshot-2023-10-25-231227-300x206.png 300w, https://blog.slepcevic.net/wp-content/uploads/2023/10/Screenshot-2023-10-25-231227-768x528.png 768w, https://blog.slepcevic.net/wp-content/uploads/2023/10/Screenshot-2023-10-25-231227.png 1064w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>After logging in, you&#8217;ll be presented with a familiar looking command prompt screen. </p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="704" src="https://blog.slepcevic.net/wp-content/uploads/2023/10/sac5-1024x704.png" alt="" class="wp-image-202" srcset="https://blog.slepcevic.net/wp-content/uploads/2023/10/sac5-1024x704.png 1024w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac5-300x206.png 300w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac5-768x528.png 768w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac5.png 1064w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<p>From here you can launch <strong>Powershell </strong>to do more complex stuff, but now we will just configure the new network settings by using the classic <strong>netsh </strong>command. Make sure to replace the IP address and the subnet to match your VM. You can see those settings in Cloud Manager by clicking on your VM and then on the <strong>Network </strong>tab</p>



<p></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="565" src="https://blog.slepcevic.net/wp-content/uploads/2023/10/networkconfig-1024x565.png" alt="" class="wp-image-206" srcset="https://blog.slepcevic.net/wp-content/uploads/2023/10/networkconfig-1024x565.png 1024w, https://blog.slepcevic.net/wp-content/uploads/2023/10/networkconfig-300x165.png 300w, https://blog.slepcevic.net/wp-content/uploads/2023/10/networkconfig-768x423.png 768w, https://blog.slepcevic.net/wp-content/uploads/2023/10/networkconfig.png 1277w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<pre class="wp-block-code"><code>#Example
netsh interface ip set address "Ethernet" static YourNewIP Mask Gateway

#Example
netsh interface ip set address "Ethernet" static 172.233.47.111 255.255.255.0 172.233.47.1

</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="703" src="https://blog.slepcevic.net/wp-content/uploads/2023/10/sac6-1024x703.png" alt="" class="wp-image-203" srcset="https://blog.slepcevic.net/wp-content/uploads/2023/10/sac6-1024x703.png 1024w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac6-300x206.png 300w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac6-768x527.png 768w, https://blog.slepcevic.net/wp-content/uploads/2023/10/sac6.png 1061w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>In case you have multiple network interfaces attached to your VM, make sure to replace &#8220;Ethernet&#8221; with the name of your adapter. </p>



<p></p>



<p>Cheers, Alex. </p><p>The post <a href="https://blog.slepcevic.net/fix-linode-windows-vm-ip-configuration-using-windows-sac-console-and-lish/">Fix Linode Windows VM IP configuration using Windows SAC console and Lish.</a> first appeared on <a href="https://blog.slepcevic.net">Architect the cloud</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://blog.slepcevic.net/fix-linode-windows-vm-ip-configuration-using-windows-sac-console-and-lish/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 
Lazy Loading (feed)

Served from: blog.slepcevic.net @ 2026-01-01 20:13:25 by W3 Total Cache
-->