Tuesday, 31 March 2020

How to Add Nodes to a SolidFire Cluster

It’s remarkably simply to add nodes to a SolidFire Cluster. So easy that these two videos covering “Expanding a SolidFire Cluster”, cumulatively don’t amount to even 4 minutes viewing time.

Scale on Your Terms: Expanding a SolidFire Cluster (1:09)

How to Install and Scale Your NetApp SolidFire Cluster (2:44)

Quick Walkthrough

0) Before you begin:

- The node you are adding has been set up, powered on, and configured (via the TUI - LACP recommended for the Storage Network)
- Both the major and minor version numbers of the software on each node in a cluster must match for the software to be compatible. For example: Element 9.0 is not compatible with version 9.1.

Note: If the node you are adding has a different major or minor version of NetApp Element software than the version running on the cluster, the cluster asynchronously updates the node to the version of NetApp Element software running on the cluster master. After the node is updated, it automatically adds itself to the cluster. During this asynchronous process, the node will be in a pendingActive state.

Note: SolidFire version here is

1) Log in to the SolidFire WebUI via the Management Virtual IP address:

2) Go to Cluster > Nodes > Pending

Find your pending node(s) > click on the cog > click Add

Image: SolidFire WebUI: Cluster > Nodes > Pending > Add Node

3) “While you wait... When adding a pending node to your cluster, SolidFire auto-installs the cluster version of Element OS onto the pending node. This may take a few minutes; when it has completed the node will show up in the active nodes list. Until then, the node will be in the PendingActive list.”

Click Sounds Good

Image: Waiting for node(s) to be added to SolidFire cluster

Wait for the node to go from “PendingActive” to “Pending”.

Go to Cluster > Nodes > Active

One the new node is listed under Active nodes, we’re good to proceed with adding drives.

4) Go to Cluster > Drives > Available

Select the checkbox at the top of the list to select all available drives.
Select Bulk Actions > Add

Image: Adding Drives to SolidFire cluster

5) Once the ‘Synching to x Block Services’ is complete - in the ‘Running Tasks’ field view (top right corner icon / Reporting > Running Tasks) - job done!

APPENDIX: Further Reading

What is the SolidFire Best Practices on adding or removing drives from a cluster?

For Adding Drives:
- All Block drives should be added and block syncing complete before adding Slice drives.
-- Element Software 10.x and beyond, it is recommended to add all block drives at once.
--- This should be done for no more than 3 nodes at once.

For Removing Drives:
- The Slice drive should be removed and slice syncing complete before removing the block drives.
-- All Block drives from a single node should be removed at one time.  All block syncing should be complete before moving on to the next node.

Login to the article at KB.NetApp.com to see more.

APPENDIX: System Tests on https://NODE_MGMT_IP:442

For Active or Pending nodes. If you connect to https://NODE_MGMT_IP:442 there are a-number-of ‘System Tests’ you can run:
- Run All Tests
- Test Connect Ensemble
- Test Connect Mvip
- Test Connect Svip
- Test Drives
- Test Hardware Config
- Test Locate Cluster
- Test Network Config
- Test Ping

Image: SolidFire System Tests

Also, the list of ‘System Utilities’
- Control Power
- Create Support Bundle
- Delete All Support Bundles
- Reset Drives
- Reset Network Config
- Reset Node
- Restart Network
- Restart Services

Image: SolidFire System Utilities

Monday, 30 March 2020

Tech Roundup - 29th March 2020

Some stuff collated/new/learnt since Tech Roundup - 23rd February 2020 with headings:
AWS, DataCenter Dude, FlexPod, Google Cloud, IT Storage Industry News, NetApp, Security, Veeam


AWSome Day: Online Conference: 19.03.2020
10:00-10:20am: Opening Keynote
10:25-10:40am: Module 1: Introduction to the AWS Cloud
10:45-11:15am: Module 2: Getting Started with the cloud
11:25-12:05pm: Module 3: Building in the cloud
12:10-12:30pm: Module 4: Secure your Cloud applications
12:40-1:15pm: Module 5: AWS Pricing, Support and Architecting
1:25pm-1:55pm: Closing Remarks

DataCenter Dude

Please take a moment to follow/subscribe to the following destinations:


Bring New Levels of Performance and Availability to your Enterprise App
IT Storage Industry News

NASA to launch 247 petabytes of data into AWS – but forgot about eye-watering cloudy egress costs before lift-off

2020-03-20: HPE SAS Solid State Drives - Critical Firmware Upgrade Required for Certain HPE SAS Solid State Drive Models to Prevent Drive Failure at 40,000 Hours of Operation


Life after NKS. NetApp to work with ‘all flavours of Kubernetes’

NetApp Acquires Talon Storage, Brings ROBO Capabilities to NetApp's Cloud Tech
The acquisition gives NetApp the technology to help businesses centralize and manage NFS (file) and SMB (block) storage on any of the top three hyperscaler cloud providers or on-premises while keeping it easily accessible at the edge.

Image: NetApp | Talon

Using Windows Lightweight Directory Services for UNIX Identity Management with ONTAP

[Video] Data Mover Solution, Part 1 - MapRFS Details for Data Mover

[Video] Data Mover Solution, Part 2 - XCP Configuration and Data Transfer

NetApp: blog.netapp.com

Mar 30, 2020: Baby Steps to the Cloud

NetApp: cloud.netapp.com

NetApp: CryptoSpike

“ONTAP’s Zero Trust FPolicy engine is an excellent first line of defense particularly when used in external mode and leveraging a third party FPolicy server. ProLion’s CryptoSpike product is one of these third party FPolicy servers that works with ONTAP.  One of the major benefits of CryptoSpike is the user behavioral analytics (UBA) that can stop as-yet unknown day zero ransomware attacks when leveraging FPolicy.”

NetApp: Test Drive

NetApp Test Drive: Test Drive a NetApp Product
- Cluster Setup for ONTAP 9.7 and System Manager
- Configuring HCI with the NetApp Deployment Engine
- Getting Started with NetApp Cloud Manager
- Storage Tiering with FabricPool: Moving Cold Data from ONTAP to StorageGRID
- Enterprise Application Protection in the Data Fabric with ONTAP
- Understanding Trident: The Benefits of Persistent Storage on NetApp
Check back for new labs!

NetApp: Webinars

- A DevOps Cloud Platform: The Future of Enterprise IT Infrastructure (scheduled for 31-Mar-2020)
- Veeam Backup Solution for HCI (scheduled for 23-Apr-2020)
 -NetApp IT’s Storage Security Program (target 21-May-2020)
- Using SnapCenter for Hana and other data protection strategies (target 18-Jun-2020)

Webcast Slide Deck | Harnessing the value of data
These slides support the webcast...
Tony Lock of Freeform Dynamics and Adrian Cooper of NetApp discuss what options are available to build a robust unified data platform that operates across hybrid cloud environments. If how you manage your data could be improved or your users could do with some help to get the most out of all that data you hold, watch the webcast on-demand.


Updating our malware & ransomware guidance
“We improved the guidance by emphasising offline backups as a defence against ransomware.”

Kr00k: A serious vulnerability deep inside Wi-Fi encryption
What is Kr00k? Kr00k – formally known as CVE-2019-15126 – is a vulnerability in Broadcom and Cypress Wi-Fi chips that allows unauthorized decryption of some WPA2-encrypted traffic.

Swisswindows AG is closing immediately: 170 employees laid off: Hacker attack kills!

Let's Encrypt? Let's revoke 3 million HTTPS certificates on Wednesday, more like: Check code loop blunder strikes


Thursday, 19 March 2020

Obtaining List of WFA Pack Contents using PowerShell and REST API

Sort of following on from this July 2017 post - WFA 4.1 RESTful API: A Few Notes + Some PowerShell.

I was curious to see if it’s possible using the WFA REST API, to remove all the contents from a community generated WFA Pack, delete the WFA Pack (without losing all the pack’s original contents, since they’ve been removed from the pack), and then re-create a “cleaner” pack (cleaner - because I’ve noticed some odd issues with community generated packs.) Unfortunately, I don’t believe it is possible having read the REST Web Services Primer, but I’m happy to be proved wrong. Still, some of my notes regards inspecting WFA packs might be useful.

For work related reasons (compatibility with customers environment) I’m using WFA here (as of writing this, WFA 5.1RC1 is the latest release).

If you’ve never used the PowerShell Invoke-RestMethod to talk to your WFA box, and use self-signed certs, you’ll need to run the below commands first:

$TypeToAdd = "using System.Net;using System.Security.Cryptography.X509Certificates;public class TrustAllCertsPolicy : ICertificatePolicy {public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) {return true;}}"

add-Type $TypeToAdd

[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

To store WFA credentials in a variable (C$), run:

$C = New-Object System.Management.Automation.PsCredential($(Read-Host "U"),$(Read-Host "P" -AsSecureString))

To get the packs, run:

$packs = Invoke-RestMethod -Method Get -uri https://wfa:443/rest/packs -Credential $C

To list all the packs, see the example below:

PS> $packs.collection.pack | foreach{$_.Name}
WFA pack with common entities
WFA pack for managing Clustered Data ONTAP
WFA pack for managing Data ONTAP in 7-Mode
WFA pack for managing vCenter

To list all the entities in a pack called “WFA pack with common entities”, see the example below:

PS> ($packs.collection.pack | where{$_.name -eq "WFA pack with common entities"}).entities.entity | Foreach{ ($_.Type) + ": " + ($_.Name) }
Remote System Type: Other
Function: getValueIfEnabled
Function: replaceFirst
Function: convertNullToValue
Function: listSize
Function: nextObjectNameWithSuffix
Function: getValueAt2DWithDefault
Function: returnNullOnEmpty
Function: padNumber
Function: getValueAt
Function: nextNamePaddedBy
Function: nextIPByIncrement
Command: Send email
Scheme: playground
Function: getValueAt2D
Function: toLower
Function: nextIP
Function: getColumnValues
Command: Acquire data source
Function: roundRobinNextIP
Command: Wait for data source acquisition
Function: getSize
Function: splitByDelimiter
Function: minimumSize
Function: toUpper
Function: convertNullToZero
Function: isElementPresent
Function: nextNamePadded
Function: getValueFrom2DByRowKey
Function: nextName



I created an empty pack, then went to the entities REST API page using Google Chrome (for the example below: https://wfa/rest/packs/4409d8fe-527f-4819-b5b7-12027d9fe2e9), acquired the XML, then used a free online XML to JSON converter (check out https://extendsclass.com/xml-to-json.html or https://codebeautify.org/xmltojson) to see what the “Empty Pack” looks like in JSON:

 "pack": {
  "name": "Empty Pack",
  "version": {
   "major": "1",
   "minor": "0",
   "revision": "0"
  "certification": "NONE",
  "description": "Empty Pack",
  "author": "Empty Pack",
  "entities": "",
  "link": [
    "_rel": "self",
    "_href": "https://wfa/rest/packs/4409d8fe-527f-4819-b5b7-12027d9fe2e9",
    "__prefix": "atom"
    "_rel": "exportToServerFolder",
    "_href": "https://wfa/rest/packs/folder/4409d8fe-527f-4819-b5b7-12027d9fe2e9",
    "__prefix": "atom"
    "_rel": "list",
    "_href": "https://wfa/rest/packs",
    "__prefix": "atom"
    "_rel": "export",
    "_href": "https://wfa/rest/dars/4409d8fe-527f-4819-b5b7-12027d9fe2e9",
    "__prefix": "atom"
  "_xmlns:atom": "http://www.w3.org/2005/Atom",
  "_uuid": "4409d8fe-527f-4819-b5b7-12027d9fe2e9"

APPENDIX: Definitions of all the common links that might appear in responses.

The following table contains the definitions of all the common links that might appear in responses. These relations are standard across all WFA object collections.

Note: If a particular relation does not appear in a response object, it might either mean that this particular operation is not supported for that object or mean that the operation or relation specified by the link is not relevant to the current context.

Table: Definitions of all the common links that might appear in responses.

Apart from a partial or complete set of the standard actions listed above, objects in a given object collection might support several non-standard actions and relations that are specific to that object. The following sections in this document that describe these object collections also contains a table that explains all the standard and non-standard links a given object supports.

Wednesday, 18 March 2020

1000 Posts! Cosonok’s Greatest Hits! Top 40!

After pretty much exactly 10 years, here’s Cosonok’s 1000th post. Top 40 charts seem to work well for music (at least in the UK), so I thought I’d find the top 40 most viewed posts (had to use a little powershell to construct this post - see below). Unsurprisingly, all the most viewed posts are old posts (the newest ones in the list below are from 2014), which makes sense - the longer a post has lived, the more time it’s had to get views. It is a bit of a daft 1000th post as it’s just a list of stuff that was viewed in the past and probably too old now for anyone to care much about. Still, seems a fitting thing to do for a 1000th post.

At number 40 with 10239 views (posted on 8/31/13):

At number 39 with 10321 views (posted on 3/5/11):

At number 38 with 10408 views (posted on 4/3/14):

At number 37 with 10443 views (posted on 1/4/12):

At number 36 with 10765 views (posted on 2/1/14):

At number 35 with 11293 views (posted on 3/5/13):

At number 34 with 11313 views (posted on 11/4/12):

At number 33 with 11481 views (posted on 1/1/12):

At number 32 with 11647 views (posted on 1/16/12):

At number 31 with 11674 views (posted on 5/16/13):

At number 30 with 11742 views (posted on 8/24/11):

At number 29 with 11750 views (posted on 1/19/14):

At number 28 with 11955 views (posted on 11/18/11):

At number 27 with 13055 views (posted on 6/5/12):

At number 26 with 13055 views (posted on 3/24/12):

At number 25 with 13179 views (posted on 7/7/13):

At number 24 with 13653 views (posted on 2/24/13):

At number 23 with 13804 views (posted on 9/11/12):

At number 22 with 13916 views (posted on 4/14/12):

At number 21 with 14463 views (posted on 1/6/13):

At number 20 with 14766 views (posted on 10/26/12):

At number 19 with 17760 views (posted on 10/6/11):

At number 18 with 18096 views (posted on 2/21/11):

At number 17 with 18346 views (posted on 2/14/12):

At number 16 with 19223 views (posted on 10/16/11):

At number 15 with 19331 views (posted on 1/9/12):

At number 14 with 20111 views (posted on 1/28/12):

At number 13 with 21517 views (posted on 1/28/12):

At number 12 with 26014 views (posted on 3/14/12):

At number 11 with 26799 views (posted on 11/24/12):

At number 10 with 26971 views (posted on 12/3/11):

At number 9 with 27508 views (posted on 2/13/11):

At number 8 with 28375 views (posted on 1/27/12):

At number 7 with 28628 views (posted on 1/1/12):

At number 6 with 28686 views (posted on 1/9/11):

At number 5 with 29101 views (posted on 3/26/10):

At number 4 with 38749 views (posted on 8/27/12):

At number 3 with 48663 views (posted on 12/24/11):

At number 2 with 49139 views (posted on 12/7/11):

At number 1 with 109469 views (posted on 10/6/11):

Breakdown of the top 40 by year:
- 18 from 2012
- 12 from 2011
- 6 from 2013
- 3 from 2014
- 1 from 2010

PowerShell Script to Obtain Blogger Top Posts

To obtain the above information relatively easily, I copy and pasted information from my Blogger, and put it into a text file. Then ran the PowerShell script below against the text file.

[System.Object]$Views = Get-Content "cosonoks_views.txt"
[System.Array]$ViewsTable = @()
[Int]$Column = 0
$Views | Foreach{
  If(($_ -eq "Edit | View | Delete") -or ($_.Trim() -eq "")){$Column--}
  elseif($Column -eq 1){[String]$Title = $_}
  elseif($Column -eq 4){[Int]$ViewCount = $_}
  elseif($Column -eq 5){[String]$DateStr = $_}
  If($Column -eq 5){
    $Column = 0
    $ViewsTable += New-Object PSObject -Property @{
      "Title" = $Title
      "Views" = [Int]$ViewCount
      "Date"  = $DateStr
    Write-Host "$Title : $ViewCount : $DateStr"
$ViewsTable | Sort-Object -Property Views | Export-CSV "cosonoks_views.csv" -NoTypeInformation
[System.Array]$TextOut = @()
$Index = 999
$ViewsTable | Sort-Object -Property Views | Foreach{
  $TextOut += ("At number " + [String]($Index) + " with " + [String]($_.Views) + " views (posted on " + ($_.Date) + "):")
  $TextOut += ($_.Title)
  $TextOut += ""
$TextOut | Out-File "cosonoks_table.txt"