Archive

Archive for the ‘SCVMM R2’ Category

P2V fails with Error 2912 0x80072F0C with System Center Virtual Machine Manager 2008

August 23, 2010 Leave a comment

Toolbox2When using System Center Virtual Machine Manager (SCVMM) to perform a Physical to Virtual (P2V) conversion, the job may fail at 60% with the following error:

Error (2912)
An internal error has occurred trying to contact an agent on the vmmserver.contoso.com server.

Recommended Action
Ensure the agent is installed and running. Ensure the WS-Management service is installed and running, then restart the agent.

Cause:

During the ‘Make operating system virtualizable’ step, files are copied from the destination host (the server that will host the virtualized system) to the SCVMM Server. This BITS operation fails due to a certificate problem as indicated by the error 0x80072F0C (ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED).

Resolution:

To resolve this issue, remove the managed host from the SCVMM server and also delete any residual certificates from the host on the VMM server, then re-add the host:

1. On the SCVMM server, remove the managed host from the console. The steps on how to remove a managed host are outlined in the following TechNet article:

http://technet.microsoft.com/en-us/library/cc956121.aspx (http://technet.microsoft.com/en-us/library/cc956121.aspx)

2. Now we need to locate and delete any certificates for the Host computer.

3. Open the Certificate console on the SCVMM server.

a. Open a new mmc and add the certificates snap-in.
b. Select the option of ‘computer account’ and ‘local computer’.
c. Select Finish and Ok to load the snap-in.

4. The certificates for the Host computer can be in any of the following locations.

a. Personal Certificates.
b. Trusted People (if the host is W2K8 or W2K8 R2).
c. Trusted Root Authorities (If the host is W2K3).

5. In each store, expand the Friendly Name field and locate the certificate[s] for the Host server that have a Friendly Name starting with ‘SCVMM_CERTIFICATE_KEY_CONTAINER’ followed by either the FQDN / IP address / NetBIOS name of the Host server and delete them.

6. Re-add the host in SCVMM which recreates the certificates as needed.

More Information:

SCVMM uses BITS to transfer payload between SCVMM managed computers. These data transfers are encrypted by using a self-signed certificate generated at the time a host machine is added to SCVMM. If these certificates are missing or corrupted from the SCVMM server or managed computers, the payload deployment job can fail. Deleting the certificates and re-adding the host will cause the certificates to be regenerated.

For the latest information on this issue see the following Knowledge Base article:

KB2385280 – P2V fails with Error 2912 0x80072F0C with System Center Virtual Machine Manager 2008 or System Center Virtual Machine Manager 2008 R2

J.C. Hornbeck | System Center Knowledge Engineer

Categories: Hyper-V R2, SCVMM, SCVMM R2, VMM Tags: , , ,

VMM tricks: How the #VMM Administrator Console Uses Virtual Machine Manager #Cmdlets

August 20, 2010 Leave a comment

System Center Virtual Machine Manager (VMM) 2008 R2 is a server application that you can use to manage virtual machines on a variety of virtualization platforms. As an alternative to using the VMM Administrator Console to administer your Virtual Machine Manager environment, you can use the cmdlets in the Windows PowerShell – Virtual Machine Manager command shell, which is an administrator-focused command-line shell.

The Virtual Machine Manager Administrator Console is built on Windows PowerShell for Virtual Machine Manager. Customers who have installed VMM can access both standard Windows PowerShell cmdlets and VMM cmdlets in the VMM command shell. Windows PowerShell command-line Help for the standard Windows PowerShell cmdlets is provided with Windows Server 2008. The command-line Help for VMM cmdlets is provided with VMM.

The following synopsis of the standard call sequence for a hypothetical VMM Administrator Console operation illustrates the integration of Windows PowerShell and the VMM Administrator Console:

  1. The VMM Administrator Console makes a call to a Windows PowerShell cmdlet.
  2. The Windows PowerShell cmdlet makes a Windows Communication Foundation (WCF) call to the VMM server service.
  3. VMM initiates a job if the operation changes state or is long-running and therefore needs to be audited or monitored asynchronously.
  4. VMM makes calls, as necessary, to read and update the VMM database.
  5. If necessary, VMM makes Windows Remote Management (WinRM) calls to access the remote hosts on which virtual machines are deployed or to access remote library servers on which VMM library resources are stored.
  6. WinRM calls access Windows Management Instrumentation (WMI) methods on VMM hosts or library servers. These WMI methods are included with the operating system or with the VMM agent service.
  7. Some of the WMI methods call the Virtual Server component object model application programming interface (COM API).
Categories: SCVMM, SCVMM R2, VMM Tags: , , , , ,

Tuning Windows 2008 R2 SP1 dynamic memory for best performance

July 26, 2010 4 comments

What is Dynamic Memory?

Dynamic memory overview

Dynamic memory allows you to configure a virtual machine so that the amount of memory assigned to the virtual machine is adjusted while the virtual machine is running, in reaction to the amount of memory that is actually being used by the virtual machine.  This allows you to run a higher number of virtual machines on a given physical computer.  It also ensures that memory is always distributed optimally between running virtual machines.

Before enabling dynamic memory in a virtual machine you need to ensure that the latest version of integration services is installed in the virtual machine.You can then enable dynamic memory for a virtual machine using the memory settings under the virtual machine settings.  Once dynamic memory is enabled there are four parameters that you can configure:

  • Initial memory.
    This is the amount of memory that is required to start the virtual machine.  This value needs to be high enough to allow the guest operating system to boot, but should be as low as possible to allow for optimal performance with dynamic memory.The virtual machine will never be assigned less memory than the initial memory value.
  • Maximum memory.
    The virtual machine will not be allowed to use more memory than is specified by this value.  This value can be configured anywhere from the initial memory value up to 64GB.
  • Memory buffer.
    The memory buffer value indicates how much memory is assigned to the virtual machine when compared to the amount of memory actually needed by the applications and services running inside the virtual machine.
    The memory buffer will not be maintained if there is not enough physical memory available in the computer to give every virtual machine its requested memory buffer.
  • Memory priority.
    The memory priority value reflects how memory will be distributed amongst virtual machines if there is not enough physical memory available in the computer to give every virtual machine its requested amount of memory.
    Higher priority virtual machines will be given more memory when compared to lower priority virtual machines with similar settings.

Supported guest operating systems

Dynamic memory is supported for the following guest operating systems:

  • Windows Server 2008 R2 Enterprise Edition (32-bit and 64-bit)
  • Windows Server 2008 R2 Datacenter Edition (32-bit and 64-bit)
  • Windows 7 Ultimate Edition (32-bit and 64-bit)
  • Windows 7 Enterprise Edition (32-bit and 64-bit)
  • Windows Server 2008 Enterprise Edition (32-bit and 64-bit)
  • Windows Server 2008 Datacenter Edition (32-bit and 64-bit)
  • Windows Vista Ultimate Edition (32-bit and 64-bit)
  • Windows Vista Enterprise Edition (32-bit and 64-bit)
  • Windows Server 2003 R2 Enterprise Edition (32-bit and 64-bit)
  • Windows Server 2003 R2 Datacenter Edition (32-bit and 64-bit)
  • Windows Server 2003 Enterprise Edition (32-bit and 64-bit)
  • Windows Server 2003 Datacenter Edition (32-bit and 64-bit)

If you enable dynamic memory for a virtual machine that is running an operating system that is not on this list, the guest operating system will only be able to access the initial memory.

For each supported operating system you should follow the published required and recommended memory values prior to installing the latest integration services and enabling dynamic memory.  Once dynamic memory is enabled you can use a lower initial value in order to get the best performance out of dynamic memory.  The maximum memory value should always be greater than the required memory for the operating system that is running in the virtual machine.

Operating System Required Memory Recommended Memory Initial Memory (with DM enabled)
Windows Server 2008 R2 Enterprise Edition 512MB N/A 512MB
Windows Server 2008 R2 Datacenter Edition 512MB N/A 512MB
Windows 7 Ultimate Edition 1GB N/A 512MB
Windows 7 Enterprise Edition 1GB N/A 512MB
Windows Server 2008 Enterprise Edition 512MB 1GB 512MB
Windows Server 2008 Datacenter Edition 512MB 1GB 512MB
Windows Vista Ultimate Edition 512MB 1GB 512MB
Windows Vista Enterprise Edition 512MB 1GB 512MB
Windows Server 2003 R2 Enterprise Edition 128MB 256MB 128MB
Windows Server 2003 R2 Datacenter Edition 512MB 1GB 128MB
Windows Server 2003 Enterprise Edition 128MB 256MB 128MB
Windows Server 2003 Datacenter Edition 512MB 1GB 128MB

Tuning dynamic memory for best performance

If you enable dynamic memory on a virtual machine and are not satisfied with the performance that you receive from the virtual machine, there are multiple configuration changes that you can make to potentially improve performance:

  • Increase the size of the page file inside the guest operating system.
    A larger page file inside the virtual machine allows larger amounts of memory to be added to the running virtual machine if it is needed suddenly.  It also lets the virtual machine run better when the availability of physical memory is limited.
  • Increase the memory buffer configured for the virtual machine.
    Increasing the memory buffer will result in more memory being assigned to the virtual machine when compared to the amount of memory actually needed by the applications and services running inside the virtual machine.  This extra memory can then be used for file caching purposes, and may help with the performance of IO intensive applications and services.
  • Increase the initial memory for the virtual machine.
    Some applications assign fixed amounts of memory based on the amount of memory available when the application first starts.  These applications will perform better with higher values for the initial memory.
    Alternatively, if you are seeing poor performance due to too much memory being removed from the virtual machine, increasing the initial memory value can also alleviate this problem.
    It should be noted that by increasing the initial memory value, the overall flexibility and effectiveness of dynamic memory is reduced.
  • Host Reservation

Virtual Machines with Dynamic Memory enabled could consume all memory on the host, leaving nothing for the parent partition.  That’s why we have a new registry key:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ Virtualization
  • REG_DWORD value
  • Name = MemoryReserve
  • Setting = amount of MB to reserve for the parent partition, e.g. 2GB RAM.

You must reboot the host after setting this registry value.

Increase the virtual machine memory priority.
Increasing the virtual machine memory priority will ensure that available physical memory is assigned to this virtual machine before being

Source: Windows Server 2008 R2 and Windows 7 Service Pack 1 Test Focus Guide

Updated with Host Reservation

SCVMM and Windows 2008 R2 SP1 Dynamic Memory support

July 23, 2010 2 comments

This is a very important question… When SCVMM will support Dynamic Memory feature introduced in Windows 2008 R2 SP1 Hyper-V server?

There is less public information about the new features that integrated with Windows 2008 R2 SP1 so far, So I had to check with MS private newsgroup.

Brandon for newsgroup came back with this answer ” I had consulted our SCVMM product team and the answer I got is there will be a “feature pack” for SCVMM 2008 R2 that will add-in the capability to manage the new Dynamic Memory feature coming in Windows Server 2008 R2 SP1.  Our product team will try to RTM SCVMM package very shortly after the RMT date of Windows 2008 R2 SP1. There will be no SCVMM support for pre-release builds of Windows 08 R2 SP1 until the RC milestone. “

Service Pack 1 for Windows 7 and Windows Server 2008 R2 will be released “within the first half of calendar year 2011,” Microsoft announced this week.

The service pack is currently available as a beta for test purposes, having been released earlier this month. However, this week, Microsoft published a FAQ on the SP1 beta, which disclosed the approximate product release date for the service pack, perhaps for the first time.

So nothing expected before the first half of calendar year 2011.

System Center Virtual Machine Manager Self Service Portal: Private Cloud Customer Case Study!

July 23, 2010 2 comments

Hi folks,

Last week at the WPC, we sannounced the release candidate for the System Center Virtual Machine Manager Self-Service Portal (SC VMM Self Service Portal). The SC VMM Self Service Portal allows our enterprise customers set up their own private cloud environments using our Server platform, comprised of Windows Server and System Center.

We’d like to share how Lionbridge, a leading provider of language, development and test services is using the SC VMM Self Service Portal to simplify its processes and improve agility by building their private cloud environment on the Microsoft platform. Go here for more details on this fantastic case study!

Like Lionbridge, we encourage you to enhance your existing investments in the familiar and well supported Microsoft Server platform! Go for it: build your own private clouds and start reaping the benefits of cloud computing!

We’re all in! Are you with us?

Cheers,

Anant (ansundar@microsoft.com) , Senior Product Manager

System Center Marketing, Microsoft Corporation

Microsoft System Center Virtual Machine Manager Self-Service Portal 2.0 Step by Step Guide- Part Two

July 22, 2010 6 comments

VMMSSP Guide Part One

Self-Service Portal Components

The self-service portal consists of three components:

VMMSSP website: A Web-based component that provides a user interface to the self-service portal. Through the VMMSSP website, users can perform various tasks such as pooling infrastructure assets in the self-service portal, extending virtual machine actions, creating business unit and infrastructure requests, validating and approving requests, and provisioning virtual machines (using the self service virtual machine provisioning feature). Users can also use the website to view information related to these tasks.

VMMSSP database: A SQL Server® database that stores information about configured assets, information related to business units and requests, and information about what has been provisioned to various business units. The database also stores the XML that encodes default and customized virtual machine actions and other information related to the configuration of the self-service portal.

VMMSSP server: A Windows service that runs default and customized virtual machine actions that the user requests through the VMMSSP website. The service uses a Windows Communication Foundation (WCF) TCP endpoint to listen for client communication, and hosts a Windows Workflow Foundation (WF) run-time environment. Using WF, the server component runs the sequences of tasks that comprise virtual machine actions. You can optimize the performance of the server component using parameters available in the self-service portal or in configuration files; these parameters control or “throttle” the number of operations that can run simultaneously

Test Lab Setup: Single-Machine Deployment Scenario

Figure 1 illustrates the single-machine deployment scenario. In this scenario, you must install the self-service portal components on a physical computer or virtual machine that also runs the System Center Virtual Machine Manager (VMM) Administrator Console and SQL Server 2008. The VMM server component (including the VMM Library) and the virtual machine hosts all run on separate computers.

Figure 1. Topology of the single-machine deployment scenario

Environmental Prerequisites

When you install a component of the self-service portal, the Setup wizard checks the target computer for the components and settings required for that component. However, the self-service portal components have general requirements that this prerequisite check cannot detect. These requirements are referred to as environmental prerequisites—they apply to the whole environment in which the self-service portal components function. To ensure that the self-service portal components deploy smoothly and function as expected, prepare the environment before you run the Setup wizard.
Important: Because environmental changes affect more than the self-service portal components, exercise due caution when making sweeping changes.
This section describes the environmental prerequisites for the self-service portal, including Active Directory® Domain Services (AD DS) requirements and security considerations.

Infrastructure

Before you install the self-service portal components, make sure that the computers you intend to use for the self-service portal components belong to an AD DS domain. You must also ensure that you have installed Virtual Machine Manager 2008 R2 to manage virtual machines in your environment. For information about configuring VMM to work with the self-service portal, see “Configuring Hyper-V and VMM Resources to Work with the Self-Service Portal” in the Virtual Machine Manager 2008 R2 VMMSSP Datacenter Administration Guide.

Security Considerations

Securing the environment for the self-service portal involves the following tasks:
• Understanding and planning the default and custom user roles that are defined in the self-service portal.
• Planning and preparing the service accounts.
• Understanding the ports and protocols required for establishing communication channels between various self-service portal components.
• Hardening the Web server that will run the VMMSSP website component.

Source & more information: VMMSSP Deployment Guide

Microsoft System Center Virtual Machine Manager Self-Service Portal 2.0 Step by Step Guide- Part One

July 16, 2010 5 comments

What is Microsoft System Center Virtual Machine Manager Self-Service Portal 2.0?
Microsoft is enabling customers to build the foundation for private cloud infrastructure using Windows Server/Hyper-V and the System Center family of products with the System Center Virtual Machine Manager Self-Service Portal 2.0 (previously known as the Dynamic Datacenter Toolkit). Click here to download the release candidate.

The System Center Virtual Machine Manager Self-Service Portal 2.0 is a free, partner-extensible toolkit that will enable datacenters to dynamically pool, allocate, and manage virtualized resources to enable Infrastructure-as-a-Service. This solution will deliver:
• Tested guidance and best practices to help configure and deploy private cloud infrastructures.
• Automated web portals and infrastructure provisioning engine that’s integrated with System Center.
• Guidance to help partners easily extend functionality.

Today, customers can also leverage Dynamic Datacenter Alliance (DDA) offerings from service providers (Microsoft hosting partners) to extend their on-premises private clouds in a secure manner. These service providers use the Dynamic Datacenter Toolkit for Hosters (DDTK-H), which is also built on top of Windows Server/Hyper-V and System Center, thus enabling a consistent off- premises cloud capability to tap into. There are more than 63 hosters that have live DDA offerings as of today, while over 100 others have offerings in the pipeline.

Interesting… So How can I do that ?

The self-service portal provides a way for groups within an organization (referred to as business units) to manage their own IT needs, while the organization manages a centralized pool of physical resources (servers, networks, and related hardware, referred to as the datacenter).
Instead of using physical servers and related hardware to build an IT infrastructure, a business unit IT (BUIT) administrator uses the self-service portal to build an IT infrastructure from virtual machines. The datacenter provides the physical resources to support the virtual machines, and the self-service provides the database that relates the business unit infrastructures to the physical resources and an extensible interface for the central IT administrator (referred to as the datacenter or DC administrator) to use to provision resources for the business units.

To use resources managed by the self-service portal, a business unit submits a Web-based registration form. By approving the request, the DC administrator adds the business unit to the VMMSSP database (this process is sometimes referred to as “onboarding.”) The DC administrator allocates capacity for the business unit infrastructure in the datacenter resources. The self-service portal tracks how each business unit uses its resources, and, if appropriate, provides the DC administrator with charge-back data—the information needed to quantify resource usage in terms of the organization’s internal budgeting system.

In addition to these functions, the self-service portal can also enforce change control processes. Although business unit users can perform a number of virtual machine operations (such as starting or stopping) as needed, most configuration changes require that the BUIT administrator submit a change request. The DC administrator reviews this request, and can approve or reject it. The DC administrator can then provision any approved changes, and the self-service portal tracks the changes made.

More Information

Microsoft Private Cloud

VMM tricks: Adding VMware Host error “Unable to connect to the remote server.”

July 7, 2010 2 comments

Sometimes when you try to add VMware host ( VCenter) you see this error

“VMM cannot complete the VMware operation on VMware Host IP server because of the error:
Unable to connect to the remote server.Resolve the issue in VMware and then try the operation again.
ID 12701:Details: Unknown error (0×194) “

VMM is using different protocols to manage VMware host and communicate with as per MS http://technet.microsoft.com/en-us/library/cc764268.aspx

Connection type Protocol Default port Where to change the port setting
VMware Web Services communication HTTPS 443 VMM Administrator Console, registry
SFTP file transfer from VMWare ESX Server 3.0 and VMware ESX Server 3.5 hosts SFTP 22 Registry
SFTP file transfer from VMM server to VMWare ESX Server 3i hosts HTTPS 443 Registry

To manage VMware Virtualcenter server, VMM need dispatch VMMagent to this server which will involve some sFTP and HTTPS communication and traffic. It appears there are some failures during the process.

so check if you are able to connect to VMware Virtual center on ports 22,443 and then try again.

VMM tricks: How to forcefully remove a Virtual Machine from the SCVMM admin console

July 1, 2010 2 comments

Source

My buddy Jonathan Jordan recently came across an interesting issue and wrote up a great solution, and since he’s out today I thought I’d take the liberty of posting it.  If you ever find yourself in a position where you tried to remove a VM but it ended up being stuck in a state of limbo then this one’s for you:

========

Issue: A VM has been removed from SCVMM but still appears in the VMM Admin Console. The VM may have been removed in Hyper-V, SCVMM, or Cluster Administrator. When the VM is right clicked on there are two choices: Repair and Delete. Neither work.

Environment:
Windows 2003 with SCVMM 2007
Windows 2008 with SCVMM 2008

Resolution: If after attempting to remove the VM through normal means the machine name is still present, perform these steps:

> Method 1: Locate the .XML file for the machine and delete it.
- On the host that the VM ran on (or hosts if you are unsure which one), at a command prompt:
Type the drive letter to change to such as C: and hit enter, then…
dir *.xml /s | find /i “vm name”
- Replacing “vm name” with the name of the VM, this will search a volume for the .XML file that describes the VM
- Move the .XML file to a location that SCVMM does not use for hosted VMs or Library files
- Refresh SCVMM Admin Console

> Method 2: Force removal of VM with PowerShell.  If Method 1 did not work, follow the steps below then refresh the SCVMM Admin Console:

- In the SCVMM Admin Console click the ‘PowerShell’ button. Type ‘A’ for ‘Always’ if prompted by security
- Test PowerShell (this will just list information so that you will know that PowerShell is working properly):
Get-VMMServer -ComputerName localhost
- This should just list out some VMM info

- Remove VM: Replace “VM Name” with the name of the VM as it appears in SCVMM
$VM = Get-VM -Name “VM Name”
Remove-VM -VM $VM -Force

Note: If the virtual machine still exists as an .XML file as mentioned in Method 1, refresher will repopulate the VM as being present

VMM tricks: How to manually remove a host from the VMM database

July 1, 2010 1 comment

Source

The following steps outline the procedure to manually remove a host cluster from the VMM database. In this specific example, we are removing a two node cluster.

Note The GUIDs listed below are specific to this example. If following these instructions, you will need to determine this same information for your specific environment. This information can be found in the tbl_ADHC_Host.

The following steps outline the manual process of removing all references to the existing host from the VMM database. This should only be used as a last resort option after all other means have been exhausted.

  1. First, stop the VMMservice.
  2. Then, take a backup of the existing DB using SQL Management studio. (Right click on DB name, choose tasks, click on Back up, chose a full backup).
  3. Now, right click on table tbl_ADHC_Host and select view or open rows.
  4. Click on the SQL button from the tool bar to get the SQL query for the view.
  5. In there, start pasting the commands below one by one and verifying they executed correctly. (To execute, you can highlight the command and press F5 or press the “!” symbol).

DELETE FROM tbl_ADHC_HostNetworkAdapter WHERE (HostID = ’85099616-fdc8-4f85-a702-979a4251f050′)
DELETE FROM tbl_ADHC_HostNetworkAdapter WHERE HostID=’8cfff5ad-0990-4a92-bd6d-4d24190e5d5a ‘
DELETE FROM tbl_ADHC_VirtualNetwork WHERE (HostID = ’85099616-fdc8-4f85-a702-979a4251f050′)
DELETE FROM tbl_ADHC_VirtualNetwork WHERE (HostID = ’8cfff5ad-0990-4a92-bd6d-4d24190e5d5a ‘)
DELETE FROM tbl_ADHC_HostVolume WHERE (HostID = ’85099616-fdc8-4f85-a702-979a4251f050′) OR (HostID = ’8cfff5ad-0990-4a92-bd6d-4d24190e5d5a ‘)
DELETE FROM tbl_ADHC_HostDisk WHERE (HostID = ’85099616-fdc8-4f85-a702-979a4251f050′) OR (HostID = ’8cfff5ad-0990-4a92-bd6d-4d24190e5d5a ‘)
DELETE FROM tbl_WLC_PhysicalObject WHERE (HostId = ’85099616-fdc8-4f85-a702-979a4251f050′) OR (HostId = ’8cfff5ad-0990-4a92-bd6d-4d24190e5d5a ‘)
DELETE FROM tbl_WLC_VObject WHERE (HostId = ’85099616-fdc8-4f85-a702-979a4251f050′) OR  (HostId = ’8cfff5ad-0990-4a92-bd6d-4d24190e5d5a ‘)
DELETE FROM tbl_ADHC_Host WHERE (HostID = ’85099616-fdc8-4f85-a702-979a4251f050′) OR  (HostID = ’8cfff5ad-0990-4a92-bd6d-4d24190e5d5a ‘)
DELETE FROM tbl_ADHC_ClusterDisk WHERE (ClusterID = ’1148853c-cde3-45d2-82ee-bb04259d6a79′)
DELETE FROM tbl_ADHC_HostCluster WHERE (ClusterID = ’1148853c-cde3-45d2-82ee-bb04259d6a79′)
DELETE FROM tbl_ADHC_AgentServerRelation WHERE (AgentServerID = ’648e977e-d10e-40b6-aca2-d9d2dc63b790′)
DELETE FROM tbl_ADHC_AgentServer WHERE (ComputerName = ‘Server_Node1′)
DELETE FROM tbl_ADHC_AgentServer WHERE (ComputerName = ‘Server_Node2′)

6.  Now start the vmmservice and open the VMM console.

Follow

Get every new post delivered to your Inbox.

Join 1,015 other followers

%d bloggers like this: