VMware Learning. Year 2020. Part 5. Authorized Training: Desktop, Application Virtualization & Mobility. Summary.

Introduction


Hello to all readers of my blog!

In previous articles in the series “VMware Learning. Year 2020” we reviewed the list of areas and specifics of authorized training VMware and the main curricula of Data Center Virtualization & Hybrid Cloud Infrastructure, Network Virtualization & Security and Virtualization & Cloud Management Platform.

Today we will talk about the main training programs in the field of Desktop, Application Virtualization & Mobility.

Direction of training – Desktop, Application Virtualization & Mobility includes training programs on VMware Horizon, Workspace ONE technologies:

VMware Horizon


Convert desktop and application virtualization. VMware Horizon is revolutionizing traditional virtual desktop infrastructure (VDI) with unprecedented simplicity, flexibility, speed and scalability.

Core VMware Horizon Technology Education Program:

● VMware Horizon 7: Install, Configure, Manage [V7.7 (V7.10)]

  • Duration: 5 days.
  • Level of difficulty: Professional.
  • Target audience: Administrators, Engineers.
  • Prerequisites: VMware vSphere: Install, Configure, Manage course. Attendees should also have the following Microsoft Windows system administration experience:
    • Configure Active Directory services, including DNS, DHCP, and time synchronization;
    • Restrict user activities by implementing Group Policy objects;
    • Configure Windows systems to enable Remote Desktop Connections;
    • Build an ODBC connection to an SQL Server database.
  • Certification: VMware Certified Professional – Desktop and Mobility 2019 (VCP-DTM 2019).

The course provides knowledge about the technologies for delivering virtual desktops and applications through a single platform of virtual desktop infrastructure. This course develops skills in installing, configuring, and managing VMware Horizon 7.x. Students will learn how to configure and deploy virtual machine pools, manage machine access and security, and provide a custom desktop environment for end users.

VMware Workspace ONE


VMware Workspace ONE is a convenient and secure enterprise platform for providing and managing any applications on any smartphone, tablet or laptop.

● VMware Workspace ONE: Deploy and Manage [V19]

  • Duration: 5 days.
  • Level of difficulty: Professional.
  • Target audience: Administrators, Engineers.
  • Certification: VMware Certified Professional – Digital Workspace 2019 (VCP-DW2019).

In this course, students will configure VMware Workspace ONE components and provide a single point of registration and authentication, as well as how to integrate industry-recognized enterprise technologies with VMware Workspace ONE. The principles of enterprise mobility, unified entry points and identity management are discussed throughout the course.

Summary


As we can see, the list of relevant training programs turned out to be quite large. It should be noted that these articles also do not mention complex programs such as Fast Track and some rare training programs at the expert level. There is also no information on new training courses that are currently in beta. I will touch on this topic in future publications.

I hope this cheat sheet will help you decide on the necessary training yourself and offer the customer the best way to learn.

To be continued…

See you on the air!

Sincerely, Andrey Romanenko

Posted in Education, Technology, Training, Virtualization, VMware | Tagged , , , , , , , , , , , , , , , , | Leave a comment

VMware Learning. Year 2020. Part 4. Authorized Training: Virtualization & Cloud Management Platform.

Introduction


Hello to all readers of my blog!

In previous articles in the series “Vmware Learning. Year 2020” we reviewed the list of areas and specifics of authorized training VMware and the main training programs in the areas of Data Center Virtualization & Hybrid Cloud Infrastructure and Network Virtualization & Security.

Today we will talk about the main training programs in the field of Virtualization & Cloud Management Platform.

Direction of training – Virtualization & Cloud Management Platform includes training programs on VMware vRealize technologies: Operations, Log Insight, Automation, Orchestrator.

VMware vRealize


VMware provides a comprehensive cloud management platform that can manage hybrid (multi-cloud) environments that run everything from traditional to containerized (cloud) workloads. The VMware vRealize family of products accelerates the provision of IT services through automation and predefined policies, providing a high level of flexibility for developers and business lines while maintaining management and control.

The main current training programs for VMware vRealize technologies are:

● VMware vRealize Automation: Install, Configure, Manage [V7.6].

  • Duration: 5 days.
  • Level of difficulty: Professional.
  • Target audience: Administrators, Engineers.
  • Prerequisites: This course requires completion of the following course: VMware vSphere: Install, Configure, Manage.
  • Certification: VMware Certified Professional – Cloud Management and Automation 2019 (VCP-CMA 2019).

During this, students focus on installing, configuring, and managing VMware vRealize Automation, and how vRealize Automation can be used to automate the delivery of virtual machines, applications, and personalized IT services to various data centers and hybrid cloud environments.

● VMware vRealize Automation: Orchestration and Extensibility [V7.6]

  • Duration: 5 days.
  • Level of difficulty: Expert.
  • Prerequisites: VMware vSphere: Install, Configure, Manage, VMware vRealize Automation: Install, Configure, Manage courses.
  • Target audience: Administrators, Engineers.

The course aims to use VMware vRealize Orchestrator to extend the functionality of VMware vRealize Automation. Students will learn how to provide something as a service (XaaS) and implement machine life cycle extensibility using the vRealize Automation Event Broker. Also, how to create vRealize Orchestrator workflows. Functions include a basic script implementation along with logical processing to implement various functions used in a virtual environment. This course describes the implementation of debugging, loops, conditions, and user interaction in vRealize Orchestrator.

● VMware vRealize Operations: Install, Configure, Manage [V6.6, V7.x]

  • Duration: 5 days.
  • Level of difficulty: Professional.
  • Target audience: Administrators, Engineers.
  • Prerequisites: VMware vSphere: Install, Configure, Manage, VMware vSphere: Optimize and Scale.

The course is intended for experienced users of VMware vSphere®, will teach you how to use VMware vRealize Operations as a tool for analysis and forecasting. Based on VMware ESXi 6.5 (6.7), VMware vCenter Server 6.5 (6.7), and vRealize Operations 7.x (8.0), this course includes information on advanced features, including configuration and management.

Data Center Automation with vRealize Orchestrator and vSphere PowerCLI

  • Duration: 5 days.
  • Level of difficulty: Expert.
  • Target audience: Administrators, Engineers.
  • Prerequisites: VMware vSphere: Install, Configure, Manage course.

This course provides experienced VMware vSphere® administrators with knowledge of the automation tools that all vSphere clients have access to. Using real-world use cases, students will learn how to automate day-to-day administration tasks with VMware vSphere PowerCLI and VMware vRealize Orchestrator.

● VMware vRealize Log Insight: Deploy and Manage [V4.7]

  • Duration: 2 days.
  • Level of difficulty: Professional.
  • Target audience: Administrators, Engineers.
  • Prerequisites: VMware vSphere: Install, Configure, Manage course.

The course is based on the deployment, use and management of VMware vRealize Log Insight. Students will learn about the configuration and use of vRealize Log Insight to collect and manage the logs of various VMware and third-party products. This course discusses how vRealize Log Insight interacts with other systems to monitor, troubleshoot, and secure your data center.

Brief Summary


In this article, we got acquainted with the main training programs in the field of Virtualization & Cloud Management Platform.

In the next publication of the series “Vmware Learning. Year 2020” we will talk about training programs in the field Desktop, Application Virtualization & Mobility.

Follow the news, before the meeting on air traditionally for a few days.
Sincerely, AIRRA

Posted in Education, Technology, Training, Virtualization, VMware | Tagged , , , , , , , , , , , , , , , , , , , , | Leave a comment

Vmware Cloud Foundation as Code… Part 2. Importantly! Introduction. Transparency and code reuse. SDDCconceptDiagramV2. Draw-VisioDiagram. Conceptual Architecture of a SDDC as Code V2. Bill Of Materials. Brief Summary.

Importantly!


The series of articles “Vmware Cloud Foundation as Code…” are organized and digitized notes from the author’s paper diary. Russian hybrid military aggression and invasion prevented the timely publication of the collected and processed material. The author’s military service, the evacuation of his home mini-data center and blog away from the fighting, and later problems with power supply due to the destruction of infrastructure by Russian missiles, all this forced this activity to be suspended.

Now we are all used to and adapted to living in these difficult times, and I am returning to this work. For the opportunity to write and publish this article, I am indebted to many fallen comrades! Eternal memory to them!

The publication date of the article in the title is based on the original entries in the author’s diary.

Final revision of the material of this article: September 11, 29 and December 5, 2024.

Introduction


Hello to all readers of the blog about IT Architecture and Education.

We continue the series of articles “Vmware Cloud Foundation as Code…”.

This series of publications aims to reflect the author’s approach to working with the components of the Vmware Cloud Foundation ecosystem versions 4.x, 5.x and necessary third-party services throughout the entire lifecycle of a cloud solution using only code.

In the previous post, we looked at the initial steps of the author’s approach to the storyline “Vmware Cloud Foundation as code…”.

We reminded ourselves of the understanding of the life cycle of any IT solution. The PSVisio Powershell script module was described, which will be actively used to visualize various architectural levels of the VMware Cloud Foundation ecosystem and third-party systems necessary for its operation.

We have completed the first step: creating a visual diagram of the conceptual architecture of a software-defined data center using code.

It is clear that this approach when using this code example has a significant drawback – it is a large number of parameters that form the properties of the diagram objects among the code functions. This creates a problem with code transparency and reusability.

Therefore, in this publication of the series “Vmware Cloud Foundation as code…” we will first focus on this point.

Transparency and code reuse


We will start optimizing the code for transparency and ease of use by transforming SDDCconceptDiagram.ps1, which was described in the previous part of this series of articles. Let me remind you that it was written to create a Conceptual Architecture of a Software-Defined Data Center Visio diagram using PowerShell code.

First, we will output a description of all Visio diagram objects and their parameters into an XML variable, which will be passed to the input of the Draw-VisioDiagram.ps1 function, the task of which is to create the desired Visio diagram. Then, by manipulating only the input parameters, which are much easier to understand and change, we achieve the appropriate level of code purity.

SDDCconceptDiagramV2


The result of the transformation is displayed in the following code:

$DiagramParameters = [xml]@'
<Diagram Name = "SDDC Conceptual Architecture">
    <Stensils>
	<Stensil Name="Basic" File="BASIC_M.vss" AlternativePath="false"/>
        <Stensil Name="VMware" File="vmw_Icons.vssx" AlternativePath="true"/>
        <Stensil Name="VMwareVCO" File="VMware_vCenter_Orchestrator_Shapes.vssx" AlternativePath="true"/>
    </Stensils>
    <MasterItems>
        <MasterItem Stensil="Basic" Item="Rectangle"/>
        <MasterItem Stensil="VMware" Item="Public Cloud"/>
        <MasterItem Stensil="VMware" Item="vRealize Automation"/>
        <MasterItem Stensil="VMware" Item="vRealize Orchestrator"/>
        <MasterItem Stensil="VMware" Item="VM Server"/>
        <MasterItem Stensil="VMware" Item="Resource Pool"/>
        <MasterItem Stensil="VMware" Item="vCenter Server"/>
        <MasterItem Stensil="VMware" Item="Rack Server"/>
        <MasterItem Stensil="VMware" Item="Datastore"/>
        <MasterItem Stensil="VMware" Item="Physical NIC"/>
        <MasterItem Stensil="VMware" Item="Calendar"/>
        <MasterItem Stensil="VMware" Item="vRealize Operations"/>
        <MasterItem Stensil="VMware" Item="vRealize log Insight"/>
        <MasterItem Stensil="VMware" Item="VMware Cloud Solution"/>
        <MasterItem Stensil="VMware" Item="vCloud Availability"/>
        <MasterItem Stensil="VMware" Item="Site Recovery"/>
        <MasterItem Stensil="VMware" Item="Data Protection"/>
        <MasterItem Stensil="VMware" Item="VR"/>
        <MasterItem Stensil="VMware" Item="Secure State"/>
        <MasterItem Stensil="VMware" Item="Identity"/>
        <MasterItem Stensil="VMware" Item="Book"/>
        <MasterItem Stensil="VMware" Item="License"/>
        <MasterItem Stensil="VMwareVCO" Item="OK"/>        
    </MasterItems>
    <Items>
        <Item Type="General" Master="Rectangle" X="7.3125" Y="7.2733" Width="14.125" Height="7.0467" FillForegnd="RGB(255,255,255)" LinePattern="0" Text="Software Defined Data Center Conceptual Diagram" VerticalAlign="0" ParaHorzAlign="0" CharSize="30 pt" CharColor="RGB(0,112,192)"/>
        <Item Type="Line" BeginX="0.25" BeginY="10.229" EndX="14.25" EndY="10.2294" LineWeight="1 pt" LineColor="RGB(0,112,192)"/>
        <Item Type="General" Master="Rectangle" X="2.8675" Y="9.0947" Width="5.2344" Height="1.9801" FillForegnd="RGB(152,203,225)" LinePattern="0"/>
        <Item Type="Text" X="1.1043" Y="9.7391" Width="1.7085" Height="0.6912" Text="Cloud Automation" CharSize="18 pt" CharStyle="17" LinePattern="0" FillForegndTrans="100%"/>
        <Item Type="General" Master="Rectangle" X="1.125" Y="8.8089" Width="1.5" Height="1.1804" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="Public Cloud" X="1.1043" Y="9.047" Width="0.5612" Height="0.5612"/>
        <Item Type="General" Master="vRealize Automation" X="0.7436" Y="8.5256" Width="0.4531" Height="0.4531"/>
        <Item Type="General" Master="vRealize Orchestrator" X="1.3621" Y="8.5256" Width="0.4531" Height="0.4531"/>
        <Item Type="General" Master="Rectangle" X="3.6749" Y="9.7286" Width="3.3828" Height="0.5174" FillForegnd="RGB(152,203,225)" LinePattern="1" Text="Service Catalog" VerticalAlign="1" ParaHorzAlign="1" CharSize="18 pt" LineWeight="1 pt"/>
        <Item Type="General" Master="Rectangle" X="3.6749" Y="9.1083" Width="3.3828" Height="0.5174" FillForegnd="RGB(152,203,225)" LinePattern="1" Text="Self-Service Portal" VerticalAlign="1" ParaHorzAlign="1" CharSize="18 pt" LineWeight="1 pt"/>
        <Item Type="General" Master="Rectangle" X="3.6749" Y="8.4769" Width="3.3828" Height="0.5174" FillForegnd="RGB(152,203,225)" LinePattern="1" Text="Orchestration" VerticalAlign="1" ParaHorzAlign="1" CharSize="18 pt" LineWeight="1 pt"/>
        <Item Type="General" Master="Rectangle" X="2.8675" Y="6.9564" Width="5.2344" Height="1.9801" FillForegnd="RGB(58,158,207)" LinePattern="0"/>
        <Item Type="Text" X="1.1043" Y="7.6008" Width="1.7085" Height="0.6912" Text="Virtual Infrastructure" CharSize="18 pt" CharStyle="17" CharColor="RGB(255,255,255)" LinePattern="0" FillForegndTrans="100%"/>
        <Item Type="General" Master="Rectangle" X="1.125" Y="6.6648" Width="1.5" Height="1.1804" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="VM Server" X="1.1043" Y="6.9285" Width="0.5612" Height="0.5612"/>
        <Item Type="General" Master="Resource Pool" X="0.7436" Y="6.356" Width="0.4531" Height="0.4531"/>
        <Item Type="General" Master="vCenter Server" X="1.3621" Y="6.3565" Width="0.4531" Height="0.4531"/>
        <Item Type="General" Master="Rectangle" X="3.6748" Y="7.5903" Width="3.3828" Height="0.5174" FillForegnd="RGB(58,158,207)" LinePattern="1" Text="Hypervisor" VerticalAlign="1" ParaHorzAlign="1" CharSize="18 pt" LineWeight="1 pt" CharColor="RGB(255,255,255)" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="3.6748" Y="6.97" Width="3.3828" Height="0.5174" FillForegnd="RGB(58,158,207)" LinePattern="1" Text="Pools of Resources" VerticalAlign="1" ParaHorzAlign="1" CharSize="18 pt" LineWeight="1 pt" CharColor="RGB(255,255,255)" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="3.6748" Y="6.3386" Width="3.3828" Height="0.5174" FillForegnd="RGB(58,158,207)" LinePattern="1" Text="Hypervisor" VerticalAlign="1" ParaHorzAlign="1" CharSize="18 pt" LineWeight="1 pt" CharColor="RGB(255,255,255)" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="2.8625" Y="4.8378" Width="5.2344" Height="1.9801" FillForegnd="RGB(0,105,143)" LinePattern="0"/>
        <Item Type="Text" X="1.1043" Y="5.4822" Width="1.7085" Height="0.6912" Text="Physical Infrastructure" CharSize="18 pt" CharStyle="17" CharColor="RGB(255,255,255)" LinePattern="0" FillForegndTrans="100%"/>
        <Item Type="General" Master="Rectangle" X="1.125" Y="4.5462" Width="1.5" Height="1.1804" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="Rack Server" X="0.8125" Y="4.8583" Width="0.5612" Height="0.1837"/>
        <Item Type="General" Master="Rack Server" X="1.4694" Y="4.8583" Width="0.5612" Height="0.1837"/>
        <Item Type="General" Master="Datastore" X="0.789" Y="4.375" Width="0.4531" Height="0.4531"/>
        <Item Type="General" Master="Physical NIC" X="1.4375" Y="4.375" Width="0.4531" Height="0.4531"/>
        <Item Type="General" Master="Rectangle" X="3.6748" Y="5.4717" Width="3.3828" Height="0.5174" FillForegnd="RGB(0,105,143)" LinePattern="1" Text="Compute" VerticalAlign="1" ParaHorzAlign="1" CharSize="18 pt" LineWeight="1 pt" CharColor="RGB(255,255,255)" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="3.6748" Y="4.8514" Width="3.3828" Height="0.5174" FillForegnd="RGB(0,105,143)" LinePattern="1" Text="Storage" VerticalAlign="1" ParaHorzAlign="1" CharSize="18 pt" LineWeight="1 pt" CharColor="RGB(255,255,255)" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="3.6748" Y="4.22" Width="3.3828" Height="0.5174" FillForegnd="RGB(0,105,143)" LinePattern="1" Text="Network" VerticalAlign="1" ParaHorzAlign="1" CharSize="18 pt" LineWeight="1 pt" CharColor="RGB(255,255,255)" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="6.9729" Y="6.9684" Width="2.7531" Height="6.2451" FillForegnd="RGB(226,232,241)" LinePattern="0"/>
        <Item Type="Text" X="6.9859" Y="9.7286" Width="1.9719" Height="0.2878" Text="Cloud Operations" CharSize="18 pt" CharStyle="17" LinePattern="0" FillForegndTrans="100%"/>
        <Item Type="General" Master="Rectangle" X="6.9674" Y="8.6529" Width="2.5312" Height="1.1808" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="Calendar" X="6.9688" Y="8.7695" Width="0.9375" Height="0.8359"/>
        <Item Type="General" Master="OK" X="7.4375" Y="8.375" Width="0.4363" Height="0.4363"/>
        <Item Type="General" Master="Rectangle" X="6.97" Y="7.3064" Width="2.5312" Height="1.0825" FillForegnd="RGB(226,232,241)" LinePattern="1" LineWeight="1 pt"/>
        <Item Type="General" Master="Rectangle" X="6.1352" Y="7.3064" Width="0.5937" Height=" 0.5937" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="vRealize Operations" X="6.1333" Y="7.3064" Width="0.4708" Height="0.4708"/>
        <Item Type="Text" X="7.2812" Y="7.3064" Width="1.3725" Height="0.2878" Text="Monitoring" CharSize="18 pt" LinePattern="0" FillForegndTrans="100%"/>
        <Item Type="General" Master="Rectangle" X="6.97" Y="5.8955" Width="2.5312" Height="1.0825" FillForegnd="RGB(226,232,241)" LinePattern="1" LineWeight="1 pt"/>
        <Item Type="General" Master="Rectangle" X="6.1352" Y="5.8955" Width="0.5937" Height="0.5937" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="vRealize log Insight" X="6.1333" Y="5.8788" Width="0.4708" Height="0.5102"/>
        <Item Type="Text" X="7.2812" Y="5.8955" Width="1.3725" Height="0.2878" Text="Logging" CharSize="18 pt" LinePattern="0" FillForegndTrans="100%"/>
        <Item Type="General" Master="Rectangle" X="6.97" Y="4.4952" Width="2.5312" Height="1.0825" FillForegnd="RGB(226,232,241)" LinePattern="1" LineWeight="1 pt"/>
        <Item Type="General" Master="Rectangle" X="6.1352" Y="4.524" Width="0.5937" Height="0.5937" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="Public Cloud" X="6.1347" Y="4.5453" Width="0.5431" Height="0.5102"/>
        <Item Type="General" Master="Rectangle" X="6.1438" Y="4.3984" Width="0.3682" Height="0.0781" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="VMware Cloud Solution" X="6.1408" Y="4.4053" Width="0.3214" Height="0.3105"/>
        <Item Type="Text" X="7.2969" Y="4.5227" Width="1.7813" Height="0.5102" Text="Life Cycle Management" CharSize="18 pt" LinePattern="0" FillForegndTrans="100%"/>
        <Item Type="General" Master="Rectangle" X="9.9231" Y="6.9741" Width="2.7531" Height="6.2451" FillForegnd="RGB(29,62,125)" LinePattern="0"/>
        <Item Type="Text" X="9.8831" Y="9.7286" Width="1.2663" Height="0.5174" Text="Business Continuity" CharSize="18 pt" CharStyle="17" CharColor="RGB(255,255,255)" LinePattern="0" FillForegndTrans="100%"/>    
        <Item Type="General" Master="Rectangle" X="9.9208" Y="8.6529" Width="2.5312" Height="1.1808" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="vCloud Availability" X="9.9677" Y="8.7447" Width="0.956" Height="0.8166"/>
        <Item Type="General" Master="Rectangle" X="9.9232" Y="7.3064" Width="2.5312" Height="1.0825" FillForegnd="RGB(29,62,125)" LinePattern="1" LineWeight="1 pt" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="9.1094" Y="7.3064" Width="0.5937" Height="0.5937" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="Site Recovery" X="9.1104" Y="7.3007" Width="0.4708" Height="0.4708"/>
        <Item Type="Text" X="10.3125" Y="7.3192" Width="1.6875" Height="0.9875" Text="Fault Tolerance & Disaster Recovery" CharSize="18 pt" CharColor="RGB(255,255,255)" LinePattern="0" FillForegndTrans="100%"/>
        <Item Type="General" Master="Rectangle" X="9.9232" Y="5.8955" Width="2.5312" Height="1.0825" FillForegnd="RGB(29,62,125)" LinePattern="1" LineWeight="1 pt" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="9.1094" Y="5.8955" Width="0.5937" Height="0.5937" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="Data Protection" X="9.1227" Y="5.8822" Width="0.4708" Height="0.4708"/>
        <Item Type="Text" X="10.3404" Y="5.9019" Width="1.3725" Height="0.5102" Text="Backup & Restore" CharSize="18 pt" CharColor="RGB(255,255,255)" LinePattern="0" FillForegndTrans="100%"/>    
        <Item Type="General" Master="Rectangle" X="9.9232" Y="4.5227" Width="2.5312" Height="1.0825" FillForegnd="RGB(29,62,125)" LinePattern="1" LineWeight="1 pt" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="9.1094" Y="4.5227" Width="0.5937" Height="0.5937" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="VR" X="9.1083" Y="4.5227" Width="0.4708" Height="0.4708"/>
        <Item Type="Text" X="10.3737" Y="4.5215" Width="1.3725" Height="0.2878" Text="Replication" CharSize="18 pt" CharColor="RGB(255,255,255)" LinePattern="0" FillForegndTrans="100%"/>    
        <Item Type="General" Master="Rectangle" X="12.8734" Y="6.9741" Width="2.7531" Height="6.2451" FillForegnd="RGB(100,177,69)" LinePattern="0"/>
        <Item Type="Text" X="12.8512" Y="9.7286" Width="1.4225" Height="0.5174" Text="Security and Compliance" CharSize="18 pt" CharStyle="17" CharColor="RGB(255,255,255)" LinePattern="0" FillForegndTrans="100%"/>    
        <Item Type="General" Master="Rectangle" X="12.8734" Y="8.6529" Width="2.5312" Height="1.1808" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="Secure State" X="12.8863" Y="8.7447" Width="0.956" Height="0.8166"/>
        <Item Type="General" Master="Rectangle" X="12.8607" Y="7.3064" Width="2.5312" Height="1.0825" FillForegnd="RGB(100,177,69)" LinePattern="1" LineWeight="1 pt" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="12.0544" Y="7.3064" Width="0.5937" Height="0.5937" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="Identity" X="12.0505" Y="7.3062" Width="0.4708" Height="0.3668"/>
        <Item Type="Text" X="13.2012" Y="7.3192" Width="1.6875" Height="0.9875" Text="Identity and Access Management" CharSize="18 pt" CharColor="RGB(255,255,255)" LinePattern="0" FillForegndTrans="100%"/>     
        <Item Type="General" Master="Rectangle" X="12.8607" Y="5.8955" Width="2.5312" Height="1.0825" FillForegnd="RGB(100,177,69)" LinePattern="1" LineWeight="1 pt" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="12.0544" Y="5.8955" Width="0.5937" Height="0.5937" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="Book" X="12.0521" Y="5.8947" Width="0.4708" Height="0.4708"/>
        <Item Type="Text" X="13.2291" Y="5.9019" Width="1.3725" Height="0.5102" Text="Industry Regulations" CharSize="18 pt" CharColor="RGB(255,255,255)" LinePattern="0" FillForegndTrans="100%"/>    
        <Item Type="General" Master="Rectangle" X="12.8607" Y="4.5227" Width="2.5312" Height="1.0825" FillForegnd="RGB(100,177,69)" LinePattern="1" LineWeight="1 pt" LineColor="RGB(255,255,255)"/>
        <Item Type="General" Master="Rectangle" X="12.0544" Y="4.5227" Width="0.5937" Height="0.5937" FillForegnd="RGB(255,255,255)" LinePattern="0"/>
        <Item Type="General" Master="License" X="12.0625" Y="4.5227" Width="0.4708" Height="0.4708"/>
        <Item Type="Text" X="13.2513" Y="4.5215" Width="1.3725" Height="0.5102" Text="Security Policies" CharSize="18 pt" CharColor="RGB(255,255,255)" LinePattern="0" FillForegndTrans="100%"/>    
    </Items>
</Diagram>
'@
.\Draw-VisioDiagram.ps1 -VCFasCodeHomeFolder "D:\VCFasCode" -DiagramFileName "SDDCConceptDiagramV2.vsd" -DiagramParameters $DiagramParameters

Draw-VisioDiagram


The code for the Draw-VisioDiagram.ps1 function is given below:

<#
.SYNOPSIS
    Microsoft Powershell functions for generate Visio Drawing from xml variable parameters.

.DESCRIPTION
    Microsoft Powershell functions for generate Visio Drawing from xml variable parameters.
    Using PSVisio.ps1 script functions and input parameters for create and rendering Visio Drawing.

.PARAMETER VCFasCodeHomeFolder
    Folder Path for VCF as Code scripts and others artefacts.

.PARAMETER DiagramFileName
    Name of Visio Diagram file.

.PARAMETER DiagramParameters
    XML Variable Parameters for create and rendering Visio Drawing.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  28.09.2007
    Purpose/Change: Initial script development
    
...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  07.09.2022
    Purpose/Change: Begin Reorganize script.

...
   
.EXAMPLE

    Generate Visio Drawing with xml variable and others parameters: 

    .\Draw-VisioDiagram.ps1 -VCFasCodeHomeFolder "D:\VCFasCode" -DiagramFileName "SDDCConceptDiagramV2.vsd" -DiagramParameters $DiagramParameters
#>

Param ( 
    [Parameter(Mandatory)]
    [string]$VCFasCodeHomeFolder,
        
    [Parameter(Mandatory)]
    [string]$DiagramFileName,
    
    [Parameter(Mandatory)]
    [xml]$DiagramParameters        
)

# Step 1.
# Set Location
# Load Script Functions
Set-Location $VCFasCodeHomeFolder
. .\PSVisio.ps1 # Warning! Running scripts must be enabled on your system.

# Step 2.
# Create Visio Application
# Create Document from Blank Template
# Set Active Page
New-VisioApplication | Out-Null
New-VisioDocument | Out-Null
Set-VisioPage | Out-Null

# Step 3.
# Add All Visio Stensils
$StensilsNodes = $DiagramParameters.Diagram.Stensils.ChildNodes
ForEach ($StensilNode in $StensilsNodes) {

    If ($StensilNode.Attributes['AlternativePath'].value -eq 'true') {

        $StensilFilePath = $VCFasCodeHomeFolder + "\" + $StensilNode.Attributes['File'].value
        Add-VisioStensil -Name $StensilNode.Attributes['Name'].value -File $StensilFilePath
    }
    
    Else {
   
        Add-VisioStensil -Name $StensilNode.Attributes['Name'].value -File $StensilNode.Attributes['File'].value
 
    }

}

# Step 4.
# Set Masters Items
$MasterItemsNodes = $DiagramParameters.Diagram.MasterItems.ChildNodes
ForEach ($MasterItemsNode in $MasterItemsNodes) {
 
        Set-VisioStensilMasterItem -Stensil $MasterItemsNode.Attributes['Stensil'].value -Item $MasterItemsNode.Attributes['Item'].value

}

# Step 5.
# Draw items
$ItemsNodes = $DiagramParameters.Diagram.Items.ChildNodes
ForEach ($ItemNode in $ItemsNodes) {

    Switch ($ItemNode.Attributes['Type'].value) {

        "General" { 
                
            Draw-VisioItem -Master $ItemNode.Attributes['Master'].value `
                -X $ItemNode.Attributes['X'].value `
                -Y $ItemNode.Attributes['Y'].value `
                -Width $ItemNode.Attributes['Width'].value `
                -Height $ItemNode.Attributes['Height'].value `
                -FillForegnd $ItemNode.Attributes['FillForegnd'].value `
                -LinePattern $ItemNode.Attributes['LinePattern'].value `
                -Text $ItemNode.Attributes['Text'].value `
                -VerticalAlign $ItemNode.Attributes['VerticalAlign'].value `
                -ParaHorzAlign $ItemNode.Attributes['ParaHorzAlign'].value `
                -CharSize $ItemNode.Attributes['CharSize'].value `
                -CharColor $ItemNode.Attributes['CharColor'].value `
                -LineColor $ItemNode.Attributes['LineColor'].value
        }

        "Line" { 
                
            Draw-VisioLine -BeginX $ItemNode.Attributes['BeginX'].value `
                -BeginY $ItemNode.Attributes['BeginY'].value `
                -EndX $ItemNode.Attributes['EndX'].value `
                -EndY $ItemNode.Attributes['EndY'].value `
                -LineWeight $ItemNode.Attributes['LineWeight'].value `
                -LineColor $ItemNode.Attributes['LineColor'].value 
                
        }
                
        "Text" { 
                
            Draw-VisioText -X $ItemNode.Attributes['X'].value `
                -Y $ItemNode.Attributes['Y'].value `
                -Width $ItemNode.Attributes['Width'].value `
                -Height $ItemNode.Attributes['Height'].value `
                -Text $ItemNode.Attributes['Text'].value `
                -CharSize $ItemNode.Attributes['CharSize'].value `
                -CharStyle $ItemNode.Attributes['CharStyle'].value `
                -CharColor $ItemNode.Attributes['CharColor'].value `
                -LinePattern $ItemNode.Attributes['LinePattern'].value `
                -FillForegndTrans $ItemNode.Attributes['FillForegndTrans'].value 
                
        }
    }

}

# Step 6.
# Resise Page To Fit Contents
Resize-VisioPageToFitContents | Out-Null

# Step 7.
# Save Document
$SaveDiagramFileName = $VCFasCodeHomeFolder + "\" + $DiagramFileName
Save-VisioDocument -File $SaveDiagramFileName | Out-Null

# Step 8.
# Quit Application
Close-VisioApplication | Out-Null

Since the creation of the module in 2007 and until today, the code has hardly changed, only cosmetic changes have been made. You are free to use any fragments of this code in your activity.

The current version of the code is available on the GitHub resource at this link: Draw-VisioDiagram.ps1

Conceptual Architecture of a SDDC as Code V2


Based on the previous work, we will recreate a visual diagram of the Conceptual Architecture of the Software-Defined Data Center V2 using the code:

Figure 1: The result of visualization of the Conceptual Architecture of a Software-Defined Data Center V2 using Powershell code and Microsoft Visio.

As we can see, the result fully meets our expectations. Later, of course, we will need to optimize the logic of the Draw-VisioDiagram.ps1 script, but for now, let’s focus on other tasks.

Bill Of Materials


During the work on this article was used:

  • Dell Vostro 3500 notebook with Microsoft Windows 10 Pro version 22H2 Operating system, 64 bit;
  • Software: Microsoft Visio 2021 MSO (Version 2407 Build 16.0.17830.20166) 64-bit;
  • Task automation and configuration management scripting language: Powershell 5.1.19041.4780;
  • Powershell script module: PSVisio v3.7;
  • Powershell script module: Draw-VisioDiagram.ps1 v3.2;
  • Code for creating the diagram Conceptual Architecture of a Software Defined Data Center: SDDCconceptDiagramV2.ps1;
  • Visio stensils icon libraries: vmw_icons.vssx and VMware_vCenter_Orchestrator_Shapes.vssx files.

All used artifacts are located on the VCFasCode GitHub resource.

Brief Summary


The main theses of this article and the previous one were the initial steps of the author’s approach to the storyline “Vmware Cloud Foundation as code…”.

We optimized the first step: re-created the visual diagram of the Conceptual Architecture of the Software-Defined Data Center using the code SDDCconceptDiagramV2.ps1 and using the new Powershell script module: Draw-VisioDiagram.ps1.

The goal of this step is to optimize the code to achieve transparency and ease of use.

Building on previous work, in the next publications of the “Vmware Cloud Foundation as Code…” series, we will focus on the following topics:

  • VCF Architecture Diagram: Management and Workload Domains as Code;
  • Architecture diagram of the third-party services required to build the VCF solution, as code;
  • Architecture diagram of the initial lab environment model for deploying VCF solution services, as code;
  • Deploying and configuring the initial lab environment components using code;
  • etc.

Follow the news until the meeting is on air in a few days.
Sincerely, AIRRA.

Posted in Architecture, Cloud, Code, Microsoft, Programming, Technology, VMware | Tagged , , , , , , , , , , , , , , , , , , , , , | Leave a comment

VMware Learning. Year 2020. Part 3. Authorized Training: Network Virtualization & Security

Introduction


Hello to all readers of my blog!

In previous articles in the series “VMware Learning. Year 2020”, we reviewed the list of areas and specifics of authorized training in VMware and the main training programs in the field of Data Center Virtualization & Hybrid Cloud Infrastructure.

Today we will talk about the main training programs in the field of Network Virtualization & Security.

Direction of training – Network Virtualization & Security includes training programs on technologies VMware NSX, NSX-T.

VMware NSX


VMware NSX is a network virtualization and security platform for software data centers, making it possible to create and run network services on existing network equipment.

The main current training programs for VMware NSX technologies are:

● VMware NSX: Install, Configure, Manage [V6.2 (V6.4)]

  • Duration: 5 days.
  • Level of difficulty: Professional.
  • Target audience: Administrators, Engineers, Architects.
  • Prerequisites: VMware vSphere: Install, Configure, Manage. Understanding of concepts presented in the VMware Data Center Virtualization Fundamentals course. Understanding of the concepts presented in the VMware Introduction to Network Virtualization with NSX course.
  • Certification: VMware Certified Professional 6 – Network Virtualization (VCP6-NV).

The course introduces VMware NSX as part of a data center software. Students will learn how to use logical switches and will also detail logical routing between different virtual environments. The course shows how to use the gateway services, firewall configurations, and security services to protect and optimize the NSX environment.

● VMware NSX: Micro-Segmentation [V6.3]

  • Duration: 3 days.
  • Level of difficulty: Professional.
  • Target audience: Administrators, Engineers.

The course introduces the security-oriented features of VMware NSX 6.3, including the distributed firewall and Service Composer, which will help ensure the successful deployment of microsegmentation.

● VMware NSX: Troubleshooting and Operations [V6.3, (V6.4)]

  • Duration: 5 days.
  • Level of difficulty: Expert.
  • Target audience: Administrators, Engineers, Architects.
  • Prerequisites: VMware NSX: Install, Configure, Manage course.

The course provides students with advanced knowledge, skills and tools to achieve operational competency and troubleshooting in VMware NSX V6.3 (V6.4).

VMware NSX-T


VMware NSX-T is a network virtualization platform for next-generation heterogeneous architecture applications.

Key current VMware NSX-T technology training programs are:

● VMware NSX-T Data Center: Install, Configure, Manage [V2.4]

  • Duration: 5 days.
  • Level of difficulty: Professional.
  • Target audience: Administrators, Engineers.
  • Prerequisites: Solid understanding of concepts presented in the following courses: VMware Data Center Virtualization Fundamentals, VMware Introduction to Network Virtualization with NSX, VMware Network Virtualization Fundamentals.
  • Certification: VMware Certified Professional – Network Virtualization 2019 (VCP-NV 2019).

The course provides training on installing, configuring, and managing the VMware NSX-T Data Center environment. It covers the core features and functionality of the NSX-T Data Center offered by NSX-T Data Center 2.4, including common infrastructure, logical segments, logical routers, network and security services, microsegmentation, and firewalls.

● VMware NSX-T Data Center: Troubleshooting and Operations [V2.4]

  • Duration: 5 days.
  • Level of difficulty: Professional.
  • Target audience: Administrators, Engineers.
  • Prerequisites: Before taking this course, you should have completed the VMware NSX-T Data Center: Install, Configure, Manage [V2.4] course.
  • Certification: VMware Certified Professional – Network Virtualization 2019 (VCP-NV 2019).

The course provides advanced knowledge, skills and tools for achieving competency in work and troubleshooting in the VMware NSX-T Data Center environment.

Brief Summary


In this article, we got acquainted with the main training programs in the field of Network Virtualization & Security: VMware NSX, NSX-T.

In the next publication of the cycle “VMware Learning. Year 2020” we will talk about training programs in the field of Virtualization & Cloud Management Platform.

Follow the news until the meeting is on air in a few days.
Sincerely, AIRRA.

Posted in Education, Technology, Training, Virtualization, VMware | Tagged , , , , , , , , , , , , , , , , | Leave a comment

Vmware Cloud Foundation as Code… Part 1. Importantly! Introduction. The life cycle of an IT solution. Microsoft Visio and Powershell. VMware Cloud Foundation. Architecture as Code. Conceptual Architecture of a SDDC as Code. Bill Of Materials. Brief Summary.

Importantly!


The series of articles “Vmware Cloud Foundation as Code…” is organized and digitized notes from the author’s paper diary. Russian hybrid military aggression and invasion prevented the timely publication of the collected and processed material. The military service of the author, the evacuation of the home mini data center and the blog away from military operations, and later problems with energy supply due to the destruction of the infrastructure by russian missiles, all this forced this activity to be paused.

Now we are all used to and adapted to living in this difficult time and I really want to return to this work.

The publication date of the article in the title is based on the original entries in the author’s diary.

Final revision of this article material: August 11 and 29, 2024.

Introduction


Hello to all readers of the blog about IT Architecture and Education. Author, IT instructor and VMware cloud technology architect Andrii Romanenko returns to active publications after a forced break.

The war radically changed the usual rhythm of life for millions of Ukrainians, including the author of these lines. Civilian life is a thing of the past, as are educational processes and project activities. Some of these activities were compensated by military service.

Over the past time, a lot of various material and ideas have been accumulated for coverage in the form of publications on this blog.

One of the key topics the author has been working on recently is the VMware Cloud Foundation ecosystem. Given the conceptual approach of “Anything as Code…”, I decided to merge these two storylines into one called “Vmware Cloud Foundation as Code…”.

This series of publications aims to reflect the author’s approach to working with the components of the Vmware Cloud Foundation ecosystem versions 4.x, 5.x and the necessary third-party services throughout the life cycle of a cloud solution using code only.

And that is why I would like to remind you to understand the life cycle of any IT solution.

The life cycle of an IT solution


Any IT solution usually goes through several stages during its existence: Design – Architecture and Design; Implementation – Deployment of components, Initial settings, Integration with third-party systems; and Operation – Regulations for Monitoring, Backup, etc.

At each of the stages, specialized specialists operate with various input data, documents, schemes. Various document templates from the vendor are often used to standardize this process, but each of them has its own style and approach in this matter. And a completely monovendor IT solution is a very rare case.

Therefore, I would really like to unify the stages of the life cycle of an IT solution using Code. Based on the Code, form the necessary elements of the architecture and design scheme. Next, based on the Code and the parameters obtained at the previous stage, perform the initial deployment of the system, apply the initial settings, integrate with third-party systems. And in the final version, provide code examples for typical operational tasks.

Well, it is necessary to start these steps from the stage of architecture and design. But first, let’s briefly describe the circuit design tool and the automation and customization framework.

Microsoft Visio and Powershell


Various diagrams are usually used to visualize the architectural principle of system operation. In this context, I mainly use tools in the form of Microsoft Office Visio. For automation tasks – Microsoft Windows Powershell. And here a logical idea arises, and if you combine these two technologies, using Powershell code to create an architectural diagram of an IT solution in Visio format. Why not.

Many years ago, I wrote several Powershell functions that allow you to programmatically create visual diagrams. This script module will be actively used to visualize the various architectural levels of the VMware Cloud Foundation ecosystem and the third-party systems required for its operation.

The code for this script module is given below:

<#
.SYNOPSIS
    Microsoft Powershell functions for operate Visio Drawing

.DESCRIPTION
    Microsoft Powershell functions for drawing Visio objects: Document, Page, Stensil, etc.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  14.09.2007
    Purpose/Change: Initial script development
                    Create function New-VisioApplication.

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Begin Reorganize script.

    Version:        3.3
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  28.06.2023
    Purpose/Change: Reorganize Draw-VisioItem Function. Add parameter LineWeight.

    Version:        3.4
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  22.08.2024
    Purpose/Change: Reorganize Draw-VisioItem Function. Add parameter LineColor.

    Version:        3.5
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  29.08.2024
    Purpose/Change: Added the previously lost function Resize-VisioPageToFitContents.

    Version:        3.6
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  29.08.2024
    Purpose/Change: Added the previously lost function Save-VisioDocument.

    Version:        3.7
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  29.08.2024
    Purpose/Change: Added the previously lost function Close-VisioApplication.

... 
   
.EXAMPLE

    Load Microsoft Powershell functions for operate Visio Drawing: 

    . .\PSVisio.ps1 
#>

# Set Variables
$Shape = 0
$Line = 0
$Icon = 0

Function New-VisioApplication {

<#
.SYNOPSIS
    Microsoft Powershell function for create Visio Application

.DESCRIPTION
    Microsoft Powershell function for create Visio Application.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  14.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Reorganize function
   
.EXAMPLE

    Run:

    New-VisioApplication 
#>

# Create Visio Object
$Script:Application = New-Object -ComObject Visio.Application
$Script:Application.Visible = $True

}

Function New-VisioDocument {

<#
.SYNOPSIS
    Microsoft Powershell function for create Visio Document

.DESCRIPTION
    Microsoft Powershell function for create Visio Document.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  14.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Reorganize function
   
.EXAMPLE

    Run:

    New-VisioDocument 
#>

# Create Document from Blank Template
$Script:Documents = $Script:Application.Documents
$Script:Document = $Script:Application.Documents.Add('')

}

Function Set-VisioPage {

<#
.SYNOPSIS
    Microsoft Powershell function for create Visio Document Page

.DESCRIPTION
    Microsoft Powershell function for create Visio Document Page.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  14.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Reorganize function
   
.EXAMPLE

    Run:

    Set-VisioPage 
#>

# Set Visio Active Page
$Script:Page = $Script:Application.ActivePage
$Script:Application.ActivePage.PageSheet

}

Function Add-VisioStensil  {

<#
.SYNOPSIS
    Microsoft Powershell function for Add Visio Stensil

.DESCRIPTION
    Microsoft Powershell function for Add Visio Stensil.

.PARAMETER Name
    Name Identifier of Visio Stensils.

.PARAMETER File
    Name of Visio Stensils file.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  14.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Reorganize function
   
.EXAMPLE

    Run:

    Add-VisioStensil -Name "Basic" -File "BASIC_M.vss" 
#>

Param ( 
    [Parameter(Mandatory)]
    [string]$Name,
        
    [Parameter(Mandatory)]
    [String]$File         
)

# Set Expression and Add Visio Stensil
$Expression = '$Script:' + $Name + ' = $Script:Application.Documents.Add("' + $File +'")'
Invoke-Expression $Expression

}

Function Set-VisioStensilMasterItem {

<#
.SYNOPSIS
    Microsoft Powershell function for Set Visio Stensil Master Item

.DESCRIPTION
    Microsoft Powershell function for Set Visio Stensil Master Item

.PARAMETER Stensil
    Name Identifier of pre-added Visio Stensils.

.PARAMETER Item
    Reference Name Identifier of Visio Stensils Item .
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  14.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Reorganize function
   
.EXAMPLE

    Run:

    Set-VisioStensilMasterItem -Stensil "Basic" -Item "Rectangle" 
#>

Param ( 
    [Parameter(Mandatory)]
    [string]$Stensil,
        
    [Parameter(Mandatory)]
    [String]$Item     
)

# Set Expression And Set Masters Item Rectangle
$ItemWithoutSpace = $Item -replace " ",""
$Expression = '$Script:' + $ItemWithoutSpace + ' = $Script:' + $Stensil + '.Masters.Item("' + $Item + '")'
Invoke-Expression $Expression

}

Function Draw-VisioItem {

<#
.SYNOPSIS
    Microsoft Powershell function for Draw Visio Item

.DESCRIPTION
    Microsoft Powershell function for Draw Visio Item.

.PARAMETER Master
    Name Identifier of Master Item Visio Stensils.

.PARAMETER X
    X coordinate of Visio Stensils Item.

.PARAMETER Y
    Y coordinate of Visio Stensils Item.

.PARAMETER Width
    Width size of Visio Stensils Item.

.PARAMETER Height
    Height size of Visio Stensils Item.

.PARAMETER FillForegnd
    Foreground color of Visio Stensils Item.

.PARAMETER Fill
    Background color of Visio Stensils Item.

.PARAMETER LinePattern
    Contour line style of Visio Stensils Item.

.PARAMETER LineWeight
    Contour Line thickness size.

.PARAMETER LineColor
    Contour Line Color.

.PARAMETER Text
    Text Visio Stensils Item.

.PARAMETER VerticalAlign
    Vertical Align Visio Stensils Item.

.PARAMETER ParaHorzAlign
    Horizontal Align Visio Stensils Item.

.PARAMETER CharSize
    Text Character Size of Visio Stensils Item.

.PARAMETER CharColor
    Text Character Color of Visio Stensils Item.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  14.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Reorganize function

    Version:        3.3
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  28.06.2023
    Purpose/Change: Reorganize function. Add parameter LineWeight.

    Version:        3.4
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  22.08.2024
    Purpose/Change: Reorganize function. Add parameter LineColor.
   
.EXAMPLE

    Run:

    Draw-VisioItem -Master "Rectangle" -X 6.375 -Y 7.125 -Width 12.2501 -Height 7.25 -FillForegnd "RGB(0,153,204)"`
    -LinePattern 0 -LineWeight "1 pt" -Text "Microsoft Virtual Machine Manager Architecture" -VerticalAlign 0 -ParaHorzAlign 0`
    -CharSize "20 pt" -CharColor "RGB(255,255,255)" -Fill "RGB(255,255,255)" -LineColor "RGB(255,255,255)"
#>

Param ( 
    [Parameter(Mandatory)]
    [string]$Master,
        
    [Parameter(Mandatory)]
    [String]$X,

    [Parameter(Mandatory)]
    [String]$Y,

    [Parameter()]
    [String]$Width,

    [Parameter()]
    [String]$Height,

    [Parameter()]
    [String]$FillForegnd,

    [Parameter()]
    [String]$Fill,

    [Parameter()]
    [String]$LinePattern,

    [Parameter()]
    [String]$LineWeight,

    [Parameter()]
    [String]$LineColor,

    [Parameter()]
    [String]$Text,

    [Parameter()]
    [String]$VerticalAlign,

    [Parameter()]
    [String]$ParaHorzAlign,

    [Parameter()]
    [String]$CharSize,
    
    [Parameter()]
    [String]$CharColor        
)

# Set Variables
$Script:Shape++
$Master = $Master -replace " ",""

# Set Expression And Draw Item
$Expression = '$Script:Shape' + $Script:Shape + ' = $Script:Page.Drop(' + '$' + $Master + ',' + $X + ',' + $Y + ')'
Invoke-Expression $Expression

# Set Item Width Properties
If ($Width)
	{
		$Expression = '$Script:Shape' + $Script:Shape + '.Cells("Width").Formula = ' + $Width
		Invoke-Expression $Expression
	}

# Set Item Height Properties
If ($Height)
	{
		$Expression = '$Script:Shape' + $Script:Shape + '.Cells("Height").Formula = ' + $Height
		Invoke-Expression $Expression
	}

# Set Item FillForegnd Properties
If ($FillForegnd)
	{
		$Expression = '$Script:Shape' + $Script:Shape + '.Cells("FillForegnd").FormulaU = "=' +  $FillForegnd + '"'
		Invoke-Expression $Expression
	}

# Set Item Fill Properties
If ($Fill)
	{
		$Expression = '$Script:Shape' + $Script:Shape + '.CellsU("FillForegnd").FormulaForceU = "' +  $Fill + '"'
		Invoke-Expression $Expression
	}

# Set Item LinePattern Properties
If ($LinePattern)
	{
		$Expression = '$Script:Shape' + $Script:Shape + '.Cells("LinePattern").Formula = ' + $LinePattern
		Invoke-Expression $Expression
	}

# Set Item LineWeight Properties
If ($LineWeight)
	{
		$Expression = '$Script:Shape' + $Script:Shape + '.Cells("LineWeight").Formula = "' + $LineWeight + '"'
		Invoke-Expression $Expression
	}

# Set Item Line Color Properties
If ($LineColor)
	{
        $Expression = '$Script:Shape' + $Script:Shape + '.Cells("LineColor").FormulaU = "=' +  $LineColor + '"'
		Invoke-Expression $Expression
	}

# Set Item Text
If ($Text)
	{
		$Expression = '$Script:Shape' + $Script:Shape + '.Text = "' + $Text + '"'
		Invoke-Expression $Expression
	}

# Set Item VerticalAlign Properties
If ($VerticalAlign)
	{
		$Expression = '$Script:Shape' + $Script:Shape + '.Cells("VerticalAlign").Formula = ' + $VerticalAlign
		Invoke-Expression $Expression
	}

# Set Item HorzAlign Properties
If ($ParaHorzAlign)
	{
		$Expression = '$Script:Shape' + $Script:Shape + '.Cells("Para.HorzAlign").Formula = ' + $ParaHorzAlign
		Invoke-Expression $Expression
	}

# Set Item Char.Size Properties
If ($CharSize)
	{
		$Expression = '$Script:Shape' + $Script:Shape + '.Cells("Char.Size").Formula = "' + $CharSize + '"'
		Invoke-Expression $Expression
	}

# Set Item Char.Color Properties
If ($CharColor)
	{
		$Expression = '$Script:Shape' + $Script:Shape + '.Cells("Char.Color").FormulaU = "=' +  $CharColor + '"'
		Invoke-Expression $Expression
	}
}

Function Draw-VisioLine {

<#
.SYNOPSIS
    Microsoft Powershell function for Draw Visio Line

.DESCRIPTION
    Microsoft Powershell function for Draw Visio Line.

.PARAMETER BeginX
    Begin X coordinate of Visio Line.

.PARAMETER BeginY
    Begin Y coordinate of Visio Line.

.PARAMETER EndX
    End X coordinate of Visio Line.

.PARAMETER EndY
    End X coordinate of Visio Line.

.PARAMETER LineWeight
    Visio Line thickness size.

.PARAMETER LineColor
    Visio Line Color.
    
.PARAMETER BeginArrow
    Begin Arrow Visio Line Style.

.PARAMETER EndArrow
    End Arrow Visio Line Style.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  15.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Reorganize function
   
.EXAMPLE

    Run:

    Draw-VisioLine -BeginX 0.3125 -BeginY 10.3438 -EndX 12.4948 -EndY 10.3438 -LineWeight "1 pt"`
    -LineColor "RGB(255,255,255)" -BeginArrow 4 -EndArrow 4 
#>

Param ( 
    [Parameter(Mandatory)]
    [string]$BeginX,
        
    [Parameter(Mandatory)]
    [String]$BeginY,

    [Parameter(Mandatory)]
    [String]$EndX,

    [Parameter(Mandatory)]
    [String]$EndY,

    [Parameter()]
    [String]$LineWeight,

    [Parameter()]
    [String]$LineColor,

    [Parameter()]
    [String]$BeginArrow,

    [Parameter()]
    [String]$EndArrow      
)

# Set variable
$Script:Line++

# Set Expression And Draw Line
$Expression = '$Script:Line' + $Script:Line + ' = $Script:Page.DrawLine(' + $BeginX + ',' + $BeginY + ',' + $EndX + ',' + $EndY + ')'
Invoke-Expression $Expression

# Set Line Width Properties
If ($LineWeight)
	{
		$Expression = '$Script:Line' + $Script:Line + '.Cells("LineWeight").Formula = "' + $LineWeight + '"'
		Invoke-Expression $Expression
	}

# Set Line Color Properties
$Expression = '$Script:Line' + $Script:Line + '.Cells("LineColor").FormulaU = "=' +  $LineColor + '"'
Invoke-Expression $Expression

# Set Line Begin Arrow Properties
If ($BeginArrow)
	{
		$Expression = '$Script:Line' + $Script:Line + '.Cells("BeginArrow").Formula = ' + $BeginArrow
		Invoke-Expression $Expression
	}

# Set Line End Arrow Properties
If ($EndArrow)
	{
		$Expression = '$Script:Line' + $Script:Line + '.Cells("EndArrow").Formula = ' + $EndArrow
		Invoke-Expression $Expression
	}
}

Function Draw-VisioIcon {

<#
.SYNOPSIS
    Microsoft Powershell function for Draw Visio Icon

.DESCRIPTION
    Microsoft Powershell function for Draw Visio Icon.

.PARAMETER IconPath
    Path to load icon.

.PARAMETER Width
    Width size of Visio Icon.

.PARAMETER Height
    Height size of Visio Icon.

.PARAMETER PinX
    X coordinates of Visio Icon.

.PARAMETER PinY
    Y Coordinates of Visio Icon.

.PARAMETER Text
    Text Visio Icon.

.PARAMETER CharSize
    Text Character Size of Visio Icon.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  16.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  02.09.2022
    Purpose/Change: Reorganize function
   
.EXAMPLE

    Run:

    Draw-VisioIcon -IconPath "c:\!\powershell.png" -Width 0.9843 -Height 0.9843 -PinX 2.5547 -PinY 9.2682`
    -Text "Windows Powershell" -CharSize "10 pt"
#>

Param ( 
    [Parameter(Mandatory)]
    [string]$IconPath,

    [Parameter(Mandatory)]
    [String]$Width,

    [Parameter(Mandatory)]
    [String]$Height,

    [Parameter()]
    [String]$PinX,

    [Parameter()]
    [String]$PinY,

    [Parameter()]
    [String]$Text,

    [Parameter()]
    [String]$CharSize
)

# Set Variables
$Script:Icon++

# Import Icon Item
$Expression = '$Script:Icon' + $Script:Icon + ' = $Script:Page.Import("' + $IconPath + '")'
Invoke-Expression $Expression

# Set Icon Width Properties
$Expression = '$Script:Icon' + $Script:Icon + '.Cells("Width").Formula = ' + $Width
Invoke-Expression $Expression

# Set Icon Height Properties
$Expression = '$Script:Icon' + $Script:Icon + '.Cells("Height").Formula = ' + $Height
Invoke-Expression $Expression

# Set Icon PinX Properties
$Expression = '$Script:Icon' + $Script:Icon + '.Cells("PinX").Formula = ' + $PinX
Invoke-Expression $Expression

# Set Icon PinY Properties
$Expression = '$Script:Icon' + $Script:Icon + '.Cells("PinY").Formula = ' + $PinY
Invoke-Expression $Expression

# Set Icon Text
If ($Text)
	{
		$Expression = '$Script:Icon' + $Script:Icon + '.Text = "' + $Text + '"'
		Invoke-Expression $Expression
	}

# Set Icon Char.Size Properties
If ($CharSize)
	{
		$Expression = '$Script:Icon' + $Script:Icon + '.Cells("Char.Size").Formula = "' + $CharSize + '"'
		Invoke-Expression $Expression
	}
}

Function Draw-VisioText {

<#
.SYNOPSIS
    Microsoft Powershell function for Draw Visio Text

.DESCRIPTION
    Microsoft Powershell function for Draw Visio Text.

.PARAMETER BeginX
    Begin X coordinate of Visio Text.

.PARAMETER BeginY
    Begin Y coordinate of Visio Text.

.PARAMETER Width
    Width size of Visio Text.

.PARAMETER Height
    Height size of Visio Text.

.PARAMETER FillForegnd
    Background color of Visio Text.

.PARAMETER LinePattern
    Contour line style of Visio Text.

.PARAMETER Text
    Text Visio Item.

.PARAMETER VerticalAlign
    Vertical Align Visio Text.

.PARAMETER ParaHorzAlign
    Horizontal Align Visio Text.

.PARAMETER CharSize
    Text Character Size of Visio Text.

.PARAMETER CharColor
    Text Character Color of Visio Text.

.PARAMETER CharStyle
    Text Character Style of Visio Text.

.PARAMETER FillForegndTrans
    Transparent Fill Value of Visio Text.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  15.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  02.09.2022
    Purpose/Change: Reorganize function
   
.EXAMPLE

    Run:

    Draw-VisioText -X 4.25 -Y 8.875 -Width 1.3751 -Height 0.375 -Text "Deploy Admin / Dev" -CharSize "10 pt" -CharStyle 17 -LinePattern "0" -FillForegndTrans "100%"
#>

Param ( 
    [Parameter(Mandatory)]
    [string]$X,
        
    [Parameter(Mandatory)]
    [String]$Y,

    [Parameter(Mandatory)]
    [String]$Width,

    [Parameter(Mandatory)]
    [String]$Height,

    [Parameter()]
    [String]$FillForegnd,

    [Parameter()]
    [String]$LinePattern,

    [Parameter()]
    [String]$Text,

    [Parameter()]
    [String]$VerticalAlign,

    [Parameter()]
    [String]$ParaHorzAlign,

    [Parameter()]
    [String]$CharSize,

    [Parameter()]
    [String]$CharColor,

    [Parameter()]
    [String]$CharStyle,

    [Parameter()]
    [String]$FillForegndTrans
)

# Set Variables
$Script:Text++
$Master = "Rectangle"

# Set Expression And Draw Text
$Expression = '$Script:Text' + $Script:Text + ' = $Script:Page.Drop(' + '$' + $Master + ',' + $X + ',' + $Y + ')'
Invoke-Expression $Expression

# Set Item Width Properties
If ($Width)
	{
		$Expression = '$Script:Text' + $Script:Text + '.Cells("Width").Formula = ' + $Width
		Invoke-Expression $Expression
	}

# Set Item Height Properties
If ($Height)
	{
		$Expression = '$Script:Text' + $Script:Text + '.Cells("Height").Formula = ' + $Height
		Invoke-Expression $Expression
	}

# Set Item FillForegnd Properties
If ($FillForegnd)
	{
		$Expression = '$Script:Text' + $Script:Text + '.Cells("FillForegnd").Formula = "=' +  $FillForegnd + '"'
		Invoke-Expression $Expression
	}

# Set Item LinePattern Properties
If ($LinePattern)
	{
		$Expression = '$Script:Text' + $Script:Text + '.Cells("LinePattern").Formula = ' + $LinePattern
		Invoke-Expression $Expression
	}

# Set Item Text
If ($Text)
	{
		$Expression = '$Script:Text' + $Script:Text + '.Text = "' + $Text + '"'
		Invoke-Expression $Expression
	}

# Set Item VerticalAlign Properties
If ($VerticalAlign)
	{
		$Expression = '$Script:Text' + $Script:Text + '.Cells("VerticalAlign").Formula = ' + $VerticalAlign
		Invoke-Expression $Expression
	}

# Set Item HorzAlign Properties
If ($ParaHorzAlign)
	{
		$Expression = '$Script:Text' + $Script:Text + '.Cells("Para.HorzAlign").Formula = ' + $ParaHorzAlign
		Invoke-Expression $Expression
	}

# Set Item Char.Size Properties
If ($CharSize)
	{
		$Expression = '$Script:Text' + $Script:Text + '.Cells("Char.Size").Formula = "' + $CharSize + '"'
		Invoke-Expression $Expression
	}

# Set Item Char.Color Properties
If ($CharColor)
	{
		$Expression = '$Script:Text' + $Script:Text + '.Cells("Char.Color").FormulaU = "=' +  $CharColor + '"'
		Invoke-Expression $Expression
	}

# Set Item Char.Style Properties
If ($CharStyle)
	{
		$Expression = '$Script:Text' + $Script:Text + '.Cells("Char.Style").Formula = "' + $CharStyle + '"'
		Invoke-Expression $Expression
	}
	
# Set Item FillForegndTrans Properties
If ($FillForegndTrans)
	{
		$Expression = '$Script:Text' + $Script:Text + '.Cells("FillForegndTrans").Formula = "' + $FillForegndTrans + '"'
		Invoke-Expression $Expression
	}		
}

Function Draw-VisioPolyLine {

<#
.SYNOPSIS
    Microsoft Powershell function for Draw Visio PolyLine

.DESCRIPTION
    Microsoft Powershell function for Draw Visio PolyLine.

.PARAMETER Polyline
   Polyline coordinates of Visio PolyLine.

.PARAMETER LineWeight
    Visio Line thickness size.

.PARAMETER LineColor
    Visio Line Color.
    
.PARAMETER BeginArrow
    Begin Arrow Visio Line Style.

.PARAMETER EndArrow
    End Arrow Visio Line Style.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  18.09.2007
    Purpose/Change: Initial script development

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Reorganize function
   
.EXAMPLE

    Run:

    Draw-VisioPolyLine -Polyline 1.0938,9.0625,1.4063,9.0625,1.4063,8.6563,1.0938,8.6563 -LineWeight "0.5 pt"`
    -LineColor "RGB(255,255,255)" -BeginArrow 1 -EndArrow 1
#>

Param ( 
    [Parameter(Mandatory)]
    [array]$Polyline,

    [Parameter()]
    [String]$LineWeight,

    [Parameter()]
    [String]$LineColor,

    [Parameter()]
    [String]$BeginArrow,

    [Parameter()]
    [String]$EndArrow      
)

# Set  Variable
$Script:PolyLine++
[double[]]$PolyLineCoordinates=@()
$PolyLineCoordinates += $Polyline

# Set Expression And Draw PolyLine
$Expression = '$Script:PolyLine' + $Script:PolyLine + ' = $Script:Page.DrawPolyLine([ref]($PolyLineCoordinates),0)'
Invoke-Expression $Expression

# Set Line Width Properties
If ($LineWeight)
	{
		$Expression = '$Script:PolyLine' + $Script:PolyLine + '.Cells("LineWeight").Formula = "' + $LineWeight + '"'
		Invoke-Expression $Expression
	}

# Set Line Color Properties
$Expression = '$Script:PolyLine' + $Script:PolyLine + '.Cells("LineColor").FormulaU = "=' +  $LineColor + '"'
Invoke-Expression $Expression

# Set Line Begin Arrow Properties
If ($BeginArrow)
	{
		$Expression = '$Script:PolyLine' + $Script:PolyLine + '.Cells("BeginArrow").Formula = ' + $BeginArrow
		Invoke-Expression $Expression
	}

# Set Line End Arrow Properties
If ($EndArrow)
	{
		$Expression = '$Script:PolyLine' + $Script:PolyLine + '.Cells("EndArrow").Formula = ' + $EndArrow
		Invoke-Expression $Expression
	}
}

Function Resize-VisioPageToFitContents {
<#
.SYNOPSIS
    Microsoft Powershell function for Resize Active Visio Document Page to Fit Contents.

.DESCRIPTION
    Microsoft Powershell function for Resize Active Visio Document Page to Fit Contents.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  17.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Reorganize function.
   
.EXAMPLE

    Run:

    Resize-VisioPageToFitContents 
#>

# Resize Page to Fit Contents
$Script:Page.ResizeToFitContents()

}

Function Save-VisioDocument {
<#
.SYNOPSIS
    Microsoft Powershell function for save Visio Document.

.DESCRIPTION
    Microsoft Powershell function for save Visio Document.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  17.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Reorganize function.
   
.EXAMPLE

    Run:

    Save-VisioDocument -File 'C:\!\Diagram.vsd' 
#>

Param ( 
    [Parameter(Mandatory)]
    [String]$File
)

# Save Document
$Expression = '$Script:Document.SaveAs("' + $File + '")'
Invoke-Expression $Expression

}

Function Close-VisioApplication {
<#
.SYNOPSIS
    Microsoft Powershell function for Close Visio Application.

.DESCRIPTION
    Microsoft Powershell function for Close Visio Application.
  
.NOTES
    Version:        0.1
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  17.09.2007
    Purpose/Change: Initial script development

...

    Version:        3.2
    Author:         Andrii Romanenko
    Website:        blogs.airra.net
    Creation Date:  01.09.2022
    Purpose/Change: Reorganize function.
   
.EXAMPLE

    Run:

    Close-VisioApplication 
#>

# Close Visio Application
$Script:Application.Quit()

}

Since the creation of the module in 2007 and until today, the code has hardly changed, only cosmetic changes have been made. You are free to use any fragments of this code in your activity.

The current version of the code is available on the GitHub resource at this link: PSVisio.ps1

Next, we will try to apply these developments to display the various architectural levels of the VMware Cloud Foundation ecosystem.

VMware Cloud Foundation. Architecture as Code.


The ecosystem of VMware Cloud Foundation services is mature and quite complex. Therefore, to facilitate understanding of their interaction and the correct sequence of actions during design, implementation and operation, the vendor has prepared a set of accompanying documents: VMware Cloud Foundation Documentation 4.x (Archive file name – vcf-40-doc.zip), VMware Validated Design 6.0 (Archive file name – vmware-validated-design-60x.zip) and Diagrams for VMware Validated Design (Archive file name – vvd-diagrams -release-6.0.0.zip).

It is these priceless digital artifacts that will help us demonstrate the progress of the storyline stage “VMware Cloud Foundation. Architecture as Code“.

Based on our own approach and experience step by step, we will try to work out all levels from architecture and design to operation everywhere through the prism of code.

Conceptual Architecture of a SDDC as Code


Let’s start with the first step: creating a visual diagram Conceptual Architecture of a Software-Defined Data Center using code. In the above-mentioned bundles of documentation, it looks approximately like this:

Figure 1: The result of visualization of the Conceptual Architecture of a Software-Defined Data Center using Powershell code and Microsoft Visio.

PowerShell code for building such a diagram:

# Step 1.
# Set Global Variables
$VCFasCodeHomeFolder = "D:\VCFasCode" # Folder for VCF as Code scripts and others artefacts.

# Step 2.
# Load Script Functions
Set-Location $VCFasCodeHomeFolder
. .\PSVisio.ps1 # Warning! Running scripts must be enabled on your system.

# Step 3.
# Create Visio Application
# Create Document from Blank Template
# Set Active Page
New-VisioApplication
New-VisioDocument
Set-VisioPage

# Step 4.
# Add Basic Visio Stensils
# Set Masters Item Rectangle
Add-VisioStensil -Name "Basic" -File "BASIC_M.vss"
Set-VisioStensilMasterItem -Stensil "Basic" -Item "Rectangle"

# Step 5.
# Set VMware Items Visio Stensils File Path
# Add VMware Items Visio Stensils
# Set Masters item Public Cloud, vRealize Automation, vRealize Orchestrator, VM Server, Resource Pool, vCenter Server,
# Set Masters item Rack Server, Datastore, Physical NIC
# Set Masters item Calendar
# Set Masters item vRealize Operations, vRealize log Insight, VMware Cloud Solution
# Set Masters item vCloud Availability, Site Recovery, Data Protection, Replication
# Set Masters item Secure State, Identity, Book, License
$StensilFilePath = $VCFasCodeHomeFolder + "\" + "vmw_Icons.vssx"
Add-VisioStensil -Name "VMware" -File $StensilFilePath 
Set-VisioStensilMasterItem -Stensil "VMware" -Item "Public Cloud"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "vRealize Automation"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "vRealize Orchestrator"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "VM Server"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "Resource Pool"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "vCenter Server"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "Rack Server"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "Datastore"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "Physical NIC"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "Calendar"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "vRealize Operations"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "vRealize log Insight"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "VMware Cloud Solution"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "vCloud Availability"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "Site Recovery"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "Data Protection"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "VR"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "Secure State"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "Identity"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "Book"
Set-VisioStensilMasterItem -Stensil "VMware" -Item "License"
$StensilFilePath = $VCFasCodeHomeFolder + "\" + "VMware_vCenter_Orchestrator_Shapes.vssx"
Add-VisioStensil -Name "VMwareVCO" -File $StensilFilePath 
Set-VisioStensilMasterItem -Stensil "VMwareVCO" -Item "OK"

# Step 6.
# Draw Main Rectangle, Set Size, Set Colour
# Set Header Text, Size, Color, Align
# Draw Line, Set Weight, Color
Draw-VisioItem -Master "Rectangle" -X 7.3125 -Y 7.2733 -Width 14.125 -Height 7.0467 -FillForegnd "RGB(255,255,255)" `
 -LinePattern 0 -Text "Software Defined Data Center Conceptual Diagram" -VerticalAlign 0 -ParaHorzAlign 0 `
 -CharSize "30 pt" -CharColor "RGB(0,112,192)"
Draw-VisioLine -BeginX 0.25 -BeginY 10.2294 -EndX 14.25 -EndY 10.2294 -LineWeight "1 pt" -LineColor "RGB(0,112,192)"

# Step 7. 
# Draw Cloud Automation Rectangle, Set Size, Set Colour
# Draw Text, Set Size, Color
# Draw Public Cloud, vRealize Automation, vRealize Orchestrator Icons Background Rectangle, Set Size, Set Colour
# Draw Icon Public Cloud, vRealize Automation, vRealize Orchestrator
# Draw Service Catalog Rectangle, Set Size, Set Colour, Set Line Weight
# Draw Self-Service Portal Rectangle, Set Size, Set Colour, Set Line Weight
# Draw Orchestration Rectangle, Set Size, Set Colour, Set Line Weight
Draw-VisioItem -Master "Rectangle" -X 2.8675 -Y 9.0947 -Width 5.2344 -Height 1.9801 -FillForegnd "RGB(152,203,225)" -LinePattern 0 
Draw-VisioText -X 1.1043 -Y 9.7391 -Width 1.7085 -Height 0.6912 -Text "Cloud Automation" -CharSize "18 pt" -CharStyle 17 -LinePattern "0" -FillForegndTrans "100%"
Draw-VisioItem -Master "Rectangle" -X 1.125 -Y 8.8089 -Width 1.5 -Height 1.1804 -FillForegnd "RGB(255,255,255)" -LinePattern 0 
Draw-VisioItem -Master "Public Cloud" -X 1.1043 -Y 9.0473 -Width 0.5612 -Height 0.5612
Draw-VisioItem -Master "vRealize Automation" -X 0.7436 -Y 8.5256 -Width 0.4531 -Height 0.4531
Draw-VisioItem -Master "vRealize Orchestrator" -X 1.3621 -Y 8.5256 -Width 0.4531 -Height 0.4531
Draw-VisioItem -Master "Rectangle" -X 3.6749 -Y 9.7286 -Width 3.3828 -Height 0.5174 -FillForegnd "RGB(152,203,225)" `
 -Text "Service Catalog" -VerticalAlign 1 -ParaHorzAlign 1 `
 -CharSize "18 pt" -LinePattern 1 -LineWeight "1 pt"
Draw-VisioItem -Master "Rectangle" -X 3.6749 -Y 9.1083 -Width 3.3828 -Height 0.5174 -FillForegnd "RGB(152,203,225)" `
 -Text "Self-Service Portal" -VerticalAlign 1 -ParaHorzAlign 1 `
 -CharSize "18 pt" -LinePattern 1 -LineWeight "1 pt"
Draw-VisioItem -Master "Rectangle" -X 3.6749 -Y 8.4769 -Width 3.3828 -Height 0.5174 -FillForegnd "RGB(152,203,225)" `
 -Text "Orchestration" -VerticalAlign 1 -ParaHorzAlign 1 `
 -CharSize "18 pt" -LinePattern 1 -LineWeight "1 pt"

# Step 8.  
# Draw Virtual Infrastructure Rectangle, Set Size, Set Colour
# Draw Text, Set Size, Color
# Draw VM Server, Resource Pool, vCenter Server Icons Background Rectangle, Set Size, Set Colour
# Draw Icon VM Server, Resource Pool, vCenter Server
# Draw Hypervisor Rectangle, Set Size, Set Colour, Set Line Weight
# Draw Pools of Resources Rectangle, Set Size, Set Colour, Set Line Weight
# Draw Virtualization Control Rectangle, Set Size, Set Colour, Set Line Weight
Draw-VisioItem -Master "Rectangle" -X 2.8675 -Y 6.9564 -Width 5.2344 -Height 1.9801 -FillForegnd "RGB(58,158,207)" -LinePattern 0 
Draw-VisioText -X 1.1043 -Y 7.6008 -Width 1.7085 -Height 0.6912 -Text "Virtual Infrastructure" -CharSize "18 pt" -CharStyle 17 -CharColor "RGB(255,255,255)" -LinePattern "0" -FillForegndTrans "100%"
Draw-VisioItem -Master "Rectangle" -X 1.125 -Y 6.6648 -Width 1.5 -Height 1.1804 -FillForegnd "RGB(255,255,255)" -LinePattern 0 
Draw-VisioItem -Master "VM Server" -X 1.1043 -Y 6.9285 -Width 0.5612 -Height 0.5612
Draw-VisioItem -Master "Resource Pool" -X 0.7436 -Y 6.3565 -Width 0.4531 -Height 0.4531
Draw-VisioItem -Master "vCenter Server" -X 1.3621 -Y 6.3565 -Width 0.4531 -Height 0.4531
Draw-VisioItem -Master "Rectangle" -X 3.6748 -Y 7.5903 -Width 3.3828 -Height 0.5174 -FillForegnd "RGB(58,158,207)" `
 -Text "Hypervisor" -VerticalAlign 1 -ParaHorzAlign 1 `
 -CharSize "18 pt" -LinePattern 1 -LineWeight "1 pt" -CharColor "RGB(255,255,255)" -LineColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 3.6748 -Y 6.97 -Width 3.3828 -Height 0.5174 -FillForegnd "RGB(58,158,207)" `
 -Text "Pools of Resources" -VerticalAlign 1 -ParaHorzAlign 1 `
 -CharSize "18 pt" -LinePattern 1 -LineWeight "1 pt" -CharColor "RGB(255,255,255)" -LineColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 3.6748 -Y 6.3386 -Width 3.3828 -Height 0.5174 -FillForegnd "RGB(58,158,207)" `
 -Text "Virtualization Control" -VerticalAlign 1 -ParaHorzAlign 1 `
 -CharSize "18 pt" -LinePattern 1 -LineWeight "1 pt" -CharColor "RGB(255,255,255)" -LineColor "RGB(255,255,255)"

# Step 9.
# Draw Physical Infrastructure Rectangle, Set Size, Set Colour
# Draw Text, Set Size, Color
# Draw Rack Server, Datastore, Physical NIC Icons Background Rectangle, Set Size, Set Colour
# Draw Icon Rack Server, Datastore, Physical NIC
# Draw Compute Rectangle, Set Size, Set Colour, Set Line Weight
# Draw Storage Rectangle, Set Size, Set Colour, Set Line Weight
# Draw Network Rectangle, Set Size, Set Colour, Set Line Weight
Draw-VisioItem -Master "Rectangle" -X 2.8625 -Y 4.8378 -Width 5.2344 -Height 1.9801 -FillForegnd "RGB(0,105,143)" -LinePattern 0 
Draw-VisioText -X 1.1043 -Y 5.4822 -Width 1.7085 -Height 0.6912 -Text "Physical Infrastructure" -CharSize "18 pt" -CharStyle 17 -CharColor "RGB(255,255,255)" -LinePattern "0" -FillForegndTrans "100%"
Draw-VisioItem -Master "Rectangle" -X 1.125 -Y 4.5462 -Width 1.5 -Height 1.1804 -FillForegnd "RGB(255,255,255)" -LinePattern 0
Draw-VisioItem -Master "Rack Server" -X 0.8125 -Y 4.8583 -Width 0.5612 -Height 0.1837
Draw-VisioItem -Master "Rack Server" -X 1.4694 -Y 4.8583 -Width 0.5612 -Height 0.1837
Draw-VisioItem -Master "Datastore" -X 0.789 -Y 4.375 -Width 0.4531 -Height 0.4531
Draw-VisioItem -Master "Physical NIC" -X 1.4375 -Y 4.375 -Width 0.4531 -Height 0.4531
Draw-VisioItem -Master "Rectangle" -X 3.6748 -Y 5.4717 -Width 3.3828 -Height 0.5174 -FillForegnd "RGB(0,105,143)" `
 -Text "Compute" -VerticalAlign 1 -ParaHorzAlign 1 `
 -CharSize "18 pt" -LinePattern 1 -LineWeight "1 pt" -CharColor "RGB(255,255,255)" -LineColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 3.6748 -Y 4.8514 -Width 3.3828 -Height 0.5174 -FillForegnd "RGB(0,105,143)" `
 -Text "Storage" -VerticalAlign 1 -ParaHorzAlign 1 `
 -CharSize "18 pt" -LinePattern 1 -LineWeight "1 pt" -CharColor "RGB(255,255,255)" -LineColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 3.6748 -Y 4.22 -Width 3.3828 -Height 0.5174 -FillForegnd "RGB(0,105,143)" `
 -Text "Network" -VerticalAlign 1 -ParaHorzAlign 1 `
 -CharSize "18 pt" -LinePattern 1 -LineWeight "1 pt" -CharColor "RGB(255,255,255)" -LineColor "RGB(255,255,255)"

# Step 10.
# Draw Cloud Operations Rectangle, Set Size, Set Colour
# Draw Text, Set Size, Color, Align
# Icon Calendar, OK Background Rectangle, Set Size, Set Colour
# Draw Icon Calendar, OK
# Draw Monitoring Rectangle, Set Size, Set Colour, Set Line Weight
# Icon Monitoring Background Rectangle, Set Size, Set Colour
# Draw Icon Monitoring
# Draw Text, Set Size, Color
# Draw Logging Rectangle, Set Size, Set Colour, Set Line Weight
# Icon Site Recovery Background Rectangle, Set Size, Set Colour
# Draw Icon Logging
# Draw Text, Set Size, Color
# Draw Life Cycle management Rectangle, Set Size, Set Colour, Set Line Weight
# Icon Public Cloud Background Rectangle, Set Size, Set Colour
# Draw Icon Public Cloud
# Draw Masking Rectangle, Set Size, Set Colour, Set Line Weight
# Draw Icon VMware Cloud Solution
# Draw Text, Set Size, Color
Draw-VisioItem -Master "Rectangle" -X 6.9729 -Y 6.9684 -Width 2.7531 -Height 6.2451 -FillForegnd "RGB(226,232,241)" -LinePattern 0 
Draw-VisioText -X 6.9859 -Y 9.7286 -Width 1.9719 -Height 0.2878 -Text "Cloud Operations" -CharSize "18 pt" -CharStyle 17 -LinePattern "0" -FillForegndTrans "100%"
Draw-VisioItem -Master "Rectangle" -X 6.9674 -Y 8.6529 -Width 2.5312 -Height 1.1808 -FillForegnd "RGB(255,255,255)" -LinePattern 0 
Draw-VisioItem -Master "Calendar" -X 6.9688 -Y 8.7695 -Width 0.9375 -Height 0.8359 
Draw-VisioItem -Master "OK" -X 7.4375 -Y 8.375 -Width 0.4363 -Height 0.4363
Draw-VisioItem -Master "Rectangle" -X 6.97 -Y 7.3064 -Width 2.5312 -Height 1.0825 -FillForegnd "RGB(226,232,241)" `
  -LinePattern 1 -LineWeight "1 pt"
Draw-VisioItem -Master "Rectangle" -X 6.1352 -Y 7.3064 -Width 0.5937 -Height 0.5937 -FillForegnd "RGB(255,255,255)" `
  -LinePattern 0
Draw-VisioItem -Master "vRealize Operations" -X 6.1333 -Y 7.3064 -Width 0.4708 -Height 0.4708
Draw-VisioText -X 7.2812 -Y 7.3064 -Width 1.3725 -Height 0.2878 -Text "Monitoring" -CharSize "18 pt" -LinePattern "0" -FillForegndTrans "100%"
Draw-VisioItem -Master "Rectangle" -X 6.97 -Y 5.8955 -Width 2.5312 -Height 1.0825 -FillForegnd "RGB(226,232,241)" `
  -LinePattern 1 -LineWeight "1 pt"
Draw-VisioItem -Master "Rectangle" -X 6.1352 -Y 5.8955 -Width 0.5937 -Height 0.5937 -FillForegnd "RGB(255,255,255)" `
  -LinePattern 0
Draw-VisioItem -Master "vRealize log Insight" -X 6.1333 -Y 5.8788 -Width 0.4708 -Height 0.5102
Draw-VisioText -X 7.2812 -Y 5.8955 -Width 1.3725 -Height 0.2878 -Text "Logging" -CharSize "18 pt" -LinePattern "0" -FillForegndTrans "100%"
Draw-VisioItem -Master "Rectangle" -X 6.97 -Y 4.4952 -Width 2.5312 -Height 1.0825 -FillForegnd "RGB(226,232,241)" `
  -LinePattern 1 -LineWeight "1 pt"
Draw-VisioItem -Master "Rectangle" -X 6.1352 -Y 4.524 -Width 0.5937 -Height 0.5937 -FillForegnd "RGB(255,255,255)" `
  -LinePattern 0
Draw-VisioItem -Master "Public Cloud" -X 6.1347 -Y 4.5453 -Width 0.5431 -Height 0.5102
Draw-VisioItem -Master "Rectangle" -X 6.1438 -Y 4.3984 -Width 0.3682 -Height 0.0781 -FillForegnd "RGB(255,255,255)" `
  -LinePattern 0
Draw-VisioItem -Master "VMware Cloud Solution" -X 6.1408 -Y 4.4053 -Width 0.3214 -Height 0.3105
Draw-VisioText -X 7.2969 -Y 4.5227 -Width 1.7813 -Height 0.5102 -Text "Life Cycle Management" -CharSize "18 pt" -LinePattern "0" -FillForegndTrans "100%"

# Step 11.
# Draw Business Continuity Rectangle, Set Size, Set Colour
# Draw Text, Set Size, Color
# Icon vCloud Availability Background Rectangle, Set Size, Set Colour
# Draw Icon vCloud Availability
# Draw Fault Tolerance & Disaster Recovery Rectangle, Set Size, Set Colour, Set Line Weight
# Icon Site Recovery Background Rectangle, Set Size, Set Colour
# Draw Icon Site Recovery
# Draw Text, Set Size, Color
# Draw Backup & Restore Rectangle, Set Size, Set Colour, Set Line Weight
# Icon Data Protection Background Rectangle, Set Size, Set Colour
# Draw Icon Data Protection
# Draw Text, Set Size, Color
# Draw Replication Rectangle, Set Size, Set Colour, Set Line Weight
# Icon Replication Background Rectangle, Set Size, Set Colour
# Draw Icon Replication
# Draw Text, Set Size, Color
Draw-VisioItem -Master "Rectangle" -X 9.9231 -Y 6.9741 -Width 2.7531 -Height 6.2451 -FillForegnd "RGB(29,62,125)" -LinePattern 0 
Draw-VisioText -X 9.8831 -Y 9.7286 -Width 1.2663 -Height 0.5174 -Text "Business Continuity" -CharSize "18 pt" -CharStyle 17 -CharColor "RGB(255,255,255)" -LinePattern "0" -FillForegndTrans "100%"
Draw-VisioItem -Master "Rectangle" -X 9.9208 -Y 8.6529 -Width 2.5312 -Height 1.1808 -FillForegnd "RGB(255,255,255)" -LinePattern 0 
Draw-VisioItem -Master "vCloud Availability" -X 9.9677 -Y 8.7447 -Width 0.956 -Height 0.8166
Draw-VisioItem -Master "Rectangle" -X 9.9232 -Y 7.3064 -Width 2.5312 -Height 1.0825 -FillForegnd "RGB(29,62,125)" `
  -LinePattern 1 -LineWeight "1 pt" -LineColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 9.1094 -Y 7.3064 -Width 0.5937 -Height 0.5937 -FillForegnd "RGB(255,255,255)" `
  -LinePattern 0
Draw-VisioItem -Master "Site Recovery" -X 9.1104 -Y 7.3007 -Width 0.4708 -Height 0.4708
Draw-VisioText -X 10.3125 -Y 7.3192 -Width 1.6875 -Height 0.9875 -Text "Fault Tolerance & Disaster Recovery" -CharSize "18 pt" -LinePattern "0" -FillForegndTrans "100%" -CharColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 9.9232 -Y 5.8955 -Width 2.5312 -Height 1.0825 -FillForegnd "RGB(29,62,125)" `
  -LinePattern 1 -LineWeight "1 pt" -LineColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 9.1094 -Y 5.8955 -Width 0.5937 -Height 0.5937 -FillForegnd "RGB(255,255,255)" `
  -LinePattern 0
Draw-VisioItem -Master "Data Protection" -X 9.1227 -Y 5.8822 -Width 0.4708 -Height 0.4708
Draw-VisioText -X 10.3404 -Y 5.9019 -Width 1.3725 -Height 0.5102 -Text "Backup & Restore" -CharSize "18 pt" -LinePattern "0" -FillForegndTrans "100%" -CharColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 9.9232 -Y 4.5227 -Width 2.5312 -Height 1.0825 -FillForegnd "RGB(29,62,125)" `
  -LinePattern 1 -LineWeight "1 pt" -LineColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 9.1094 -Y 4.5227 -Width 0.5937 -Height 0.5937 -FillForegnd "RGB(255,255,255)" `
  -LinePattern 0
Draw-VisioItem -Master "VR" -X 9.1083 -Y 4.5227 -Width 0.4708 -Height 0.4708
Draw-VisioText -X 10.3737 -Y 4.5215 -Width 1.3725 -Height 0.2878 -Text "Replication" -CharSize "18 pt" -LinePattern "0" -FillForegndTrans "100%" -CharColor "RGB(255,255,255)"

# Step 12.
# Draw Security and Compliance Rectangle, Set Size, Set Colour
# Draw Text, Set Size, Color
# Icon Secure State Background Rectangle, Set Size, Set Colour
# Draw Icon Secure State
# Draw Identity and Access Management Rectangle, Set Size, Set Colour, Set Line Weight
# Icon Identity Background Rectangle, Set Size, Set Colour
# Draw Icon Identity
# Draw Text, Set Size, Color
# Draw Industry Regulations Rectangle, Set Size, Set Colour, Set Line Weight
# Icon Book Background Rectangle, Set Size, Set Colour
# Draw Icon Book
# Draw Text, Set Size, Color
# Draw Security Policies Rectangle, Set Size, Set Colour, Set Line Weight
# Icon License Background Rectangle, Set Size, Set Colour
# Draw Icon License
# Draw Text, Set Size, Color
Draw-VisioItem -Master "Rectangle" -X 12.8734 -Y 6.9741 -Width 2.7531 -Height 6.2451 -FillForegnd "RGB(100,177,69)" -LinePattern 0 
Draw-VisioText -X 12.8512 -Y 9.7286 -Width 1.4225 -Height 0.5174 -Text "Security and Compliance" -CharSize "18 pt" -CharStyle 17 -CharColor "RGB(255,255,255)" -LinePattern "0" -FillForegndTrans "100%"
Draw-VisioItem -Master "Rectangle" -X 12.8734 -Y 8.6529 -Width 2.5312 -Height 1.1808 -FillForegnd "RGB(255,255,255)" -LinePattern 0 
Draw-VisioItem -Master "Secure State" -X 12.8863 -Y 8.7447 -Width 0.956 -Height 0.8166
Draw-VisioItem -Master "Rectangle" -X 12.8607 -Y 7.3064 -Width 2.5312 -Height 1.0825 -FillForegnd "RGB(100,177,69)" `
  -LinePattern 1 -LineWeight "1 pt" -LineColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 12.0544 -Y 7.3064 -Width 0.5937 -Height 0.5937 -FillForegnd "RGB(255,255,255)" `
  -LinePattern 0
Draw-VisioItem -Master "Identity" -X 12.0505 -Y 7.3062 -Width 0.4708 -Height 0.3668
Draw-VisioText -X 13.2012 -Y 7.3192 -Width 1.6875 -Height 0.9875 -Text "Identity and Access Management" -CharSize "18 pt" -LinePattern "0" -FillForegndTrans "100%" -CharColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 12.8607 -Y 5.8955 -Width 2.5312 -Height 1.0825 -FillForegnd "RGB(100,177,69)" `
  -LinePattern 1 -LineWeight "1 pt" -LineColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 12.0544 -Y 5.8955 -Width 0.5937 -Height 0.5937 -FillForegnd "RGB(255,255,255)" `
  -LinePattern 0
Draw-VisioItem -Master "Book" -X 12.0521 -Y 5.8947 -Width 0.4708 -Height 0.4708
Draw-VisioText -X 13.2291 -Y 5.9019 -Width 1.3725 -Height 0.5102 -Text "Industry Regulations" -CharSize "18 pt" -LinePattern "0" -FillForegndTrans "100%" -CharColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 12.8607 -Y 4.5227 -Width 2.5312 -Height 1.0825 -FillForegnd "RGB(100,177,69)" `
  -LinePattern 1 -LineWeight "1 pt" -LineColor "RGB(255,255,255)"
Draw-VisioItem -Master "Rectangle" -X 12.0544 -Y 4.5227 -Width 0.5937 -Height 0.5937 -FillForegnd "RGB(255,255,255)" `
  -LinePattern 0
Draw-VisioItem -Master "License" -X 12.0625 -Y 4.5227 -Width 0.4708 -Height 0.4708
Draw-VisioText -X 13.2513 -Y 4.5215 -Width 1.3725 -Height 0.5102 -Text "Security Policies" -CharSize "18 pt" -LinePattern "0" -FillForegndTrans "100%" -CharColor "RGB(255,255,255)"

# Step 13.
# Resise Page To Fit Contents
Resize-VisioPageToFitContents

# Step 14.
# Save Document
$DiagramFileName = $VCFasCodeHomeFolder + "\" + 'SDDCConceptDiagram.vsd'
Save-VisioDocument -File $DiagramFileName

# Step 15.
# Quit Application
Close-VisioApplication

The logic of this script is described in the comments to the code.

The author added additional icons to the diagram for better visual perception. The files vmw_icons.vssx and VMware_vCenter_Orchestrator_Shapes.vssx are used as a library of icons.

All used artifacts are located on the VCFasCode GitHub resource.

Bill Of Materials


During the work on this article was used:

  • Dell Vostro 3500 notebook with Microsoft Windows 10 Pro version 22H2 Operating system, 64 bit;
  • Software: Microsoft Visio 2021 MSO (Version 2407 Build 16.0.17830.20166) 64-bit;
  • Task automation and configuration management scripting language: Powershell 5.1.19041.4780;
  • Powershell script module: PSVisio v3.7;
  • Code for creating the diagram Conceptual Architecture of a Software Defined Data Center: SDDCconceptDiagram.ps1;
  • Visio stensils icon libraries: vmw_icons.vssx and VMware_vCenter_Orchestrator_Shapes.vssx files.

Brief Summary


The main theses of this article were the initial steps in the author’s approach to the storyline “Vmware Cloud Foundation as Code…”.

We reminded ourselves to understand the life cycle of any IT solution. The PSVisio Powershell script module was described, which will be actively used to visualize the various architectural levels of the VMware Cloud Foundation ecosystem and the third-party systems required for its operation.

We completed the first step: we created a visual diagram Conceptual Architecture of a Software-Defined Data Center using code.

This approach when using this code example has a significant drawback – it is a large number of parameters that form the properties of the diagram objects among the code functions. This creates an issue with code transparency and reusability.

Therefore, in the following publications of the “Vmware Cloud Foundation as Code…” cycle, we will focus on the following points:

  • Code reuse concept;
  • Diagram of the VCF architecture: Management and Workload Domains as Code;
  • Diagram of the architecture of third-party services that are necessary for building a VCF solution as Code.

Follow the news until the meeting is on air in a few days.
Sincerely, AIRRA.

Posted in Architecture, Cloud, Code, Microsoft, Programming, Technology, VMware | Tagged , , , , , , , , , , , , , , , , , , , , , | Leave a comment