From 03cc3f38530dec31bb1d7f73d2b8a91a75701f7f Mon Sep 17 00:00:00 2001 From: Gramzon Date: Fri, 10 Jan 2025 13:39:45 +0100 Subject: [PATCH] first commit --- multvmsetup.txt | 211 +++++++++++++++++++++++++++ powershell install script.txt | 27 ++++ winget driver install and update.ps1 | 27 ++++ 3 files changed, 265 insertions(+) create mode 100644 multvmsetup.txt create mode 100644 powershell install script.txt create mode 100644 winget driver install and update.ps1 diff --git a/multvmsetup.txt b/multvmsetup.txt new file mode 100644 index 0000000..33d4244 --- /dev/null +++ b/multvmsetup.txt @@ -0,0 +1,211 @@ +heat_template_version: 2013-05-23 + +description: > + HOT template to create a new neutron network plus a router to the public + network, and for deploying two Windows 11 (hostname cl1 and mgr) and two Windows + Servers (hostnames dc1 and srv1) without any configuration (only cl1 has + a boot script to set correct hostname). + +parameters: + key_name: + type: string + description: Name of keypair to assign to servers + +resources: + private_net: + type: OS::Neutron::Net + + private_subnet: + type: OS::Neutron::Subnet + properties: + network_id: { get_resource: private_net } + cidr: 192.168.111.0/24 + gateway_ip: 192.168.111.1 + allocation_pools: + - start: 192.168.111.101 + end: 192.168.111.200 + + router: + type: OS::Neutron::Router + properties: + external_gateway_info: + network: ntnu-internal + + router_interface: + type: OS::Neutron::RouterInterface + properties: + router_id: { get_resource: router } + subnet_id: { get_resource: private_subnet } + + sec_core: + type: OS::Neutron::SecurityGroup + properties: + description: Security group rules for all + name: sec_core + rules: + - remote_ip_prefix: 0.0.0.0/0 + protocol: icmp + - remote_ip_prefix: 0.0.0.0/0 + protocol: tcp + port_range_min: 22 + port_range_max: 22 + - remote_ip_prefix: 0.0.0.0/0 + protocol: tcp + port_range_min: 80 + port_range_max: 80 + - remote_ip_prefix: 0.0.0.0/0 + protocol: tcp + port_range_min: 443 + port_range_max: 443 + - remote_ip_prefix: 0.0.0.0/0 + protocol: tcp + port_range_min: 3389 + port_range_max: 3389 + + mgr: + type: OS::Nova::Server + properties: + name: mgr + image: 'Windows 11 22H2 Enterprise [Evaluation]' + flavor: gx3.4c8r + key_name: { get_param: key_name } + networks: + - port: { get_resource: mgr_port } + user_data_format: RAW + user_data: | + #ps1_sysnative + # + # Windows 10 doesn't set hostname correctly + # + $name = (New-Object System.Net.WebClient).DownloadString("http://169.254.169.254/latest/meta-data/hostname") + $shortname = $name.split('.',2)[0] + if ( $env:computername -ne $shortname ) { + Rename-Computer $shortname + exit 1003 # 1003 - reboot and run the plugin again on next boot + # https://cloudbase-init.readthedocs.io/en/latest/tutorial.html#file-execution + } + mgr_port: + type: OS::Neutron::Port + properties: + network_id: { get_resource: private_net } + security_groups: + - default + - { get_resource: sec_core } + fixed_ips: + - subnet_id: { get_resource: private_subnet } + mgr_floating_ip: + type: OS::Neutron::FloatingIP + properties: + floating_network: ntnu-internal + port_id: { get_resource: mgr_port } + + cl1: + type: OS::Nova::Server + properties: + name: cl1 + image: 'Windows 11 22H2 Enterprise [Evaluation]' + flavor: gx1.2c6r + key_name: { get_param: key_name } + networks: + - port: { get_resource: cl1_port } + user_data_format: RAW + user_data: | + #ps1_sysnative + # + # Windows 10 doesn't set hostname correctly + # + $name = (New-Object System.Net.WebClient).DownloadString("http://169.254.169.254/latest/meta-data/hostname") + $shortname = $name.split('.',2)[0] + if ( $env:computername -ne $shortname ) { + Rename-Computer $shortname + exit 1003 # 1003 - reboot and run the plugin again on next boot + # https://cloudbase-init.readthedocs.io/en/latest/tutorial.html#file-execution + } + cl1_port: + type: OS::Neutron::Port + properties: + network_id: { get_resource: private_net } + security_groups: + - default + - { get_resource: sec_core } + fixed_ips: + - subnet_id: { get_resource: private_subnet } + cl1_floating_ip: + type: OS::Neutron::FloatingIP + properties: + floating_network: ntnu-internal + port_id: { get_resource: cl1_port } + + dc1: + type: OS::Nova::Server + properties: + name: dc1 + image: 'Windows Server 2025 Standard [Evaluation]' + flavor: gx1.2c6r + key_name: { get_param: key_name } + networks: + - port: { get_resource: dc1_port } + dc1_port: + type: OS::Neutron::Port + properties: + network_id: { get_resource: private_net } + security_groups: + - default + - { get_resource: sec_core } + fixed_ips: + - subnet_id: { get_resource: private_subnet } + dc1_floating_ip: + type: OS::Neutron::FloatingIP + properties: + floating_network: ntnu-internal + port_id: { get_resource: dc1_port } + + srv1: + type: OS::Nova::Server + properties: + name: srv1 + image: 'Windows Server 2025 Standard [Evaluation]' + flavor: gx1.2c4r + key_name: { get_param: key_name } + networks: + - port: { get_resource: srv1_port } + srv1_port: + type: OS::Neutron::Port + properties: + network_id: { get_resource: private_net } + security_groups: + - default + - { get_resource: sec_core } + fixed_ips: + - subnet_id: { get_resource: private_subnet } + srv1_floating_ip: + type: OS::Neutron::FloatingIP + properties: + floating_network: ntnu-internal + port_id: { get_resource: srv1_port } + +outputs: + srv1_private_ip: + description: IP address of srv1 in private network + value: { get_attr: [ srv1, first_address ] } + srv1_public_ip: + description: Floating IP address of srv1 in public network + value: { get_attr: [ srv1_floating_ip, floating_ip_address ] } + dc1_private_ip: + description: IP address of dc1 in private network + value: { get_attr: [ dc1, first_address ] } + dc1_public_ip: + description: Floating IP address of dc1 in public network + value: { get_attr: [ dc1_floating_ip, floating_ip_address ] } + cl1_private_ip: + description: IP address of cl1 in private network + value: { get_attr: [ cl1, first_address ] } + cl1_public_ip: + description: Floating IP address of cl1 in public network + value: { get_attr: [ cl1_floating_ip, floating_ip_address ] } + mgr_private_ip: + description: IP address of mgr in private network + value: { get_attr: [ mgr, first_address ] } + mgr_public_ip: + description: Floating IP address of mgr in public network + value: { get_attr: [ mgr_floating_ip, floating_ip_address ] } diff --git a/powershell install script.txt b/powershell install script.txt new file mode 100644 index 0000000..3deb6d5 --- /dev/null +++ b/powershell install script.txt @@ -0,0 +1,27 @@ +# Ensure Winget is installed and updated +if (-not (Get-Command winget -ErrorAction SilentlyContinue)) { + Write-Output "Winget is not installed. Please install Winget from the Microsoft Store." + exit +} + +# Update Winget to the latest version +Write-Output "Updating Winget to the latest version..." +winget upgrade --id Microsoft.Winget.Source --silent --accept-source-agreements + +# List all installed drivers +Write-Output "Listing all installed drivers..." +$drivers = winget list | Where-Object { $_.Name -like "*Driver*" } + +if ($drivers.Count -eq 0) { + Write-Output "No drivers found that can be updated via Winget." + exit +} + +# Update all drivers +Write-Output "Updating all drivers..." +foreach ($driver in $drivers) { + Write-Output "Updating $($driver.Name)..." + winget upgrade --id $driver.Id --silent --accept-package-agreements +} + +Write-Output "All drivers have been updated." diff --git a/winget driver install and update.ps1 b/winget driver install and update.ps1 new file mode 100644 index 0000000..3deb6d5 --- /dev/null +++ b/winget driver install and update.ps1 @@ -0,0 +1,27 @@ +# Ensure Winget is installed and updated +if (-not (Get-Command winget -ErrorAction SilentlyContinue)) { + Write-Output "Winget is not installed. Please install Winget from the Microsoft Store." + exit +} + +# Update Winget to the latest version +Write-Output "Updating Winget to the latest version..." +winget upgrade --id Microsoft.Winget.Source --silent --accept-source-agreements + +# List all installed drivers +Write-Output "Listing all installed drivers..." +$drivers = winget list | Where-Object { $_.Name -like "*Driver*" } + +if ($drivers.Count -eq 0) { + Write-Output "No drivers found that can be updated via Winget." + exit +} + +# Update all drivers +Write-Output "Updating all drivers..." +foreach ($driver in $drivers) { + Write-Output "Updating $($driver.Name)..." + winget upgrade --id $driver.Id --silent --accept-package-agreements +} + +Write-Output "All drivers have been updated."